Sari la conținut
ELFORUM - Forumul electronistilor

Voltmetru analog cu arduino pro mini 328 8Mhz


Vizitator Bajenica.gabriel

Postări Recomandate

Vizitator Bajenica.gabriel

De multe ori vroiam sa stiu in ce stare se afla bareriile de la sistemul solar. Cea mai simpla metoda a fost montarea nui voltmetru analog pe care il aveam prin casa , dar nu stiam niciodata exact ce procent mai aveam in baterie. In urmacautarilor pe net am gasit o schema care arata tensiunea exacta si capacitatea bateriei.

Tensiune Capacitate

10,5v 0%

11,31v 10%

11,58v 20%

11,75v 30%

11,90v 40%

12,06v 50%

12,20v 60%

12.32v 70%

12.42v 80%

12.50v 90%

12.70v 100%

14.40v tensiune maxima

Codul pe care l-am creat pentru a putea citi arduino tensiunile, valorile lui R1 si R2 nu sunt cele din program. Eu am facut mai intai grupul de semireglabile si le-am reglat ca la 20volti pe intrare in arduino sa intre max 5 volti. Valorile date lui R1 si R2 au fost date prin incercari si rotunjiri pina vlotmetrul a aratat ce vroiam eu.

 int led = 2;
     int led1 = 3;
     int led2 = 4;
     int led3 = 5;
     int led4 = 6;
     int led5 = 7;
     int led6 = 8;
     int led7 = 9;
     int led8 = 10;
     int led9 = 11;
     int led10 = 12;
     int led11 = 13;
     
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 13870.0;
float R2 = 5000.0;
int value = 0;
     
    void setup() {
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(12, OUTPUT);
    pinMode(13, OUTPUT);
     Serial.begin(9600);
    }
     
    void loop() {
        value = analogRead(analogInput);
   vout = (value * 5.0) / 1024.0;
   vin = vout / (R2/(R1+R2));
   if (vin<0.09) {
   vin=0.0;
   }
     if(vin > 10.50) {
         digitalWrite(2, HIGH);
      }  else {
       digitalWrite(2, LOW);
    }
     if(vin >11.31) {
         digitalWrite(3, HIGH);
      }  else {
       digitalWrite(3, LOW);
    }
      if(vin > 11.58) {
         digitalWrite(4, HIGH);
      }  else {
       digitalWrite(4, LOW);
    }
     if(vin > 11.75) {
         digitalWrite(5, HIGH);
      }  else {
       digitalWrite(5, LOW);
    }
     if(vin > 11.90) {
         digitalWrite(6, HIGH);
      }  else {
       digitalWrite(6, LOW);
    }
     if(vin > 12.06) {
         digitalWrite(7, HIGH);
      }  else {
       digitalWrite(7, LOW);
    }
      if(vin > 12.20) {
         digitalWrite(8, HIGH);
      }  else {
       digitalWrite(8, LOW);
    }
     if(vin > 12.32) {
         digitalWrite(9, HIGH);
      }  else {
       digitalWrite(9, LOW);
    }
     if(vin > 12.42) {
         digitalWrite(10, HIGH);
      }  else {
       digitalWrite(10, LOW);
    }
     if(vin > 12.50) {
         digitalWrite(11, HIGH);
      }  else {
       digitalWrite(11, LOW);
    }
     if(vin > 12.70) {
         digitalWrite(12, HIGH);
      }  else {
       digitalWrite(12, LOW);
    }
     if(vin > 14.40) {
         digitalWrite(13, HIGH);
      }  else {
       digitalWrite(13, LOW);
    }
    
      Serial.println(vin);
    }

A doua oara nu mai fac corecturi ci voi sterge topicul !

post-263132-0-76956600-1488907950_thumb.jpg

Link spre comentariu
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

Imagini postate

Felicitări, poate era ma simplu cu un divizor fix pe intrare şi o funcţie map(input) care să translateze domeniul de intrare în 10 valori discrete. De ex. int volts = map(Vin, 640, 1023, 0, 9). Adică între cca. 3 şi 5V la intrare variabila volts ia valori intre 0 şi 9. Apoi o funcţie for() care să aprindă ledurile condiţionat de valoarea mapată. Ieşea un cod de maximum 10 linii.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări