Voltmetro e/o Amperometro

Come al solito , girando sulla rete , ho trovato alcuni interessanti spunti per adattare alle mie necessita' un dispositivo che mi consentisse di leggere una tensione applicata ad un dispositivo e contemporaneamente misurare quanta corrente il dispositivo stesso assorbe.

 

Per la realizzazione ho utilizzato un classico modulo Arduino UNO ,

 

 

 

 

un modulo LCD Keypad che sarebbe poi uno stampato con su montati un lcd 16 colonne 2 righe  e 6 pulsantini ai quali possono essere assegnati da software valori (ma a noi non servono per adesso).

 

 

 

 

un partitore di tensione da 30 volt a 5 volt (30/5) al quale ho aggiunto un diodo zener da 5,1 volt a protezione dell'ingresso dell'Arduino (realizzazione alquanto spartana ma funzionale). Ad ogni modo e' lo stesso identico partitore che ho utilizzato per il progetto dei moduli TX RX 433 MHz.

 

 

 

 

un moduletto equipaggiato con l'integrato ACS712 che converte in tensione  la corrente che scorre sul cavo al quale e' connesso in serie. Questa tensione analogica e' prelevabile dal suo pin di uscita , un po' il funzionamento di un classico shunt amperometrico.

Iniziamo ad effettuare i collegamenti dei vari moduli :

solita alimentazione ed usb ad Arduino con su montato il modulo LCD ;

l'uscita del partitore va connessa al pin A1 mentre l'uscita del modulo ACS712 al pin A0.

Caricate il programmino e via.

Ecco il listato.

 

/*
Shield che consente di rilevare la tensione applicata ad un dispositivo e di leggere contemporaneamente la corrente che lo stesso dispositivo assorbe.
Anche questo listato e' stato generato prelevando spunti scaricati da altri esempi presenti in rete e modificandoli alle mie esigenze.
Attenzione che non e' uno strumento di misura CAMPIONE ma va adattato alle esigenze.
*/

//libreria necessaria al funzionamento del modulo LCD
#include <LiquidCrystal.h>

//definizione dei pin di connessione per il partitore ed il modulo ACS712
int ACS712 = A0;
int TENSIONE = A1;

//definizione delle variabili
float vout = 0.0;
float amps = 0.0;
float ampere = 0.0;
float media = 0.0;
float somma = 0.0;
int valV = 0;
int nr = 0;

//inizializzazione LCD
LiquidCrystal lcd(8,9,4,5,6,7);

void setup(){

  analogRead(ACS712);     //prima lettura analogica della corrente
  analogRead(TENSIONE);   //prima lettura analogica della tensione
  lcd.begin(16,2);        //inizializzazione lcd 16x2
  delay (10);             //ritardo di 10ms
}

void loop(){
 
  //lettura del valore della corrente rilevato. Attenzione che la lettura si deve affinare confrontando con un amperometro "campione" e variando il valore
  //0.0724 fino a quando la lettura risultera' corretta. Un paio di prove ed il gioco e' fatto.
 
  amps=(0.0724*analogRead(ACS712))-37.87; 
 
 
  //inizio della routine che esegue la media di 5 letture di corrente. Questa parte di listato si e' resa necessaria a causa della non stabile lettura
  //fornita dal modulo ACS712.In questo modo , effettuando la media di 5 letture , ci si avvicina molto al valore corretto
  somma = somma + amps;
  nr ++;
  if (nr >= 5)
    {
    media = somma/nr;
    nr = 0;
    somma = 0;
    }
 
  //forzatura ad azzerare la lettura degli ampere se questi sono al di sotto di 0.15 A
  if (media < 0.15) media = 0.0;
 
  valV = analogRead(TENSIONE);     //Lettura del valore fornito dal partitore  
  vout = valV * (36.28/1024.0);    //Conversione del valore.
 
  lcd.clear();                     //pulisci  lcd
  lcd.setCursor(0,0);              //posiziona il cursore sulla prima linea del display
  lcd.print("AMPS: ");             //scrivi la parola AMPS:
  lcd.print(media,2);              //riporta il valore calcolato degli ampere con 2 cifre decimali

  lcd.setCursor(0,1);              //posiziona il cursore sulla prima linea display
  lcd.print("VOLT: ");             //scrivi la parola VOLTS:
  lcd.print(vout,2);               //riporta il valore calcolato dei volt con 2 cifre decimali
  delay (500);                     //pausa lettura
}                                  //ed il ciclo riprende

Buon divertimento.