
|

11-03-2016, 20.11.52
|
Nuovo robottaro
|
|
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 54
Messaggi: 27
Potenza reputazione: 0
|
|
Alimentare arduino con batteria lipo e contemporaneamente misurarne il valore
Salve a tutti, chiedo umilmente che qualcuno mi dia una risposta perché proprio IO NON CI RIESCO. Premetto che sono alle prime armi con arduino quindi spero di capire e superare anche questa difficoltà. Ho realizzato una board utilizzando una scheda arduino nano che necessariamente deve essere alimentata con una piccola batteria lipo a una cella con tensione 3,7 volts. Quando la batteria è carica la sua tensione è di circa 4 volts. Ho fatto dei test strumentali con un alimentatore e ho notato che la scheda arduino alimentandola esternamente al punto vin funziona senza problemi fino ad una tensione minima di 3,6 volt; Visto che il mio circuito assorbe pochi milliampere questo piccolo range di tensione mi basta per avere un’autonomia di decine e decine di ore. Dopo un po’ di utilizzo del mio apparecchio con grande soddisfazione, cercando di migliorarlo ulteriormente ho pensato di monitorare la batteria con dei led di segnalazione tensione; ho fatto i dovuti calcoli per i range numerici che aduino trasforma in base alla lettura analogica sui pin A0…A5 e ho modificato il firmware con degli IF e ho attivato il serial monitor…e qui è arrivato il problema. Se collego un alimentatore esterno al pin analogico e vario la tensione applicata simulando una batteria collegata esternamente, funziona tutto correttamente ovvero per la tensione che arduino riceve viene riportata in numero corretto sul monitor seriale e il firmware fa quello che deve fare accendendo i led correttamente; se invece collego la batteria lipo sia al pin vin che al pin A0 (quello adoperato per la lettura analogica) il sistema va in crisi dandomi dei valori assolutamente sballati. Misurando la tensione con un multimetro sul pin A0 di 3,7Volts corrispondente alla tensione esatta della batteria, anziché rendermi sul monitor seriale il valore di circa 757, il monitor seriale mi rende un valore di 860…inspiegabile! Si invece ricollego l’alimentatore e lo metto al valore di 3,7 volts esatti il valore sul monitor seriale torna esatto. Deduco che non è possibile alimentare arduino con una batteria esterna e contemporaneamente controllare il suo valore di carica. Aiutatemi per favore più che altro per farmi capire il perché visto che non riesco a trovare il bandolo della matassa. Grazie infinite a tutti
|

12-03-2016, 06.17.58
|
 |
Robottaro sostenitore
|
|
Data registrazione: 23-04-2004
Residenza: Roma
Età : 67
Messaggi: 1,418
Potenza reputazione: 350
|
|
Nei microcontrollori, a default, l'ADC (analogRead) usa come tensione di riferimento (Vref) la stessa tensione di alimentazione. Con opportune configurazioni questa può essere spostata su alcuni pin particolari offrendo maggiore flessibilità.
Nel caso di default il valore ritornato dall'analogRead è relativo ad una frazione della tensione di alimentazione. Mi spiego meglio, se la Vcc = Vref = 5V e la tensione su A0 è 3,7V la lettura sarà circa 3,7/5*1024 = 757
Se la Vref = A0 il riferimento varia con la stessa legge del valore da misurare. In teoria dovresti misurare sempre 1024 -> Vbat/Vbat*1024=1*1024
In parole povere... è un cane che si morde la coda
La Vref, quindi la tensione di alimentazione, deve essere stabilizzata per poter usare l'ADC.
P.S.
Dimenticavo, se usi il monitor seriale la scheda dovrebbe essere alimentata a 5V tramite l'USB, quindi cambiano molte cose
Ultima modifica di guiott : 12-03-2016 alle ore 06.21.42
|

12-03-2016, 12.50.29
|
 |
