Erste „Gehversuche“ mit ARDUINO #2 (DL6OAA) Verwendete Unterlagen: http://popovic.info/html/arduino/arduinoUno_1.html http://www.arduinospielwiese.de/ 1382632539_arduino_anleitung.pdf (J.Gräber) __________________________________________________________________ AnalogRead Baue die Schaltung wie in der Abbildung auf, verwende folgenden Sketch (Poti001). Starte das Programm und öffne den „seriellen Monitor“ Verändere die Stellung des Potentiometers und beobachte die Werte im Fenster des seriellen Monitors Die Anschlüsse des Potis sind für die Steckkontakte des Steckboard zu dick. Tipp: Verwende eine IC-Fassung (Bild). Ziel: Ein Potentiometer wird an einem analogen Eingang angeschlossen. Der anliegende Wert wird ausgelesen und über die serielle Verbindung an den Computer zurückgesendet. // Poti001 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(0); // read Input on analog Pin 0 Serial.println(sensorValue); delay(10); } Die eingelesenen Werte werden in Werten zwischen 0 und 1023 (10-Bit) ausgegeben. Um die Werte auf die angelegte Spannung von 5V abbilden zu können, verwendet man folgende Formel: Variable = (Referenzspannung Arduino * Korrekturfaktor * Variable) / 1024 sensorValue = 5 * 1 * sensorValue / 1024 Serial.print (sensorValue); Serial.println(„ Volt“); Füge diese Formel und die Serial.print-Befehle in den Sketch ein und beobachte das Ergebnis. // Poti001 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(0); // read Input on analog Pin 0 sensorValue = 5 * 1 * sensorValue / 1024; Serial.print(sensorValue); Serial.println(„ delay(10); } Volt“); Wir erhalten die Werte 0, 1, 2, 3 4 (Volt), keine Zwischenwerte. Warum? …. richtig, sensorValue ist als Integer-Variable definiert….wir brauchen aber eine variable mit Dezimalstellen, also: int sensorValue = analogRead(0); ändern in float sensorValue = analogRead(0); float Datatype for floating-point numbers, a number that has a decimal point. Floatingpoint numbers are often used to approximate analog and continuous values because they have greater resolution than integers. Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38. They are stored as 32 bits (4 bytes) of information. und schließen dann ein Messgerät am Poti an um die Spannung genau zu messen. // Poti002 void setup() { Serial.begin(9600); } void loop() { float sensorValue = analogRead(0); // read Input on analog Pin 0 sensorValue = 5 * 1 * sensorValue / 1024; Serial.print (sensorValue); Serial.println(„ Volt“); delay(10); } Zwischen der Anzeige im seriellen Monitor und der Anzeige am Spannungsmessgerät wird ein gewisser Unterschied sein (denn die Referenzspannung beträgt nicht exakt 5V). Ermittle die Differenz und berechne den Korrekturfaktor für die Formel. Die beiden Werte sollten sich auf 1-2 hundertstel Volt annähern lassen. Man kann diese Transformation der Intervalle auch mit der map-Funktion durchführen. Re-maps a number from one range to another. That is, a value of fromLow would get mapped to toLow, a value of fromHigh to toHigh, values in-between to values in-between, etc. Beispiel Poti003: // Poti003 void setup() { Serial.begin(9600); } void loop() { float sensorValue = analogRead(0); // read Input on analog Pin 0 sensorValue = map(sensorValue, 0,1023,0,500); sensorValue = sensorValue/100; Serial.print (sensorValue); Serial.println(„ Volt“); delay(10); } Damit man zwei Dezimalstellen erhält, wird das zweite Intervall mit 100 multipliziert und das Ergebnis nach der Transformation durch 100 dividiert. Rechne die ausgelesenen Werte so um, dass sie den Werten der am analogen Eingang anliegenden Spannung entsprechen. Ändere den Sketch so ab, dass auf dem seriellen Monitor der Spannungswert ausgegeben wird, wie z.B.: „Die Spannung betragt: 2,1 V“ MAP-Funktion: LDR als Sensor Ziel: Eine LED soll leuchten, wenn ein LDR abgedunkelt wird. Aufgabe: Baue die Schaltung wie in der Abbildung, jedoch ohne LED und Vorwiderstand, auf. Schreibe einen Sketch (ähnlich wie Sketch „Poti002“ Starte den Sketch und öffne den seriellen Monitor. Dunkle mit deiner Hand den LDR ab und beobachte dabei die Werte auf dem seriellen Monitor. Aufgabe: Ergänze die Schaltung durch die rote LED mit Vorwiderstand. Ändere den Sketch so ab (Befehl IF und ELSE), dass die LED ab einem bestimmten Schwellenwert anfängt zu leuchten. Beispiel: } if (sensorValue < 500) { doThingA; } else { doThingB; } Aufgabe: Füge eine grüne LED mit Vorwiderstand hinzu. Ändere den Sketch so ab, dass nur die rote LED oberhalb eines bestimmten Schwellenwerts leuchtet und die grüne LED nur unterhalb des Schwellenwerts leuchtet.