Il progetto qui illustrato permette di realizzare un voltmetro / amperometro da utilizzare magari per un alimentatore, basato su Arduino in versione stand alone e che utilizza un sensore ACS714 per la misura della corrente.
Nella configurazione proposta permette di misurare una tensione continua compresa tra 0 e 25 V, con una corrente massima di 5A.
Indice
Schema elettrico del Voltmetro/amperometro con Arduino
Lo schema sotto riportato è formato da più sezioni quali:
- Alimentazione;
- Processore;
- Sensore di corrente;
- Partitore d’ingresso;
- Sezione display LCD.
Per il funzionamento è necessario caricare l’apposito programma.
File formato EAGLE
Sezione alimentatrice
La scheda voltmetro/amperometro per Arduino lavora con un’unica tensione d’alimentazione di 5 Vcc. Questa è ottenuta riducendo la tensione d’ingresso in arrivo alla morsettiera X1 (La tensione deve essere continua con un valore compreso tra 8 e 15) mediante regolatore IC1 un LM7805.
La tensione è livellata tramite i condensatori C1, C2, C3 ,C4
Sezione processore
La sezione processore è basata sul processore ATmega328 un microcontrollore con bus a 8 bit prodotto dalla Atmel con architettura di tipo RISC (acronimo di Reduced Instruction Set Computer). Il clock è dato da Q1 un quarzo da 16 MHz con i soliti due condensatori ceramici di supporto. Per il reset del processore è presente anche un pulsante il miniatura P1.
In questa applicazioni il processore su cui è caricato il downloader Arduino è utilizzato in versione stand alone, in quanto dopo che avete programmato l’Atmega328 potete farlo funzionare da solo, basta collegare il quarzo da 16 MHz e i due condensatori da 18 pF e dare alimentazione sui pin 7-20 (+5V) e 8-22 (GND).
Sezione sensore di corrente
Il sensore ACS714 utilizzato nel circuito voltmetro/amperometro per Arduino è prodotto dalla Allegro MicroSystems accetta una corrente di input bidirezionale con un’ampiezza al massimo pari a 5A e fornisce in output una tensione analogica proporzionale (185mV/A) centrata a 2.5V con un errore tipico pari a ±1.5%.
Il sensore opera in un range di tensioni fra 4.5 e 5.5V ed è stato progettato per essere utilizzato in sistemi che operano a 5V.
Si basa sull’effetto Hall e permette all’IC di isolare elettricamente il percorso della corrente dall’elettronica del sensore (fino a 2.1 kV RMS): ciò permette di inserire il sensore in qualunque punto lungo il percorso della corrente e soprattutto permette di utilizzare questo sensore in applicazioni che richiedono isolamento elettrico. La larghezza di banda viene fissata attraverso il condensatore C9 connesso al pin etichettato con la dicitura “Filter”
Sezione partitore di tensione
Come saprete, i pin analogici di Arduino non sono adatti a ricevere segnali con una tensione superiore a 5V, anche se come picco può capitare di raggiungere tensioni maggiori è sempre bene evitare che questo accada.
In teoria si ha che se R1=R2 qualsiasi sia il loro valore quello che ottiene è un partitore di tensione simmetrico ossia applicando in ingresso 10V in uscita si avranno 5V, variando il rapporto tra R1 ed R2 a favore di R1 ( R1 > R2 ) in uscita al partitore di tensione si avrà una tensione di uscita inferiore a Vi/2; variando il rapporto a favore di R2 ( R1 < R2 ) si ottiene una Vo > Vi/2.
Dato che questo voltmetro deve essere adatto a misurare tensioni nell’ordine di 25V, occorre inserire un partitore di tensione R1 e R2 il cui rapporto (ratio) sia pari a 5 (teorico), per evitare comunque di avere tensioni superiori in uscita è stato inserito lo zener D1 da 5.1 tra l’ingresso analogico di Arduino e il partitore in modo da evitare sovratensioni che potrebbero danneggiare l’ingresso.
Sezione display LCD
La sezione display è rappresentata esclusivamente dal collegamento del display ai pin della sezione processore.
E’ presente un trimmer POT1 da 10 kΏ per la regolazione del contrasto, esiste poi il collegamento per l’alimentazione della retro alimentazione, la resistenza di limitazione risulta già presente sul display.
- RS → pin digitale 11;
- Enable → pin digitale 6;
- D4 → pin digitale 5;
- D5 →pin digitale 4;
- D6 → pin digitale 3;
- D7 → pin digitale 2.
- Positivo → pin +5V
- Negativo → pin GND
Realizzazione del PCB
Per la realizzazione del voltmetro/amperometro per Arduino si procederà iniziando dalla realizzazione del circuito stampato il cui lato rame è riportato sotto.
Per maggiori informazioni vedere l’articolo Come realizzare un circuito stampato
si utilizzerà una basetta in vetronite (mono faccia) delle dimensioni di circa 102×52 mm, per il trasferimento del disegno delle piste il metodo potrà essere quello della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli blu (PRESS-N-PELL).
Seguono alcune foto del processo di realizzazione
Alcune delle fasi di realizzazione del circuito stampato

Basetta ramata e foglio Prees n Peel con circuito stampato

Distacco del foglio dalla basetta ramata

Correzione delle imperfezioni con un pennarello indelebile a punta fine

Immersione del circuito in una soluzione di cloruro ferrico

Processo di erosione completato

