DIY digital 250V AC voltmeter - Arduino

Discutii despre placile de dezvoltare compatibile Arduino
User avatar
Levy
Gold User
Posts: 1538
Joined: 02 Oct 2013 15:07
Location: ABSURDISTAN

DIY digital 250V AC voltmeter - Arduino

Unread postby Levy » 05 Sep 2021 17:51

Nu va apucati de acest montaj doar daca aveti cunostinte in domeniul electric !
Legaturi gresite va pot distruge laptopul sau PC-ul cu care alimentati arduino, sau atingerea neatenta a tensiunii de la reteaua electrica poate produce socuri electrice grave sau chiar moartea.
Autorul acestui articol NU RASPUNDE in nici un fel de ce faceti voi pe acasa !

Nu faceti acest experiment decat doar pe propria voastra raspundere !

________________________________________________________________________________________________________________________

Cu un senzor de tensiune ZMPT101B pentru curent alternativ, un arduino si un ecran, in acest caz binecunoscutul LCD 1602 cu interfata i2C, se poate construi un voltmetru electronic digital de tensiune alternativa utilizabila pana la 250 V.

Schema electrica cu legaturile dintre senzor si arduino, ecran lcd si arduino o puteti vedea aici
Image

Iar codul pentru arduino IDE i-l puteti gasi aici.

Code: Select all

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
 
double sensorValue1 = 0;
double sensorValue2 = 0;
int crosscount = 0;
int climb_flag = 0;
int val[100];
int max_v = 0;
double VmaxD = 0;
double VeffD = 0;
double Veff = 0;
int xCoord = 0;
 
void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Daradici Levente");
  lcd.setCursor(2,1);
  lcd.print("AC Voltmeter");
  delay(3000);
  lcd.clear();
}
 
void loop() {
 
  for ( int i = 0; i < 100; i++ ) {
    sensorValue1 = analogRead(A0);
    if (analogRead(A0) > 511) {
      val[i] = sensorValue1;
    }
    else {
      val[i] = 0;
    }
    delay(1);
  }
 
  max_v = 0;
 
  for ( int i = 0; i < 100; i++ )
  {
    if ( val[i] > max_v )
    {
      max_v = val[i];
    }
    val[i] = 0;
  }
  if (max_v != 0) {
 
 
    VmaxD = max_v;
    VeffD = VmaxD / sqrt(2);
    Veff = (((VeffD - 420.76) / -90.24) * -210.2) + 210.2;
  }
  else {
    Veff = 0;
  }
  Serial.print("Voltage: ");
  Serial.println(Veff);
  VmaxD = 0;
 
  if (Veff < 1000) { xCoord = 8; }
  if (Veff < 100) { xCoord = 9; }
  if (Veff < 10) { xCoord = 10; }
  lcd.clear(); 
  lcd.setCursor(xCoord,1);
  lcd.print(Veff);
  lcd.setCursor(15,1);
  lcd.print("V");
  delay(500);
 
}


Daca ne gandim atent, acest montaj daca-l evoluam putin, de exemplu prin adaugarea unui releu, se poate modifica ca sa functioneze ca si un releu de protectie de minima si maxima tensiune, pentru cine nu-i curios de afisaj se poate renunta si la acesta, iar in acest caz, se poate programa ca arduino sa decupleze tensiunea (cu ajutorul releului suplimentar adaugat) daca trece de o anumita valoare maxima stabilita, si sa decupleze si cand trece sub o anumita valoare minima stabilita, dar acesta probabil va fi un alt montaj.

Cu voltmetrul de tensiune alternativa prezentat aici, am facut si un scurt video.

phpBB [video]


De mentionat ca se poate calibra de la semiregrabilul aflat pe senzorul de tensiune. La prima pornire afisa 279-280 V :D :D
Dar dupa mici reglaje, l-am adus aproape de un aparat de masura putin mai precis decat acest montaj.

Pentru a proteja laptopul cu care am incarcat software-ul in arduino de eventualele neplaceri, dupa incarcarea softwareului, si inainte de a cupla la priza conectorul cu care alimentam cu 220V senzorul de tensiune, am scos cablul USB din laptop cu care alimentam arduino si am alimentat arduino exclusiv dintr-un powerbank.

Nu recomand copiilor acest montaj datorita tensiunii periculoase la atingere din acest mic experiment !!!
Dacă ai tăiat și ultimul copac, ai otrăvit și ultimul râu și ai prins și ultimul pește, ai să fi uimit să constați că banii nu sunt comestibili !

Image

Return to “Arduino”

Who is online

Users browsing this forum: No registered users and 5 guests