Ciao, sto realizzando un termostato per un piccola serra dove metto a germogliare le piantine di ortaggi e fiori per l'orto e giardino.
A parte i classici esempi del led, led col bottone ecc, è il primo progetto che faccio..
Ho trovato in rete uno sketch per un termometro che poi ho modificato per far partire una ventola in caso di temperatura eccessiva, utilizza un lm35 ma non ho ancora potuto provarlo perchè non ho in casa questo sensore....lo farò nei prossimi giorni, e se funziona lo modifico nuovamente per far si che se la temperatura scende accenda un cavetto riscaldante (quelli da terrari)
Sino a qui mi sembra tutto ok, vorrei però, aggiungendo un modulo rtc, accendere e spegnere le luci a certi orari, guardando alcuni esempi in rete non mi sembra difficile ma il mio dubbio è come "completare il programma...
Cioè mi piacerebbe avere una sorta di moduli, ad esempio la parte che gestisce la temperatura separata da quella delle luci,(questo per maggior semplicità in caso di errori, modifiche malfunzionamenti visto che sono alla prime armi) ma mi sembra di aver capito che in un programma ci può essere solo un voidSetup ed un voidLoop. E' prevista una soluzione a questo o devo aggiungere righe sempre allo stesso sketch? Guardando l'ide è possibire all'interno dello stesso proggetto aprire nuove "tab" così potrebbe funzionare?
La divisione in tab del tuo progetto è solo per dividere in fase di scrittura le varie parti del codice, poi l'IDE riunisce tutto prima di passare lo sketch completo al compilatore.
Comunque ricordati che all'interno di loop() e setup() puoi richiamare delle sub-routine.
Ricordati solo che tutto quello che è dentro setup() viene richiamanto 1 volta sola mentre tutto quello che è dentro a loop() viene richiamanto all'infinito.
grazie per la risposta, ma sta cosa proprio non arrivo a capirla (sono un po duro di testa!)
Nel mio caso ora ho solo un tab col codice che controlla la temperetura, se creo un altro tab contenente un altro codice per leggere l'rtc e gestire le luci andrei nuovamente ad usare voidSetup e voidLoop. Questo però mi sembra che non si possa fare, o ho capito male io?
leggendo meglio il tuo post mi sembra di capire che se creo due tab contenenti entrambi le funzioni di setup e di loop poi l'ide le va ad unire al momento della compilazione.... possibile?
No, setup() e void() devono essere solo 1 per tipo in tutto il progetto. Il codice lo puoi poi dividere in funzioni richiamabili da loop() o da altre funzioni ancora. "Riunire" intendo che poi l'IDE considera le varie tab come "pagine" dello stesso listato.
Cmq continuo a non capire il problema. Perché devi avere più setup() e loop() nel tuo programma?
penso di avere capito....ma comunque inizio a cercare qualche sketch fatto in questa maniera per studiarlo!
No, non è che devo avere più setup e loop.... il problema ero io che non avevo pensato di creare le funzioni nelle varie tab per pi richiamarle ma semplicemente pensavo in ogni eventuale tab di ricreare funzioni loop e setup ed appunto qui veniva il mio problema sapendo che non potevano essercene più di una (almeno una cosa l'ho capita!!! XD)
La suddivisione in moduli e in parte fattibile con arduino, anche se ci sono alcune limitazioni/semplificazioni.
Es:
Una funzione di nome "inizializza" deve essere presente solo una volta, non puoi usare lo stesso nome in moduli differenti. Quindi es. nel setup chiami la funzione init_nome_modulo(type arg, type arg...), così risolvi il problema dei nomi di funzione duplicati.
Tutte le variabili dichiarate nei moduli sono visibili ovunque, cioè sono globali, mentre le variabili dichiarate dentro le funzioni sono locali e visibili solo dentro la funzione.
grazie per la risposta, ma sta cosa proprio non arrivo a capirla smiley-red (sono un po duro di testa!)
Il fatto è, che non è spiegata in nessun posto la tecnica per suddividere in moduli il progetto. Nota che puoi anche creare dei moduli contenenti classi e da queste creare delle librerie come quelle che vengono rilasciate con l'ide.
Però un passo per volta, vedi come meglio riesci a dividere il tuo progetto e scontrati con i problemi di programmazione ordinaria, per le classi, strutture ecc, meglio fare tutto quando hai accumulato un po di esperienza e sodisfazione personale.
MauroTec:
Però un passo per volta, vedi come meglio riesci a dividere il tuo progetto e scontrati con i problemi di programmazione ordinaria, per le classi, strutture ecc, meglio fare tutto quando hai accumulato un po di esperienza e sodisfazione personale.
Ciao.
Si infatti guardando un po di esempi per ora mi sembra più facile continuare sullo stesso codice....
Intanto domani dovrei andare a prendere il sensore così almeno provo quello che ho fatto sino ad ora...
bene, ho comprato il sensore e provato il programma e..... funziona!!!!! Le prove le ho fatte facendo accendere il led sul pin13 ora devo capire come fare ad accendere la ventola o meglio come collegare il transistor (bc337) che la fa accendere...
la ventola è a 12volt 200 mA quindi dovrei essere a posto col bc337 che se non sbaglio io supporta correnti fino a 800mA
Per ora ho capito che devo collegare il pin13 alla base, ma non ho capito se ci vuole una resistenza (e soprattutto a cosa serve!) ne tantomeno in base a cosa calcolarmi il valore...
Poi ci sono gli altri collegamenti che non riesco a capire bene ma appena ho un po di tempo mi metto giù e vedo di studiarmi bene il tutto...
ok funziona!!! con un po di pazienza mi sono studiato i collegamenti e dopo un po di tentativi sono riuscito a far funzionare la ventola!!!!
Ora si passa alla fase successiva cioè far accendere un cavo riscaldante in caso la temperatura scenda al di sotto di un certo valore, questo visto così mi sembra molto facile e praticamente uguale a quello fatto sopra....
Domani vado a prendere un relè e provo!!
Programma modificato, relè comprato, testato il tutto e funziona!!!!!
Ora però mi viene il dubbio, ho preso un relè 12v e creato un circuitino come quello della ventola con transistor per eccitare la bobina, e sino qui tutto ok. mi sono voluto togliere la curiosità di acquistare anche un rele 5V (omron g5v-2-h1) che ha un'assorbimento di 30mA, avendo un assorbimento così basso non potrei collegare la bobina direttamente al pin digitale di arduino e l'altro a massa? con la teoria di: "quello che non c'è non si rompe" eliminerei il transitor.....
Ho detto una str....ata o la cosa è fattibile?
Un relé io non lo comanderei da un pin. Quando si apre, la bobina che è carica si scarica poi sul pin dell'Arduino, che non ha protezione. Quindi metti sempre un transistor nel mezzo ed un diodo in antiparallelo al relé per scaricarlo senza danneggiare anche il transistor.
Io per il riscaldatore della mia serra uso un SSR, comodissimo e puoi collegarlo direttamente al pin dell'arduino.
Al max il problema è il costo che è, ovviamente, più alto di un relé canonico.
leo72:
Un relé io non lo comanderei da un pin. Quando si apre, la bobina che è carica si scarica poi sul pin dell'Arduino, che non ha protezione. Quindi metti sempre un transistor nel mezzo ed un diodo in antiparallelo al relé per scaricarlo senza danneggiare anche il transistor.
quoto Leo, ma proprio volendo eliminare il transistor dovresti mettere comunque una R da 120 ohm per limitazione ed un diodo in antiparallelo per protezione, così vai abbastanza sicuro che non succede niente.
grazie mi avete convinto a mettere il transistor!!!! anche perchè poi....ripensandoci bene se non ricordo male la corrente massima fornita dall'arduino sono 200mA quindi meglio alimentarlo da un'altra fonte anche perchè se poi aggiungo altri relè rischio di sforare... A questo punto lascio quello da 12V!
DanielaES:
Io per il riscaldatore della mia serra uso un SSR, comodissimo e puoi collegarlo direttamente al pin dell'arduino.
Al max il problema è il costo che è, ovviamente, più alto di un relé canonico.
DanielaES:
Io per il riscaldatore della mia serra uso un SSR, comodissimo e puoi collegarlo direttamente al pin dell'arduino.
Al max il problema è il costo che è, ovviamente, più alto di un relé canonico.
Tanto se stai lavorando ad una serra (come me) prima o poi ti serviranno altri relé, nel caso saprai che esistono anche gli SSR, ed avrai una scelta più ampia
Al momento io ho un solo SSR (di scorta da un forno con controller pid) che gestisce il riscaldatore ma in teoria me ne servirebbe uno per la pompa di ricircolo, uno per un eventuale umidificatore ecc...
Se poi tu hai anche luci (io no) avoglia
BTW se usi relé canonici, fidati di leo e menny, raramente prendono cantonate... io ho usato un SSR proprio per non preoccuparmi di nulla