Hilfe beim programmieren (arduino)?
Hallohallo,
ich schreibe gerade eine Hausarbeit zum selbst erstellten Code mit einem Arduino.
Ich hatte mit meinem Lehrer in diesem Code die Rechnung: 5V:1023 aufgeschrieben, hatte damals auch verstanden, wieso genau. Jetzt ist das leider schon ewig her und ich habe keine Ahnung mehr wieso ich diese Rechnung mit einbezogen hatte...
Ich hoffe jmd kennt sich vllt damit ein wenig besser aus und kann mir dazu etwas erklaären,
Jenny
3 Antworten
5 V wird die Versorgungsspannung sein (USB).
Mehr Kontext wäre hilfreich, aber ich vermute mal, dass das etwas mit einem ADC oder DAC zu tun hat. Bei einer Auflösung von 10 bit gibt es 1024 mögliche Werte (von 0 bis 5 V). Mit deiner Rechnung hast du die Differenz der analogen Spannung zwischen 2 digitalen Werten berechnet.
Das ist für den ADC, dem Analog nach Digital Converter.
Der vergleicht die Eingangsspannung mit einer Referenzspannung und gibt das in 1024 Stufen an.
Der hat 10 Bit was dann 1024 Stufen sind. Liegt die Referenzspannung auf 5V, dann bedeutet eben der Messwert 1023, dass 5V am Eingang anliegen.
1023 = 100%, 0 = 0%
Und wenn 100% 5V sind, kannst Du dann leicht umrechnen wie viel Volt das sind.
Dazu einfach ausrechnen wie viel Volt eine Stufe hat. Also bei 10-Bit auflösung hat man als maxwert 1023. Bei 5V Referenzspannung macht das dann 5V/1023 = 0,00488758553275V pro Stufe.
Bei der Umrechnung gibst Du das am besten als Bruch an, so kann der Compiler mit möglichst geringen Aufwand (wegend en Compileroptimierungen) möglichst genaue Werte berechnen. Also
voltvariable = ADCgemessen * (5.0 / 1023);
Statt nur 5 musst Du 5.0 angeben. Sonst wird mit Int gerechnet und dann kriegst Du immer "0" heraus weil das Komma abgeschnitten wird. Ist eine Kommazahl in der Formel, zwingt man den Compiler dazu float (also Fließkomma) zu verwenden.
P.S.:
Da fließkomma gewisse unschärfen hat, ist es damit viel schwieriger saubere Vergleiche anzustellen. Also "if a >b" und so was.
Ich bevorzuge bei so was, einen Integer für Messwerte zu verwenden. Da eine Stufe ja sowieso 4mV sind, bietet sich die Darstellung in Millivolt gerade zu an. Das umrechnen geht also mit:
int millivolt;
millivolt = analogRead(A0) * (5000.0/1023.0);
Genau, man kann das als Prozent oder besser "Promille" ansehen. Nur da das Ding binär rechnet hat man keinen glatten tausender sondern eben 1023.
Und dadurch erhalte ich dann einen genaueren Messwert?
Nein, der Messwert ist nur eine Darstellung von "Wie viel relativ zur Referenzspannung". Also wie ein Prozentwert, nur mit 1023 statt 100 für "maximum".
Einheiten oder sonstige Bezüge stecken in der gemessenen Zahl nicht drin!
Du bekommst als Messergebnis nur eine Zahl, z.B. 782. Was die bedeutet steht da natürlich nicht drin. Möchtest Du die weiter verarbeiten, dann musst Du die umrechnen. Möchtest Du also "Volt" oder besser "Millivolt" haben um z.B. zu sagen:
if (Messwert > 1000)
also wenn "mehr als 1000 Millivolt gemessen wurde, dann..."
Hängt da ein analoger Temperatursensor dran, dann rechnest Du das dann direkt in °C oder was Du brauchst um. Wie das geht hängt dann davon ab welche Spannungen das Teil bei welcher Temperatur erzeugt.
Ich habe einen Feuchtigkeitssensor mit eingebaut.
Wenn ich also den messwert welcher dieser mir liefert mit der Differenz aus 5 und 1023 multipliziere, habe ich aber eine eine Einheit, oder nicht?
Dann weißt Du wie viel Volt der gerade abliefert.
Kennst Du dann welche Spannung der bei welcher Feuchtigkeit erzeugt, kannst DU das dann in Feuchte umrechnen. Das machst Du dann lieber direkt ohne Umweg auf Volt bzw. Millivolt.
Ich denke mal es geht um den ADC
Der Arduino (zumindest einige Versionen davon) haben einen 10Bit ADC. Der Wertebereich davon liegt bei 0 bis 1023.
Mit einer Referenzspannung von 5V hast du eben eine Auflösung von 5V/1023 = 4.887mV.
Ein ADC Wert von 1000 würde also einer Spannung von 5V*1000/1023 = 4.887V entsprechen.
Analog to digital converter. Also ein Baustein im Arduino um Spannungen zu messen.
Danke:)
Das heißt ich teile meine Eingangsspannung (5V) durch 1023 (sind das dann Möglichkeiten?)