Buongiorno a tutti,
sono nuovo su questo forum, piacere di conoscervi, di seguito vi riporto il mio problema:
Ho realizzato un circuito temporizzatore per un sistema idroponico di tipo flood & drain, il compito del mio arduino nano è quello di accendere una piccola pompa ad immersione per 3 minuti, dopodichè la lascia spenta 57 minuti e così via fino a sera quando il ciclo è molto diverso (la pianta non vuole nutriente durante la notte).
L'accensione della pompa avviene pilotando la base di un transistor di potenza di tipo NPN mediante apposita resistenza di base impostata ad 1k e altra resistenza di pull-down tra la base del transistor e la massa di circa 10k.
So che l'uso del delay solitamente è sconsigliato a favore dell'utilizzo millis e magari un giorno convertirò il codice, tuttavia vista la sua semplicità non penso che possa causare grossi problemil.
Ad ogni modo eccoci alla parte del problema: randomicamente la pompa resta attivata all'infinito, fino al reset manuale dell'arduino, andando a verificare con un tester il pin 12 (quello utilizzato per pilotare la base del transistor) risulta effettivamente impostato a 5v nonostante il codice preveda la sua disattivazione dopo 3 minuti.
Di seguito il codice:
const unsigned long SECOND = 1000;
const unsigned long MINUTE = 60*SECOND;
const unsigned long HOUR = 3600*SECOND;
void setup() {
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
Serial.begin(9600);
}
void loop() {
//accendiamo alle 10.00
for (int i = 0; i < 11; i++) {
digitalWrite(12, HIGH);
delay(3*MINUTE);
digitalWrite(12, LOW);
delay(57*MINUTE);
}
//qui siamo alle 21.00
digitalWrite(12, HIGH);
delay(3*MINUTE);
digitalWrite(12, LOW);
delay(237*MINUTE);
digitalWrite(12, HIGH);
delay(3*MINUTE);
delay(237*MINUTE);
//qui siamo alle 5.00
for (int i = 0; i < 5; i++) {
digitalWrite(12, HIGH);
delay(3*MINUTE);
digitalWrite(12, LOW);
delay(57*MINUTE);
}
}
Buongiorno e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Sto alimentando il dispositivo con uno step up converter che prende in ingresso i 3,7V di una batteria al litio e fornice 5v in uscita, pensi possa essere li il problema?
Quale step-up? Quanta corrente può fornire? La pompa con cosa la alimenti? Qual è il collegamento? Quanta corrente assorbe? Hai messo un diodo di ricircolo contro le extratensioni in parallelo al motore della pompa? Che capacità ha la batteria?
Inizio con il descrivere i componenti presenti nella foto:
Pannello fotovoltaico (non visibile) da 7V di picco che è collegato ad uno step down converter LM2596 impostato con tensione di uscita su 4,1V in modo da non superare mai il 95% circa di carica delle 2 batterie Li-ion 18650 da 3,4A l'una settate in parallelo.
Tra lo step down converter e le batterie ho inserito un Diodo Schottky in modo da evitare consumi inutili da parte dello step down in assenza di tensione sul pannello.
Nel secondo circuito prendo la tensione delle batterie e la porto ad uno step up converter modello iHaospace Mini con uscita fissa 5v e corrente massima 0,5A dal quale riparto verso 2 dispositivi:
Pin 5V dell'arduino e polo positivo della pompa (Potenza della pompa : 7V, 140mA ma funziona tranquillamente anche a 5V)
Il polo negativo della pompa è collegato al collettore del transistor di potenza e l'emettitore del transistor chiude tornando verso la massa dello step up converter a cui è collegata anche la massa di arduino.
I 2 resistori visibili vicino al transistor sono rispettivamente Rb da 1Kohm (collegato al pin 12 di arduino) e un resistore di pull-down tra la base e l'emettitore da circa 10Kohm
Non ho messo un diodo di ricircolo contro le extratensioni in parallelo al motore della pompa, pensi sia necessario in questa configurazione?
Aggiungo solo che quando non avviene lo switch-off della pompa dopo 3 minuti, è da arduino che parte il problema in quanto il pin 12 rimane a +5V e conseguentemente il transistor e in cascata la pompa restano attivi
Emmm ... sei al corrente che esistono SCHEDE apposta a cui ... si attacca il pannello solare, si attacca la batteria LiPo, provvedono a regolare la carica ed a proteggere la batteria, forniscono direttamente i 5V in uscita, ecc. ecc. ...
Non danno la granularità di cui ho bisogno nel gestire i cicli di intervento della pompa (sono su base oraria durante il giorno e ogni 4 ore durante la notte), inoltre avevo già tutti questi componenti in mio possesso.
Sull'alimentazione di Arduino però vero arrivare due coppie di fili, dalla foto non si seguono i collegamenti effettivi, meglio se riesci a disegnare uno schema di cablaggio. Comunque per me la partenza della pompa causa un buco di tensione sui 5V che blocca Arduino. Potrebbe servire un altro step-up, o magari basta un elettrolitico aggiuntivo da qualche 10µF proprio sui pin di alimentazione di Arduino. Il diodo meglio metterlo, sul collettore del transistor si formano comunque extratensioni positive.
sembrano due coppie di fili ma in realtà in quel punto (i pin di arduino) riparto verso la pompa (positivo) e il transistor (negativo).
Quindi se ho ben capito mi consigli di aggiungere un elettrolitico tra i 5V e il GND di arduino.
Per il diodo, uno Schottky andrebbe bene?
Dove dovrei inserirlo?
Quello gestisce l'alimentazione mica contiene una MCU ... Arduino le devi comunque mettere, quello fa tutta la gestione (controllata) del pannello/batteria/step-up ...
Questo è uno degli errori più gravi, si va proprio a disturbare la parte logica. Come minimo le due cose (Arduino e pompa) vanno alimentate con due "linee" separate che partono direttamente dall'alimentatore (sempre se il problema è l'induttanza delle linee di fronte ai picchi di corrente, se è l'alimentatore non si risolve). E alla fine delle "linee di alimentazione" ci mettiamo anche degli elettrolitici che stabilizzano il più possibile la tensione locale senza causare "buchi" ad altre parti del circuito.
Diodo in parallelo alla pompa (tra i 5V e il collettore), girato in modo che normalmente non conduca (altrimenti invece di partire la pompa si fa un corto).
Ti ringrazio per i consigli, nel pomeriggio spero di avere del tempo da dedicare alle modifiche che hai suggerito (devo prima verificare se ho qualche elettrolitico in giro)
Se sarai così gentile da ripassare sul questo post nei prossimi giorni così da poter rispondere su eventuali dubbi che potrebbero sorgermi.
Segui il consiglio di gpb01 metti un apposito modulo tra il pannello solare e la batteria eviti incendi e fai durare più a lungo le batterie.
Lo sai che ogni batteria ha il suo ciclo di ricarica appropriato.
Manca lo spegnimento!
Comunque la frequenza di clock è poco accurata, perché viene usato un oscillatore ceramico anziché un quarzo, con un errore che può raggiungere i 7 minuti al giorno, cioè 3 ore e mezza al mese! Dovresti usare un RTC.
Confermo che usando delay (ma anche micros o millis) si può arrivare a più di un quarto d'ora di errore a settimana, contro il massimo pochi minuti di errore all'anno (anche meno) di un buon RTC.
Non so di preciso quando mi sono perso il LOW mancante (sicuramente qualche copia incolla durante alcune modifiche al codice), ma vi posso assicurare che il blocco randomico non c'entra in quanto mi si è bloccato entrambe le volte di giorno.
Comunque ho seguito il consiglio di Claudio aggiungendo un diodo di flyback in parallelo alla pompa ed un condensatore da 47µF ai capi dell'alimentazione di arduino, fino ad ora non si è più bloccato (togliendo l'una di notte per errore del codice)
Buongiorno,
scrivo solo per dare un piccolo aggiornamento, a distanza di più di 10 giorni posso affermare con certezza che le modifiche HW che mi sono state suggerite da Claudio hanno risolto il problema.
Il programma infatti non si è più bloccato e anche il delay devo dire che è abbastanza preciso, il ritardo accumulato in questi 11 giorni è inferiore ai 30 secondi