Robottaro sostenitore
|
|
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 46
Messaggi: 936
Potenza reputazione: 100
|
|
Qui di seguito i miei "trucchi e segreti"  per Arduino via LiPo e consumi ridottissimi. Un piacere condividere con voi, cosi' vediamo se saltano fuori soluzioni migliori
INTERNAL1V1 e' la vref interna a 1.1V, io la uso proprio per monitorare la tensione batteria, ricordo ancora che me lo consiglio' Astrobeed anni fa
[se la LiPo e' in serie, quindi sopra i 5V (e' ovvio l'uso di un regolatore buck-boost]
Partitore resistivo con R2 sui 10 mega ohm, per consumare pochissimo, entrambe le R all'1%, letture dal micro ovviamente non continue
Riconfigurare (o disabilitare) il watchdog di autoreset per calo di tensione (per Arduino Uno e altri a 5V) abbassando possibilmente la frequenza di clock.
Leggere il datasheet del micro, sono indicati i valori minimi di tensione per frequenza
Usare l'ibernazione e il risveglio a intervalli (max 8 secs) se possibile
Accendere tutta l'elettronica tramite pulsante a rilascio che manualmente chiude un relay SSR, una volta acceso il micro, il relay viene tenuto attivo dal micro, se la battera scende troppo allora il micro molla il relay e si autospegne tutto, evitando la distruzione della LiPO
Disabilitare quante piu' funzioni possibili del micro, come l'ADC, ecc... Poi, se ne parliamo, quando vado sul pc indico un link utilissimo per questo
Saluti
Ultima modifica di aldofad : 12-03-2016 alle ore 13.29.53
|

12-03-2016, 16.40.02
|
 |
Robottaro sostenitore
|
|
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 48
Messaggi: 2,330
Potenza reputazione: 346
|
|
da quello che ho capito, il tuo è un problema, "non problema", nel senso che anche se il monitor seriale ti da dei valori non congrui, la tensione è comunque quella di batteria...
Più che altro mi chiedo, quanti LED vuoi usare per creare la scala di misura?
se con un rosso siamo a circa 1,6 (?), con 2, sei a più di 3V e l'assorbimento totale (10mA+10mA) è maggiore dell'utilizzatore che vai ad usare.
morale della favola la batteria che adesso ti alimenta il circuito per ore, credo che durerà molto meno..
pure deduzioni ma tant'è 
saluti
Andy
__________________
------------------------------------------------
-----------------------------------------------
|

12-03-2016, 16.57.35
|
Nuovo robottaro
|
|
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 54
Messaggi: 27
Potenza reputazione: 0
|
|
No, io ho delle mire ben più semplici. Mi basterebbe un led che sta sempre buono e spento e mi si accende quando la vbatt è circa 3,6. Io lo vedo e rimetto tutto in carica. Potrei anche utilizzare dei componenti esterni tipo questo: TC54VN3002EZB che ho riusato qualche volta e mi fa accendere un led ad un valore di tensione prefissato ma ho pochissimo posto nel contenitore e mi piaceva far fare tutto ad arduino ma purtroppo sono abbastanza "capra" in questo campo. Grazie comunque per il tuo interessamento. Michele
|

12-03-2016, 17.13.58
|
Nuovo robottaro
|
|
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 54
Messaggi: 27
Potenza reputazione: 0
|
|
Citazione:
Orginalmente inviato da aldofad
Qui di seguito i miei "trucchi e segreti"  per Arduino via LiPo e consumi ridottissimi. Un piacere condividere con voi, cosi' vediamo se saltano fuori soluzioni migliori
INTERNAL1V1 e' la vref interna a 1.1V, io la uso proprio per monitorare la tensione batteria, ricordo ancora che me lo consiglio' Astrobeed anni fa
[se la LiPo e' in serie, quindi sopra i 5V (e' ovvio l'uso di un regolatore buck-boost]
Partitore resistivo con R2 sui 10 mega ohm, per consumare pochissimo, entrambe le R all'1%, letture dal micro ovviamente non continue
Riconfigurare (o disabilitare) il watchdog di autoreset per calo di tensione (per Arduino Uno e altri a 5V) abbassando possibilmente la frequenza di clock.
Leggere il datasheet del micro, sono indicati i valori minimi di tensione per frequenza
Usare l'ibernazione e il risveglio a intervalli (max 8 secs) se possibile
Accendere tutta l'elettronica tramite pulsante a rilascio che manualmente chiude un relay SSR, una volta acceso il micro, il relay viene tenuto attivo dal micro, se la battera scende troppo allora il micro molla il relay e si autospegne tutto, evitando la distruzione della LiPO
Disabilitare quante piu' funzioni possibili del micro, come l'ADC, ecc... Poi, se ne parliamo, quando vado sul pc indico un link utilissimo per questo
Saluti
|
Ciao Aldofab. Come ho già detto sono davvero un pivello in materia e, ho capito che il problema sta nella tensione di alimentazione dell'adc che non può essere uguale alla tensione da misurare ma non ho capito tutto quello che hai scritto. Scusa se parlo ad un linguaggio più elementare ma è proprio questa differenza di preparazione in materia il gap tra me e te  ovvero io sono uno smanettone alle prime armi e tu sicuramente un super expert.
Da quello che ho capito esiste una soluzione "segreta"? . allora partiamo dalla batteria lipo 1 cella 3,7 volt 500 ma di quelle che utilizzano i droni giocattolo. Tale batteria è collegata al pin VI e alimenta un circuito che serve a rilevare l'inquinamento dell'aria per una persona di famiglia con dei problemetti. Tale sensore è il sensore SHARP GP2Y1010. L'ho comprato, ho scopiazzato le poche righe di codice che fornisce il costruttore, ho scritto tutto il mio firmware, ho acceso tutto e tale sensore funziona egregiamente con degli assorbimenti molto bassi ottenendo un'autonomia di oltre 50 ore. Poi ho voluto fare il fenomeno volendo inserire il controllo della batteria aggiungendo un semplice led che mi si accendesse quando la vbatt si avvicinava alla tensione di 3,6v ed è venuto fuori il problema. Mi dici quindi che sarebbe possibile fare tale controllo senza adoperare componenti esterni? Sono tutt'orecchi. Grazie infinite amici davvero a tutti voi per l'aiuto e il tempo che perdete.
|

12-03-2016, 18.09.33
|
 |
Robottaro sostenitore
|
|
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 48
Messaggi: 2,330
Potenza reputazione: 346
|
|
Citazione:
Orginalmente inviato da michelozzo
...ma non ho capito tutto quello che hai scritto.
|
Aldo ti sta dando delle dritte a livello di gestione dell'alimentazione su come ottimizzare al massimo la tua batteria, tu prima però devi far accendere questo benedetto LED Giusto??
Innanzi tutto puoi usare il LED interno dell'Arduino quello sul PIN 13??
Fai un po di test e cerca di trovare quel valore (reale) ovvero con la tua lipo connessa al Vin e ad A0 e tramite serial, verifica qual è il valore risultante senza pensare se sia giusto o meno.
Codice:
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue, DEC);
Quel valore lo passerai al tuo IF dicendo poi di accendere il LED (pinMode(13, OUTPUT); )
hai gia provato a fare questo ???
Codice:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
così ti rendi conto se con quella batteria il LED si accende.
La cosa è detta un po frettolosa ma visto che gia sai qualcosa, fai tu le dovute correzzioni.
byez
andy
__________________
------------------------------------------------
-----------------------------------------------
|

13-03-2016, 07.09.49
|
 |
Robottaro sostenitore
|
|
Data registrazione: 23-04-2004
Residenza: Roma
Età : 67
Messaggi: 1,418
Potenza reputazione: 350
|
|
Il problema non è come far accendere il LED è come leggere la tensione. Non si può leggere la stessa tensione che si sta usando come riferimento. Come dicevo questa deve essere stabilizzata altrimenti... non è più un riferimento
Il giustissimo suggerimento di Aldo è quello di usare una Vref costante ed affidabile come quella interna alla MCU di Arduino.
In questa pagina è spiegato come fare.
A quel punto sei indipendente dalla tensione di alimentazione ed otterrai lo stesso risultato sia con la batteria che con l'alimentazione USB.
|

13-03-2016, 08.20.39
|
 |
Robottaro sostenitore
|
|
Data registrazione: 23-04-2004
Residenza: Roma
Età : 67
Messaggi: 1,418
Potenza reputazione: 350
|
|
Sempre riferendosi ai saggi consigli di Aldo riguardo l'auto-shutdown, si può guardare questo schema nel quale si usa il relè in autoritenuta controllato da Arduino.
Per diminuire la corrente assorbita e quindi la scarica della batteria il relè deve essere, come suggerito, a stato solido.
|

13-03-2016, 11.57.28
|
 |
Robottaro sostenitore
|
|
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 48
Messaggi: 2,330
Potenza reputazione: 346
|
|
Citazione:
Orginalmente inviato da guiott
In parole povere... è un cane che si morde la coda
|
In effetti rileggendo, sono andato un po troppo veloce e davo per scontato un po di cose.
Diciamo che mi ero ispirato a questo articolo https://www.mysensors.org/build/battery
saluti
Andy
__________________
------------------------------------------------
-----------------------------------------------
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
|
|
Strumenti discussione |
|
Modalità visualizzazioe |
Modalità lineare
|
Regole di scrittura
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Il codice HTML è Disattivato
|
|
|
Tutti gli orari sono GMT. Adesso sono le: 05.46.57.
Realizzazione siti web Cobaltica Foligno
|

|