Eccoci alla quarta parte per la realizzazione della centralina alba tramonto arduino potenziometro.
La prima evoluzione che puoi aggiungere alla centralina è la possibilità di definire la durata di tutto il ciclo alba-giorno-tramonto-notte (ciclo giornaliero ) in modo che duri da 1 minuto fino a 30 minuti.
In pratica potresti decidere di tenere il ciclo giornaliero della centralina alba tramonto arduino potenziometro fisso sui 30 minuto per riprodurre un effetto realistico, calmo, rilassante del presepe e di accelerare i tempi in occasione della visita di parenti e amici per mostrare quanto sia realistico il tuo presepe senza costringerli ad attendere 30 minuti per osservare l’intero effetto.
Come funzione la centralina alba tramonto arduino potenziometro
Nel primo articolo dedicato alla centralina natalizia hai letto come sono calcolati i tempi di durata di ciascuna fase del ciclo giornaliero.
Hai anche visto come ricavare la seguente tabella ad esempio per Roma il 25 dicembre 2014:
a questo punto non ti resta che impostare questi tempi nella centralina alba tramonto arduino potenziometro.
Prima di passare allo sketch osserva che i valori riportati sono tutti multipli della prima serie calcolata per cui noti che l’alba dura 4194 millisecondi se tutto il ciclo giornaliero dura 1 min e dura 8389 millisecondi se il ciclo dura 2 min infatti (4194 x 2) + 1 = 8389.
Segue che tutti i valori successivi possono essere calcolati con una moltiplicazione.
Collegamenti della centralina alba tramonto arduino
I precedenti collegamenti letti in questo articolo restano validi e devi solo aggiungere un potenziometro:
la scelta del potenziometro è dettata dalla facilità sia dei collegamenti sia dell’utilizzo in quanto puoi dividere la scala del potenziometro in 8 spicchi ciascuno dei quali rappresenta un fattore di motiplicazione da applicare al calcolo del ciclo giornaliero:
ad ogni zona colorata corrisponde un valore temporale in minuti ed un range numerico letto sul potenziometro. Consiglio di stampare e applicare la scala sotto al tuo potenziometro per ottenere la leggenda di regolazione.
Infine i collegamenti del potenziometro visti direttamente sul progetto:
in particolare i due stremi del potenziometro sono collegati al pin +5v e Gnd ed il pin centrale al pin A0 di arduino:
Lo sketch della centralina alba-tramonto
ed eccolo sketch modificato per l’uso con la centralina alba tramonto arduino potenziometro:
/********************************************************** * Centralina Alba-Tramonto per presepe * * Created on 12 december 2014 * Modified on 25 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 #define pin_pot A0 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 ); pinMode( pin_pot, INPUT ); 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]; int pot = analogRead( pin_pot ); if ( 128 <= pot && pot <= 255 ) { timeCurr = (timeCurr * 2 ); } // two min if ( 256 <= pot && pot <= 382 ) { timeCurr = (timeCurr * 5 ); } // five min if ( 383 <= pot && pot <= 510 ) { timeCurr = (timeCurr * 10 ); } // ten min if ( 511 <= pot && pot <= 637 ) { timeCurr = (timeCurr * 15 ); } // fifteen min if ( 638 <= pot && pot <= 765 ) { timeCurr = (timeCurr * 20 ); } // twenty min if ( 766 <= pot && pot <= 892 ) { timeCurr = (timeCurr * 25 ); } // twenty five min if ( 893 <= pot && pot <= 1023 ) { timeCurr = (timeCurr * 30 ); } // thirty min timeStep = (timeCurr/52); //Serial.print("Selettore: "); Serial.println(pot); 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; } }
non ci sono grandi differenze con lo sketch mostrato in questo articolo, ecco le uniche differenze:
linea 019: definisci il pin A0 come pin_pot a cui hai connesso il potenziometro;
linea 042: imposta il pin_pot in modalità INPUT;
int pot = analogRead( pin_pot ); if ( 128 <= pot && pot <= 255 ) { timeCurr = (timeCurr * 2 ); } if ( 256 <= pot && pot <= 382 ) { timeCurr = (timeCurr * 5 ); } if ( 383 <= pot && pot <= 510 ) { timeCurr = (timeCurr * 10 ); } if ( 511 <= pot && pot <= 637 ) { timeCurr = (timeCurr * 15 ); } if ( 638 <= pot && pot <= 765 ) { timeCurr = (timeCurr * 20 ); } if ( 766 <= pot && pot <= 892 ) { timeCurr = (timeCurr * 25 ); } if ( 893 <= pot && pot <= 1023 ) { timeCurr = (timeCurr * 30 ); }
linea 057: leggi il valore del potenziometro e imposta la variabile pot con tale valore, attenzione la lettura del potenziometro avviene solo all’inizio di ogni ciclo di loop() per cui superata questa fase non puoi modificare la durata prima della conclusione di tutto il ciclo giornaliero stesso;
linee 058-064: imposta, per ogni range definito delle tabelle precedenti, un valore di timeCurr moltiplicato il numero di minuti in cui il ciclo vuoi che duri;
infine la linea 065: resta identica a quella che già ho commentato nello sketch che già hai analizzato ed è il cuore del nuovo calcolo dei tempi in quanto divide il timeCurr per 52 e da inizio al ciclo di alba-giorno-tramonto-notte delle linee successive.
Buona realizzazione !!!
32 commenti
Vai al modulo dei commenti
Spettacolare e semplice da realizzare, al prossimo presepe lo utilizzerà! !!….
Ma posso utilizzare anche un arduino mini?
Autore
Ciao Emanuele,
si, il progetto è talmente semplice che puoi.
Ricordati solo che le uscite arduino non riescono a far funzionare led come questi o più potenti per molto tempo senza danneggiarsi, usa un circuito o una shield per adattare il PWm al controllo dei led.
Bellissimo articolo, complimenti.
Posso farti una domanda da perfetto inesperto?
Come posso far funzionare dei led senza danneggiare Arduino? Ho trovato degli shield con relais, ma così perdo le dissolvenze?
Non mi intendo di elettronica, c’è qualcosa che possa facilmente usare per Arduino?
Grazie
Autore
Ciao Fabio,
dipende dai led che stai usando, se sono led tipo faretti a 12v esistono delle shield driver per led, qualcuna l’ho recensita ed usata anche io nel blog.
Autore
Ciao Fabio,
dipende dai led che stai usando, se sono led tipo faretti a 12v esistono delle shield driver per led, qualcuna l’ho recensita ed usata anche io nel blog.
Buongiorno Mauro, ho visto il progetto per la realizzazione della centralina e vorrei realizzarlo, poi con questo upgrade di un potenziometro la gestione dei tempi è ancor più versatile…
Intanto complimenti e grazie per mettere a disposizione le sue competenze. Evviva le piattaforme OPEN SOURCE, ma soprattutto chi come lei permette l’utilizzo di queste, anche a chi non sarebbe in grado di sfruttarle come me…
Vengo alla domanda:
Mi piacerebbe utilizzare 4 uscite digitali, per esempio la 2,4,7,8, per comandare alcune opzioni aggiuntive, in corrispondenza delle fasi alba giorno tramonto e notte. Però non saprei proprio come modificare il programma. L’idea ce l’ho, ma mi mancano le competenze 🙂
Provo a spiegarmi meglio:
-uscita 2 (ci collegherei il suono di un gallo), vorrei fosse ON, per tutto il tempo in cui l’uscita 3 (alba) è attiva, quindi tutto il tempo di salita e discesa del pwm.
-uscita 4 (ci collegherei eventuali movimenti ancora da ideare), vorrei che fosse ON, per tutto il tempo in cui l’uscita 5 (giorno) è al suo massimo, quindi esclusi i tempi di salita e discesa del pwm.
-uscita 7 (ci collegherei l’illuminazione delle case), vorrei che fosse ON, per tutto il tempo in cui l’uscita 6 (tramonto) è attiva, quindi tutto il tempo di salita e discesa del pwm.
-uscita 8 (ci collegherei un neon Wood più l’illuminazione delle case), vorrei che fosse ON, per tutto il tempo in cui l’uscita 9 (notte) è al suo massimo, quindi esclusi i tempi di salita e discesa del pwm.
Mi sono dilungato troppo? Ho fatto una richiesta assurda? Spero proprio di no e spero che mi possa aiutare scrivendomi le righe aggiuntive di programma, che sarebbero necessarie.
Grazie mille
Autore
Ciao Roberto,
il blog è nato proprio con l’idea di rilasciare gli sketch per insegnare a ciascuno, con buona volontà, a fare le modifiche che preferisce.
Ti invito a leggere le mie lezioni nel corso arduino gratuito on-line e la descrizione di questo sketch per imparare a modificare da solo lo sketch.
Se hai bisogno di chiarimenti sugli articoli che leggi, usa pure i commenti.
Se non ci riesci a fare le modifiche che desideri posso eseguire io le modifiche su commissione.
Ciao Mauro, purtroppo sono a ZERO come nozioni di informatica… Avevo anche comprato un libro per imparare a programmare arduino… ma nulla più oltre la teoria… ho provato anche ad utilizzare alcuni programmini free con interfaccia grafica del tipo a blocchi… ma niente da fare!
Non appena le cose si complicano un pò mi areno. L’unica cosa che ho costruito di mio è stato un temporizzatore che accendesse e spegnesse ciclicamente una resistenza per scaldare la birra. LAVORONE! Tra l’altro, ormai, il tempo da dedicarci è sempre meno con un bimbo piccolo che sta screscendo…
Penso che farò prima ad utilizzare lo sketch così com’è, visto che è collaudato e sicuro ed aggiungervi un qualche sistema hardware tipo trigger di smith o flip flop per realizzare quello che vorrei.
Grazie lo stesso per la risposta.
Buona giornata
Roberto
Autore
Ciao Roberto,
ti capisco sopratutto per il tempo .. anche io sono nella tua stessa condizione.
Ciao mauro
complimenti per l’effetto ottenuto!!…era proprio quello che cercavo!!
ora ti chiedo se si riesce ad effettuare il ciclo di alba sole tramonto e luna con un led RGB e le due stelle con led singoli come sono nel tuo progetto.
Ciao e grazie
Autore
Ciao Emanuele,
penso di si, dipende molto da che tipo di effetto vuoi realizzare e come colleghi il led RGB
Ciao Mauro dopo tanto tempo ho ripreso a frequentare il tuo blob e vorrei farti una domanda : perchè quando parte il ciclo si accendono sia la funzione notte che la funzione alba quasi contemporaneamente, dopo il ciclo è normale.
Grazie e complimenti
Autore
Ciao Giuseppe,
sono contento che tu abbia ripreso i tuoi progetti con arduino.
Se leggi gli articoli correlati ho descritto in modo dettagliato il motivo di quello che mi chiedi, è un esercizio che ho voluto fare per rendere l’effetto più realistico possibile.
Spiegarlo in poche righe è riduttivo.
Grazie
Ciao Mauro oggi ho iniziato ad assemlblare il circuito della centralina utilizzando delle strisce led di colori secondo le fasi .Ho utilizzato dei mosfet IRFZ44N , ho calcolato la resistenza da mettere tra il drail e le strisce di led (80 ohm) mentre tra il gate e il pin di arduino una resistenza di 2,2 kohm.
Non funziona restano sempre accesi mentre il monitor seriale mi dice che le fasi si susseguono.
Ho sbagliato il tipo di mosfet ? Ho provato a togliere le resistenze ma non succede niente,cioè i led restano accesi.
Aiuto!!!!!!!!!!! se non finisco il circuito non posso iniziare la scenografia del presepe.
Grazie
Autore
Ciao Giuseppe,
non ho mai utilizzato il mosfet IRFZ44N ( Channel N ) ed ho fatto qualche ricerca sul Web trovando circuiti realizzati da appassionati che usano anche una resistenza di pull-down sul drain da 10K.
Cerca su internet “mosfet IRFZ44N arduino led” e troverai tra le immagini gli schemi di cui scrivo.
dimenticavo di dirti che l’assorbimento totale di tutte le strisce led è di 3 A.Naturalmente non restano accesi contemporaneamente al massimo ogni fase assorbe circa 0,80 A.
Ciao Giuseppe
Autore
Ciao Giuseppe,
il tipo di mosfet deve essere dimensionato per gestire tali correnti.
Il resto deve essere svolto dal circuito di alimentazione.
grazie per il tuo interessamento
Salve vorrei sapere come far funzionare il seguente sistema con lampade da 220v in modo tale da illuminare un presepe di 2metri x 60cm di profondità.
Le stelle saranno una serie di led o lucine di albero mentre il resto tutte lampadine
Grazie
Autore
Ciao Marco,
non ho esperienza con carichi a 220v tuttavia azzardo che ti occorreranno dei TRIAC in grado di indirizzare lampade a 200v.
Prova a cercare uno schema sul web relativo a questo tipo di componenti.
Ciao Mauro, ho letto e realizzato molti dei tuoi progetti adattandoli alle mie esigenze…
prima di tutto ti faccio i miei complimenti sie per le cose che riesci a creare sia per la semplicità delle spiegazioni.
ora veniamo al mio problema, vorrei creare una centralina alba tramonto con la possibilità di accensione una lampada a luminescenza (che simula l’alba, il tramonto e la luce lunare) e un neon (che simula il sole);
tutto questo però dovrebbe seguire il ciclo naturale del tempo; mi daresti una mano?
Autore
Ciao Lino, dal punto di vista del codice non dovrebbe differire molto dal progetto che ho realizzato, le maggiori differenze le avrai sulla parte elettronica per la quale devi studiare bene i componenti che possiedi e trovare circuiti adatti al tuo tipo di hardware.
Io non possedendolo non saprei come aiutarti.
Cerca driver o circuiti adatti al tuo scopo con controllo PWM.
ciao:
Sono interessato a rendere il vostro circuito a mio presepe. ma non riesco a trovare il numero di ohm deve essere il potenziometro. Potrebbe essere così gentile da posare che fuori. un saluto e vi ringrazio molto.
Autore
Ciao Alberto,
uso un 10Kohm.
grazie mille
ciao, io ho una strip led e vorriei creare alba e tramonto per creare luce in un terrario come posso fare???
non ho nessuna esperienza 🙁
Autore
Ciao Ruby,
sul blog trovi tutto quello che ti serve a partire dal corso base arduino gratuito on-line.
Ciò che non posso fornirti è la voglia di imparare e scoprire cose nuove, devi mettercela tu se vuoi realizzare il progetto.
Cmq l’idea è interessante e potrei dedicargli qualche articolo nel periodo natalizio 🙂
Buonasera/Ciao, sto’ seguendo con interesse i tuoi progetti e ti ammiro per la tua “semplicità” nel farmi capire cose inerenti Arduino che fino a poco tempo fa’ trovavo un po’ complicate.
Premetto che sono alle primissime armi con Arduino;
Ho realizzato la prima centralina alba-tramonto (adesso voglio implementarla col potenziometro – utilissimo) e fin qua nessun problema.
La mia idea è di applicarla ad un presepe con piu’ serie di luci che ho gia’ (incandescenza 220v) … si pero’ per Natale 2021 …..
Cercando informazioni, ho trovato molte informazioni su triac, optotriac, ecc.. e fin qua’ ci siamo.
Il problema è cominciato quando mi sono imbattuto nello ZeroCrossing;
Ok, mi sono informato ed ho capito (credo) cos’è, cosa serve e che benefici porta, ma mi chiedo in questo progetto specifico è utile inserire tale rilevazione e come?
Sul lato 220v voglio orientarmi su moduli gia’ fatti per tale scopo con ingressi PWM 3,3-5v, optoisolati, triac con dissipatore e con la rilevazione ZeroCrossing da portare su un piedino certo di Arduino (li conoscerai sicuramente).
Spero tu possa aiutarmi a risolvere i miei dubbi ed eventualmente di quale parti di codice integrare.
Grazie
Cristian
Autore
Ciao Cristian,
conoscevo la funzionalità dello ZeroCrossing ma ignoro i circuiti a cui ti riferisci per connessioni con Arduino.
Al fine del progetto, penso che, i benefici introdotti siano limitati, tuttavia, scegliere tra TRIAC optoisolati con e senza ZeroCrossing, se non incide sul budget complessivo, sia da considerare una buona soluzione scegliere i secondi.
Ciao Mauro ho visto il tuo progetto e lo sto realizzando , volevo chiederti i valori ed il tipo di potenziometro da collegare ,grazie per la risposta
Autore
Ciao Salvatore,
puoi usare un comune potenziometro da 10K, al massimo dovrai variare gli intervalli di tempo leggendo i valori del tuo potenziometro.