Arduino Forum

International => Deutsch => Topic started by: Sturmfront on Jun 20, 2019, 01:36 pm

Title: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 01:36 pm
Hallo liebe Arduino Community,

ich bin noch Anfänger im Themenbererich und bräuchte eure Hilfe. Ich habe ein kleines Programm geschrieben. Ich möchte, das wenn der Arduino zwischen Ground und Analog0 eine Spannung unter 12V misst, sagt: "Voltage lower 12". Wenn die Spannung über 12V ist, soll er sagen: "Voltage higher 12". Jedoch funktioniert mein geschriebener Code nicht so ganz und er sagt im Seriellen Monitor permanent "Voltage lower 12" obwohl ich da knapp 15V dran gelegt habe. Findet jemand den Fehler?

Liebe Grüße

Code:
Code: [Select]

void setup() {
  Serial.begin(9600);

}

void loop() {
 int max = (12);
 int sensor = analogRead(A0);
 float voltage = sensor * (5 / 1023.00);
 

 if (voltage < 12){
  Serial.println("Voltage lower 12");
 }
 else{
  Serial.println("Voltage higher 12");
 }

 delay(1000);

}
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: HotSystems on Jun 20, 2019, 01:38 pm
Wie hast du denn die 12 Volt angeschlossen ?
Ich hoffe über einen Spannungsteiler ?
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 01:41 pm
Nein, direkt zwischen Masse und A0. Ich probiere es mal mit einem Spannungsteiler.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: HotSystems on Jun 20, 2019, 01:42 pm
Nein, direkt zwischen Masse und A0. Ich probiere es mal mit einem Spannungsteiler.
Wenn du ihn nicht schon gekillt hast.

Der darf max. 5 Volt am Eingang haben.
Lies dir mal das Datenblatt durch.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: uwefed on Jun 20, 2019, 01:48 pm
Arduino verträgt keine Spannungen über der Versorgungsspannung das heist deim Arduino UNO 5V. Wenn Du 12V an einen analogen Eingeng geklemmt hast ist dieser jetzt kaputt.
Um höhere Spannungen als 5V zu messen brauchst Du einen Spannungsteiler aus Widerständen.
Außerdem frag ich Dich wie Die Rechnung jemals Werte Höher als 5V berechenen soll:
Code: [Select]
int sensor = analogRead(A0);
 float voltage = sensor * (5 / 1023.00);

analogRead() gibt Werte von 0 bis 1023.
1023 *5/1023 ergibt 5. Mehr kanns nicht geben.

Also kauf Dir einen neuen Arduino, Bersorg Dir Widerstände für einen Spannungsteiler der mit der höchsten Eingengsspannung nicht mehr als 5V gibt. und beziehe das Verhältnis des Spannungsteilers in die Berechnung der effektiven Spannung ein.

Spannungteiler berechnen zB: https://www.peacesoftware.de/einigewerte/spannungsteiler.html

Der Gesamtwiderstand des Spannungsteilers darf nicht größer als 10kOhm sein. Ein 0,1µF Kondensator zwiscehn analogen Eingang und Masse macht das wett, verlangsamt aber den Angleich der Spannung am Kondensator bezogen auf der Meßspannung. 
Grüße Uwe
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 02:02 pm
Der Arduino tut noch, problemlos. Danke für eure Tipps.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 02:10 pm
Arduino verträgt keine Spannungen über der Versorgungsspannung das heist deim Arduino UNO 5V. Wenn Du 12V an einen analogen Eingeng geklemmt hast ist dieser jetzt kaputt.
Um höhere Spannungen als 5V zu messen brauchst Du einen Spannungsteiler aus Widerständen.
Außerdem frag ich Dich wie Die Rechnung jemals Werte Höher als 5V berechenen soll:
Code: [Select]
int sensor = analogRead(A0);
 float voltage = sensor * (5 / 1023.00);

analogRead() gibt Werte von 0 bis 1023.
1023 *5/1023 ergibt 5. Mehr kanns nicht geben.

Also kauf Dir einen neuen Arduino, Bersorg Dir Widerstände für einen Spannungsteiler der mit der höchsten Eingengsspannung nicht mehr als 5V gibt. und beziehe das Verhältnis des Spannungsteilers in die Berechnung der effektiven Spannung ein.

Spannungteiler berechnen zB: https://www.peacesoftware.de/einigewerte/spannungsteiler.html

