Arduino – mehrere Schalter abfragen über einen Analogeingang

Hallo Leute,

sicher ist Euch das auch schon mal passiert – bei einem größeren Arduino Projekt gehen Euch die Digitaleingänge aus aber Ihr müsst noch einige Taster zusätzlich abfragen und habt nur noch einen Analogeingang frei …

Na – für dieses Problem habe ich vielleicht eine Lösung für Euch.

Etwas Theorie vorab:
Der ADC (Analog Digital Wandler) im Arduino hat eine Auflösung von 10Bit. Das ist 2^10 was im Dezimalsystem 1024 Schritten entspricht.
Da die Analog-Eingänge von 0-5 Volt messen können, bedeutet das:
5V / 1024 Schritte = 0,00488V/Schritt = 4,88 mV / Schritt.

Meine Zielsetzung war, 5 Schalter mit einem Analogeingang auslesen zu können – nach kurzer Überlegung wünschte ich mir zusätzlich, dass mehrere Tasten gleichzeit gedrückt sein könnten und daher auch dieser gleichzeitige Schließzustand korrekt erkannt werden soll !

Wie geht das nun – 5 Tasten über einen Eingang erkennen ?

Nun – aus der Digitaltechnik kenne ich noch die gute, alte Technik der Widerstandsnetzwerke für DACs – und ein binär gestuftes Widerstandsnetzwerk würde auch für diesen Zweck hier perfekt passen 😉

Binär gestuftes Widerstandsnetzwerk bedeutet, dass man mit einem Widerstand beginnt und dann die Widerstandswerde jeweils verdoppelt, also:

R, 2R, 4R, 8R, 16R ….

So – genug auf die Folter gespannt, hier ist eine Beispielschaltung:

Binäre beschaltetes Widerstandsnetzwerk
Binäre beschaltetes Widerstandsnetzwerk

Die Spannungen müssen nun mit dem Arduino gemessen werden und mit geringen Toleranzfeldern für die sichere Erkennung abgelegt werden. Die Toleranz muss immer kleiner sein, als der kleinste Änderungschritt der gemessenen Spannungen ! (Theoretisch kann man die Spannungsteiler auch ausechnen – wie aber schon gesagt – die 5V Spannung ist nicht wirklich präzise und daher empfehle ich die Messung !)

Mit dieser Anordnung der Schalter und Widerstände könnt Ihr sowohl einzeln gedrückte Tasten als auch mehrere oder alle gedrückte Tasten sicher erkennen und auslesen.

Die Auflösungsgrenze des Arduino liegt vermutlich bei ca. 8 Schaltern – dann unterschreitet die kleinste Spannungsdifferenz die 4,88 mV oder Störungen machen ein genaues Auslesen nicht mehr möglich.

Zum entprellen der Tasten würde ich noch empfehlen einen 100nf Kondensator vom Analogeingang gegen Masse zu legen (der schließt auch hochfrquente Störungen kurz).

So, ich hoffe mit diesem kurzen „Erklärbär“-Beitrag die Grundlage für neue Ideen in Euren eigenen Arduino/Raspberry Projekten gelegt zu haben.

Have fun and keep on Löting 🙂

Euer Löti

 

LordLoetkolben

Thomas ist aktiver Löter seit 36 Jahren und sieht die Welt in 16 Graustufen (Alternativtheorie: 98/2) 😉
pinterest

Autor: LordLoetkolben

Thomas ist aktiver Löter seit 36 Jahren und sieht die Welt in 16 Graustufen (Alternativtheorie: 98/2) ;-)

2 Gedanken zu „Arduino – mehrere Schalter abfragen über einen Analogeingang“

  1. Hallo,

    super erklärt nur wo finde ich genau diese Widerstände?
    Ich habe schon conrad und reichelt abgesucht aber ich finde immernur krumme angaben.

    1. Hallo Stefan,

      nun – exakt diese Werte wirst Du leider nicht alle in einer E Reihe finden.
      Man kann sich aber sehr einfach mit der Reihenschaltung oder Paralellschaltung von Widerständen behelfen.

      Ich habe mal beim großen „C“ nachgesehen und dort gibt es z.B. 1KOhm, 2KOhm, 16KOhm als Metallfilmwiderstände zu kaufen.
      2 x 1Kohm paralell = 500 Ohm !
      2 x 2KOhm in Reihe ergibt 4Kohm !
      2 x 16Kohm paralell ergibt 8KOhm !
      Damit ist die Reihe komplett mit genau den Werten die ich im Beispiel angeführt habe.
      (Man kann aber auch andere Widerstände nehmen – wichtig ist immer die Verdoppelung des Wertes zum nächsten Schalter)

      Weiterhin viel Spass beim Basteln und viele Grüße,
      Löti 🙂

      P.S.: In Reihenschaltung addieren sich die Widerstände, in Paralellschaltung gilt: R gesamt = R1*R2 / (R1+R2)

Schreib uns einen Kommentar :)