Welche Widerstände sind zu verwenden, um mehrere Tasten mit einem einzigen analogen Pin zu lesen?

EDIT: Danke, ihr habt alle sehr geholfen! Ricardo hat alles gut zusammengefasst, also werde ich seine Antwort als die beste markieren, aber alle Antworten haben mir geholfen, zu verstehen. Danke noch einmal :).

Ich habe einen Arduino Uno R3 und möchte eine Schaltung anschließen, die es mir ermöglicht, mehrere Tasten mit einem einzigen analogen Eingangspin zu lesen. Grundsätzlich möchte ich, dass die Schaltung ein diskretes Potentiometer nachahmt, aber ich möchte Tasten anstelle eines Knopfes verwenden. Wie kann ich das machen? Und woher weiß ich, welche Widerstände ich in meiner Schaltung verwenden soll?

Hier ist ein Bild von der Schaltung, die ich im Sinn habe:

Schaltkreis

Welche Werte soll ich den Widerständen geben? Und warum?

Wie kann ich eine solche Schaltung anschließen, damit mein Arduino nicht brät?

Wenn das die gesamte Schaltung ist, liest das Arduino immer 5 V am ADC-Pin. Auf der positiven Seite ist es mit allen Widerstandswerten dort sicher.
Oh. Was muss ich also tun, damit es die Werte erhält, die es erhalten würde, wenn es den Strom verwenden würde?
Das Arduino-Board hat eine Auflösung von 10 Bit, reicht das für 15 Tasten? und wie berechne ich die Dinge, die du gesagt hast?

Antworten (4)

Was Sie suchen, wird als Spannungsleiter bezeichnet .

Nachfolgend finden Sie einige Schemata, die ein Beispiel für eine Spannungsleiter zeigen.

Schaltpläne der Spannungsleiter

Die Schaltpläne sind vom LCD Keypad Shield von DFRobot.com verlinkt .

In diesem Fall wird die Spannungsleiter verwendet, um Eingaben von 5 Tasten mit nur einem analogen Eingang im Arduino zu erhalten. Die Tasten sind als 4 Cursorpfeile und eine Auswahltaste angeordnet, wie im Bild unten:

LCD-Tastaturschutz

Hier ist ein Link zu weiteren Informationen zu diesem Design , einschließlich einer Arduino-Skizze, die die Werte aus der Spannungsleiter liest und dekodiert und bestimmt, welche Taste gedrückt wurde.

Hier ist noch ein weiteres Beispiel , jetzt von Freetronics.com , mit mehr Informationen darüber, wie die Leiter funktioniert.

Zurück zu Ihrer Frage, die Widerstandswerte werden so ausgewählt, dass jeder einen Spannungsabfall am analogen Pin verursacht, der von den anderen Tastendrücken unterschieden werden kann. Normalerweise sehe ich Fälle, in denen die Widerstandswerte exponentiell ansteigen (330R, 620R, 1K und 3K3 in diesem Fall), aber ich denke, Sie könnten ähnliche Werte verwenden (alle als 330R). Außerdem ist R2 dazu da, einen Kurzschluss zwischen 5V und GND zu vermeiden, wenn die erste Taste gedrückt wird.

Wenn Sie beispielsweise 15 Tasten zum Anordnen hätten, müssten Sie 15 Widerstände haben, und Sie müssten sicherstellen, dass der Spannungsabfall zwischen benachbarten Widerständen hoch genug ist, um von den Messwerten am analogen Pin unterschieden zu werden. Sie müssen berücksichtigen, dass der ATmega328P einen 10-Bit-ADC hat (dh Ihnen Werte zwischen 0 und 1023 liefert), aber nur eine 4-Bit-Genauigkeit zeigt (dh bei jedem Lesevorgang einen Fehler von etwa 10 anzeigt). Sie sollten also nach Widerstandswerten suchen, die einen Spannungsabfall verursachen, der Ihnen bei jedem Aufruf von analogRead() mehr als 10 gibt. Dadurch wird die maximale Anzahl der Schaltflächen begrenzt, die Sie auf diese Weise lesen können.

