Dopo aver introdotto, in un precedente articolo, le strisce di led e avervi illustrato come controllare una striscia digitale, vediamo oggi un semplice progetto che nasce da una richiesta di un amico: far lampeggiare una striscia di led ad una frequenza variabile.
Cosa mi serve
Vista la semplicità del progetto, ho deciso di realizzarlo su una breadboard, usando i seguenti componenti:
[checklist]
- un Arduino Mini Pro
- un potenziometro da 4.7Kohm
- un transistor MOSFET STP16NF06 (datasheet)
- una striscia di led a 12V e il relativo alimentatore
[/checklist]
Collegamenti
I vari elementi del progetto vanno collegati secondo questo schema:
Arduino
Lo sketch Arduino è disponibile nel mio repository su Github.
Vediamo il suo funzionamento:
#define ledPin 13 #define stripPin 2 #define analogInPin A0 |
Per prima cosa definiamo alcune costanti: i PIN a cui sono collegati il led (on board), la striscia di led e il potenziometro (usiamo un PIN analogico per leggere il suo valore).
int outState = LOW; long previousMillis = 0; long interval = 1000; |
Quindi inizializziamo le variabili che mantengono lo stato dell’uscita, il tempo trascorso e la frequenza di lampeggio (inizialmente di 1 secondo).
pinMode(ledPin, OUTPUT); pinMode(stripPin, OUTPUT); |
All’interno del setup(), configuriamo come OUTPUT i PIN a cui sono collegati led e striscia.
int potValue = analogRead(analogInPin); interval = map(potValue, 0, 1023, 50, 2000); |
Nel loop principale leggiamo il valore del potenziometro (tra 0 e 1023) e scaliamo tale valore, attraverso la funzione map, nell’intervallo 50-2000. Questo consente di regolare il periodo di lampeggio tra 50 e 2000ms.
if(currentMillis - previousMillis > interval) { |
Se è trascorso un intervallo di tempo…
if (outState == LOW) outState = HIGH; else outState = LOW; |
… invertiamo lo stato dell’uscita…
digitalWrite(ledPin, outState); digitalWrite(stripPin, outState); |
… e accendiamo/spegnamo led e striscia.
Demo
Breve filmato che illustra il funzionamento dello sketch:
si può usare anche arduino uno rev3?
Ciao Andrea,
assolutamente sì!