Einstieg Mikrocontroller mit dem Arduino         

6 Sensoren         


Elektronik-Labor   Projekte   AVR 





Ein optischer Lichtschalter

Die LED an A0 dient als Lichtsensor. Der Arduino misst laufend die Helligkeit. Nur bei einer plötzlichen Änderung wird die Beleuchtung an D2 eingeschaltet und bleibt dann einige Sekunden lang an. Diese Steuerung könnte als Notlicht verwendet werden. Wenn plötzlich das Licht ausgeht, geht das kleine Licht an.

Das Programm bildet aus den Messergebnissen in u einen gleitenden Mittelwert u1, der später als letzter Wert in U2 geschrieben wird. Wenn sich beide um mehr als 2 unterscheiden, ist eine plötzliche Lichtänderung erkannt. Zur Kontrollzwecken werden die Messwerte auch an den PC gesendet.

//Sensor1, Optischer Sensor LED an A0
// Ausgabe an D2
int u, u1, u2, t;
void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT);

void loop() {
  u=analogRead(A0);
  u1=(u1*3+u)/4;
  if(abs(u1-u2) > 2){
   
digitalWrite (2,1);
    t=0;
  }
  u2=u1;
  Serial.print("A0 = ");
  Serial.print(u1);
  Serial.print("   ");
  Serial.println(u2);
  t++;
  if (t>100)digitalWrite (2,0);
  delay(100);     
}

 

 
Berührungssensor

Diesmal soll das Licht eingeschaltet werden, solange man einen Draht mit dem Finger berührt. Man fasst dabei wirklich nur eine Stelle an, die mit dem Port 9 verbunden ist. Weil man ja als Mensch elektrisch isoliert steht oder sitzt, wird durch die Berührung kein Stromkreis geschlossen. Aber der Mensch speichert elektrische Ladung wie ein Kondensator. Das Programm misst immer wieder, wie schnell sich die Spannung am Pin ändern lässt. Wenn man anfasst, geht das etwas langsamer.

Port 9 wird immer wieder zwischen den Zuständen Ausgang und Eingang umgeschaltet. Als Eingang wird der Pin über den Widerstand von 100 kΩ hochgezogen, was weniger als eine Mikrosekunde dauert. Wenn man aber anfasst, dauert es etwas länger, sodass nach einer Mikrosekunde noch ein 0-Zustand erkannt wird.

 
//Sensor2, Berührungssensor
//D9 100k nach 5V
//LED an D2 

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

void loop() {
  pinMode(9, OUTPUT);
  digitalWrite(9,0);
  pinMode(9, INPUT);
  delayMicroseconds(1);
  int d= digitalRead(9);
  Serial.print(d);
  if (d==0) digitalWrite(2,1);
  if (d==1) digitalWrite(2,0);
 
delay (100);
}

 


Kondensator als Temperatursensor

Ein keramischer Kondensator mit 100 nF (104) wird zwischen A0 und REF angeschlossen, also an die Referenzspannung von +5 V. Mit dem Draht nach GND kann man den rechten Pin einmal kurz antippen, damit sich der Kondensator auflädt. Nach einiger Zeit stellt sich dann ein Messwert um 300 ein.

 

 
//Sensor 3, 100nF A0 nach 5V, Temperatursensor

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

void loop() {
  //Serial.print("A0 = ");
  Serial.println(analogRead(A0));
 
delay(100);     
}

 
Berühre dann den Kondensator mit zwei Fingern. Dadurch wird er etwas erwärmt. Das verringert seine Kapazität und erhöht seine Spannung, weil die Ladung ja gleich bleibt (Physik 12 Klasse: Ladung = Spannung * Kapazität). Der Messwert sinkt, weil die Kondensatorspannung von 5 V subtrahiert wird. Lasse den Kondensator dann  los. Die Temperatur sinkt langsam wieder, und die Spannung kehrt wieder auf den alten Wert zurück. 

 


Der NTC-Temperatursensor

 

Gleiches Programm, anderer Sensor. Der NTC-Widerstand sieht aus wie Kondensator, ist aber kleiner und grau. Tatsächlich ist es ein Widerstand, der sich mit steigender Temperatur verkleinert. NTC steht für Negativer Temperatur-Koeffizient. Auf unserem Sensor steht 10k, denn er hat bei 25 Grad Celsius gerade 10 kΩ. Baue eine Reihenschaltung mit einem zweiten Widerstand mit 10 kΩ. Im Seriellen Monitor kannst du dann beobachten, wie sich die Spannung ändert. Versuche einmal einen Messwert von 512 zu erreichen. Dann hat der Sensor gerade 25 Grad.

 

 


Am Ende haben wir versucht, die gemessenen Werte in Grad Celsius umzurechnen. Es funktioniert, ist aber nicht sehr genau. Die Versuche haben gezeigt, dass zwischen den einzelnen Exemplaren des Sensors Abweichungen bis zu zwei Grad in beiden Richtungen auftreten können. Jeder muss den Wert 25 in  temp = temp + 25 individuell anpassen.


//Sensor 4, NTC-Temperatursensor
int temp;
int u;
void setup() {
  Serial.begin(9600);
}

void loop() {
  u=analogRead(A0);
  temp = u-512;
  temp = temp / 16;
  temp = temp + 25;
  Serial.print(temp);
  Serial.println(" Grad  ");
 // Serial.println(analogRead(A0));
  delay(100);      
}



Download: Arduino6.zip 

Zurück: ArduinoKurs5.htm


Elektronik-Labor   Projekte   AVR