Der Gesamtwiderstand des Spannungsteilers darf nicht größer als 10kOhm sein. Ein 0,1µF Kondensator zwiscehn analogen Eingang und Masse macht das wett, verlangsamt aber den Angleich der Spannung am Kondensator bezogen auf der Meßspannung. 
Grüße Uwe

Alles klar. Habe die maximal Spannung nun auf 20V gestellt. Sprich 1023 * 20V / 1023. Bin leider kaum vertraut mit einem Spannungsteiler. Wie sehen die Werte bei einer Gesammtspannung von 20V an U1 des Spannungsteilers aus? Und messe ich dann am Ende an U2 des Spannungsteilers? LG
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: HotSystems on Jun 20, 2019, 02:18 pm
Uwe hat dir doch die URL zur Berechnung und Anschauung eines Spannungsteilers genannt.

Hier nochmal: Spannungsteiler (https://www.peacesoftware.de/einigewerte/spannungsteiler.html)
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 02:24 pm
Okay alles klar. Bei einer Eingangsspannung von bspw. 20V am Spannungsteiler nehme ich für R1 = 15kOhm. Für R2 = 5kOhm. Somit komme ich beim Output für U2 auf genau 5V was ergo der Arduino aushält. Ist das so richtig? LG
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: HotSystems on Jun 20, 2019, 02:33 pm
Okay alles klar. Bei einer Eingangsspannung von bspw. 20V am Spannungsteiler nehme ich für R1 = 15kOhm. Für R2 = 5kOhm. Somit komme ich beim Output für U2 auf genau 5V was ergo der Arduino aushält. Ist das so richtig? LG
fast....wenn du dir Uwes Beitrag richtig durchliest, sollte der Gesamtwiderstand 10k nicht überschreiten.

Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 02:46 pm
Habe nachgemessen, es kommt maximal eine Gesammtspannung von 12V an. Somit (da ich ja die Gesammtspannung von 10kOhm nicht überschreiten darf) habe ich die Widerstände (E12 Reihe) 5600Ohm & 3900Ohm entschieden. Da in Reihe geschaltet berträgt Rges (5600 + 3900 = 9500Ohm) - 9500Ohm < 10000Ohm. Kann ich das so machen?
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: HotSystems on Jun 20, 2019, 03:21 pm
Habe nachgemessen, es kommt maximal eine Gesammtspannung von 12V an. Somit (da ich ja die Gesammtspannung von 10kOhm nicht überschreiten darf) habe ich die Widerstände (E12 Reihe) 5600Ohm & 3900Ohm entschieden. Da in Reihe geschaltet berträgt Rges (5600 + 3900 = 9500Ohm) - 9500Ohm < 10000Ohm. Kann ich das so machen?
Das geht so, allerdings sind 10 kOhm keine Spannung.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 03:27 pm
Oh, entschuldigung. Da habe ich Spannung ausversehen mit Widerstand verwechselt. War keine Absicht.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: uwefed on Jun 20, 2019, 03:32 pm
Habe nachgemessen, es kommt maximal eine Gesammtspannung von 12V an.
Dann wird die Kontrolle ob die Spannung über 12V ist kaum ansprechen.
Laß ein wenig spiel nach oben. Bemesse den Spannungsteiler für 15V. Da brauchst Du dann 3 gelich große Widerstände. 2 in Reihe als R1 und einen als R2 (bezogen auf den Spannungsteileelink. Da kannst Du 2,2K oder 3,3K Ohm nehmen.

Grüße Uwe
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 03:40 pm
Ja, stimmt. Ist besser so, vielen dank. Dann nehme ich 3x 2,2kOhm Widerstände, die habe ich noch zuhause. Dann kommt man am Output direkt an 5V SOLLTEN die 15V erreicht werden. Von dem her hat man da noch etwas Puffer. Vielen dank euch allen! Liebe Grüße  :)
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: postmaster-ino on Jun 20, 2019, 05:10 pm
Hi

Um den Eingang zu schützen, kann man noch 5,1V Z-Dioden verbauen.

Welche Werte die Widerstände im Spannungsteiler haben, ist relativ unkritisch - Du hast einen µC, Dem man jedes Verhältnis vorgeben kann - Da müssen keine 5,00000V anliegen, dmait Du Deine 12V 'sehen' kannst - Das könnten auch 4,37665V sein - eine Zahl im Sketch und der Käfer zeigt dennoch 12V an.

Du musst 'nur' wissen, was Du bei welcher angelegten Spannung am ADC erwartest und daraus wieder Deine angelegte Spannung berechnen.

MfG

PS: '15V sollten NIE ...' riecht schon wieder stark nach KFZ ... Da ist's mit einem Spannungsteiler nicht getan - Da wird Dir der Arduino entweder nicht zufriedenstellend arbeiten, oder einfach nur sterben.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 06:02 pm
Ich bins nochmal wieder. Es funktioniert einwandfrei mit dem Spannungsteiler. Jedoch möchte ich noch, wenn am Spannungsteiler an U2 eine Spannung von 3,83V anliegt. Eine LED leuchtet die am Arduino hängt. Ich habe den Code dann so bearbeitet, dass wenn 3,83V oder mehr anliegen der Pin 12 schaltet. Jedoch tut er das nicht und beim erreichen der Spannung 3,83V hat der Ausgang 12 0V. Woran liegt das? LG

Code:
int OUT = 12;

void setup() {
  pinMode(OUT, OUTPUT);
  Serial.begin(9600);
}

void loop() {
 int max = (3,83);
 int sensor = analogRead(A0);
 float voltage = sensor * (5 / 1023.00);
 

 if (voltage < max){
  digitalWrite(OUT, LOW);
  Serial.println("Voltage lower 3,83V");
 }
 else{
  digitalWrite(OUT, HIGH);
  Serial.println("Voltage higher 3,83V");
 }

 delay(5000);

}
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Rentner on Jun 20, 2019, 06:30 pm
Hallo,


 int max = (3,83); ist falsch

float max = 3,83;

Heinz
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 06:38 pm
Habe da eine Fehlermeldung erhalten, habe dann bei der if abfrage statt "voltage < max" einfach "voltage < 3,83" eingetragen. Leider funktioniert es immer noch nicht, der Ausgang gibt keine Spannung.
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: combie on Jun 20, 2019, 06:52 pm
3,83

3.83


 :smiley-twist:  :smiley-twist:  :smiley-twist:  :smiley-twist:
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 07:14 pm
ups.. peinlich.. :smiley-fat: danke dir. Jetzt gehts  :D
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: postmaster-ino on Jun 20, 2019, 07:19 pm
Hi

Jetzt, wo ich Das Mal getestet habe ... Ja, Das hatten wir schon Mal.
Habe mir gestattet, Deinen Sketch überprüfen zu lassen.
Denke, bei Dir sind die Warnungen AUSgeschaltet (Standard).
Sonst:
Code: [Select]

C:\...\sketch_jun20a.ino: In function 'void loop()':

C:\...\sketch_jun20a.ino:9:15: warning: left operand of comma operator has no effect [-Wunused-value]

  int max = (3,83);
             ^

Durch das Komma wird Das eine Art Aufzählung und nur der letzte Wert wird gesetzt - deshalb hattest Du auch keine Reaktion - da Du einfach nicht bis auf 83V hoch kamst ;)

