Realizzare la centralina alba tramonto arduino sketch completa la prima parte della realizzazione di una centralina per presepe
questo progetto è composto da alcuni articoli che ti accompagneranno per tutto il periodo natalizio.
Ho deciso di dividere il progetto in fasi per due motivi:
- renderlo più comprensibile dedicando un articolo a ciascuna fase della realizzazione partendo dai principi che mi hanno ispirato;
- permetterti di realizzare anche solo una parte del progetto e non tutto il progetto.
Nel primo articolo hai letto come puoi ricavare i tempi delle fasi alba-giono-tramonto-notte e come tradurre in tempi per arduino tali fasi.
Nel secondo articolo hai realizzato i collegamenti dei led in cui ciascun led simula una delle fasi del giorno e della notte stellata.
In questo articolo leggerai come da quei tempi ne consegue un grafico dell’andamento delle uscite arduino e quindi lo sketch.
Il grafico della centralina alba tramonto arduino sketch
Inizia subito guardando il grafico:
in cui ciascuna delle 4 fasi si alterna lungo la linea del tempo ( in alto ) in pratica in un ipotetico giorno che inizia dalle 5:54 si susseguono la prima fase di in cui la luna cala ed il sole sorge fino al raggiungimento della sua massima luminosità come alba e da inizio alla seconda fase alle 7:35 per continuare con le fasi successive.
Sulla base di questi tempi, e della tabella che hai già visto nel primo articolo potrai ricavare i tempi in millisecondi di durata delle singole fasi:
Lo sketch della centralina alba tramonto arduno
nello sketch tutta la giornata è riprodotta in un minuto quindi con le fasi che durano rispettivamente:
- 4194 ms per l’alba
- 22958 ms per il giorno
- 4195 ms per il tramonto
- 28651 ms per la notte
Passa allo sketch:
/********************************************************** * Centralina Alba-Tramonto per presepe * * Created on 12 december 2014 * Modified on 15 decebre 2014 * * by Mauro Alfieri * web: mauroalfieri.it * Twitter: @mauroalfieri /**********************************************************/ #define pin_down 3 #define pin_sun 5 #define pin_sunset 6 #define pin_moon 9 #define pin_starsA 10 #define pin_starsB 11 int oneminrome[4] = { 4194,22958,4195,28651 }; int oneminbtlm[4] = { 3668,25189,3668,27474 }; int timeStepOld = 0; int timeStep = 0; long timeCurr = 0; byte fade[] = {255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0}; // 52 step byte curr = 0; void setup() { Serial.begin( 9600 ); pinMode( pin_down ,OUTPUT ); pinMode( pin_sun ,OUTPUT ); pinMode( pin_sunset,OUTPUT ); pinMode( pin_moon ,OUTPUT ); pinMode( pin_starsA,OUTPUT ); pinMode( pin_starsB,OUTPUT ); analogWrite( pin_down ,LOW ); analogWrite( pin_sun ,LOW ); analogWrite( pin_sunset,LOW ); analogWrite( pin_moon ,LOW ); analogWrite( pin_starsA,LOW ); analogWrite( pin_starsB,LOW ); Serial.println("-- START --"); } void loop() { timeCurr = oneminrome[curr]; timeStep = (timeCurr/52); Serial.print("Current: "); Serial.println(curr); Serial.print("Time current: "); Serial.println(timeCurr); Serial.print("Time single step: "); Serial.println(timeStep); // down if ( curr == 0 ) { Serial.print("Fase: "); Serial.println("DOWN"); for ( int i=0; i<52; i++) { analogWrite(pin_down, fade[(51-i)]); analogWrite(pin_sun, 0 ); analogWrite(pin_sunset, 0 ); analogWrite(pin_moon, fade[i] ); analogWrite(pin_starsA, fade[i] ); analogWrite(pin_starsB, fade[i] ); delay( timeStep ); } timeStepOld = timeStep; } // sun if ( curr == 1 ) { Serial.print("Fase: "); Serial.println("SUN"); for ( int i=0; i<52; i++) { analogWrite(pin_down, fade[i]); if ( fade[i] < 125) analogWrite(pin_sun, fade[(51-i)]*2 ); analogWrite(pin_sunset, 0 ); analogWrite(pin_moon, 0 ); analogWrite(pin_starsA, 0 ); analogWrite(pin_starsB, 0 ); delay( timeStepOld ); } timeStepOld = (timeStepOld*52); // elapsed time timeCurr = (timeCurr - timeStepOld); delay( timeCurr ); } // sunset if ( curr == 2 ) { Serial.print("Fase: "); Serial.println("SUNSET"); for ( int i=0; i<52; i++) { analogWrite(pin_down, 0); analogWrite(pin_sun, fade[i] ); analogWrite(pin_sunset, fade[(51-i)] ); analogWrite(pin_moon, 0 ); analogWrite(pin_starsA, 0 ); analogWrite(pin_starsB, 0 ); delay( timeStep ); } timeStepOld = timeStep; } // moon if ( curr == 3 ) { Serial.print("Fase: "); Serial.println("MOON"); for ( int i=0; i<52; i++) { analogWrite(pin_down, 0); analogWrite(pin_sun, 0 ); analogWrite(pin_sunset, fade[i] ); if ( fade[i] < 125) analogWrite(pin_moon, fade[(51-i)]*2 ); if ( fade[i] < 125) analogWrite(pin_starsA, fade[(51-i)]*2 ); if ( fade[i] < 125) analogWrite(pin_starsB, fade[(51-i)]*2 ); delay( timeStepOld ); } timeStepOld = (timeStepOld*52); // elapsed time timeCurr = (timeCurr - timeStepOld); delay( timeCurr ); } curr++; if ( curr >= 4 ) { curr = 0; } }
salta le prime linee che sono i commenti di intestazione del progetto e continua con:
linee 012-017: definisci i pin a cui sono collegati i led come hai letto nell’articolo dedicato ai collegamenti;
linee 019-020: sono definiti i due array di valori, uno per Roma ed uno per Betlemme al 25 dicembre 2014. Nel corso dello sketch sceglierai quali tempi utilizzare per il tuo presepe;
linee 021-022: definisci due variabili che userai per scandire i tempi di intervallo di ciascuna fase per ottenere la dissolvenza della fase corrispondente;
linea 024: imposta una variabile con cui terrai in memoria il tempo della fase corrente;
linea 026: definisci un array di 52 valori da 255 a 0 con cui ottenere la dissolvenza di ciascuna fase;
linea 027: definisci una variabile i cui valori andranno da 0 a 3 per indicare in quale fase ti trovi;
linee 034-039: imposta tutti i 6 pin in OUTPUT;
linee 041-046: porta a LOW tutti i pin corrispondenti ai led;
linea 052: in questa linea decidi se utilizzare la durata sulla base del fuso orario di Roma o quelli sul fuso orario di Betlemme. Semplicemente sostituendo il valore di oneminrome con oneminbtlm potrai variare la sequenza di durata tra le singole fasi. Il valore assegnato alla variabile timeCurr è relatico alla fase corrente ( curr ) in questo primo passaggio curr vale 0 e quindi il valore di timeCurr sarà corrispondente al primo valore dell’array oneminrome.
linea 053: dividi il valore di timeCurr per il numero di step in cui l’alba deve sorgere, come puoi vedere nel grafico sopra. Nella fase alba la prima luce dovrà partire da intensità 0 e compiere i 52 passi fino alla luminosità 255;
linea 060: se la fse è la prima ed il valore di curr è 0 esegui le righe seguenti;
linee 062: crea un ciclo di 52 valori ( ciascuno corrispondente ad uno degli indici del fade[] ) in cui l’alba inizia da 0 ed arriva a 255;
linea 063: siccome il valore di fade va da 255 a 0 ed il led dell’alba deve iniziare da 0 ed incrementarsi fino a 255 invertia il contatore i passando alla fade il valore (51-i). Otterrai che quando i = 0 fade[ 51-0 ] = fade[ 51 ] = 0 siccome gli array partono da 0 per cui 52 valori sono 0-51 indici;
linee 064-065: i relativi pin sun e sunset ( giorno e tramonto ) saranno a 0;
linee 066-068: si muovono in parallelo all’alba per ottenere il termine della notte e la fase di alba;
linea 069: il valore di tempo calcolato alla linea 053 lo usi per attendere tra le intensità di illuminazione dei singoli canali in modo che l’effetto finale osservato è una lenta fine della notte che pian piano lascia il posto all’alba;
linea 071: assegna alla variabile timeStepOld il valore di timeStep che userai nelle prossime fasi della centralina alba tramonto arduino sketch per regolare il passaggio dall’alba al giorno ed il passaggio dal tramonto alla notte;
linee 075-089: sono fondamentalmente simili alle linee precedenti se non in alcuni passaggi come ad esempio la linea 079: controllando il valore di fade[i] fino a quando scende sotto il valore 125, ritardi la fase di inizio del giorno e per recuperare questo ritardo moltiplichi per due il valore del fade ottenuto come descritto alla linea 063;
Questa elaborazione della centralina alba tramonto arduino sketch è stato necessario per compensare l’assorbimento contemporaneo da parte dei led bianchi ad alta luminosità che necessitano di più corrente per essere stabili a bassa tensione.
Con una shield ad hoc potrebbe non essere necessario applicare questa modifica software, dipende dal tipo di shield che sceglierai.
linea 086: moltiplica il valore di timeStepOld per 52 ( gli step del fade ) per conosce il valore totale trascorso nel realizzare tutti gli step del fade, questo calcolo ti serve per la linea 087;
linea 087: sottrai dal valore di timeCurr il tempo timeStepOld appena calcolato, in questo modo sai quanto tempo deve ancora durare la fase corrente;
linea 088: attendi il passaggio del tempo fino al terine della fase;
linee 092-121: sono identiche alle precedenti linee e si preoccupano di gestire la fase di tramonto, simile a quella di alba e la fase notturna;
linea 122: incrementa il valore di curr in modo da procedere con le fasi successive;
linea 123: controlla che il valore di curr non superi il 3 e nel caso arrivi a 4 lo riporta a 0 per far iniziare nuovemente il ciclo alba-giorno-tramonto-notte;
Il video della centralina alba tramonto arduino sketch
Puoi osservare il video della centralina in funzione in due cicli successivi dall’alba alla notte:
Buon Natale !!
99 commenti
1 ping
Vai al modulo dei commenti
Ciao Mauro ho risolto il problema ho cambiato long timeCurr con unsigned short timeCurr e funziona perfettamente .
Comunque Grazie
Autore
Ciao Giuseppe,
ho provveduto a spostare io il tuo commento nel posto corretto, in futuro ti chiedo di porre maggiore attenzione se desideri che io possa aiutarti.
La differenza tra long e unsigned short è notevole in quanto long gestisce numeri da -2,147,483,648 a 2,147,483,647 con 4 byte, unsigned short da 0 a 65535 per cui con i 2min di impostazione può funzionare ma se aumenti a 5 min, o superiore, ritroverai il medesimo errore.
Se riesco a fare qualche test proverò con unsigned long che ha un range da 0 a 4,294,967,295
Ciao mauro volevo chiederti come potevo fare a aumentare il tempo del giorno e della notte ???? grazie =) aspetto tua risposta
Autore
Ciao Andrea,
é tutto descritto dettagliatamente nell’articolo, si tratta di calcoli e matrici da ricavarti in funzione dei tempi che desideri impostare.
ciao, scusa se io volessi ridurre il tempo, mi basta abbassare i valori all’interno di “oneminrome[4]={4194,22958,4195,28651}; giusto??
Autore
Ciao Soft,
si è sufficiente, controlla di utilizzare l’array corretto.
Ciao Mauro,
secondo te è possibile realizzare questa centralina utiiizzando 6 led RGB e nello specifico WS2812, facendo le opportune modifiche al codice.
Grazie
Ciao
Davide
Autore
Ciao Davide,
certo i led Neopixel o con controller integrato WS2812 sono indirizzabili per numero ma come comportamento sono dei normali led per cui puoi adattare il codice.
Ciao Davide, spero che sei ancora in contatto su questo blog, ti volevo chiedere se sei riuscito ad utilizzare i led ws2812 in un unica striscia led e se mi potessi dare una mano!!! grazie
Autore
Ciao Lino,
mai commento è stato più premonitore.
Nei prossimi giorni sto preparando delle chicche per natale con i neopixel o WS2812B.
In ogni caso ti consiglio di leggere e comprendere già tutti gli articoli dedicati a questi led .. in preparazione dei futuri sviluppi.
Ciao Mauro, guida perfetta. Avrei una domanda: ho provato a cambiare la durata di ogni ciclo mettendo i valori secondo la tabella che hai pubblicato nei tuoi precedenti articoli e ho notato che se importo una durata del ciclo di 15 minuti, il ciclo si blocca, appena accendo arduino non va avanti, mentre se imposto un tempo di 1 minuto oppure dei tempi casuali il tutto funziona correttamente. Per modificare il tempo di ogni ciclo ho modificato i valori sul codice “int oneminrome[4] = { 62917,344365,62927,429771 };”.
Come mai non riesco ad impotare una durata del genere?
Grazie.
Autore
Ciao Davide,
non ho potuto provare tutti i tempi definiti per questioni di tempo.
Prova ad eseguire una analisi con il monitor seriale e dirmi cosa accade e cosa rilevi in modo che io possa correggere lo sketch.
Ciao mauro. io volevo usare questo progetto come supporto al mio presepe che ha già un ciclo giorno notte senza alba e tramonto. Io vorrei fare un ciclo che inizia diretto dal giorno (0 s), da 30 s a 50 s ci sia tramonto, poi passa la notte e a 1 min e 20 s fino a 1 min e 35 s fa alba per poi fare ancora giorno. da qui dovrebbe poi iniziare il loop con inizio da giorno e fine a alba con tempi giorno 45 s, tramonto 25 s, notte 35 s e alba 15 s. con naturalmente dissolvenza. Come posso fare? puoi scrivermi il tuo codice modificato?
Autore
Ciao Stefano,
pubblico il codice e la descrizione per insegnare/permettere a chi vuole di eseguire tutte le modifiche che desidera mettendoci solo un po di buona volontà nel comprendere come funziona arduino ed il mio codice.
Realizzo anche progetti su commissione di scrittura codice ma temo che a causa degli impegni già esistenti arriveremmo ben oltre il prossimo natale solo per iniziare il progetto.
Ciao Mauro,
innanzitutto complimenti per il sito e il corso online, molto interessante ed appassionante.
Premetto che sono ancora in fase embrionale, ovvero sto stilando la lista della spesa e mi stanno sorgendo delle domande:
per il progetto alba tramonto, avendo un presepio 1200×1200 [mm]:
1- cosa servirebbe per collegare non solo 1 led ma delle lampade? quale shield suggeriresti?
2- sarebbe fattibile usare una striscia RGB da 1 mt e se si, servirebbe qualche scheda aggiuntiva?
upgrade all’attuale schema potrebbe essere l’aggiunta di un motore (x rotazione di un mulino) e delle luci all’interno delle case, ma dovrebbero essere on-off nella fase tramonto (magari in random tra loro)
3- per un altro progetto, se dovessi muovere 3 servi, con alimentazione a 9Vdc, basterebbe un regolatore di tensione L7806 per i motori?
Grazie, per l’attenzione.
Vale
(Valentino)
Autore
Ciao Valentino,
per le prime due domande la risposta è si e ti serve una shield o altro driver per led in grado di supportare il carico di led che gli collegherai.
Non esiste un unica shield che puoi usare e molto dipende dal numero/tipo/potenza di led che usi, le blog trovi una ampia narrazione dedicata ai led ed al loro utilizzo con arduino.
Per la domanda 3 il discorso è sostanzialmente lo stesso: dipende dal tipo di servo e dalle caratteristiche di alimentazione richieste, di solito un 7806 per servo dovrebbe garantirti una corrente sufficiente, tuttavia esistono servo molto esigenti in termini di corrente.
ciao,
grazie per le risposte; scusami, ma potresti cortesemente indicarmi una “lista della spesa” in riferimento alle domande 1 e 2?
Capisco che dipenda da vari fattori, ma per 1 metro quadro da illuminare cosa mi consiglieresti? Sinceramente non saprei da dove iniziare le mie ricerche … di codici (shield o altro driver) ancora non ne conosco … sorry
Vale
Autore
Ciao Vale,
inizia pure dal blog, troverai molti riferimenti a shield e progetti che puoi utilizzare.
Purtroppo non saprei comporre una lista della spesa affidabile senza una adeguata analisi del progetto.
Se di tuo interesse realizzo progetti su commissione come puoi leggere nella sezione collabora del blog.
Ciao Mauro, bellissima guida, ma vorrei portare questa centralina alla “Vita Reale” ti spiego, ho un allevamento di uccelli, e il posto dove sono è poco illuminato, quello che vorrei fare è gestire due o tre strisce led rgb, con la funzione alba e tramonto rapportate alle ore di luce effettive di ogni giorno, mi aiuteresti?
Autore
Ciao Lino,
bella idea, io posso aiutarti con consigliandoti la lettura degli articoli del blog dettagliati riga per riga, proprio per insegnarti come usarli.
Per la parte elettronica trovi degli articoli dedicati alle Shield che ti occorrono come la RGB Shield con cui controlli 3 strisce di led.
Se desideri un lavoro su commissione puoi scrivermi alla casella info del blog e ti indicherò i costi e le modalità per ricevere un preventivo.
Buonasera Mauro, ho provato a implementare la sua guida copiando lo sketch esattamente come lo ha scritto lei e realizzando il circuito sulla breadboard come è illustrato nell’mmagine nell’altro articolo che riguarda questo progetto. Purtroppo la centralina funziona solo a metà, cioè si accendono e si spengono solo i 3 LED relativi alla fase notturna (la Luna e le 2 stelle), mentre gli altri 3 LED restano sempre completamente SPENTI. La cosa strana è che, mentre il circuito presenta questo problema, sul monitor seriale le fasi e i tempi vengono visualizzati in modo perfetto.
Per caso potrebbe aiutarmi? Grazie mille
Autore
Ciao Pietro,
prova i singoli led con uno sketch semplice, tipo fade degli esempi arduino, per verificare se non si tratti di un collegamento o di un componente mal funzionante.
Ho testato uno per uno i 13 cavi, i 6 LED e la resistenza con i quali sono andato a realizzare il circuito, selezionandoli perfettamente funzionanti, e ora tutto funziona alla perfezione. Era sicuramente solo un problema di collegamenti, come lei diceva, la ringrazio molto 🙂
Autore
Ottimo Pietro, il metodo che hai usato per scovare l’errore è di certo il miglior insegnamento che hai acquisito 🙂 usalo sempre e vedrai che sarà facile realizzare progetti con arduino, genuino, raspberry pi, ecc…
Volendo sostituire i led per il ciclo con una striscia led e relativi transistors Pottebbe suggerirmi il codice per ottenere i rispettivi colori. Grazie
Autore
Ciao Giacomo,
a quali codici ti riferisci?
Centralina alba tramonto arduino sketch – terza parte
Ho modificato il Suo sketch con questo per usare Led RGB:
[codice rimosso in automatico]
Funziona alla perfezione ma non riesco, malgrado vari tentativi; a far lampeggiare il Led STELLA ed inserire una dissolvenza tra i vari cicli, può darmi un aiuto, grazie e buona serata
Autore
Ciao Giacomo,
ti chiedo la cortesia di rispettare le regole del blog che trovi alla fine di ogni articolo sopratutto se si tratta di modifiche a script già presenti nel blog.
In merito alla richiesta ti consiglio di modificare lo sketch dopo aver compreso il funzionamento dello sketch e la logica di funzionamento in modo che le tue modifiche possano consentirti di far funzionare ugualmente lo sketch.
Buongiorno,
Premetto il mio ringraziamento per le sue risposte immediate.
Non era mia intenzione infrangere le regole e per questo me ne scuso, ma lo stress dopo ore ad esaminare il suo sketch ed innumerevoli tentativi ho dimenticato le regole. Ho esaminato attentamente e con molto entusiasmo il suo Sketch e credo di averne capito il funzionamento, ma il problema è nato nell’utilizzare un Led RGB (o striscia Led RGB) per i cicli e un Led bianco per le stelle, con i codici colore RGB sono riuscito a creare l’effetto dell’alba(255,100,0) il giorno(255.255.255), tramonto(255,50,0) e notte(0,0,255) e il Led bianco per le stelle, tutto funzionante alla grande;Il FADE mi riesce con i normali Led, ma non riesco a farlo con le combinazioni dei colori rgb( non c’è sincronismo ); L’altro problema sta nel Led bianco(stella) volendo inserire il tremolio con il blink nel ciclo notte, il loop lo esegue con l’effetto notte e poi con il blink o non esce( penso sia a causa del Delay);
La ringrazio per un suo eventuale contributo.
Autore
Ciao Giacomo,
comprendo la stanchezza e la frustrazione dopo ore su uno sketch. Se può esserti di conforto quando mi trovo in quelle situazioni, che capitano anche a me, mi ripeto: è un hobby, è solo un hobby l’ho scelto per divertirmi e non per fustigarmi mentalmente 🙂
Dopo la premessa, ora mi è più chiaro ciò che hai fatto.
1) per ottenere il fade sui led che hai controllato con 3 segnali pwm ( RGB ) devi usare un 4° pwm che controlla il pin comune ( sia esso positivo o negativo ) in modo che sia lui a imporre il fade;
2) non ho compreso cosa accade.
Salve, riguardo al tempo ne ho abbastanza in quanto sono in pensione e quindi mi sono dedicato a questo hobby per impiegare il tempo a disposizione, pertanto più trovo difficolta e meglio passo il tempo, per il suo contributo mi siedo meglio:
1) ho una striscia led collegata ai 12 volt esterni da usare per il ciclo alba, giorno, tramonto e notte, e fin qui tutto funziona ottenendo, con la miscellanea,i colori delle fasi, quello che non riesco ad ottenere bene e la dissolvenza tra le vaie fasi.
2) ho dei led bianchi da 10mm da usare per il tremolio stelle con la fibra ottica nella sola fase notte, non riesco ad ottenere lo sfarfallio in quanto rimangono accese fisse.
Nello scusarmi per la mia invadenza, La saluto
Autore
Ciao Giacomo,
1) ho già risposto nel precedente commento, la risposta sarebbe la medesima.
2) se ciò che non vedi è lo sfarfallio potrebbe dipendere dalla velocità di risposta del led, prova ad aumentare i delay in modo da vedere un lampeggio ( es: 1000 ) e poi man mano lo diminuisci fino a rendere l’effetto desiderato.
ciao, vorrei utilizzare il tuo progetto riportandolo sulle 24h giornaliere. cosa devo modificare? ho già calcolato i tempi in proporzione alla tabella da te pubblicata, ma non cambia nulla!!!!!
Grazie e complimenti per il progetto.
Autore
Ciao Lorenzo,
non sono certo di aver compreso, tu vuoi che l’intero ciclo duri 24ore ?
Hai già ricalcolato ed applicato i tempi nello sketch ?
Ciao Mauro, sto realizzando una centralina per il presepe della parrocchia, e sto utilizzando il tuo sketch per mancanza di tempo utile, posso interfacciare le uscite con un modulo relay a 8 canali o perderei l’effetto di dissolvenza? grazie in anticipo e buone feste!
Autore
Ciao Diego,
perdi l’effetto dissolvenza.
GRAZIE!!! bellissimo il tutto.
Ho provveduto a fare un taglia ed incolla e funziona.
Gradirei sapere se e possibile inserire anche della musica che vada a tempo con le luci, per esempio, durante il giorno ascoltare del caos (mercato) e durante la notte un silenzio tombale.
Per fare ciò cosa si dovrebbe montare?
Grazie 1000 e BUONE FESTE!
Autore
Ciao Italo,
esistono dei piccoli riproduttori mp3 controllabili via seriale, anche io ne sto provando uno e spero nei prossimi giorni di poter pubblicare un tutorial su come utilizzarlo.
Grazie Mauro. Aspetto tue notizie.
Autore
Ciao Italo,
ti consiglio di verificare sul blog la pubblicazione del mio articolo, considera che on posso assicurarti di riuscire a scrivere il mio articolo a breve.
Autore
Ciao Italo,
esistono dei piccoli riproduttori mp3 controllabili via seriale, anche io ne sto provando uno e spero nei prossimi giorni di poter pubblicare un tutorial su come utilizzarlo.
ciao Mauro, Grazie mille per il tutorial io e mio figlio stiamo imparando e lo stiamo facendo grazie ai tuoi tutorial. Il tutto funziona ma a differenza del tuo video l’intensità luminosa dei nostri led è più basa di quella che si vede nel tuo video. o meglio se provo il led singolarmente l’intensità è giusta ma montato il tutto l’intensità dei led è più bassa. perchè?
Grazie
Autore
Ciao Gian Mario,
potrebbe essere legata all’alimentazione, come stai alimentando la centralina alba tramonto ?
Eg. sig. Mauro,
Le riscrivo perché la mia inesperienza mi spinge a chiederLe aiuto. Come precedentemente detto, sono interessato alla centralina Alba….Tramonto, e ho copiato pari pari lo sketch che Lei ha pubblicato e incollato
in una pagina nuova di Arduino (visto che non è previsto il download. Risultato? una infinità di righe di errore contenenti: stray ‘\240’ in progress….Come vede la mia ignoranza è enorme, e quindi non riesco a risolvere il problema, Sono certo che mi sfugge qualcosa, e che forse lo sketch non andava copiato e incollato brutalmente,
ma fino ad ora ho solo lavorato con progetti il cui Arduino Code era disponibile in download. Può aiutarmi?
Grazie e complimenti.
Paolo Izzo
Autore
Ciao Paolo,
solitamente il copia e incolla dei miei sketch è sufficiente.
Prova con un browser differente.
buonasera sig. Mauro,
innanzitutto, visto su come tratta i suoi argomenti, mi sarebbe piaciuto averla come insegnante, ma ormai
……….; mi perdoni quindi l’ignoranza e vorrei chiederLe come mai, se copio il suo sketch e lo incollo nell’IDE di Arduino, mi compare al termine della compilazione sempre lo stesso errore: stray ‘\240’ in program. Sono certo che mi sfugge qualcosa. Può cortesemente aiutarmi? Grazie e complimenti.
Paolo Izzo
Che Le devo dire sig. Mauro, ho provato con Fire Fox e funziona il tutto egregiamente. D’altronde non poteva essere diversamente. Sono quelle cose, come l’uovo di Colombo, che non ci pensi, e quando lo sai ti fa rabbia.
Ne approfitto per chiederle: io vorrei applicare il progetto ad un acquario di cui ho le lampade led, i driver calcolati per il loro assorbimento (come vede ho cominciato dalla fine…) per cui mi farebbe gola, allungare i tempi e renderli reali per l’intero ciclo di 24h. E’ fattibile? Magari applicando tensione ad Arduino tramite un timer elettrico (tipo orologio per le luci delle scale, o applicando un modulo con clock ad Arduino?
Grazie di nuovo.
Autore
Ciao Paolo,
bene per il browser.
Per i tempi ti consiglierei di utilizzare ed integrare un modulo RTC in quanto su tempi così lunghi ( 24H ) fidarsi del solo timer di arduino è un azzardo.
Autore
Ciao Paolo,
hai provato a cambiare browser?
Che browser stai utilizzando? Te lo chiedo anche per capire se posso fare qualcosa per migliorare il blog.
Mauro buongiorno,
sono un ragazzo di 77 anni che da poco si è avvicinato ad Arduino sviluppando a titolo di apprendimento alcuni sketch presenti nella libreria. Poi mi sono imbattuto nel tuo progetto “Centralina alba e tramonto con Arduino” che mi ha affascinato come obbiettivo da realizzare per il prossimo Natale. Ho realizzato lo schema, ho caricato il listato del programma ma purtroppo non funziona la compilazione con il seguente messaggio di errore:
stray ‘\303’ in program
exit status 1
stray ‘\303’ in program
Ho cercato di capire dove avessi commesso l’errore controllando passo passo il listato ma invano. Vedendo i commenti che ricevi da quelli che ti scrivono, io sono ben lontano nell’apprendimento. Mi puoi aiutare a cogliere questa soddisfazione?
Il mio sistema operativo è Windows 10 a 64 bit.
Grazie.
Autore
Ciao Giuseppe,
dal messaggio di errore non riesco a comprendere l’errore. Puoi incollarmi tutto l’errore dalla prima linea ? Ipotizzo che ti manchi qualche libreria tipo la RTClib ma non ne posso essere certo, sto provando a prevedere con la mia sfera di cristallo 🙂
Arduino:1.8.1 (Windows 10), Scheda:”Arduino/Genuino Uno”
Centralina_alba_tramonto_con_Arduino:2: error: stray ‘\303’ in program
nello sketch tutta la giornata è riprodotta in un minuto
^
Centralina_alba_tramonto_con_Arduino:2: error: stray ‘\250’ in program
Centralina_alba_tramonto_con_Arduino:4: error: missing terminating ‘ character
4194 ms per l’alba
^
Centralina_alba_tramonto_con_Arduino:1: error: ‘Lo’ does not name a type
Lo sketch della centralina alba tramonto arduno
^
Z:\Documenti\Titolario\Hobbistica\Elettronica\Arduino\Sketch\Centralina_alba_tramonto_con_Arduino\Centralina_alba_tramonto_con_Arduino.ino: In function ‘void loop()’:
Centralina_alba_tramonto_con_Arduino:58: error: ‘oneminrome’ was not declared in this scope
timeCurr = oneminrome[curr];
^
exit status 1
stray ‘\303’ in program
Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
“Mostra un output dettagliato durante la compilazione”
in “File -> Impostazioni”
Arduino:1.8.1 (Windows 10), Scheda:”Arduino/Genuino Uno”
Autore
Ciao Giuseppe,
sembra tu abbia copiato anche le righe di descrizione prima dello sketch, lo capisci da: “nello sketch tutta la giornata è riprodotta in un minuto” che è una delle descrizioni. Lo sketch è solo quello che inizia alla linea 01 e termina alla linea 124.
Mauro è vero! Ora la compilazione è OK. Grazie per la cortesia.
Autore
Bene Giuseppe, sono contento del tuo successo
Stamane mi sono apprestato al caricamento del programma che non è riuscito con questo messaggio di errore :
“Problema di caricamento sulla scheda. Guarda http://www.arduino.cc/en/Guide/Troubleshooting#upload per suggerimenti”
Ho provato ad esaminare il suggerimento, ma la cosa è alquanto complessa per le mie conoscenze. Magari disponi della spiegazione?
Grazie.
Autore
Ciao Giuseppe,
hai collegato la scheda arduino ? hai selezionato la scheda e la porta nell’IDE ?
Se una delle due cose ti manca ti consiglio di provare a leggere il mio corso arduino gratuito on-line per avere le basi necessarie a realizzare i tuoi progetti.
Hai ragione! Mi era già successo! Ho tratto la seguente conclusione, ogni volta che Windows 10 si aggiorna per faccende sue, Arduino che prima funzionava, dopo non funziona più. Quando succedeva, provvedevo a disinstallare Arduino e dopo averlo di nuovo installato, il tutto tornava a funzionare. Ho ripetuto anche stavolta la procedura ed il tutto funziona correttamente, il listato si carica ed il programma si svolge correttamente. Ha una logica?
Comunque seguirò il tuo consiglio e leggerò attentamente il tuo corso online.
Sempre ti ringrazio per la cortesia.
Autore
Ciao Giuseppe,
sarebbe da verificare con il forum arduino se ad altri capita e come risolvono.
Ciao Mauro!
Complimenti per il progetto, davvero molto bello. Avrei un problema, con questo sketch vorrei ricreare tutte le albe, giorni, tramonti e notti di una anno ( per un progetto più grande) che ovviamente cambiano continuamente. Potresti dirmi come modificare il codice affinche una volta terminato il ciclo di un giorno inizi il successivo che ha dati differenti?
Autore
Ciao Riccardo,
è alquanto complesso quello che desideri fare e necessita di molte e chiare info per defiire delle logiche di calcolo ed applicative alla soluzione come ad esempio, la prima che mi viene in mente, quanti sono i giorni considerati varianti prima che il codice sia ciclicamente ripetuto?
Quale relazione esiste tra le variazioni temporali da un gioro al successivo? Le variazioni sono costanti o seguono altre regole matematiche? le variazioni tra le fasi sono uguali ( ossia alba gg 1 = 1h, tramonto gg 1 = 30m, alba gg 2 = 1.30, tramonto gg 2 = ?? ) ?
Questo solo per iniziare, se ho compreso quello che vuoi fare, poi c’è da eseguire tutti i calcoli e le formule di relazione, in parte le ho descritte nei miei articoli.
Considera che solo per organizzare la logica di questo articolo ci sono volute 2 settimane di studio e test.
Si certo…forse dovrò lavorarci un po’ su. Volevo chiederti altre due cose. La prima: ho voluto utilizzare il tuo schema ma senza le stelle, e ho notato che dorante la dissolvenza uno dei led (quello della notte) si mette a lampeggiare invece che dissolversi in modo uniforme anche cambiano il pin. Come posso risolverlo? La seconda invece riguarda la durata della dissolvenza. Come ho già scritto nel precedente commento, vorrei appunto ricreare la durata di un giorno ( magari posticiperò ciò che riguardala durata dei singoli per quando sarò più esperto ) e ovviamente la durata di un tramonto o un’alba è molto più lunga rispetto a quella riportata nello sketch! Potresti consigliarmi un modo per allungare quindi la dissolvenza?
Grazie mille per il tuo tempo!
Riccardo
Autore
Ciao Riccardo,
per la prima potrebbe dipendere dal tipo di led. I led hanno una componente fisica che emette la luce che può reagire in modo non lineare alla variazione lineare del pwm. Puoi leggere i miei articoli sul lampdario a fibre ottiche in cui avevo decsritto il fenomeno.
Per la seconda devi calcolarteli come descritto in questi articoli e puoi allungarli come preferisci.
Buongiorno Mauro,
sono ben due anni che uso il tuo sketch ‘centralina alba tramonto’ con ottimo risultato e gioia dei miei nipotini.Ogni ogni anno ho aggiunto alcune modifiche tipo durante il giorno girano le pale di un mulino o la cascata,il tutto inserendo dei rele comandate da arduino. Quest’anno ho comprato DFPlayer Mini SKU:DFR0299 e vorrei sincronizzare la musica per ogni fase.Esempio durante l’alba far suonare il canto del gallo mentre il giorno essendo il tempo più lungo faccio suonare “tu scendi dalle stelle.Purtroppo il sincronismo non avviene, per ogni ciclo viene sfasato il tempo.Non so come risolvere questo problema ,forse dipende dal delay che c’è per fase.Vorrei un suggerimento come correggere il tutto.
Grazie di tutto
Autore
Ciao Giuseppe,
sono contento del tuo risultato e della felicità che dona.
In merito al DFPlayer mi sono ripromesso tante volte di acquistarne uno e dedicargli qualche articolo ma ad oggi non l’ho ancora fatto.
Purtroppo non sono così bravo da rispondere su progetti che non ho ancora fatto, se il problema è il delay puoi variarlo come preferisci.
Comunque penso a un problema sofware e non al dfpalyer poichè io non sono tanto bravo con il linguaccio C++,mentre tu sei un professore ,potresti dare un consiglio al mio progettino ti allego una parte dello sketch
if ( curr == 0 ) {
Serial.print(“Fase: “); Serial.println(“DOWN”);
mp3_play(24);
delay(2000);
mp3_play(17);
mp3_play(16);
delay(2000);
for ( int i=0; i<52; i++) {
analogWrite(pin_down, fade[(51-i)]);
analogWrite(pin_sun, 0 );
analogWrite(pin_sunset, 0 );
analogWrite(pin_moon, 0 );
analogWrite(pin_starsA, 0 );
analogWrite(pin_starsB, 0 );
digitalWrite (RELAY_PIN4,HIGH);
digitalWrite (RELAY_PIN3,HIGH);
digitalWrite (RELAY_PIN2,LOW);
delay( timeStep );
}
timeStepOld = timeStep;
}
Ti ringrazio se puoi consigliarmi o se c'è un link in cui posso attingere qualche informazione
Autore
Ciao Giuseppe,
premesso, come anticipato, che non sono in grado di verificare uno sketch senza provarlo e non posso provarlo senza avere il componente che indichi, non capisco cosa volessi accadesse e cosa accade dallo sketch, ci sono modifiche che non conosco e non sono chiare le intenzioni, ad esempio: cosa significa:
mp3_play(24);
delay(2000);
mp3_play(17);
mp3_play(16);
delay(2000);
e perché si trova prima del for ?
Cosa controllano questi relay:
digitalWrite (RELAY_PIN4,HIGH);
digitalWrite (RELAY_PIN3,HIGH);
digitalWrite (RELAY_PIN2,LOW);
e perché sono nel for ?
che ciclo è quello che riporti?
Nel mio sketch la fase collegata al curr == 0 prevede:
analogWrite(pin_moon, fade[i] );
analogWrite(pin_starsA, fade[i] );
analogWrite(pin_starsB, fade[i] );
che nel tuo caso sono stati variati a 0.
Penso sia meglio attendere i miei test o fare altri test in autonomia.
Grazie per la risposta,
il ciclo inizia direttamente con l’alba ,mp3_(24) mp3_(17),mp3(16) sono i suoni del gallo della pecora ,mentre il relè comandano la pompa della cascata il movimento dei re magi ecc.
Attenderò con pazienza i tuoi test.
Autore
Ciao Giuseppe,
allora è corretto che parta prima il 24 e dopo 2 secondi il 17 ed il 16 per altri due secondi .. al termine di questi suoni inizia l’albeggiare.
Ciao Mauro ti scrivo di nuovo. Vorrei far durare questo ciclo 24h ma mi sono accorto che nella funzione int oneminrome[4] = { 4194,22958,4195,28651 }; superando i 32000 millisecondi circa i led rimangono costantemente accesi. Sapresti dirmi il perchè? Affinchè il ciclo duri 24h consigli di usare un modulo rtc?
Grazie in anticipo.
Riccardo
Autore
Ciao Riccardo,
un ciclo così lungo richiede tipi di variabili maggiori, dovrai ridefinire il tipo di “oneminrome” in modo da poter inserire un valore di 24*60*60000 = 86400000 millisecondi.
Io al tuo posto prevede un RTC che oltre ad essere più preciso, semplifica lo sketch, vedi centralina irrigazione o orto, ed in caso di reset o mancanza di alimentazione riprende all’orario e ciclo corretto.
Ok grazie!
ciao, intanto scusa il disturbo e se riapro una discussione gia chiusa, vista la tua ottima conoscenza in materia volevo chiederti dei consigli per quanto riguarda l’inserimento di un rtc ds1307 al progetto in quanto, prendendo spunto dal tuo programma sto costruendo una plafoniera per acquario, per quanto riguarda il “modo” in cui si sviluppa il tuo programma calza a pennello per il mio scopo l’unica pecca i tempi. come sappiamo arduino conta ma non tanto bene per questo vorrei inserire l’rtc per avere un accuratezza migliore. sapresti consigliarmi qualche passaggio o progetto semplice da dove poter prendere sunto e implementare? non mi occorrono tasti per l’inserimento della data o dell’ora la imposto direttamente prima di caricare il programma quindi una cosa molto soft.
grazie per la disponibilità
e complimenti ancora per il tuo blog!!!
Autore
Ciao Alessandro,
nessuna discussione o articolo su questo blog è mai chiusa anzi ogni spunto e idea è ben accetta.
Ti consiglio di leggere, su questo blog, come collegare e un RTC1307 o un DS3231 al circuito e le librerie per leggere l’RTC che leggi.
L’implementazione, una volta compreso come funziona un RTC e come funziona questo progetto sarà molto semplice in quanto non dovrai eseguire alcun tipo di calcolo.
Puoi anche leggere e studiare gli articoli dedicati alle centraline di irrigazione che fanno già uso dell’RTC per attivare dei relay.
Ciao Mauro, piacere Federico,
innanzitutto complimenti per l’ottimo lavoro svolto.
Stavo provando/studiando questa guida, provando a cambiare i tempi di durata dei cicli, con i valori della tabella da te creata e ho notato che soltanto quelli di 1 minuto completano l’intero ciclo. Cioè inserendo ad esempio i valori per far durare il ciclo 2 minuti, esso non va al termine ma si blocca nel ciclo “sun”. Con monitor seriale ho visto che ottengo valori negativi.
Dove sbaglio?
Grazie mille anticipatamente
Autore
Ciao Federico,
quale valore tra:
“Current: ”
“Time current: ”
“Time single step: ”
ti restituisce valori negativi ?
Ciao Mauro, come posso diminuire il tempo di durata del giorno e della notte? Es. ora dura circa 20 secondi, come posso diminuire a 10 secondi per esempio
Grazie
Autore
Ciao Mattia,
lo sketch è tutto parametrico, ti basta leggere e comprendere come funziona per eseguire le modifiche che ti occorrono.
Buongiorno, il mio nome è Antonio, spero di aver interpretato bene il regolamento. Ho inserito lo sketch nel mio Arduino uno senza effettuare modifiche. Anche se il codice sembra corretto, il led moon resta acceso in tutte le fasi, anzi nella fase sun assume la massima luminostità. Ho provato lo sketch su tre schede e il risultato è sempre lo stesso. Nel suo video tutto funziona bene ma nei miei tre arduino uno no. Forse c’è qualche differenza nel codice? Grazie mille in anticipo.
Chiedo scusa se l’ho disturbata inutilmente. Funziona tutto perfettamente. Il led luna restava sempre acceso perché era stato inserito con polarità invertita.
Autore
Ottimo Antonio,
l’importante è essere arrivato all’obiettivo.
Salve Mauro, sono Rodolfo. Ho acquistato due schede Arduino UNO per realizzare il fuoco tremolante e l’alba tramonto per il presepe che sto facendo per mio nipote. Mentre per il fuoco tremolante (ho trovato schema e sketch sul libretto di Lucio Sciamanna) è tutto ok, lo sketch di alba-tramonto che hai pubblicato sul tuo sito pur risultando corretto dal punto di vista della sintassi non funziona. Probabilmente, essendo un neofita di C++ avro sbagliato qualche istruzione. MI potresti cortesemente aiutare indicandomi uno schema e uno sketch che funzioni?
Grazie per l’attenzione
Rodolfo
Autore
Buongiorno Rodolfo,
ho cancellato la tua email dal commento in quanto i bot del web vanno ghiotti di questa info nei blog per poi riempirti di spam, la tua email a me arriva lo stesso dall’apposito campo che hai compilato ma non sarà visibile ai bot automatici.
In merito a quello che mi chiedi: hai letto e seguito tutti gli articoli comprendendo ogni loro parte per poter fare un corretto debug?
Stai usando gli stessi componenti mostrati ?
Che comportamento ottieni?
Cosa leggi sul monitor seriale ?
Lo sketch è così semplice, dal punto di vista del codice, che dubito tu abbia potuto commettere errori, ricercherei la causa del malfunzionamento nella parte di connessione e collegamenti elettronici.
ciao ottimo sketch molto realistico, ho provato e funziona benissimo ma ho provato ad raddoppiare il tempo del ciclo a 2 minuti modificando int. con i valori tella tabella e il ciclo si arresta sulla fase giorno devo modificare altro nello sketch? grazie
Autore
Ciao Angelo,
hai provato a modificare tutti i valori della tabella rispetto ai 2min?
prova ad inserire dei Serial.print nel ciclo in cui si blocca per verificare se ci sia qualche errore di calcolo ?
Geniale ma il problema pratico é utilizzare piu led magari alimentati a 12 v. Quale shield optoisolante utilizzare e come collegarla per corretto funzionamento?
Autore
Ciao Francesco,
esistono molte shield per controllare carichi a 12v luminosi, ad esempio io utilizzo spesso quella di futura elettronica: https://www.mauroalfieri.it/tag/rgb-shield se hai solo 3 carichi da controllore ( puoi usarne 2 con una piccola modifica ai pin se ne hai più di tre ) oppure la Power Driver Shield ( https://www.mauroalfieri.it/elettronica/power-driver-shield-motaggio.html )
Puoi optare anche per singoli mosfet su breakout, ce ne sono davvero tantissimi disponibili online.
Buongiorno Mauro,
sto realizzando anch’io un presepe con Arduino ma volevo chiedere una cosa.
Assieme ai vari led come faccio ad aggiungere un led statico che si accende solo nella fase desiderata senza dissolvenza, acceso/spento. Faccio un esempio. Assieme alla notte vorrei accendere contemporaneamente un nebulizzatore per creare l’effetto nebbia, come posso integrare l’accensione del nebulizzatore nella sola fase della notte?
Grazie in anticipo per la risposta
Viktor
Autore
Ciao Viktor,
puoi aggiungere, nella fase notte, un digitalWrite(pin,HIGH) e spegnerlo nella fase successiva con un LOW
salve, sto avendo problemi implementando il suo sketch. Nella fase moon tutti i led si spengono. Potrebbe essere una incompatibilità tra analogWrite e delay? tenga presente che sto usando i led del KIT Starter di Arduino UNO.
Grazie in anticipo per la risposta.
Pasquale Maiorano
Autore
Ciao Pasquale,
nella fase moon tutti i led si spengono a parte quelli connessi sui pin 6, 9,10 e 11 il primo si spegne lentamente e gli altri tre si accendono proporzionalmente.
Controlla che i led si accendano singolarmente con un semplice sketch di verifica e poi prova un fade su quei pin per verificare che non sia un problema di connessioni o del micro controllore che stai utilizzando.
cortesemente potrei avere lo sketch già compilato con tutte le fasi programmate ad un minuto su roma .
mi scuso per la richiesta ma sono alle prime armi , grazie
Autore
Ciao Tommaso,
lo sketch presente in questa pagina ha già l’impostazione da un minuto su roma e puoi copiarlo nel tuo IDE e trasferirlo su Arduino.
In cosa incontri difficoltà?
Salve. Nel progetto alba tramonto è possibile comandare le uscite con lampade 230 volt.?
Cè uno shema con relativi moc e triac?, essendo poco esperto in programmazione arduino
sarei molto interessato a questo progetto per il mio presepe .
cordiali saluti
Autore
Ciao Severino,
in questi ultimi giorni ho cercato una soluzione in modulo per arduino che potesse permetterti quello che mi chiedi, ma non ho ancora trovato nulla che mi soddisfi.
Dovrà certamente far uso di un Triac e di un optoisolatore per proteggere il circuito a bassa tensione.
Se ne trovi qualcuno interessante possiamo valutarlo insieme.
Ciao Mauro, complimenti per il progetto.
Mi permetto solo di farti notare che le variabili oneminrome e oneminbtlm vadano dichiarate di tipo long perchè il tipo int va da –32768 a 32767 come ben sai e se si cambiano i tempi si va oltre quei valori consentiti dal tipo di variabile.
Autore
Ottimo Ferdinando,
sono contento di leggere il tuo commento e lo lascio a disposizione di tutti coloro che ne potranno certamente trarre vantaggio.
Che ne pensi della versione con unsigned int ?
Ciao Mauro, ho appena copiato il tuo sketch e funziona a meraviglia, volevo chiederti come fare ad inserire delle accensioni/ e spegnimenti nelle varie fasi (esempio accensioni case ad alba e tramonto )
Autore
Ciao Salvatore,
è una cosa davvero interessante da sviluppare, potresti inserire delle funzioni di accensione delle case in corrispondenza della fase di tramonto, magari prima che inizi o subito dopo la fine.
Sto realizzando anche io un presepe quest’anno e farò certamente delle integrazioni a questa centralina, ti invito a continuare a seguire il blog e certamente vedrai delle evoluzioni interessanti.
[…] ci sono grandi differenze con lo sketch mostrato in questo articolo, ecco le uniche […]