Erste „Gehversuche“ mit ARDUINO #2

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.