MfG

PS: In den Einstellungen ALLE Warnungen anschalten - und dann den ganzen roten Kram beseitigen ;)
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Sturmfront on Jun 20, 2019, 07:32 pm
Habe die Warnungen nun angeschaltet. Danke für deinen Tipp! Bin auf "Voreinstellungen -> Compiler Warnungen -> Alle" gegangen. War das so richtig? LG
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Rentner on Jun 20, 2019, 09:15 pm
3,83

3.83


 :smiley-twist:  :smiley-twist:  :smiley-twist:  :smiley-twist:
Sorry hätte ich auch sehen müssen, wenn man einfach nur eine Zeile kopiert und dann ändert fällt einem das nicht auf  :)

Heinz
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: combie on Jun 20, 2019, 09:20 pm
Macht nix...
Denn hier gilt das tausend Augen Prinzip. :o
Title: Re: Bei einem bestimmten Spannungswert soll Arduino schalten
Post by: Serenifly on Jun 20, 2019, 09:45 pm
Durch das Komma wird Das eine Art Aufzählung und nur der letzte Wert wird gesetzt
Das Komma ist ein Operator. Es führt das vor dem Komma aus und verwirft das Ergebnis (was bei einem einzelnen Integer-Literal nichts macht) und gibt das dahinter zurück.

Wird kaum verwendet, aber lässt sich in for-Schleifen verwenden um etwas mehr Code auszuführen