Problem mit Voltmeter

Hallo,

ich wollte einen Arduino Nano mit einem ATmega328 als Voltmeter verwenden. Gemessen wird mit Hilfe eines Spannungsteilers und 2 Widerständen.

Der verwendete Sketch lautet:

void setup() { 
  int analogInput =0;
  pinMode(13, OUTPUT); 
  digitalWrite(13, LOW); 
  Serial.begin(9600); 
  } 
void loop() { 

 int sensorValue = analogRead(A1); 
 float voltage = sensorValue * (4.7 / 1023.00) / 2; 
 Serial.println(voltage); 
 if (voltage > 4.5) 
 { 
  digitalWrite(13, HIGH); 
 } 
 else 
 { 
  digitalWrite(13, LOW);
 } 
 delay(1000); 
}

Dies führt leider nicht zu korrekten Messwerten.Und zwar zeigt der Arduino auch ohne dass eine Spannungsquelle angeschlossen ist Werte um ca. 4 V an. Wird einen Spannung angelegt steigt dieser Wert nicht weiter an.

hat jemand vielleicht einen Tipp? Danke schon mal!

Und zwar zeigt der Arduino auch ohne dass eine Spannungsquelle angeschlossen ist Werte um ca. 4 V an.

Male bitte einen Schaltplan.

Tipp: Offene Eingänge werde auch gerne als Zufallsgenerator genutzt.

Warum wohl?

float voltage = sensorValue * (4.7 / 1023.00) / 2;

Woher kommt die 2? Woher die 4,7? Und die 1023? Das sollte doch bestimmt eher eine 1024 sein, oder?

Ich würde ja die interne Referenz und eine "Ein Punkt Kalibrierung" verwenden, wenn ich externe Spannungen messen will.

piniuus: hat jemand vielleicht einen Tipp? Danke schon mal!

Du solltest restlos alles aus dem Sketch werfen, was offensichtlich sinnlos ist. Was soll zum Beispiel das

int analogInput =0;

in setup()?! Abgesehen davon, dass diese Variable nirgendwo benutzt wird, wird sie zum Ende von setup() gelöscht. Zudem wäre auch ein Schaltplan und die Erklärung von Konstanten echt hilfreich. Was sollen die 4,7? Und wieso teilst Du das noch durch zwei?! Dass die Klammern in der Berechnung von voltage daneben sind, ist Dir hoffentlich klar.

Unterm Strich kommt mir Dein Sketch wie ein Aprilscherz vor, der lediglich ein bisschen Verwirrung stiften soll.

Sorry, meine Antwort ist nicht gerade freundlich. Aber Dein Sketch sieht mir nicht danach aus, als würdest Du ernsthaft etwas damit anfangen wollen.

Gruß

Gregor

Ui ui gerade beim Messen von Spannungen kann man einiges falsch machen

#define SENSE           A0

//Bat +
#define R1 100900      //Ohm
//SENSE
#define R2  9800
//Ground

const float VREFERENCE = 3.30;

//In der Setup():
analogReference(EXTERNAL);

void updateVBat() {
  float (reading) = analogRead(SENSE); 
  reading = (reading * VREFERENCE) / 1024.0;
  reading = reading / (R2 / (R1 + R2));
  vBat = reading * 1000; //In mV
}

Hier mal ein kleiner Codeschnipsel mit dem ich die Spannunge eines Akkus messe und die Spannung in mV ausgibt, da ganze Zahlen in meiner Anwendung von nöten sind.

Wie du siehst wurde hier eine externe 3,3V Referenzspannung an den ADC gelegt, ganz einfach aus dem Grund, da man am Arduino nie reine 5,00V hat. https://www.arduino.cc/en/Reference/AnalogReference

Auch wurden für die zwei Wiederstände sehr genaue Werte gegeben, da schon bei kleinen Abweichungen das Ergebnis verfäscht wird.

Wie schon von anderen bemerkt wurde ist dein Sketch nicht wirklich zu gebrauchen, weswegen ich mal davon ausgehe, dass du noch ziemlich am Anfang stehst. Evtl. mal durch die Referenz lesen oder mal etwas weniger Anspruchvolles machen.

grüßle