Dienstag, 1. September 2015

Mehrere Buttons an einem analog Eingang

In diesem Post geht es darum, wie man mit einem analog Eingang den aktuellen Status mehrer Buttons auslesen kann.

Die Funktionsweise

Der prinzipielle Unterschied zwischen einem analog Pin und einem digital Pin ist, dass der digital Pin entweder eine Spannung bemerkt, also 1, oder keine Spannung registriert, also 0. Der analog Pin, kann jedoch unterschiedliche Stärken von Spannung unterscheiden. In der Standardeinstellung kann der Arduino alles zwischen 0V und 5V unterscheiden. Hier ein Artikel, wie man den Messbereich der analog Pins ändern kann. Aus diesem Grund kann man auch mehrere Buttons mit einem analog Pin auslesen. Das funktionier über einen kleine Trick. Normalerweise wird ein Button über einen Pull-down Widerstand auf 0 gesetzt und sobald er gedrückt wird, mit den 5V Spannung verbunden, wodurch der Pin eine Spannung erkennt.
Es ist jedoch möglich, zwischen den Button und die +5V eine Widerstand zu setzen. Dadurch erkennt ein analog Pin nicht 5V, sondern einen bestimmten Wert darunter, abhängig von der Größe des Widerstands. Wenn man nun einen zweiten Button  anschließt, jedoch einen anders großen Widerstand zwischen den Button und +5V schaltet, so erkennt der analog Pin eine andere Spannung. Durch die verschiedenen Spannung kann dann der Arduino erkennen, welcher Button gedrückt wurde. 

Beispiel mit vier Buttons

Hier mal ein kleines Beispiel mit 4 Buttons und vier verschiedenen Widerständen(100 Ohm, 1kOhm, 4,7kOhm, 10kOhm):
Nun muss man einen Sketch schreiben, welcher jeweils die aktuelle Spannung an Pin A0, oder dem jeweiligen anderen analog Pin, ausliest. Dadurch kann man dann auf die Spannungsabschnitte schließen in denen sich die Spannung bewegt, wenn ein Button gedrückt wird. Beispielsweise beim Button mit dem 10kOhm Widerstand hat die Spannung immer zwischen 925 und 935 gependelt. Mit meinen Werten für die jeweiligen Button, sah der Sketch so aus:


Wie ihr an meinen Werten erkennen könnt, fließen doch noch relativ große Ströme. Es wäre also möglich, weitere Buttons an den analog Pin anzuschließen und dazu große Widerstände zwischen dem Button und den 5V schalten.

Wenn ihr die richtigen Werte ermittelt habt, werdet ihr feststellen, dass diese Möglichkeit super funktioniert. Einen Nachteil hat sie jedoch:
Bei dieser Verschaltung der Buttons kann immer nur ein Button gleichzeitig ausgelesen werden. Das bedeutet, sobald man zwei Buttons gleichzeitig drückt, nur der erkannt wird, welcher den kleineren Widerstand hat.

Kommentare:

  1. wenn du alle Widerstände in Serie schaltest und mit einem Knopf immer einen Widerstand überbrückst, kannst Du auch mehrere Knöpfe gleichzeitig drücken.
    sobald du einen Knopf drückst, nimmst du diesen Widerstand aus der Messung und der Strom steigt an. Durch die Serieschaltung kannst du die Widerstände addieren.


    AntwortenLöschen
  2. Stimmt, prima Idee. Daran habe ich gar nicht gedacht.

    AntwortenLöschen
  3. Parallelschaltung geht bestimmt auch.
    Der Widerstandswert errechnet sich bei zwei Widerständen :
    (W1 + W2)/2= gesamt
    der wird immer kleiner als der kleinste Widerstand.
    Lass den Wert "Status_A0" mit Serial.print mal ausgeben.

    Das der Wert schwankt (925-935 bei Button1) liegt wohl am kapazitiven Anteil der Schaltung.
    Wenn Du mit der Hand in die Nähe der Schaltung kommst wird sich der Wert schon ändern.
    So bist Du ein Teil eines "Kondensators" bestehend aus den Drähten (ohne Abschlusswiderstand), dem Steckbrett, der Luft und Dir. Mit verkürzen und reduzieren der Leitungen und Hochohmigen Pulldowns könnte das reduziert werden.
    Erst wenn eine Taste gedrückt wird, wird der "Kondensator" übersteuert, dann sollte der Wert auch genauer sein. Mit einer ausgesuchten Widerstandsreihe kannst Du die möglichen 16 Zustände bestimmt messen, wenn Du mehrere Tasten drückst. Die vier Widerstände sollten jeweils doppelt (oder mehr) so groß sein wie der Vorgänger. Dann sind noch die 10% oder 20% Fehlertoleranz der einfachen Widerstände zu berücksichtigen.
    Also eine Reihe "genau" ausmessen oder gleich mit Potis aufbauen.
    Dann klappt's bestimmt auch mit der Parallelschaltung!
    (die Serienschaltung geht mit vier gleichen kleinen Widerständen/Potis und einem hohen Pulldown einfacher)

    AntwortenLöschen