Continuo nell’aggiornamento delle esercitazioni di base per gli studenti di 3′ dell’ITIS (Elettronica ed Automazione) e per gli utenti che iniziano con Arduino.
Utilizzeremo un display LCD 16×2 di tipo I2C su cui visualizzeremo mediante una barra di avanzamento, la quantità di luminosità impostata per il LED, mediante un potenziometro.
Per la gestione di un display LCD di tipo I2C rimando alla mia lezione: Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T.
Per la creazione di caratteri personalizzati rimando alla mia lezione: Disegnare caratteri personalizzati con Arduino per un LCD 16×2.
Lista componenti
- N.1 Arduino UNO
- N.1 Breadboard
- N.1 LCD 16×2 I2C
- N.1 Potenziometri da 10 KOhm
- N.1 LED da 5 mm
- N.1 Resistore da 220 Ohm
- jumper
Schema di collegamento
Scketch
Di seguito viene indicato il codice i base, all’interno i commenti che ne dettagliano il funzionamento di ogni parte:
/* Prof. Maffucci Michele https://www.maffucci.it Ver.1 - 27.12.21 Controllo di luminosità LED con visualizzazione intensità mediante una barra di avanzamento su display 16x2 */ #include <Wire.h> #include <LiquidCrystal_I2C.h> byte pinPot = A0; // pin analogico 0 a cui connettere il potenziometro per controllare la luminosità byte pinLed = 3; // pin PWM a cui connettere il LED int analogVal = 0; // variabile in cui memorizzare il valore impostato dal potenziometro int luminosita = 0; // variabile in cui memorizzare la luminosità byte barraAvanzamento = 0; // indice barra avanzamento // Per maggiori informazioni sulla realizzazione di caratteri speciali: // https://www.maffucci.it/2020/01/18/disegnare-caratteri-personalizzati-con-arduino-per-un-lcd-16x2/ // Carattere personalizzato per disegnare la barraAvanzamento di avanzamento byte iconaBarra[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; // inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee LiquidCrystal_I2C lcd(0x27, 16, 2); //----------------------------- void setup() { lcd.begin(); // inizializzazione dell'LCD lcd.backlight(); // attivazione della retroilluminazione // Inpostazione ad OUTPUT del pin a cui connettiamo il LED pinMode(pinLed, OUTPUT); // Cancella il display lcd.clear(); // Stampa il messaggio sulla prima riga del display lcd.print("Luminosita' LED"); //Creazione del carattere per la barra di avanzamento lcd.createChar(0, iconaBarra); } // Per maggiori informazioni sull'uso del display 16x2 I2C: // https://www.maffucci.it/2019/01/25/utilizzo-delllcd-16x2-hitachi-hd44780-1602-con-modulo-i2c-pcf8574t/ //----------------------------- void loop() { // Cancella il display lcd.clear(); // Stampa il messsaggio sulla prima riga lcd.print("Luminosita' LED"); //Posiziona il cursore nella seconda riga, prima colonna lcd.setCursor(0,1); // Lettura del valore impostato dal potenziometro analogVal = analogRead(pinPot); // Conversione del valore analogico impostato con il potenziometro // in Duty Cicle per impostare la luminosità del LED luminosita=map(analogVal, 0, 1024, 0, 255); // Impostazione della luminosità del LED analogWrite(pinLed, luminosita); // Conversione della luminosità in quantità di caratteri della barra da stampare barraAvanzamento=map(luminosita, 0, 255, 0, 15); // Stampa la barra di avanzamento for (byte i = 0; i < barraAvanzamento; i++) { lcd.setCursor(i, 1); lcd.write(byte(0)); } // leggero ritardo di 500 ms per visualizzare la barra delay(500); }
Proposta esercizi
Esercizio 1
Nell’esempio proposto viene utilizzato un delay() finale per permettere la visualizzazione dei caratteri sul display. Sostituire il delay() ed utilizzare l’istruzione millis() per valutare il tempo trascorso e controllare la stampa dei caratteri sul display.
Esercizio 2
Modificare il programma precedente raddoppiando il numero di caratteri che rappresenta la barra di avanzamento.
Esercizio 3
Modificare l’esercizio proposto variando la barra di avanzamento in funzione dell’approssimarsi al valore massimo o minimo della luminosità.
Esercizio 4
Modificare l’esercizio proposte inserendo un buzzer che emette un suono la cui frequenza varia in funzione dell’intensità luminosa del LED.
Buon Making a tutti 🙂