Es gibt hauptsächlich 3 Möglichkeiten, um die Widerstandswerte zu erhalten:

  1. Sie können den Spannungswert für jede Taste berechnen, indem Sie diese Taste als gedrückt betrachten, die offenen Teile des Spannungsschaltkreises entfernen und das Ohmsche Gesetz anwenden. Wählen Sie also einen Knopf, ersetzen Sie ihn durch einen Draht und entfernen Sie alle anderen Knöpfe. Dann können Sie die Spannung für diese Taste berechnen.

  2. Sie können die Schaltung auch simulieren. Haben Sie bemerkt, dass Sie die gepostete Schaltung von Kimliv simulieren können? Wenn Sie auf seine Schaltpläne klicken, gelangen Sie zu CircuitLabs, einer Website, auf der Sie Schaltkreise simulieren können. Dort können Sie Widerstandswerte ändern, Tasten drücken und die Ergebnisse sehen. Sie können auch andere verfügbare Schaltungssimulationspakete verwenden.

  3. Bau es. Legen Sie die Schaltung in einem Steckbrett an, probieren Sie dann verschiedene Widerstandswerte aus und messen Sie den Spannungsabfall mit Arduino und Serial.println(). Sie können dafür auch ein digitales Multimeter (DMM) verwenden.

Beachten Sie, dass die Spannungsleiter jeweils nur einen Tastendruck registriert. Wenn Sie mehr als eine Taste drücken, wird nur diejenige ausgewählt, die sich weiter oben in den Schaltplänen befindet.

Warum haben Sie diese spezifischen Widerstandswerte gewählt? und was wäre, wenn ich 15 Knöpfe hätte?
Die Widerstandswerte werden so ausgewählt, dass jeder einen Spannungsabfall erhält, der sich von anderen Tasten unterscheiden lässt, wenn sie gedrückt werden. Normalerweise sehe ich Fälle, in denen die Widerstandswerte exponentiell ansteigen (330R, 620R, 1K und 3K3 in diesem Fall), aber ich denke, Sie könnten ähnliche Werte verwenden (alle als 330R).
Wenn Sie 15 davon haben, müssen Sie sicherstellen, dass der Spannungsabfall zwischen benachbarten Widerständen hoch genug ist, um von den Messwerten am analogen Pin unterschieden zu werden. Sie müssen berücksichtigen, dass der ATmega328P einen 10-Bit-ADC hat (dh Ihnen Werte zwischen 0 und 1023 liefert), aber nur eine 4-Bit-Genauigkeit zeigt (dh bei jedem Lesevorgang einen Fehler von etwa 10 anzeigt). Sie sollten also nach Widerstandswerten suchen, bei denen die Spannung abfällt, was bei jedem Aufruf von analogRead() mehr als 10 ergibt.
Gibt es eine gute Möglichkeit, das zu testen? Ich meine, außer 100 Widerstände mit unterschiedlichen Werten zu kaufen und auszuprobieren?
Sie können den Spannungswert für jeden Tastendruck berechnen, indem Sie die offenen Teile des Spannungsschaltkreises entfernen und das Ohmsche Gesetz anwenden. Wählen Sie also einen Knopf, ersetzen Sie ihn durch einen Draht und entfernen Sie alle anderen Knöpfe. Dann finden Sie die Spannung für diese Taste. Beachten Sie, dass die Spannungsleiter jeweils nur einen Tastendruck registriert.
Sie können die Schaltung auch simulieren. Haben Sie bemerkt, dass Sie die gepostete Schaltung von Kimliv simulieren können? Wenn Sie auf seine Schaltpläne klicken, gelangen Sie zu CircuitLabs, einer Website, auf der Sie Schaltkreise simulieren können. Dort können Sie die Widerstandswerte ändern und die Ergebnisse sehen. Das sind die drei Alternativen, die Sie haben: Berechnen, Simulieren und Bauen.

