mercoledì 14 dicembre 2016

Particle Electron Sleep Mode


Dopo il precedente post ho provato ad utilizzare le funzioni di risparmio energietico di Particle Electron in modo da massimizzare il tempo di durata della batteria

Nel precedente tentativo la batteria (da 2000 mAh) si esauriva dopo circa 24 ore



Usando la modalita' di sleep e spengendo l'apparato di trasmissione cellulare pur inviando un dato ogni 10 minuti (vedi grafico sottostante) l'autonomia e' passata ad oltre 4 giorni (piu' precisamente 4.3)


utilizzando un risparmio piu' aggressivo (tipo un dato ogni ora) si puo' tranquillamente superare una settimana di autonomia in sola alimentazione da batteria per arrivare a quasi un mese utilizzando batterie piu' capienti.

---------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));

int status;
int counter = 0;
double batteria = 0.0;
int sleepInterval = 10; //Specify minutes between each reading sent


void fuel()
{
    FuelGauge fuel;
    batteria = static_cast<double>(fuel.getSoC());
}

void connect_status()
{
        RGB.control(false);
        Cellular.on();
        Cellular.connect();
        delay(10000);
        Particle.connect();
        //waitUntil(Particle.connected);
        delay(20000);
        Particle.connect();
        while(status < 3)//send one reading
        {
            if(Cellular.ready() && Particle.connected() == true)
                {
                    delay(10000);
                    fuel();
                    if(Particle.publish("batteria", "batteria") == true)
                    {
                        delay(10000);
                        status++;
                    }
                    else if(Particle.publish("batteria", "batteria") == false)
                    { 
                        Cellular.on();
                        Cellular.connect();
                        delay(20000);
                        Particle.connect();
                        status=status -1;
                        delay(20000);
                    }
                }
            else
            {
                Cellular.on();
                Cellular.connect();
                delay(10000);
                Particle.connect();
                status=0;
                delay(10000);
            }
        }
        
}

void setup() {
    Time.zone(+1);
    RGB.control(false);
    Particle.variable("batteria", &batteria, DOUBLE);
}


void loop() {
RGB.control(false);


if(counter == 0)
{
    delay(5000);
    fuel();
    Particle.publish("batteria", "batteria");
    delay(5000);
    counter =1;
  
}

System.sleep(D0, RISING, sleepInterval * 60); //Puts device in stop mode 

delay(1500);

status=0;

connect_status();

}
---------------------------------------