Zum Inhalt springen

Analog Input

    Der Analog Input vom Arduino wird verwendet, um analoge Sensoren auszulesen. Dabei handelt es sich zum Beispiel um Potentiometer, Fotowiderstände (LDR), Druck- und Temperatursensoren. Im Gegensatz zu digitalen Signalen, die entweder HIGH oder LOW sind, liefern analoge Sensoren auch Zwischenwerte.

    Analog Input Schaltplan

    Im Beispiel ist ein Potentiometer ans Arduino-Board angeschlossen.

    Die beiden äußeren Beine werden mit dem GND und dem 5V+ verbunden, das mittlere mit einem Analog Input. Das Arduino-Board kann nun das Verhältnis der Widerstände zueinander ermitteln und liefert durch den Befehl analogRead(Pin); Werte zwischen 0 und 1023.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Darüber hinaus ist eine LED mit der Anode (langes Beinchen) über einen Widerstand von 220 Ohm am Pin 13 und der Kathode (kurzes Beinchen) am nebenliegenden GND angeschlossen.

    Codebeispiel

    Das Beispiel AnalogInput (File>Examples>Analog>AnalogInput) aus der Arduino-Software lässt die LED verschieden schnell blinken.

    // von David Cuartielles und Tom Igoe
    
    int sensorPin = 0;
    int ledPin = 13;
    int sensorValue = 0;
    
    void setup() {
      pinMode(ledPin, OUTPUT);
    }
    
    void loop() {
      sensorValue = analogRead(sensorPin);
      digitalWrite(ledPin, HIGH);
      delay(sensorValue);
      digitalWrite(ledPin, LOW);
      delay(sensorValue);
    }

    Im Beispiel wird das mittlere Bein des Potentiometers im AnalogIn 0 ausgelesen. Der Wert, der zwischen 0 und 1023 liegt, wird als Verzögerung (delay) in das Programm eingefügt und reguliert so die Blinkgeschwindigkeit der LED.

    Schaltplan mit Fotowiderstand (LDR)

    Nun kann man das Potentiometer auch gegen einen anderen Sensor austauschen. Wie beim Potentiometer benötigt das Arduino-Board ein Verhältnis zweier Widerstände, um einen analogen Wert zu erfassen.

    Arduino Analog Input LDR
    Fotowiderstand (LDR) am Analog Input des Arduinos (Grafik mit Fritzing erstellt.)

    Ein Fotowiderstand (LDR) im Beispiel allein kann dieses Verhältnis nicht liefern. Man benötigt einen zusätzlichen Referenzwiderstand. Die Größe (Widerstandswert) des Referenzwiderstands richtet sich nach dem verwendeten Sensor und dem Umfeld, in dem er betrieben wird.

    Um den Referenzwiderstand des Fotowiderstands auszurechen, muss sein Widerstand in einem hellen und einem dunklen Umfeld bestimmt werden. Beide Werte werden miteinander multipliziert und aus dem Ergebnis die Wurzel gezogen.

    Wurzel aus (Rmin * Rmax) = Rref

    Es ergibt sich der Referenzwiderstand. Widerstände haben allerdings genormte Werte. Es reicht, einen Widerstand zu wählen, der nah dem Ausgerechneten liegt. Im Beispiel beträgt der Widerstand 100kOhm.

    Alternativ kann man aber auch einfach ausprobieren, mit welchem Widerstand man ausreichende Ergebnisse erzielt.

    Schaltplan mit druck sensitivem Sensor (FSR)

    Dieses Beispiel zeigt, wie ein druck sensitiver Sensor (FSR) angeschlossen wird. Auch für diesen Sensor wird ein Referenzwiderstand benötigt.

    Arduino Analog Input FSR
    Schaltung mit druck sensitivem Sensor (Grafik mit Fritzing erstellt)
    0 0 votes
    Article Rating
    33 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    Klaus
    7 Jahre zuvor

    Hallo, bin neu und suche gerade nach meinem Problem im netz – aber ich finde nichts :-(
    Kann mir jemand helfen?

    int pot=analogRead(poti); //read the analogvalue
    if(analogRead(poti)==HIGH) {spd=map(pot, 0,1023, 1,1000);} //map 0-1023 to 1-1000
    else {spd=150;}

    Ich möchte, wenn ich den mittelstift des Potis rauszihe aus A0, das dann sofort spd=150 aus ELSE übernommen wird, das geht aber nicht :-(

    Danke

    Gerhard
    7 Jahre zuvor

    Kann man mit den Analogeingang auch einen erdfeuchtesensor auslesen?
    Diesen da z.Bsp.?
    https://www.ramser-elektro.at/shop/bausaetze-und-platinen/giess-o-mat-sensor-bausatz/

    Felix
    8 Jahre zuvor

    Hallo, bin ein absoluter Neuling. Mir ist nicht ganz klar woher der Arduino weiß ob er einen digitalen PWM Pin ansteuern soll oder einen der analogen A0-A5 Pins.

    beides mal würde doch der Befehl
    analogWrite(Pin, X); heißen?

    Genauso ist mir nicht klar, wenn ich definiere
    pinMode(3, INPUT); woher der Arduino nun weiß ob der den analogen Pin A3 als Input definieren soll oder den digitalen PWM Pin 3?

    Vielen Dank schon einmal falls mir da jemand weiterhelfen kann.

    Sebi
    9 Jahre zuvor

    Hallo Stefan,

    kurze Frage und zwar möchte ich über ein Labor-Netzgerät Werte zwischen 0…5 V in den Analogen Input werfen und damit dann eine Motordrehzahl steuern. Ist das nur mit dem Arduino Realisierbar ? Zum Betreiben des Motors würde ich dann noch einen Transistor zwischen schieben damit der auch genung Spannung hat.

    Vielen Danke

    Sebi

    10 Jahre zuvor

    Hi Matrixxx,

    das weiß ich auch nicht genau, aber ich glaube, dafür ist der aref-Pin da. Vielleicht hilft Dir dieses Tutorial weiter.

    Liebe Grüße

    Stefan“

    matrixxx
    10 Jahre zuvor

    super tutorial, vielen dank. aber ich hätte da noch einen fall:
    ich möchte spannungen z.b. zwischen 2-3.5 volt messen – ebenfalls mit 10bit genauigkeit. wie realisiert man sowas?

    danke dir :)
    michael.

    joe
    10 Jahre zuvor

    hallo, bin neueinsteiger und deine tutorials sind extrem hilfreich! ;-)
    mal ne frage am rande: hat das eigentlich einen bestimmten grund, warum die variablen zu anfang des programms gleich initialisiert werden? Etwa die integer variable „sensorvalue“? würde das auch gehen, wenn man sie nur deklariert, also:
    int sensorvalue;
    im verlauf des programmes erhält sie ja eh einen anderen wert…!?

    Bensch
    11 Jahre zuvor

    Ich hoffe dir ist bewusst dass du ein verdammtes Genie bist

    Bensch
    11 Jahre zuvor

    Ich hoffe dir ist b

    Phil
    11 Jahre zuvor

    Hallo Stefan.
    Danke für den Tipp. Funktioniert hat es leider nicht. Ich kann es mir nicht erklären, wieso dass es bei einem delay(500) geht und bei einem delay(1000) nicht. die Spannung ist wie gesagt konstant. Aber ich werde den Sketch halt nun so nutzen. ;) danke