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:
Welche Werte soll ich den Widerständen geben? Und warum?
Wie kann ich eine solche Schaltung anschließen, damit mein Arduino nicht brät?
Was Sie suchen, wird als Spannungsleiter bezeichnet .
Nachfolgend finden Sie einige Schemata, die ein Beispiel für eine Spannungsleiter zeigen.
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:
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:
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.
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.
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.
Ich werde nur Dinge erwähnen, die die anderen Antworten nicht angesprochen haben:
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.
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.
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:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Jetzt erhalten Sie unterschiedliche Werte für unterschiedliche Tastenkombinationen. Ich denke, du suchst danach.
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:
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:
Dies kann leicht auf weitere Schaltflächen verallgemeinert werden.
pjc50
Schoham
Schoham
Phil Frost