Ich werde nur Dinge erwähnen, die die anderen Antworten nicht angesprochen haben:

  1. Beachten Sie, dass ein Ende an VCC und das andere an Masse gehen muss und Ihr Messpunkt irgendwo in der Mitte liegen muss.

    Ihre ursprüngliche Schaltung hat keinen Erdungspfad und daher fließt kein Strom. Der Eingang des Arduino kann als extrem großer Widerstand betrachtet werden, kein guter Weg zur Masse.

  2. Sinnvolle Mindestwerte für Widerstände.

    Da ein Ende der Leiter an die Stromversorgung und das andere an Masse geht, müssen Sie sicherstellen, dass (a) wenn Sie alle Tasten drücken, nicht alle Widerstände umgangen und Ihre Stromversorgung kurzgeschlossen werden, und (b) an der Mindestwiderstand der Leiter, der im kleinsten Widerstand fließende Strom wird nicht zu viel Leistung darin verbrauchen.

    Bei einer 5-V-Versorgung und dem 2-kΩ-Widerstand von Kimliv würden (nach dem Ohmschen Gesetz) 2,5 mA fließen und (nach P = VI) 12,5 mW Leistung verbrauchen. Sogar kleine winzige oberflächenmontierte Widerstände haben eine Nennleistung von 63 mW, das ist also in Ordnung.

    Ihr ursprünglicher 100R-Widerstand hätte einen Strom von 50 mA und eine Verlustleistung von 250 mW, wodurch die winzigen Widerstände durchbrennen und normal große Widerstände merklich warm werden.

  3. Maximal sinnvolle Werte für Widerstände.

    Große Widerstände sind lauter. Sie müssen auch eine kleine Menge Strom in den ADC fließen lassen, um Messwerte zu erfassen. Bei Werten über 100.000 (oder dem Versuch, sehr schnelle Messungen durchzuführen) müssen Sie diese Effekte möglicherweise berücksichtigen.

Diese Schaltung hängt nicht von bestimmten absoluten Werten ab, daher funktioniert es gut, 1k oder 2k willkürlich als sinnvolles Minimum auszuwählen und die anderen basierend auf diesem Wert auszuwählen.

Versuchen Sie diese Schaltung:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Jetzt erhalten Sie unterschiedliche Werte für unterschiedliche Tastenkombinationen. Ich denke, du suchst danach.

Ok, aber warum hast du diese Werte für die Widerstände gewählt? und was wäre, wenn ich 15 Tasten in einem ähnlichen Setup hätte?
Wichtig ist, dass wenn man irgendeinen Wert addiert, man keinen anderen als Ergebnis bekommt
Sie benötigen die 2k oben zwischen 5V und GND, um einen Kurzschluss zu verhindern. der Rest muss meiner oberen Aussage folgen
Ist das 2k sicher? wie hast du dich für 2k entschieden?
Wenn Sie das Ohmsche Gesetz nehmen, haben Sie: I = U / R in dieser Schaltung. Im schlimmsten Fall erhalten Sie, wenn Sie die Taste SW1 drücken, I = 5/2000 => I = 0,0025 A (2,5 mA), was für den Arduino in Ordnung ist
Wenn Sie mehrere Tasteneingaben gleichzeitig erkennen möchten, verwenden Sie diese Schaltung: i2.wp.com/tronixstuff.com/wp-content/uploads/2012/02/…
Welche Werte sind für das Arduino ok?
Die Werte in meiner Zeichnung sind gut
@kimliv Tut mir leid, ich bin ein absoluter Anfänger. Komme aus dem Softwarebereich und habe gerade mit Elektronik angefangen. Wenn ich also 10 Tasten habe, was sind Ihre Vorschläge zur Auswahl der Widerstandswerte? Irgendwelche 10 Werte (mit fast gleichem Unterschied) von 330 bis 4k???

Neben der Auswahl vernünftiger Widerstandswerte in Bezug auf den Stromverbrauch möchten Sie tatsächlich, dass verschiedene Schaltflächen in der Leiter gleichmäßige Spannungsschritte am ADC erzeugen, was die Konvertierung einfacher macht und die Störfestigkeit erhöht. Betrachten Sie die folgende Spannungsleiter:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Im Idealfall möchten Sie, dass Tasten Spannungen mit 0,25 · VCC-Schritten erzeugen: 0, 0,25, 0,5, 0,75. Der fünfte Spannungspegel, VCC, wird erkannt, wenn keine Tasten gedrückt werden.

Sie können den R0-Wert frei wählen und dann die verbleibenden Werte berechnen, um die gewünschten Spannungsschritte zu erzeugen. Angenommen R0 = 1 kOhm:

  • R1 sollte 1/4 VCC abfallen, also R1/(R1+R0) = 1/4, R1 = R0/3 = 330 Ohm
  • R1+R2 sollte 1/2 VCC fallen lassen, also (R1+R2)/(R0+R1+R2) = 1/2, R2 = 660 Ohm
  • R1+R2+R3 sollte 3/4 VCC abfallen lassen, also (R1+R2+R3)/(R0+R1+R2+R3) = 3/4, R3 = 2 kOhm

Dies kann leicht auf weitere Schaltflächen verallgemeinert werden.