Esercitazioni di base di Arduino – visualizzazione luminosità LED mediante una barra di avanzamento su display 16×2


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:

1/*
2   Prof. Maffucci Michele
4   Ver.1 - 27.12.21
5   Controllo di luminosità LED con
6   visualizzazione intensità mediante una
7   barra di avanzamento su display 16x2
8*/
9 
10#include <Wire.h>
11#include <LiquidCrystal_I2C.h>
12 
13byte pinPot = A0;           // pin analogico 0 a cui connettere il potenziometro per controllare la luminosità
14byte pinLed = 3;            // pin PWM a cui connettere il LED
15int  analogVal = 0;         // variabile in cui memorizzare il valore impostato dal potenziometro
16int  luminosita = 0;        // variabile in cui memorizzare la luminosità
17byte barraAvanzamento = 0;  // indice barra avanzamento
18 
19// Per maggiori informazioni sulla realizzazione di caratteri speciali:
21 
22// Carattere personalizzato per disegnare la barraAvanzamento di avanzamento
23byte iconaBarra[8] = {
24  B11111,
25  B11111,
26  B11111,
27  B11111,
28  B11111,
29  B11111,
30  B11111,
31};
32 
33// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
34// impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
35LiquidCrystal_I2C lcd(0x27, 16, 2);
36//-----------------------------
37 
38void setup()
39{
40  lcd.begin();      // inizializzazione dell'LCD
41  lcd.backlight();  // attivazione della retroilluminazione
42 
43  // Inpostazione ad OUTPUT del pin a cui connettiamo il LED
44  pinMode(pinLed, OUTPUT);
45 
46  // Cancella il display
47  lcd.clear();
48 
49  // Stampa il messaggio sulla prima riga del display
50  lcd.print("Luminosita' LED");
51 
52  //Creazione del carattere per la barra di avanzamento
53  lcd.createChar(0, iconaBarra);
54}
55 
56// Per maggiori informazioni sull'uso del display 16x2 I2C:
58//-----------------------------
59 
60void loop() {
61  // Cancella il display
62  lcd.clear();
63   
64  // Stampa il messsaggio sulla prima riga
65  lcd.print("Luminosita' LED");
66   
67  //Posiziona il cursore nella seconda riga, prima colonna
68  lcd.setCursor(0,1);
69   
70  // Lettura del valore impostato dal potenziometro
71  analogVal = analogRead(pinPot);
72           
73  // Conversione del valore analogico impostato con il potenziometro
74  // in Duty Cicle per impostare la luminosità del LED
75  luminosita=map(analogVal, 0, 1024, 0, 255);
76   
77  // Impostazione della luminosità del LED
78  analogWrite(pinLed, luminosita);
79   
80  // Conversione della luminosità in quantità di caratteri della barra da stampare
81  barraAvanzamento=map(luminosita, 0, 255, 0, 15);
82   
83  // Stampa la barra di avanzamento
84  for (byte i = 0; i < barraAvanzamento; i++)
85  {
86    lcd.setCursor(i, 1);  
87    lcd.write(byte(0)); 
88  }
89  // leggero ritardo di 500 ms per visualizzare la barra
90  delay(500);       
91}

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 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.