Obiettivo: Realizzare un dispositivo per misurare tensioni nel range 0.5 V utilizzando il microcontrollore Arduino ed il display a sette segmenti.
Un progetto realizzato dagli alunni della classe 3AUT dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Amadori Federico
– Fucili Elia
Componenti elettronici:
- Arduino UNO
- Breadboard
- 14 Resistenze da 100 Ohm per I display a sette segmenti
- 2 Display a 7 Segmenti
Pre-requisiti:
1..2..3.. Il Display a 7 Segmenti
Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead
Teoria: Effettuare la misura di una tensione compresa nel range 0-5 V, utilizzando il controllore Arduino, è relativamente semplice. Per effettuare questa misura, basta collegare l’elemento di cui vogliamo analizzare la tensione ad un ingresso analogico (A0-A5) e utilizzare l’istruzione analogRead nell’apposito sketch.
A tale fine è importante ribadire che l’ingresso analogico compreso nel range 0-5V viene mappato utilizzato la funzione analogRead(A0) nel range 0-1023, pertanto è indispensabile utilizzare una corrispettiva funzione di conversione basta sulla seguente proporzione:
ValoreAnalogRead : 1023 = ValoreTensione : 5
In conclusione, il valore di tensione può essere semplicemente ottenuto dividendo per 1023 e moltiplicando per 5 il valore letto utilizzando la funzione analogRead(A0).
Tale valore può essere poi visualizzato su differenti tipi di display: monitor del computer, display LCD e display a 7 segmenti. Nell’esempio in questione vengono utilizzati due display a 7 segmenti (uno per la parte intera ed uno per la parte decimale) al fine di visualizzare la tensione misurata.
Collegamento Circuitale:

Codice:
Attraverso l’utilizzo di due display a sette segmenti è possibile visualizzare la tensione prodotta dalla “patata”. Nel caso specifico viene utilizzata una patata come generatore di tensione per verificare che il dispositivo fornisca una valutazione corretta della tensione misurata. Delle funzioni specifiche (e.g., zeroI, unoI, zeroD, unoD, etc) vengono utilizzate per visualizzare i vari numeri nei due differenti display.
// Realizzazione di un Voltmetro con Arduino | |
// Progetto realizzato da Elia Fucili e Amadori Federico | |
// dell'Istituto Tecnico Industriale Enrico Mattei di Urbino | |
// 7 Maggio 2021 | |
int pinAI = 2; | |
int pinBI = 3; | |
int pinCI = 4; | |
int pinDI = 5; | |
int pinEI = 6; | |
int pinFI = 7; | |
int pinGI = 8; | |
int pinAD = 10; | |
int pinBD = 11; | |
int pinCD = 12; | |
int pinDD = 13; | |
int pinED = 15; | |
int pinFD = 16; | |
int pinGD = 17; | |
void stampa0I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, LOW); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, HIGH); | |
} | |
void stampa0D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, LOW); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, HIGH); | |
} | |
void stampa1I() { | |
digitalWrite(pinAI, HIGH); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, HIGH); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, HIGH); | |
digitalWrite(pinGI, HIGH); | |
} | |
void stampa1D() { | |
digitalWrite(pinAD, HIGH); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, HIGH); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, HIGH); | |
digitalWrite(pinGD, HIGH); | |
} | |
void stampa2I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, HIGH); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, LOW); | |
digitalWrite(pinFI, HIGH); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa2D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, HIGH); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, LOW); | |
digitalWrite(pinFD, HIGH); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa3I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, HIGH); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa3D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, HIGH); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa4I() { | |
digitalWrite(pinAI, HIGH); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, HIGH); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa4D() { | |
digitalWrite(pinAD, HIGH); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, HIGH); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa5I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, HIGH); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa5D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, HIGH); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa6I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, HIGH); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, LOW); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa6D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, HIGH); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, LOW); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa7I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, HIGH); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, HIGH); | |
digitalWrite(pinGI, HIGH); | |
} | |
void stampa7D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, HIGH); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, HIGH); | |
digitalWrite(pinGD, HIGH); | |
} | |
void stampa8I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, LOW); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa8D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, LOW); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, LOW); | |
} | |
void stampa9I() { | |
digitalWrite(pinAI, LOW); | |
digitalWrite(pinBI, LOW); | |
digitalWrite(pinCI, LOW); | |
digitalWrite(pinDI, LOW); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, LOW); | |
digitalWrite(pinGI, LOW); | |
} | |
void stampa9D() { | |
digitalWrite(pinAD, LOW); | |
digitalWrite(pinBD, LOW); | |
digitalWrite(pinCD, LOW); | |
digitalWrite(pinDD, LOW); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, LOW); | |
digitalWrite(pinGD, LOW); | |
} | |
void setup() { | |
pinMode(pinAI, OUTPUT); | |
pinMode(pinBI, OUTPUT); | |
pinMode(pinCI, OUTPUT); | |
pinMode(pinDI, OUTPUT); | |
pinMode(pinEI, OUTPUT); | |
pinMode(pinFI, OUTPUT); | |
pinMode(pinGI, OUTPUT); | |
pinMode(pinAD, OUTPUT); | |
pinMode(pinBD, OUTPUT); | |
pinMode(pinCD, OUTPUT); | |
pinMode(pinDD, OUTPUT); | |
pinMode(pinED, OUTPUT); | |
pinMode(pinFD, OUTPUT); | |
pinMode(pinGD, OUTPUT); | |
digitalWrite(pinAI, HIGH); | |
digitalWrite(pinBI, HIGH); | |
digitalWrite(pinCI, HIGH); | |
digitalWrite(pinDI, HIGH); | |
digitalWrite(pinEI, HIGH); | |
digitalWrite(pinFI, HIGH); | |
digitalWrite(pinGI, HIGH); | |
digitalWrite(pinAD, HIGH); | |
digitalWrite(pinBD, HIGH); | |
digitalWrite(pinCD, HIGH); | |
digitalWrite(pinDD, HIGH); | |
digitalWrite(pinED, HIGH); | |
digitalWrite(pinFD, HIGH); | |
digitalWrite(pinGD, HIGH); | |
Serial.begin(9600) ; | |
} | |
void loop() | |
{ | |
int valpot = analogRead(A0); | |
float volt = (valpot * 5.0) / 1023.0; | |
int i = (int) volt; | |
int D = (int) ((int)(volt * 10) - (i * 10)); | |
//Serial.println(i); | |
//Serial.println(D); | |
if (i == 0) | |
stampa0I(); | |
else if (i == 1) | |
stampa1I(); | |
else if (i == 2) | |
stampa2I(); | |
else if (i == 3) | |
stampa3I(); | |
else if (i == 4) | |
stampa4I(); | |
else if (i == 5) | |
stampa5I(); | |
if (D == 0) | |
stampa0D(); | |
else if (D == 1) | |
stampa1D(); | |
else if (D == 2) | |
stampa2D(); | |
else if (D == 3) | |
stampa3D(); | |
else if (D == 4) | |
stampa4D(); | |
else if (D == 5) | |
stampa5D(); | |
else if (D == 6) | |
stampa6D(); | |
else if (D == 7) | |
stampa7D(); | |
else if (D == 8) | |
stampa8D(); | |
else if (D == 9) | |
stampa9D(); | |
} |
Tinkercad:
Personalizzazioni: E’ possibile utilizzare altre tipologie di display per visualizzare la tensione misurata.