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();
}
---------------------------------------
lunedì 12 dicembre 2016
Backup/Restore profili su Thunderbird e Firefox
Trasportare i propri file da un computer ad un altro per le applicazioni ThunderBird (posta elettronica) e Firefox (Web Browser) e' quanto mai semplice
Per prima cosa sul computer di origine si deve individuare dove salvati i file (per esempio le mailbox) e le impostazioni relative al proprio profilo. Su Windows XP la directory e' dentro la propria home\Dati applicazioni\Thunderbird\Profiles ed ha una forma del tipo nomecasuale.default (o nome profilo)
Si copia quindi la directory su un disco e ci si sposta nella nuova macchina su cui effettuare il restore
Sulla macchina di destinazione si copiano i file e poi si avvia il programma con lo switch -p (esempio nell'immagine sottostante)
Cosi' facendo si apre il gestore dei profili. Si aggiunge un nuovo profilo e si indica dove e' stata copiata la directory con il backup. Finito
Estensimetro Gefran su Arduino
Ho avuto modo di provare un estensimetro Gefran ZP-34-A-050 in accoppiamento con una Arduino
Di fatto il sensore non e' altro che un potenziometro con una resistenza di ottima qualita' che offre una buona linearita' su tutto l'arco di lavoro
La resistenza e' da 2 KOhm con una corsa utile (nel modello esaminato) di 50 mm. Con il comodo adesivo riportato sullo chassis si vede chiaramente che i cavi blu e marrone possono essere attaccati a 5V e GND dell'Arduino mentre il cavo giallo relativo al segnale puo' essere collegato ad una entrata digitale (tipo A0)
Visto che l'Arduino ha 1024 livelli nell'ADC si che la minima variazione misurabile e' 50mm/1023 e' circa 0.05 mm (5 centesimi di millimetro). In realta', viste le fluttazioni e' piu' ragionevole dire che si riescono a misurare variazioni dell'ordine del decimo di millimetro (che non e' niente male)
Di fatto il sensore non e' altro che un potenziometro con una resistenza di ottima qualita' che offre una buona linearita' su tutto l'arco di lavoro
La resistenza e' da 2 KOhm con una corsa utile (nel modello esaminato) di 50 mm. Con il comodo adesivo riportato sullo chassis si vede chiaramente che i cavi blu e marrone possono essere attaccati a 5V e GND dell'Arduino mentre il cavo giallo relativo al segnale puo' essere collegato ad una entrata digitale (tipo A0)
Visto che l'Arduino ha 1024 livelli nell'ADC si che la minima variazione misurabile e' 50mm/1023 e' circa 0.05 mm (5 centesimi di millimetro). In realta', viste le fluttazioni e' piu' ragionevole dire che si riescono a misurare variazioni dell'ordine del decimo di millimetro (che non e' niente male)
venerdì 9 dicembre 2016
Particle Electron
Qualche tempo fa avevo provato la Particle Photon, adesso e' il turno di Particle Electron
La principale differenza e' che Photon e' basata su una comunicazione WiFi mentre Electron utilizza una connessione GSM mediante una SIM
L'altro aspetto interessante e' che la Electron puo' essere alimentata da una batteria LiPo e sulla scheda c'e' anche l'elettronica per ricaricare la batteria sia dal connettore Vin che da USB
Per la programmazione si puo' utilizzare la modalita' cloud ma qualunque errore puo' essere pagato con la perdita con la connessione del dispositivo. La cosa piu' semplice e' programmare Electron via USB.
Per prima cosa si deve scaricare particle-cli via npm
npm install -g particle-cli
e poi ci si connette al cloud
particle cloud login
(nonostante si usi particle-cli e' necessaria comunque la connessione di rete perche' la compilazione avviene sempre sul cloud di particle)
Il dispositivo predefinito e' quello con il simbolo delle stella. Si deve anche annotare il Device ID (servira' in seguito)
le informazioni possono essere visualizzati in qualsiasi programma di monitor seriale.
Un altro bonus, soprattutto per il risparmio della batteria, e' la possibilita' di spengere ed accendere via software la componente radio
------------------------------------
Cellular.on();
La principale differenza e' che Photon e' basata su una comunicazione WiFi mentre Electron utilizza una connessione GSM mediante una SIM
L'altro aspetto interessante e' che la Electron puo' essere alimentata da una batteria LiPo e sulla scheda c'e' anche l'elettronica per ricaricare la batteria sia dal connettore Vin che da USB
Electron Pinout |
Per prima cosa si deve scaricare particle-cli via npm
npm install -g particle-cli
e poi ci si connette al cloud
a questo punto mediante la Ide Web di Particle si crea il programma.
Attenzione: se si hanno piu' dispositivi si deve cliccare sulla colonna di destra al menu devices e selezionare quella che si vuole utilizzare
Il dispositivo predefinito e' quello con il simbolo delle stella. Si deve anche annotare il Device ID (servira' in seguito)
A questo punto si deve scaricare dal cloud il programma compilato. Si clicca quindi sulla colonna di destra il menu Code (con il simbolo <>) e si clicca la nuvola vicino al nome del programma
Si scarica quindi un file denominato firmware.bin
Per effettuare l'upload si deve prima impostare la Electron in listening mode (luce blu pulsante, si deve premere per tre secondi il pulsante MODE sulla scheda) e poi si digita il comando
particle flash --serial firmware.bin
le variabili possono essere lette tramite cloud tramite la sintassi
https://api.particle.io/v1/devices/ID_DEVICE/nome_variabile?access_token=ACCESS_TOKEN
(sostituire le parti in giallo con i corretti valori)
La scheda viene venduta con una SIM preinstallata con un traffico a pacchetti prepagato. Si puo' comunque utilizzare qualsiasi scheda SIM dotata di traffico dati (questa operazione puo' risultare piu' conveniente rispetto al contratto fornito da Particle) basta impostare nel programma in giusto APN con la sintassi. Nell'esempio sottostante una configurazione per TIM
---------------------------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));
---------------------------------------------------------
particolare attenzione deve essere posta al colore del LED sulla scheda perche' e' da questo che si evidenzia se si ha la connessione di rete o meno
Un altro aspetto molto comodo di Electron e' quello di poter monitorare lo stato di carica della batteria LiPo mediante il comando
-----------------------------------
FuelGauge fuel;
double batteria = 0.0;
batteria = static_castz<double>(fuel.getSoC()); //attenzione che SoC e' scritto con la o centrale minuscola
-----------------------------------
FuelGauge fuel;
double batteria = 0.0;
-----------------------------------
L'utilizzo del cavo seriale permette anche di poter visualizzare i dati inviati lungo la seriale
In modo del tutto analogo di Arduino si puo' scrivere nel codice
-----------------------------------
void setup(){
Serial.begin(9600);
Serial.println("Luca");
}
-----------------------------------
le informazioni possono essere visualizzati in qualsiasi programma di monitor seriale.
Un altro bonus, soprattutto per il risparmio della batteria, e' la possibilita' di spengere ed accendere via software la componente radio
------------------------------------
Cellular.on();
delay(1000);
Cellular.connect();
While Cellular.ready()
{
}
delay(1000);
Cellular.off();
------------------------------------
un esempio di un programma funzionante con la lettura della porta analogica A0 e la trasmissione dei dati della porta e la carica della LiPo
------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));
double lettura = 0.0;
double mm = 0.0;
double batteria = 0.0;
int analogPin0 = A0;
FuelGauge fuel;
void setup(){
Particle.variable("lettura", &lettura, DOUBLE);
Particle.variable("mm", &mm, DOUBLE);
Particle.variable("batteria", &batteria, DOUBLE);
Serial.begin(9600);
}
void loop(){
lettura = analogRead(analogPin0);
mm = (lettura/4096)*50;
batteria = static_castz<double>(fuel.getSoC())
Particle.publish("lettura", "lettura");
Particle.publish("mm", "mm");
Particle.publish("batteria","batteria");
Serial.println(batteria);
delay(1000);
}
TimeOut Error
Attenzione : utilizzando una scheda SIM differente da quella fornita da Particle si puo' riscontrare il seguente errore dopo pochi minuti di uso della scheda e dello sketch sopra riportato
per ovviare a questo problema il programma sopra riportato deve essere modificato con una funzione di keep alive
-----------------------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));
double lettura = 0.0;
double mm = 0.0;
double batteria = 0.0;
int analogPin0 = A0;
long previousMillis = 0;
long interval = 40000;
FuelGauge fuel;
void setup(){
Particle.variable("lettura", &lettura, DOUBLE);
Particle.variable("mm", &mm, DOUBLE);
Particle.variable("batteria", &batteria, DOUBLE);
}
void loop(){
keep_alive();
}
void keep_alive()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (Particle.connected())
{
lettura = analogRead(analogPin0);
mm = (lettura/4096)*50;
batteria = static_cast<double>(fuel.getSoC());
Particle.publish("lettura", "lettura");
Particle.publish("mm", "mm");
Particle.publish("batteria","batteria");
}
}
}
-----------------------------------------------------
Consumi
da un breve test fatto con una batteria LiPo da 2000 mAh si ha un consumo del 5% di batteria circa ogni 90 minuti
Cellular.off();
------------------------------------
un esempio di un programma funzionante con la lettura della porta analogica A0 e la trasmissione dei dati della porta e la carica della LiPo
------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));
double lettura = 0.0;
double mm = 0.0;
double batteria = 0.0;
int analogPin0 = A0;
FuelGauge fuel;
void setup(){
Particle.variable("lettura", &lettura, DOUBLE);
Particle.variable("mm", &mm, DOUBLE);
Particle.variable("batteria", &batteria, DOUBLE);
Serial.begin(9600);
}
void loop(){
lettura = analogRead(analogPin0);
mm = (lettura/4096)*50;
batteria = static_castz<double>(fuel.getSoC())
Particle.publish("lettura", "lettura");
Particle.publish("mm", "mm");
Particle.publish("batteria","batteria");
Serial.println(batteria);
delay(1000);
}
TimeOut Error
Attenzione : utilizzando una scheda SIM differente da quella fornita da Particle si puo' riscontrare il seguente errore dopo pochi minuti di uso della scheda e dello sketch sopra riportato
per ovviare a questo problema il programma sopra riportato deve essere modificato con una funzione di keep alive
-----------------------------------------------------
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));
double lettura = 0.0;
double mm = 0.0;
double batteria = 0.0;
int analogPin0 = A0;
long previousMillis = 0;
long interval = 40000;
FuelGauge fuel;
void setup(){
Particle.variable("lettura", &lettura, DOUBLE);
Particle.variable("mm", &mm, DOUBLE);
Particle.variable("batteria", &batteria, DOUBLE);
}
void loop(){
keep_alive();
}
void keep_alive()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (Particle.connected())
{
lettura = analogRead(analogPin0);
mm = (lettura/4096)*50;
batteria = static_cast<double>(fuel.getSoC());
Particle.publish("lettura", "lettura");
Particle.publish("mm", "mm");
Particle.publish("batteria","batteria");
}
}
}
-----------------------------------------------------
Consumi
da un breve test fatto con una batteria LiPo da 2000 mAh si ha un consumo del 5% di batteria circa ogni 90 minuti
lunedì 5 dicembre 2016
Batteria cinese per Moto E
Tempo fa avevo sostituito la batteria su un Moto E a causa della perdita' di funzionalita' di quella originale.
Avevo comprato il sostituto su un e-commerce cinese.
A meno di un anno di distanza la batteria e' morta e stavolta ne ho comprata una originale su Amazon
Come si vede dalla foto le differenze sono evidenti anche dall'esterno ad un costo simile tra la sostituzione originale e quella cinese
In conclusione...non conviene comprare alcune cose su e-commerce cinese
Avevo comprato il sostituto su un e-commerce cinese.
A meno di un anno di distanza la batteria e' morta e stavolta ne ho comprata una originale su Amazon
Come si vede dalla foto le differenze sono evidenti anche dall'esterno ad un costo simile tra la sostituzione originale e quella cinese
In conclusione...non conviene comprare alcune cose su e-commerce cinese
Lupi sul M.Falterona
Non e' certo una novita' che sul M.Falterona abitino i lupi.... ma fa sempre una certa sensazione quando trovi le loro tracce mentre te ne vai a giro da solo nel bosco
Risalendo il sentiero 18 ho trovato anche questa mandibola
Quasi certamente si tratta di un canide..non saprei dire se si tratta di un lupo (cucciolo viste le dimensioni)
Altre foto dell'area.
Nella prima massi derivanti dalla frana del 1335
Loc.Gorga Nera. Le storie raccontano che il lago si e' formato a seguito della frana del 1335
Fatta di Lupo vicino alla Sorgente dell'Arno |
Quasi certamente si tratta di un canide..non saprei dire se si tratta di un lupo (cucciolo viste le dimensioni)
Altre foto dell'area.
Nella prima massi derivanti dalla frana del 1335
Loc.Gorga Nera. Le storie raccontano che il lago si e' formato a seguito della frana del 1335
Gorga Nera |
Balze alle Rondinaie |
venerdì 2 dicembre 2016
Sostituzione batteria Nexus 5
Sostituzione della batteria di un Nexus 5.
Per prima cosa e' necessario rimuovere la cover posteriore. Attenzione: non si tratta solo di un solo un pezzo di plastica ma c'e' elettronica sul retro. E' quindi necessario rimuoverla con calma
Si svitano quindi 6 viti per rimuovere la copertura della parte superiore
Si sgancia quindi il cavo flat colore oro che attraversa la batteria sul lato sinistro (basta alzare con delicatezza il connettore in alto indica dalla lettera T). Si piega quindi a 90°§ per liberare la batteria
Si sgancia, sempre con una leggera pressione verso l'alto il connettore della batteria. La batteria e' incollata allo chassis per cui bisogna fare un po' di leva per sollevarla
Si ripete il tutto all'incontrario per rimontare il tutto. Difficolta' da 1 a 3 direi 1 (bastano 10 minuti ed un po' di manualita')
Per prima cosa e' necessario rimuovere la cover posteriore. Attenzione: non si tratta solo di un solo un pezzo di plastica ma c'e' elettronica sul retro. E' quindi necessario rimuoverla con calma
Si svitano quindi 6 viti per rimuovere la copertura della parte superiore
Si sgancia quindi il cavo flat colore oro che attraversa la batteria sul lato sinistro (basta alzare con delicatezza il connettore in alto indica dalla lettera T). Si piega quindi a 90°§ per liberare la batteria
Si sgancia, sempre con una leggera pressione verso l'alto il connettore della batteria. La batteria e' incollata allo chassis per cui bisogna fare un po' di leva per sollevarla
Si ripete il tutto all'incontrario per rimontare il tutto. Difficolta' da 1 a 3 direi 1 (bastano 10 minuti ed un po' di manualita')
Iscriviti a:
Post (Atom)
Change Detection with structural similarity
L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...