Scheda Voltmetro/amperometro con Arduino

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.

Lo schema sotto riportato è formato da più sezioni quali:

Per il funzionamento è necessario caricare l’apposito programma.

Voltmetro amperometro Arduino

File formato EAGLE

Voltmetro amperometro Arduino

Rendering 3d della scheda

Filmato illustrativo del collaudo della scheda

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

Voltmetro amperometro Arduino - Schema alimentazione

LM 7805 Regolatore di tensione positivo

homotix

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).

Voltmetro amperometro Arduino - Processore

Processore ATmega328 8-bit

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”

ACS714 – Hall Effect-Based Linear Current Sensor IC

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.

Voltmetro amperometro Arduino - partitore

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.

Voltmetro amperometro Arduino

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.

Voltmetro amperometro Arduino - Sezione LCD

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

Display LCD 16 caratteri x 2 linee con fondo Blu

Materiale per il montaggio della scheda

Voltmetro amperometro Arduino

Elenco componenti

SiglaComponente
C2,C3, C8100 nF multistrato
C410 µF 25 Vl verticale
C6,C718 pF ceramico
C91 nF poliestere
D1Diodo zener BZX55C5V1
IC1LM 7805
IC2Processore Arduino
IC3ACS714
LCD1Display LCD LCM1602A-NSW-BBW
P1pulsante da CS
POT110 kΏ trimmer
Q1Quarzo 16 MHz
R150 kΏ 5% 1/4 W
R2, R310 kΏ 5% 1/4 W
JP1Pinhead 1 x 16 femmina
J1Morsettiera 2 Poli passo 5 mm
X1, X2Morsettiera 2 Poli passo 2,5mm

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 pratica

Per la costruzione delle scheda 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

Per la sua realizzazione si utilizzerà una basetta in vetronite (mono faccia) delle opportune dimensioni, 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

Nelle foto sotto riportate sono visibili alcune delle fasi di montaggio.

Alcune delle fasi di montaggio della scheda

Dettaglio della saldatura del sensore di tipo SMD

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

Programma

Per il collaudo e il successivo utilizzo occorre prima di tutto caricare nella memoria del processore il programma

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.
nel caso si rilevasse ancora una differenza tra i valori riportati sul display è possibile modificare il valore della variabile corr.
Per il collaudo basterà collegare, facendo riferimento alla figura riportata a lato, collegare una fonte di alimentazione compresa tra 9e 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.

#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 &lt; 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
}   

 

Lascia un commento

Your email address will not be published.