Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al...

23
(http://www.mauroalfieri.it) Programmare con Arduino – led in dissolvenza By Mauro Alfieri (http://www.mauroalfieri.it/author/mauro) in Elettronica (http://www.mauroalfieri.it/category/elettronica), Informatica (http://www.mauroalfieri.it/category/informatica) 8 luglio 2011 In questo secondo esempio ho provato ed analizzato uno degli sketch forniti ad esempio dall’IDE Arduino: Fade. Per trovare questo esempio basta andare nel menu File -> Examples -> Basics -> Fade. Quello che troverai è il seguente file: Come al solito io analizzo riga per riga il codice per comprendere assieme come sia composto questo codice, iniziamo: linee 1-9: commento multimilea, indica lo scopo del programma e definisce sempre in ultima riga la possibilità di utilizzare liberamente questo codice. 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 /* Fade This example shows how to fade an LED on pin 9 using the analogWrite() function. This example code is in the public domain. */ int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT); } void loop() { // set the brightness of pin 9: analogWrite(9, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30); }

Transcript of Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al...

Page 1: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

(http://www.mauroalfieri.it)

Programmare con Arduino – led in dissolvenzaBy Mauro Alfieri (http://www.mauroalfieri.it/author/mauro) in Elettronica(http://www.mauroalfieri.it/category/elettronica), Informatica(http://www.mauroalfieri.it/category/informatica)8 luglio 2011

In questo secondo esempio ho provato ed analizzato uno degli sketch forniti ad esempio dall’IDEArduino: Fade. Per trovare questo esempio basta andare nel menu File -> Examples -> Basics -> Fade.

Quello che troverai è il seguente file:

Come al solito io analizzo riga per riga il codice per comprendere assieme come sia compostoquesto codice, iniziamo:

linee 1-9: commento multimilea, indica lo scopo del programma e definisce sempre in ultima riga lapossibilità di utilizzare liberamente questo codice.

01020304050607080910111213141516171819202122232425262728293031

/* Fade This example shows how to fade an LED on pin 9 using the analogWrite() function. This example code is in the public domain. */int brightness = 0; // how bright the LED isint fadeAmount = 5; // how many points to fade the LED by void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT);} void loop() { // set the brightness of pin 9: analogWrite(9, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30);}

Page 2: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

linea 10: imposta una variabile di tipo intero ( integer ) in cui memorizzerà il valore di luminositàraggiunto del led nel corso del ciclo di loop, la definizione di una variabile di questo tipo (integer)dovrebbe esserti chiaro, utilizza int nome_variabile = valore;

linea 11: imposta una variabile di tipo intero ( integer ) preimpostata a 5 che rappresental’incremento di luminosità che il led raggiungerà ad ogli ciclo ( loop )

linee 13-16: definizione della funzione setup() in cui alla linea 14 trovi il commento alla lineasuccessiva la 15, in cui imposta il pin 9 come pin di tipo OUTPUT: pinMode(9, OUTPUT); la linea 16chiude la funzione setup().

linea 18: definizione della funzione loop() che sarà terminata alla linea 31.

linea 20: utilizzando il comando analogWrite imposta il duty-cycle 0 al piedino 9, il duty-cycle è 0 inquanto brightness non è stato ancora variato dalla sua inizializzazione alla linea 11.

linea 23: incrementa il valore della variabile brightness del valore di fadeAmount ad ogni ciclo lavariabile brightness si incrementa di un valore 5 fino a raggiungere il valore 255, come vedrai allalinea 26.

linea 26: esegue un doppio test sulla variabile brightness confrontandola sia con il valore 0 che conil valore massimo che possiamo passare al comando analogWrite: 255; il confronto in Arduino lopuoi effettuare con il comando if e utilizzando l’operatore OR la cui rappresentazione nella sintassidel linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto allalinea successiva.

linea 27: inverte il segno della variabile fadeAmount questo trucco comporta che ai successivi cicliquando eseguirà i comendi alla linea 23: brightness = brightness + fadeAmount; in raltà esegueuna operazione del tipo brightness = brightness + ( -fadeAmount ); decrementando invece diincrementare il valore di luminosità (brightness) al raggiungimento della soglia 0 il valore difadeAmount viene nuovamente invertito.

linea 30: introduce un tempo di attesa di 30 millisecondi prima di ripetere il ciclo.

Il circuito che ho realizzato è molto semplice, ho collegato il terminale positivo di un led al pin 9 dellascheda Arduino, ed il terminale negativo del led alla massa ( GND ) della scheda Arduinointerponendo una resistenza da 470 ohm per proteggere il led.

Il risultato che otterrai è il seguente:

Arduino - Tutorial Fade

Page 3: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Cortesemente, prima di inserire i commenti leggi il regolamento(http://www.mauroalfieri.it/regolamento.html)

You may also like:

Attiny85 mini PIRsensor - Mauro AlfieriElettronica DomoticaRobotica Elettronica(http://www.mauroalfiemini-pir-sensor.html)

macchine da cucireArchives(http://www.mauroalfieda-cucire/nggallery/thumb

NodeMCU Lua Wifi -Mauro Alfieri(http://www.mauroalfielua-wifi.html)

Raspberry RAID5mdadm - MauroAlfieri Raspberry PiLinux(https://www.mauroalfiraid5-mdadm.html)

Tinkercad LCD FirstTest(http://www.mauroalfielcd-first-test.html)

The Tactigon arduinoide(http://www.mauroalfietactigon-arduino-ide.html)

Sound of Wander2018 - Mauro AlfieriElettronica DomoticaRobotica Senzacategoria(http://www.mauroalfiecategoria/sound-of-wander-2018.html)

DHT11 arduinosensore temperaturaumidità - MauroAlfieri Domotica(http://www.mauroalfiearduino.html)

analogWrite (http://www.mauroalfieri.it/tag/analogwrite), arduino(http://www.mauroalfieri.it/tag/arduino), arduino uno (http://www.mauroalfieri.it/tag/arduino-uno), dissolvenza led (http://www.mauroalfieri.it/tag/dissolvenza-led), elettronica arduino(http://www.mauroalfieri.it/tag/elettronica-arduino), led (http://www.mauroalfieri.it/tag/led),pin (http://www.mauroalfieri.it/tag/pin), pinMode (http://www.mauroalfieri.it/tag/pinmode),programmare arduino (http://www.mauroalfieri.it/tag/programmare-arduino), tutorial(http://www.mauroalfieri.it/tag/tutorial), tutorial arduino(http://www.mauroalfieri.it/tag/tutorial-arduino)

(http://www.mauroalfieri.it/author/mauro)

Page 4: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Permanent link to this article: http://www.mauroalfieri.it/informatica/programmare-con-arduino-led-in-dissolvenza.html

76 comments

Skip to comment form

Mauro Alfieri (mailto:[email protected])

Maurizio (http://www.youtube.com/user/Videoxon) on 26 giugno 2012

quanti led in uscita si possono comandare con arduino , sarebbe interessante questaapplicazione per comandare una serie di led multicolori per l’albero di natale

Mauro Alfieri (http://www.mauroalfieri.it) on 26 giugno 2012 Author

Ciao Maurizio, arduino in uscita ha 14 pin di cui i primi 2 è sconsigliato utilizzarli, se guardi ildatasheet sul sito ufficiale troverai tutte le sue caratteristiche. Nel blog trovi già quello che chiedi cerca “gochi di luce” è un progetto che hopresentato in 9 giochi differenti lo scorso natale

Buon divertimento.

jcamma on 14 dicembre 2012

Ciao e complimentoni per il blog è davvero istruttivo!!

Ho realizzato una piccola variazione del “fade”. E’ molto semplice non fa altro cheaccendere e spegnere alcuni pin PWM in sequenza ma col il “fade” e volevo condividerlocon tutti.

Credo si possa usare per le luci di natale!!

ENJOY!

/* In questo programma la luce ( la tensione di uscita del PWM ) varia in maniera fluida, fissatoil fadeamount, da 0 a 255 e da 255 a 0 senza scatti!! Questo viene ripetuto per tutte le uscite PWM con una sequenza di pin in ordine crescenteed un numero di cicli per pin definito dalla variabile f */

//ENJOY!

Page 5: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

int brightness = 0; // dichiarazione della luminosità int fadeAmount = 50; // passo della luminosità int ghost = 0; // variabile fantasma che serve per evitare che sul led ci sia uno “scatto” diluminosità in su o in giù quando i valori superano 255 o diventano inferiori di 0 int i = 0; // questa variabile ci servirà per passare da un pin ad un altro; in pratica è il numerodel pin int f = 0; // gestione dei cicli di illuminazione/deluminazione

void setup() { pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); }

void loop() { while ( i = 5 ) { i–; if ( i==5 || i== 6 || i==9 ) { illuminare (); } } i=0; }

void illuminare() {f=f+1; while (f < 2) { analogWrite(i, brightness); ghost = ghost + fadeAmount; if (ghost = 255) { ghost = 255; fadeAmount = – fadeAmount; } brightness = ghost; if (ghost==0) { f=f+1; } } f=0; }

Mauro Alfieri (http://www.mauroalfieri.it) on 17 dicembre 2012 Author

Page 6: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Grazie per la condivisione. Se realizzi un video e delle foto al progetto pubblichiamo un articolo per tutti gliappassionati.

Mauro

jcamma on 17 dicembre 2012

Ciao a tutti per ora ho simulato il funzionamento solo con il simulatore diarduino appena mi arriva il gioiellino ( spero prima di natale! ) collegheròdei led e farò video e foto !

Enjoy!

daniele on 31 dicembre 2012

buona sera. volevo un consiglio, mi stò cimentando con arduino, io volevo creare uno sketch dove led1 parte da 0 e sale a 255 ma quando led 1 arriva a 120mi parta led2 da 0 e mi arriva a 255 tutto in disolvenza +1. io ho provato varie formule ma lamia esperieza non è tale. volevo se possibile una formula cosi io me la studio e vedo dove sbaglio. grazie in anticipo..

Mauro Alfieri (http://www.mauroalfieri.it) on 1 gennaio 2013 Author

Ciao Daniele, un anno fa esatto ho pubblicato una serie di articoli sui giochi di luce con i led inoccasione delle feste natalizie. Prova a leggere quegli articoli e troverai sicuramente quello che ti occorre.

Mauro

Paolo on 24 marzo 2013

Ciao, ottimo lavoro! Approfitto per un paio di segnalazioni:

– la 5 e la 8 sono identiche… si potrebbe sostituire una delle due con qualcosa di utile perchi ha conoscenze di programmazione ma sta iniziando con l’elettronica, qualcosa anchesemplice, come l’uso di transistor e mosfet per pilotare dei carichi tanto per citare qualcosadi indubbiamente utile

– sarebbe molto utile avere un file pdf per consultarlo ovunque, si potrebbe fare?

Page 7: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mauro Alfieri (http://www.mauroalfieri.it) on 24 marzo 2013 Author

Ciao Paolo, ottima segnalazione, non me ne sono accorto, grazie!!! Nessuno me lo ha mai segnato

Puoi leggere tutti gli articoli che vuoi nel blog anche oltre il corso, troverai altre cosemolto interessanti.

Per il PDF sto realizzando un libro elettronico che penso sarà in vendita su iTunes,te lo segnalerò appena disponibile.

Mauro

Massimo on 23 ottobre 2013

Ciao Mauro, dopo aver letto questo capitolo sono entrato in confusione, e mi spiego: Nel programma “Lampeggio” si è definita una variabile di tipo intero assegnata ad un pin (intledPin = 13;) e quindi “int nome_variabile = n° pin”. Nel programma “Fade” si definisce una variabile di tipo intero a cui si assegna un valore (intbrightness = 0;) come del resto la successiva (int fadeAmount = 5;) e quindi “intnome_variabile = valore”. La mia domanda è: come fa il programma “Fade” a capire che il numero che segue l’ugualedi “int brightness” e di “int fadeAmount” è un valore e non un pin? La stessa domanda sipone al contrario per il “Lampeggio”dove il numero che segue l’uguale di “int ledPin” siriferisce ad un pin e non ad un valore? Non mi mandare a quel paese, ma sono proprio agli inizi e mano mano che avanzo vorreidissipare ogni dubbio che mi si presenta. Massimo

Mauro Alfieri (http://www.mauroalfieri.it) on 24 ottobre 2013 Author

Ciao Massimo, il tuo dubbio è lecito e corretto. Probabilmente sono i primi programmi che leggi e non provieni da una formazionetecnica ed ecco perchè ti sembra strano.

Per semplificarti l’apprendimento delle logiche di programmazione, un mioprofessore, mi disse: “ricordati sempre che il computer è stupido al massimoconosce 2 numeri 0 ed 1” Premesso questo comprendi che il programma non sa distinguere in base alvalore, sarai tu che utilizzando una variabile in un comando o in un’altro insegneraial programma come usarla, lui resta stupido rispetto al valore che contiene unavariabile.

Page 8: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Per tornare all’esempio che citi, quando scrivo int variabile = valore lo sketch noninterpreta il valore ma si limita ad assegnare valore a variabile; quando scrivopinMode( variabile,OUTPUT ) insegni allo sketch di usare il valore contenuto nellavariabile nel comando pinMode. Se ad esempio scrivi int variabile=300; e poi pinMode( variabile,OUTPUT ) losketch non funziona in quanto il pin 300 non esiste.

Spero di essere stato chiaro.

Mauro

Massimo on 24 ottobre 2013

Chiarissimo, grazie e “tiremm innanz” nella speranza di disturbarti menopossibile. Massimo

Mauro Alfieri (http://www.mauroalfieri.it) on 25 ottobre2013

Author

Ciao Massimo, se il tuo “disturbo” riguarda dubbi leciti e curiosità che tiimpediscono di proseguire nel tuo progetto sono sempre bendisposto a darti risposta.

Hai valutato l’idea di partecipare ad uno dei miei corsi in aula?

Mauro

Massimo on 27 ottobre 2013

Ti ringrazio sia per la sollecitudine delle tue risposte cheper la disponibilità. Ovviamente i miei “disturbi”riguarderanno i dubbi e le curiosità che mano a manoaffioreranno durante la lettura di questo corso.Parteciperei più che volentieri ad uno dei tuoi corsi, macredo che la distanza tra la tua aula e la mia residenza(Roma) sia un po’ eccessiva, e comunque grazie. Massimo

Mauro Alfieri (http://www.mauroalfieri.it) on 28ottobre 2013

Author

Ciao Massimo, collaboro con la struttura robot-domestici.it chepromuove corsi arduino a Roma, se sei interessato puoi

Page 9: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

contattare loro.

Mauro

Bruno on 8 novembre 2013

scusami mauro io seguo tutto il procedimento che tu indichi ma non si accende il led, noniesco a capire se è la piastra sperimentale che non va ma nel kit che io ho acquistato c’erauna bustina con questa all’interno, insieme ad una piastra di metallo ed ha sotto un adesivo,mi aiuti? grazie in anticipo

Mauro Alfieri (http://www.mauroalfieri.it) on 11 novembre 2013 Author

Ciao Bruno, puoi provare a collegare il led direttamente ad Arduino mediante una resistenza da220 o 330 ohm ( dipende da quel hai inel tuo kit ) e verificare che funzioni senzautilizzare la basetta.

Mauro

Fabrizio on 21 febbraio 2014

Ciao Mauro,

Prima di tutto complimenti per i tuoi esperimenti!

Sono entrato nel mondo di Arduino da poche settimane e devo dire che mi affascina sempredi più! Ti scrivo perche ho un problema che non riesco proprio a risolvere.

In pratica è da un po di tempo che provo a fare il led in dissolvenza come quello del tuofilmato.

Ho provato a fare il listato per conto mio ma non sono mai riuscito a farlo funzionare, alloraho provato a copiare il tuo ma alla fine mi da lo stesso problema:

In pratica il led non si accende in dissolvenza ma tutto subito, arriva fino al valore 150spento ma come imposto 151 si accende!

Ho provato anche a cambiare sia Arduino che il led ma niente da fare!

Come posso fare?

Grazie e complimenti ancora!

Page 10: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mauro Alfieri (http://www.mauroalfieri.it) on 22 febbraio 2014 Author

Ciao Fabrizio, hai collegato il led ad un pin PWM? Se non lo hai fatto non staiusand Arduino nel modo corretto. Oltre al video e a fare copia e incolla dello sketch prova a seguire anche lo schemadei collegamenti e leggere tutto l’articolo c’é scritto tutto.

Ti consiglio anche di leggere, attentamente, almeno le prime lezioni del mio corsoonline gratuito arduino se desideri conoscere ed usare questa scheda in modocorretto.

Mauro

Mario on 7 marzo 2014

Ciao Mauro volevo sapere se è possibile realizzare l’accensione graduale di lampade alneon tramite arduine. Grazie e complimenti

Mauro Alfieri (http://www.mauroalfieri.it) on 7 marzo 2014 Author

Ciao Mario, che io sappia no, per natura stessa delle lampade al neon.

Mario on 7 marzo 2014

Grazie mille per la risposta immediata. Ti spiego io ho un’acquario e mi piacerebberiprodurre l’effetto alba-tramonto e leggendo qua e la sul web ho letto che è possibile“dimmerare”le lampade fluorescenti ( neon) con appositi ballast (reattori elettronici) dettidimmerabili essi sono differenti da quelli normali hanno due pin in piu appunto perl’accensione graduale 0-10v pero ce bisogno di un controller che gestisca il tutto e pensavosi potesse fare con arduino Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 7 marzo 2014 Author

Ciao Mario, qua dove? Non mi sembra di aver mai scritto di neon dimmerabili. Se mi chiarisci dove l’ho scritto posso verificare a cosa mi riferissi e magari aiutarti.

Page 11: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mario on 7 marzo 2014

No Mauro sicuramente mi sono espresso male non li ho visti sul tuo sito te ne linko uno acaso cosi se ti va gli dai un’occhiata http://alfonsomezzullo.altervista.org/Alba%20tramonto%20con%20luce%20lunare.htm(http://alfonsomezzullo.altervista.org/Alba%20tramonto%20con%20luce%20lunare.htm) grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 8 marzo 2014 Author

Ciao. Mario ho letto l’articolo del link e ti consiglio di chiedere all’autore del circuitoinfo sui ballast, ignoro cosa siano, e non sono certo che possano essere gestiti daarduino che lavora a 0-5v e non 10v come descritto.

Mario on 7 marzo 2014

Nel frattempo che aspetto una tua preziosa risposta ho trovato anche questo http://forum.arduino.cc/index.php?PHPSESSID=efc3ff825e9bc6c2a9011183058af8ab&topic=34474.msg251213#msg251213(http://forum.arduino.cc/index.php?PHPSESSID=efc3ff825e9bc6c2a9011183058af8ab&topic=34474.msg251213#msg251213) qui si parla esplicitamente di controllo tramite arduino di ballast dimmerabili Ciao

Mario on 8 marzo 2014

Ok grazie mille per la disponibilta a presto

Paola on 4 settembre 2014

Ciao Mauro, scusa ma non riesco a capire il valore delle resistenze che ho, c’è un modo perscoprirlo?? grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 5 settembre 2014 Author

Page 12: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Ciao Paola, si, le resistenze sono catalogate per colori, ogni colore indica un numero e laposizione indica il fattore di moltiplicazione. Se cerchi su wikipedia c’è scritto tutto il procedimento per individuarle. Esistono anche delle App per riconoscerle.

Tu che colori hai?

Eliseo on 3 gennaio 2015

Salve, volevo un’informazione sulla resistenza da utilizzare. Leggendo nel playground di arduino ho visto che per i led bastano resistenze con valori chevadano dai 75 ai 165 ohm in base al colore del led. Come mai lei ha utilizzato una resistenza da 470 ohm? Non bastava più piccola? Quali sono i vantaggi di utilizzare una resistenza da 470 al posto di una da 100 o 200?

Mauro Alfieri (http://www.mauroalfieri.it) on 4 gennaio 2015 Author

Ciao Eliseo, la resistenza la devi calcolare con la legge di ohm, trovi numerosi articoli in rete. Ho usato una resistenza da 470ohm in questo esperimento perché già a miadisposizione nel collegamento con il led e non ho voluto cambiarla. Più alta usi la resistenza e minore apporto di tensione e corrente avrai al led.

Eliseo on 4 gennaio 2015

Grazie mille per la chiarezza e la velocità di risposta.

Marco on 17 gennaio 2015

Salve, sto iniziando ora sia con arduino che a leggere questo blog. E non mi è chiara una cosa (elettronica non del programma).. Noi con questo programma stiamo mandando al pin pwm valori che incrementano di 5 fino a255 e decrementano fino a 0 in continuazione. A questo punto avremo che il pin passa da un impulso tutto 0 a un impulso tutto 1gradatamente facendo tutti i passaggi intermedi, come si vede nella foto del tuo articoloprecedente. Ma la tensione del picco è sempre 5V giusto? Quindi come fa a variare la luminosità del led? (cioè diciamo come fa a essere mezzoacceso?)

Page 13: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mauro Alfieri (http://www.mauroalfieri.it) on 19 gennaio 2015 Author

Ciao Marco, si tratta di un impulso PWM, ti invito a leggere come funziona un segnale PWM ecapirai come sia possibile.

Marco on 19 gennaio 2015

Ho letto come funziona il segnale PWM, quello che non capivo è come lacambiando la forma dell’onda quadra generata cambi la tensione al led(quindi la luminosità). Credo però, se ora ho capito bene, che ai pin PWMsia collegato un circuito RC direttamente su arduino…

Mauro Alfieri (http://www.mauroalfieri.it) on 19 gennaio2015

Author

Ciao Marco, non ho letto da nessuna parte di un circuito RC presente nelmicrocontrollore o nel circuito esterno, se trovi qualche linkattendibile che ne parla mi farebbe piacere leggerlo.

Marco on 21 gennaio 2015

Credo sia l’unico modo per avere una tensione in uscitadal segnale PWM diversa da 5V, perchè se non ci fossesarebbe comunque 5V esatti che dopo un tot di temporisaltano a 0, poi di nuovo a 5 ecc in base alla duratadel duty alto. Perchè invece la tensione sia tra 0 e 5 in base allapercentuale high credo che un RC prima dell’uscita delpin sia d’obbligo. Questa immagine penso sia la più chiarahttp://upload.wikimedia.org/wikipedia/it/f/f6/RC_onda_quadra.PNG(http://upload.wikimedia.org/wikipedia/it/f/f6/RC_onda_quadra.PNG)Più è corta la durata dell’1 meno il condensatore hatempo per caricarsi, quindi restituisce una tensioneinferiore a 5V proporzionata.

Almeno se ho capito bene, sono un po’ arrugginitoessendo trascorsi un po’ di anni dalle scuole superiori..

Page 14: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mauro Alfieri (http://www.mauroalfieri.it) on 21gennaio 2015

Author

Ciao Marco, comprendo quello che scrivi tuttavia ti invito a fare untest con arduino ed un led controllato in PWM e noterail’effetto dissolvenza sul led.

Marco on 25 gennaio 2015

Si si, è ovviamente la prima cosa che ho fatto! Per questo penso del circuito RC anche se nei datasheet della scheda non lo vedo… Mistero…

Paolo on 27 novembre 2015

Seguo questo sito del bravissimo Mauro Alfieri per vedere se anch’io imparo aprogrammare Arduino, in quanto a programmazione sono proprio scarso, Se vuoi, Marco, forse posso risolverti il dubbio elettronico a cui hai fatto riferimentonei tuoi post.

Sui pin analogici è presente un segnale ad onda quadra con frequenza di 488 Hz (questo sui pin 3-9-10-11) e di 976 Hz sui pin 5 e 6. queste sono frequenze didefault e possono essere cambiate agendo sui registri interni ( ma questo non lo sofare). Pertanto sul pin 9 ci sarà questo segnale digitale con valore 0 oppure 5 V ( non cisono valori intermedi ) con frequenza di 488 Hz, perciò il periodo sarà poco più di 2ms . Arduino può dividere questi 2 ms in 256 parti a richiesta con l’ istruzione“analogWrite” . allora, possiamo dire che Arduino riesce a gestire circa 8 micro secondi ( 2 ms /256),

Se dai un valore ad analoWrite, ( per esempio 85 ) significa che prendi 85 parti di 8us, cioè circa 0,68 ms , ( circa un terzo del segnale periodico a 488 Hz) e lo fa valere 5 V, mentre i restanti2/3 li fa valere 0 V Pertanto in un periodo del segnale a 488 Hz, per 0.68 ms c’ è una tensione di 5 V enei rimanenti 1,36 ms, non c’è tensione. Quando il segnale avrà fatto 488 cicli, sarà passato un secondo, ma in questosecondo il led per 2/3 non avrà ricevuto tensione e per 1/3 invece si, Ma anchedopo un ora sarà lo stesso. L’occhio vedrà una media o percentuale di luminosità, in quanto non puòdiscriminare 0,68 ms di luminosità e

Page 15: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

1.36 ms di oscurità. Questo vale anche per i pin 5 e 6 che anche se la frequenza del segnale è il doppiosu quei pin , 976 Hz invece di 488 e perciò il periodo di circa 1 ms, ma questo 1 mssarà sempre diviso per 256, perciò Arduino gestisce circa 4 micro secondi, pertantoperiodi più brevi ( la metà ), ma dopo 1 secondo si saranno succeduti 976 cicli ( ildoppio di quelli visti prima ) pertanto il tempo totale di accensione e spengimentoled, dopo 1 secondo rimane invariato,( ma anche dopo 8 us si sarà instaurata unaparità fra le due frequenze che gestiscono il pwm)

Spero ti sia stato di aiuto e di aiuto anche ad altri fan di Mauro Alfieri che seguocon molto piacere per imparare a fare qualche sketch interessante, in quanto alleprime armi con Arduino Congratulazioni per il sito Mario

Paolo

Mauro Alfieri (http://www.mauroalfieri.it) on 30 novembre 2015 Author

Ciao Paolo, spiegazione esemplare a me è servita a colmare alcune lacunesull’argomento come il gap tra periodo e frequenza su cui non mi ero maisoffermato con accuratezza come hai descritto tu. Se vuoi cambiare i TIMER trovi un mio articolo dedicato a questapossibilità. Sottolineo che si tratta di una operazione delicata e vaeseguita solo se sei davvero in una situazione non risolvibile in altromodo.

Gabriele on 10 febbraio 2015

Cmq devo dare atto a tutti colo che considerano questo sito un ottimo tutorial, concordo apieno. Bravo Mauro.

Mauro Alfieri (http://www.mauroalfieri.it) on 10 febbraio 2015 Author

Grazie Gabriele

Alessio on 24 aprile 2015

Salve, Vorrei sapere, se possibile, le modifiche che dovrei apportare al programma se i led fossero8 e la dissolvenza fosse in fase di accensione e spegnimento, non continua come nel suo

Page 16: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

progetto. Vorrei, tramite un tasto, accendere questi led in dissolvenza fino alla luminositàmassima e, di conseguenza, sempre tramite lo stesso tasto, farli spegnere sempre indissolvenza.

Mauro Alfieri (http://www.mauroalfieri.it) on 24 aprile 2015 Author

Ciao Alessio, se i led devono accendersi fino alla massima luminosità tutti insieme puoi collegarlial medesimo pin pwm arduino con apposito driver di controllo per evitare che lasomma delle correnti in gioco bruci il pin di arduino. Se vuoi accenderli e spegnerli con il medesimo pulsante puoi leggere i miei articolisul corso base on-line gratuito e tra i primi esempi è descritto come accendere espegnere un led con il medesimo pulsante.

andrea on 6 agosto 2015

ciao volevo sapere come aumentare il tempo del ciclo !!!!!!!!!! grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 7 agosto 2015 Author

Ciao Andrea, non ricordo se ho risposto a te in un altro articolo od ad un altro appassionato. Ho scritto degli articoli a corredo di questo che hai commentato in cui ho indicatocon precisione come ho calcolato i tempi e come inserirli nello sketch per far durareciascun ciclo il tempo che preferisci. Li hai già letti?

Stefano on 14 agosto 2015

Salve, complimenti per il tutorial e per le innumerevoli spiegazioni, ho provato questoesempio e ad esso volevo aggiungere una fotoresistenza per far accendere le luci di seracon una dissolvenza perchè notavo ca cn la semplice fotoresistenza i led si accendono dicolpo e/o mi producono uno sfarfallio ho provato ad aggiungere la fotoresistenza a questosketch ma il risultato è un errore nei riguardi di else Grazie dell’attenzione e mi scuso per il (banale) disturbo

[[ codice rimosso in automatico ]]

Mauro Alfieri (http://www.mauroalfieri.it) on 17 agosto 2015 Author

Page 17: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Ciao Stefano, come hai letto in fondo ad ogni articolo è vietato incollare codice nei commenti, tichiedo di rispettare le poche regole del blog. In merito al tuo quesito non ho compreso cosa vorresti realizzare e/o correggeredel mio sketch che non usa una fotoresistenza, forse hai letto qualche altro articolodel blog con le resistenze e la dissolvenza dei led.

mario on 15 novembre 2015

Ciao Mauro, complimenti per il tuo corso online, è fatto benissimo; sono riuscito a scrivere qualche sketchsolo leggendo il tuo corso e avendo qualche base di programmazione dei tempi dellascuola…10-15 anni fa. io sono novizio con arduino. ti spiego cosa voglio fare e quale è il mio dubbio. Ho intenzione di dotare il presepe con arduino per pilotare la cascata e vari tipi di lucimettendo anche una fotoresistenza per far accendere le luci quando diventa buio. Laprogrammazione non è un problema, parte del codice già l’ho scritto. Il problema è questo: voglio mettere 3 serie di led RGB (circa 10 per ogni serie per un totaledi 30 led) che fanno la dissolvenza cambiando colore ma di sicuro assorbono troppacorrente e la scheda non ce la fa a reggere il carico. Se piloto 9 relè, 3 per ogni serie di led,posso accenderli tutti ma posso mandare solo LOW e HIGH sui led non avendo tutte lesfumature. Esiste un modo per alimentare i led con i segnali da 0 a 255 ? Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 16 novembre 2015 Author

Ciao Mario, per fare quello che desideri si ricorre alle shield, ossia un circuito che ti permetta ilcontrollo di strisce di led attraverso arduino. Ho pubblicato qualche articolo a riguardo nel blog.

Mario on 20 novembre 2015

Ciao Mauro, Ho frugato a lungo sul tuo sito ma non sono riuscito a trovare l’articolo sulla shield che mihai detto. Ho cercato anche su alcuni siti dove vendono componenti per arduino ma shieldper led non ne ho trovate se non integrati già sulle schede. Nel frattempo ho letto anche unaltro articolo sul tuo blog sui led, quello dei led con l’effetto notte e giorno. Penso che opteròper quello ma ovviamente con 5-6 led non faccio abbastanza luce. Non sono proprio adigiuno di elettronica e di programmazione ma non so come risolvere. Grazie

Page 18: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Mauro Alfieri (http://www.mauroalfieri.it) on 20 novembre 2015 Author

Ciao Mario, non so come tu l’abbia cercata, esistono varie opzioni. cerca in google “RGB shield arduino”

Salvo on 11 febbraio 2016

Ciao Mauro e complimenti per il sito davvero molto interessante e ben fatto. Ho una domanda, sicuramente banale, ma a cui non riesco a dare risposta. Se nelprogramma indico alla variabile FADEAMOUNT di diventare negativa al raggiungimento di255 o 0, come fa poi questa a tornare positiva per poter poi incrementare BRIGHTNESSanziché diminuirla?

Mauro Alfieri (http://www.mauroalfieri.it) on 11 febbraio 2016 Author

Ciao Salvo, si tratta di una semplice operazione matematica, il negativo di un numero negativoè positivo ( – * – = + ) i micro controllori, come arduino/genuino, eseguono conmolta facilità le operazioni matematiche.

Veronica on 2 marzo 2016

Buonasera, ma il led usato per ottenere quest effetto ha un nome particolare oppure è unled normale?

Mauro Alfieri (http://www.mauroalfieri.it) on 2 marzo 2016 Author

Ciao Veronica, un semplice led da 5mm che puoi acquistare in un negozio di elettronica.

NICOLA (http://www.yahoo.it) on 9 ottobre 2016

Buonasera Mauro, voglio chiderti dei suggerimenti anche banali ,nelle lezioni precedenti siparlato e esperimentato il commando begin.Serial(9600) communicazione seriale monitor,lamia é domanda posso utilizzarli negli studi successsivi?

Page 19: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

la curiosita e di vedere come si comporta la mia scheda. in questo caso il valore della luminosita come vederla? nel senso , non mi interessa vedere ilnumeri dec 0 1 ma bensi il valore che va da 0 a 255 . Un ultima domanda c’e un sistema che mi permette di programmare in linguaggioKOP,uasato per la programmazione dei plc in particolare SIMATIC poi codificarlo perArduino? Grazie, le tue lezioni sono molto utili e comprensivi.

Mauro Alfieri (http://www.mauroalfieri.it) on 11 ottobre 2016 Author

Ciao Nicola, rispondo alle tue domande: 1. si puoi usarlo ogni volta che vuoi analizzare dei valori presenti nello sketch; 2. sostituisci la variabile che contiene quella info nel Serial.print o Serial.println; 3. purtroppo non conosco i PLC ed il loro ambiente di programmazione

Manolo on 26 ottobre 2016

Ciao Mauro, essendo novizio di programmazione ripropongo un quesito recente ma cheproprio non riesco a capire riguardo la riga 26/27. Se la luminosità è 0 oppure 255, allora il valore di dissolvenza sarà negativo. Se raggiungo255 quindi si andrà verso lo 0 ma, una volta raggiunto, il comando dello sketch è semprenegativo (-fadeAmount) quindi come riesce a salire di nuovo? Studiando lo sketch non locomprendo. Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 27 ottobre 2016 Author

Ciao Mandolo, si tratta si un operazione matematica: la prima volta fadeAmount vale 5, arrivado a255 diventa -5; quando arriva a 0 il -5 diventa nuovamente 5 ( – * – = + ) e così via.

manolo on 4 novembre 2016

Grazie per la spiegazione Mauro! Ora mi è tutto chiaro.

Maurizio on 14 novembre 2016

Page 20: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Ciao Mauro. Sto cercando di realizzare un fade che va da 0 a 255 con un tempo variabile (da 1 a 10minuti), impostato da una parte di programma. Vorrei non utilizzare delay, perchè nelfrattempo il codice deve fare altro. Ho provato con i millis() ma non funziona regolare, ad ogni valore della variabile fa una cosadiversa (tipo a 1 minuto, fa 1 minuto e 3 secondi, a 4 minuti fa 4 minuti e 17 secondi ecc…). Puoi aiutarmi? Grazie.

Mauro Alfieri (http://www.mauroalfieri.it) on 15 novembre 2016 Author

Ciao Maurizio, dipende molto dal tipo di comandi che chiedi di eseguire, ogni comando hanecessità di un tempo computazionale per essere eseguito. Un esempio puoi verificarlo aggiungendo e rimuovendo dei comandi Serial, vedraiche rallenta o accelera in quanto la comunicazione seriale è onerosa di risorsecomputazionali.

Vale on 7 dicembre 2016

Ciao Mauro, mi ricollego in parte al precedente utente in quanto vorrei capire se fosse possibile avereuna strip led RGB che commuta colore e nello stesso tempo un motore che continui girare(per ora ho solo la strip led per il presepio)

Se uso un ciclo FOR per la cambiare i valori inviati alla strip (10 sec.), il motore si ferma?

Quali soluzioni ci potrebbero essere e soprattutto, ci sono?

Saluti

Vale

Mauro Alfieri (http://www.mauroalfieri.it) on 8 dicembre 2016 Author

Ciao Vale, si è possibile utilizzando il comando millis invece del comando delay ( sul blog hodedicato molti articoli a questo aspetto ) e non usando cicli annidati come for ..while .. until .. ecc Usi il loop proncipale per gestire i giochi di luce e rotazione del motore o altro.

Mimmo on 26 febbraio 2017

Page 21: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Ciao, Mauro grazie al tuo sito mi sto avvicinando al mondo della programmazione, ma soloper arduino. Bravo. Ti dico del mio problema: in sostanza sempre con il led ed un segnalePWM vorrei che il led raggiungesse il valore di luminosità da me impostato con tastiera, (es80% o 100%), in un determinato tempo, (es 60 minuti), mediante una rampa che dura quei60 minuti. In buona sostanza che il fade partendo da 0 raggiunga il valore impostato (80%)nell’arco di un’ora utilizzando tutti gli step intermedi, 1%, 2%, 3%, 4%, 5% etc. fino al 80%impiegando 60 minuti. Ho pensato ad una array ma mi sembra una cosa mastodontica. Hotrovato la funzione map ma non ho trovato uno sketch che possa farmi capire come fare.Credo che la cosa sia banale, ma non trovo quel quid…… Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 27 febbraio 2017 Author

Ciao Mimmo, l’array è la soluzione migliore se hai degli step per la rampa, es: 1%,2%,5%,8%,…se l’incremento è costante puoi usare semplicemente la divisione: secondi massimi( es.: 60min = 3600sec = 3600000millisec ) / [numero massimo pwm] da cui ricavi ildelay tra uno step ed il successivo.

Mimmo on 27 febbraio 2017

Ciao Mauro, grazie della risposta – MI SA CHE E’ L’UOVO DI COLOMBO – quandodici [numero massimo pwm] intendi la percentuale es. 80% o non ilnumero massimo di step. L’effetto visivo in questo modo sarebbeuniforme? senza sfarfallio? Grazie ancora.

Mauro Alfieri (http://www.mauroalfieri.it) on 27 febbraio2017

Author

Ciao Mimmo, [numero massimo pwm] vuol dire 256 se sei al 100% se vuoi un80% devi calcolarti il valore massimo a cui arrivare. Sull’effetto visivo dipende dal tipo di led che usi, io ti hoconsigliato due modi in funzione di quello che desideri ottenere.

Mimmo on 27 febbraio 2017

Grazie Mauro, smanettando ho trovato un tuo articolo sulla centralinaalba e tramonto per il presepe e devo dire che si

Page 22: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

attaglia alla grande con il mio progetto e……. devo solostudiare un pò ed apportare alcune modifiche. Con stima Mimmo

Mauro Alfieri (http://www.mauroalfieri.it) on 28febbraio 2017

Author

Ottimo Mimmo.

Luca75 on 15 aprile 2017

Buon Pomeriggio,sono nuovo, inanzi tutto Mauro sei molto bravo; avrei un problema da porti con Arduino… dovrei creare uno sketch che generi un treno di impulsi PWM con frequenza 500 Hz e dutycycle del variabile sul pin 13……con questo treno PWM realizzare una dissolvenza inentrata (Fade-in) in un secondo con la funzione digitalWrite (e non analogWrite)……so cheè una gran richiesta ma spero tu possa essermi d’aiuto….ho cercato in altri blog manessuno mi convinceva.

Mauro Alfieri (http://www.mauroalfieri.it) on 18 aprile 2017 Author

Ciao Luca, pwerchè non usi un pin PWM ? la frequenza di 500Hz precisa non è presente neiprescaler dei TIMER ma puoi avvicinartici molto usando ad esempio 3,9,10,11 puoiavere una frequenza di 488Hz già generata. Prova a cercare nel blog gli articoli che parlano di PWM e TIMER

Riccardo on 12 luglio 2017

Ciao Mauro, prima di tutto complimenti per l’articolo, sei molto bravo! Vorrei chiederti se è possibile fare in modo che il led stia spento per un tempo maggiore eminore rispetto a quando è acceso e se si, come? Grazie in anticipo.

Mauro Alfieri (http://www.mauroalfieri.it) on 13 luglio 2017 Author

Page 23: Programmare con Arduino – led in dissolvenza · del linguaggio Arduino è il ||; al raggiungimento del valore 0 o del valore 255 esegue quanto alla ... arduino in uscita ha 14 pin

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati(https://akismet.com/privacy/).

Ciao Riccardo, nella descrizione dello sketch linea per linea è descritto come fare, se non ti fossechiara qualche linea scrivi un commento e cercherò di rendertela più esplicativa.