In acest articol vom construi un ampermetru. Pentru a face acest lucru vom folosi un modul care are la baza circuitul integrat ACS712. Acesta este un senzor de curent bazat pe efectul Hall.

    Modulul se regaseste in 3 variante constructive: 5A, 20A si 30A. Curentul detectat poate fi afisat ca valoare pozitiva sau negativa. Acest lucru este util in cazul monitorizarii unui acumulator pentru a sti daca acesta se descarca sau se incarca (daca circuitul permite acest lucru, binenteles).

    Pretul acestui modul este de 15 lei si se poate cumpara de aici.

    Modulul este cel din poza de mai jos:

    Alimentarea modulului se face cu +5V iar iesirea este una analogica, deci se va conecta la un pin analogic al Arduino.

    Consumatorul care va fi monitorizat se va conecta la mufa albastra.

    Pentru a simplifica codul folosit vom folosi libraria ACS712-arduino.

    Afisarea curentului va fi realizat pe un display LCD 16x2 cu interfata I2C pentru a simplifica cat mai mult conectarea la Arduino.

    Senzorul folosit in acest articol este cel de 5A.

    Sketch-ul rezultat in acest caz este cel de mai jos:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "ACS712.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
ACS712 sensor(ACS712_05B, A0);
//ACS712 sensor(ACS712_20A, A0);
//ACS712 sensor(ACS712_30A, A0);
float curent;
byte grafic[] = {
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F
};

void setup() {
  lcd.begin();
  lcd.createChar(0, grafic);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Ampermetru");
  lcd.setCursor(5, 1);
  lcd.print("cu Arduino");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Calibrare");
  int zero = sensor.calibrate();
   for (int i=0; i<16; i++) {
      lcd.setCursor(i, 1);
      lcd.write(byte(0));
      delay(500);
    }
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Senzorul este");
    lcd.setCursor(0, 1);
    lcd.print("calibrat!");
    delay(1000);
}

void loop() {
    lcd.clear();
    curent = sensor.getCurrentDC();
    lcd.setCursor(0, 0);
    lcd.print("Curent:");
    lcd.setCursor(0, 1);
    lcd.print(curent);
    lcd.print("A");
    delay(1000);
}

    Pentru o mica imbunatatire a acestui cod vom adauga si functia de wattmetru pentru a vedea si puterea consumata.

    In curent continuu formula de calcul pentru a obtine puterea consumata este P=U*I. De aceea noi va trebui sa adaugam in cod o variabila cu valoarea tensiunii de alimentare a consumatorului si astfel putem obtine foarte usor puterea consumata de catre acesta.

    Sketchul modificat este urmatorul:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "ACS712.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
ACS712 sensor(ACS712_05B, A0);
//ACS712 sensor(ACS712_20A, A0);
//ACS712 sensor(ACS712_30A, A0);
float curent, putere;
float tensiune = 24;
byte grafic[] = {
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F
};

void setup() {
  lcd.begin();
  lcd.createChar(0, grafic);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Watt-Ampermetru");
  lcd.setCursor(5, 1);
  lcd.print("cu Arduino");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Calibrare");
  int zero = sensor.calibrate();
   for (int i=0; i<16; i++) {
      lcd.setCursor(i, 1);
      lcd.write(byte(0));
      delay(500);
    }
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Senzorul este");
    lcd.setCursor(0, 1);
    lcd.print("calibrat!");
    delay(1000);
}

void loop() {
    lcd.clear();
    curent = sensor.getCurrentDC();
    putere = curent * tensiune;
    lcd.setCursor(0, 0);
    lcd.print("Curent: ");
    lcd.print(curent);
    lcd.print("A");
    lcd.setCursor(0, 1);
    lcd.print("Putere: ");
    lcd.print(putere);
    lcd.print("W");
    delay(1000);
}

    Un filmulet cu montajele in functiune poate fi vizionat mai jos:

 

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.