ARDUINO
Voltmetro/Amperometro

ultimo aggiornamento 24 novembre 2013


 

Il progetto qui illustrato permette di realizzare un voltmetro/amperometro da utilizzare magari per un alimentatore, basato su Arduino e che utilizza un sensore ACS714 per la misura della corrente.
Nella configurazione proposta permette di misurare una tensione continua compresa tra 0 e 25V, e una corrente massima di 5A.
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.

Filmato illustrativo del collaudo della scheda

 

 

Rendering 3d della scheda


Sezione alimentatrice
La scheda 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,C4I

LM 7805 Regolatore di tensione positivo

Piedinatura Datasheet Foto dell'integrato

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.

Processore ATmega328 8-bit Microcontroller with 32K Bytes In-System Programmable Flash

Piedinatura Datasheet Foto dell'integrato

Sezione sensore di corrente
Il sensore ACS714 prodotto dalla Allegro 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.
Il sensore 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 - Fully Integrated, Hall Effect-Based Linear Current Sensor IC

Piedinatura Datasheet Foto dell'integrato

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.
  • LCD RS → pin digitale 11;

  • LCD Enable pin digitale 6;

  • LCD D4 → pin digitale 5;

  • LCD D5 →pin digitale 4;

  • LCD D6 → pin digitale 3;

  • LCD D7 → pin digitale 2.

  • Alimentazione → pin +5V

  • Alimentazione → pin GND

LCM1602A-NSW-BBW - Display LCD 16 caratteri x 2 linee con fondo Blu

Piedinatura Datasheet display LCM1602A-NSW-BBW Foto

 

Materiale per il montaggio della scheda


File formato EAGLE
 

Elenco componenti

C1 1000 µF 25Vl verticale
C2,C3, C8 100nF multistrato
C4 10 µF 25Vl verticale
C6,C7 18pF ceramico
C9 1 nF polestere
D1 Diodo zenere BZX55C5V1
IC1 LM 7805
IC2 Processore Arduino
IC3 ACS714
LCD1 Display LCD LCM1602A-NSW-BBW
P1 pulsante da CS
POT1 10k trimmer
Q1 16MHz
R1 50 kΏ 5% 1/4 W
R2, R3 10 kΏ 5% 1/4 W
JP1 Pinhead 1x16 femmina
J1 Morsettiera 2Poli passo 5mm
X1, X2 Morsettiera 2Poli passo 2,5mm

Alcuni dettagli della scheda Voltmetro/amperometro

Realizzazione pratica.

Per la costruzione delle scheda si procederà iniziando dalla realizzazione del circuito stampato il cui lato rame è riportato a lato.    Per la sua realizzazione si utilizzerà una basetta in vetronite (monofaccia) delle opportune dimensioni, il metodo potrà essere quello della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli blu (PRESS-N-PELL):
Nelle foto sotto riportate è visibile il processo di creazione del circuito stampato.

Alcune delle fasi di realizzazione del circuito stampato

Basetta ramata e foglio Prees n Peel con circuito stampato

Accoppiamento del foglio Press n Peel sulla basetta ramata

Riscaldamento del foglio per il trasferimento del tones sulla basetta ramata

Distacco del foglio dalla bastta ramata

Visione delle tracce sulla bastta ramata, sono visibili alcune inperfezioni

Correzione delle imperfezioni con un pennarello indelebile a punta fine

Immersione del circuito in una soluzione di cloruro ferrico

Processo di ersosione completato

Circuito dopo il risciacquo con acqua

Rimozione del toner

Circuito topo la foratura e il rifilo

Dettaglio delle piste zona sensore SMD


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 1mm per i pin-strip.
In seguito si potrà passare al posizionamento e alla saldatura dei componenti seguendo lo schema visibile a lato.
Nelle foto sotto riportate sono visibili alcune delle fasi di montaggio.

Alcune delle fasi di montaggio della scheda

Dettaglio della saldatura del senore di tipo SMD

Saldatura dei ponticelli, dell'integrato regolatore, delle reistenze e dello zoccolo per l'iintegrato

Saldatura del quarzo, dei consensatori, del pulsante di reset

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

Posizionamento dell'integrato dopo avedr effettuato la sua programmazione

Posizionamento del display LCD, previa saltatura di un pin strip maschio

 

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 < 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
}   

 

Elenco revisioni
24/11/2013 Emissione preliminare