Circuito completato con foratura e il rifilo
Una volta inciso il rame si passerà quindi alla foratura delle stesse, utilizzando principalmente una punta da 0,8 mm, mentre si utilizzeranno una da 1 mm per le pin-strip.
In seguito si potrà passare al posizionamento e alla saldatura dei componenti seguendo lo schema riportato sotto
Montaggio dei componenti sul PCB
Elenco componenti
Sigla | Componente |
---|---|
C2,C3, C8 | 100 nF multistrato |
C4 | 10 µF 25 Vl verticale |
C6,C7 | 18 pF ceramico |
C9 | 1 nF poliestere |
D1 | Diodo zener BZX55C5V1 |
IC1 | LM 7805 |
IC2 | Processore Arduino |
IC3 | ACS714 |
LCD1 | Display LCD LCM1602A-NSW-BBW |
P1 | pulsante da CS |
POT1 | 10 kΏ trimmer |
Q1 | Quarzo 16 MHz |
R1 | 50 kΏ 5% 1/4 W |
R2, R3 | 10 kΏ 5% 1/4 W |
JP1 | Pinhead 1 x 16 femmina |
J1 | Morsettiera 2 Poli passo 5 mm |
X1, X2 | Morsettiera 2 Poli passo 2,5mm |
Fasi di montaggio

Saldatura dei ponticelli, dell’integrato regolatore, delle resistenze e dello zoccolo per l’integrato

installazione del quarzo, dei condensatori, del pulsante di reset

Inserimento del condensatore elettrolitico, delle morsettiere, del trimmer per il display LCD, della pinstrip per il display

Posizionamento dell’integrato dopo aver effettuato la sua programmazione

Posizionamento del display LCD, previa saldatura di un pin strip maschio
Alcuni dettagli della scheda Voltmetro/amperometro

Vista della scheda montata

Dettaglio della zona con il sensore ACS714

Pulsante di reset e morsettiera di collegamento cavo per lettura corrente

Zona quarzo e connettore display LCD

Trimmer regolazione contrasto display
Realizzazione del PCB tramite JLCPCB
Il PCB potrà essere realizzato tramite il servizio offerto dalla JLCPCB, azienda che agisce in sinergia con EasyEDA.
Il PCB è di tipo a doppia faccia con fori metallizzati.
Rendering 3d della scheda
Nuova versione del PCB realizzata con EasyEDA
Sotto è riportata la nuova versione del PCB che può essere scaricato dal mio account presso OSHWLab, utilizzando questo link
Lo schema e il relativo PCB sono stati realizzati con il programma EasyEDA: un servizio per il disegno di circuiti e la loro simulazione, progettazione e produzione di PCB. Provatelo è gratuito!
Programma del Voltmetro/amperometro Arduino
Per il collaudo e il successivo utilizzo occorre prima di tutto caricare nella memoria del processore il programma.
Il listato è ben documentato e come si può vedere occorre inserire i valori reali delle due resistenze che formano il partitore R1 e R2 in modo che il programma effettua la giusta conversione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <LiquidCrystal.h> //inclusione della libreria LCD // definizione dei pin int ACS714 = A0; int partitore = A1; //definizione valori integer e float per calcolo valori corrente e tensione int sensorValue = 0; int outputValue = 0; float vout = 0.0; float amps = 0.0; float vref = 5.0; int valV = 0; float volts = 0.0; float R1 = 46220.0; // !! Valore della resistenza R1 !! float R2 = 9781.0; // !! Valore della resistenza R2 !! float corr = 1.02; // Valore di correzione lettura tensione //definizione dei pin LCD int RS = 5; int EN = 4; int D7 = 0; int D6 = 1; int D5 = 2; int D4 = 3; //inizializzazione libreria LCD LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); void setup() { analogRead(ACS714); // prima lettura analogica della corrente analogRead(partitore); // prima lettura analogica della tensione lcd.begin(16, 2); //inizializzazione lcd 16x2 delay(10); // Test LCD lcd.print("Test LCD OK"); // messaggio di test delay(2000); // pausa di 2 secondi lcd.clear(); // cancellazione display delay(10); // pausa per effettuazione operazione } void loop() { amps = 0.0742 * analogRead(ACS714) - 37.87; if (amps < 0.15) amps = 0.0; valV = analogRead(partitore); //Lettura del valore fornito dal partitore vout = (valV * vref) / 1024.0; //Conversione del valore in di volts = (vout / (R2 / (R1 + R2))) * corr; //Calcolo valore letto lcd.clear(); // pulisci memoria lcd lcd.setCursor(0, 0); //setta il cursore sulla prima linea display lcd.print("AMPS: "); //scrivi la parola AMPS: lcd.print(amps, 1); // riporta il valore calcolato degli ampere lcd.setCursor(0, 1); // setta il cursore sulla prima linea display lcd.print("VOLT: "); // scrive la parola VOLTS: lcd.print(volts, 1); // riporta il valore calcolato dei volts delay(500); //pausa lettura } |
Collaudo collaudo della scheda
Per il collaudo Voltmetro/amperometro Arduino, basterà collegare, facendo riferimento alla figura riportata sotto, collegare una fonte di alimentazione compresa tra 9 e 15 V alla morsettiera X1.
Quindi alla morsettiera X2 di collegherà la tensione da misurare, mentre il cavo di alimentazione sarà connesso alla morsettiera J1.
Nel caso si rilevasse ancora una differenza tra i valori riportati sul display è possibile modificare il valore presente nel programma della variabile
1 |
float corr = 1.02; // Valore di correzione lettura tensione |