In questa lezione illustreremo come controllare una led bar con Raspberry Pi e la libreria GPIOZero.
Una led bar è un array di led che viene generalmente utilizzato per visualizzare un livello (es: livello batteria, livello audio).
La led bar può essere realizzata come un componente già assemblato, oppure come facciamo in questa lezione, può essere realizzata partendo da una serie di led discreti.
Circuito Led Bar
Per realizzare il circuito della led bar, abbiamo bisogno di 5 led, 5 resistenze da 100 Ohm ed alcuni fili di collegamento.
Ovviamente possiamo creare led bar più corte o più lunghe, togliendo o aggiungendo led.
La Classe Led Bar Graph
La led bar, all'interno della libreria GPIOZero, appartiene alla classe dei dispositivi di output compositi (CompositeDevice), e viene modellato da una semplice interfaccia intuitiva.
Il costruttore della classe ha la seguente sintassi:
LEDBarGraph(*pins, initial_value=0)
- pins: serie di pin GPIO a cui sono collegati i vari led della led bar;
- initial_value: valore iniziale compreso tra -1 e +1, default impostato a zero (led bar spenta).
La classe LEDBarGraph mette a disposizione i metodi on(), off() e toggle() con funzionamento analogo a quelli della classe Led, ma applicati a tutto l'array.
Vediamo un esempio di codice in cui facciamo lampeggiare la led bar con periodo 1 secondo.
from gpiozero import LEDBarGraph
from time import sleep
led_bar = LEDBarGraph(5, 6, 13, 19, 26)
while True:
led_bar.on()
sleep(1)
led_bar.off()
sleep(1)
Come vedete, il blink della led bar si ottiene in maniera esattamente analoga al lampeggiamento del led. Cambia solo il costruttore in quanto si usa la classe LEDBarGraph anziché la classe LED.
Come menzionato sopra, al costruttore della classe, vanno passati i GPIO, in numerazione BCM, a cui sono collegati i led della led bar.
La proprietà value
Anche questa classe espone la proprietà value. Per la classe Led poteva assumere valore 0 (spento) o 1 (acceso).
Per la classe LedBarGraph tale proprietà può assumere un valore float tra 0 e 1 oppure tra 0 e -1.
I valori tra 0 e 1 accendono in modo proporzionale (0% - 100%) la led bar da sinistra verso destra.
Al contrario, i valori tra 0 e -1 da sinistra a destra.
Quindi, nel nostro esempio con 5 led, il primo led rappresenta il 20% della led bar, quindi per accenderlo è necessario assegnare a value il valore 0.2 o 1/5.
In modo analogo per accendere la barra led al 60% è necessario assegnare a value 0.6 o 3/5.
Vediamo ora il codice di controllo della led bar che fa accendere tutta la barra, led per led da sinistra a destra e poi da destra a sinistra.
from gpiozero import LEDBarGraph
from time import sleep
NUM_LED=5
led_bar = LEDBarGraph(5, 6, 13, 19, 26)
while True:
for led in range(1,NUM_LED+1):
led_bar.value = led/NUM_LED
sleep(0.2)
for led in range(1,NUM_LED+1):
led_bar.value = -led/NUM_LED
sleep(0.2)
Quindi, possiamo generalizzare dicendo che per accendere i primi N led di una barra di M led, bisogna assegnare a value il valore N/M.
Conclusioni
In questa lezione abbiamo imparato a utilizzare una classe molto utile per il controllo di una led bar.
Questo tipo di led può essere molto utile in molti progetti maker da realizzare con il Raspberry Pi.