Kapazitive Berührung ist ein einfaches Mittel zur Erkennung von Benutzereingaben durch Messung der Dielektrizitätskonstante. Wenn es sich von einer Basismessung unterscheidet, kann es als Eingabe verwendet werden. In der Vergangenheit haben wir eine verwendet Berührungssensor MPR121 um ein Ereignis mit einem Raspberry Pi Pico auszulösen. Der MPR121 ist ein zuverlässiger QT-Sensor von Stemma, der in verschiedenen Formfaktoren für Krokodilklemmen und Standarddrahtstärken erhältlich ist. Wir lieben es so sehr, dass wir es auf unsere Liste gesetzt haben Beste Stemma QT- und Grove-Add-Ons-Seite. Aber gibt es eine Möglichkeit, dies ohne die Verwendung einer Sensorplatine zu tun?
Mit nur einem Stück Draht und einem 1-Mega-Ohm-Widerstand in einer Banane können wir unsere eigene Touch-Schnittstelle erstellen und einen gesunden Snack zu uns nehmen. In dieser Anleitung verwenden wir die Banane, um eine LED ein- und auszuschalten.
Warum etwas so Einfaches? Zu lernen, wie man eine LED ein- und ausschaltet, ist der beste Weg, um zu verstehen, wie jeder Teil Ihres Projekts funktioniert. Natürlich könnten wir die Banane in eine Leertaste verwandeln und spielen Flappy Birds, öffnen Sie damit ein Browserfenster und „rollen“ Sie einen Freund oder starten Sie einen Roboter, der wie verrückt zur Tür rennt. Aber bevor wir das tun können, müssen wir verstehen, wie und warum die Dinge funktionieren, und die bescheidene LED ist eine kostengünstige und einfache Möglichkeit, dies zu tun.
Für dieses Projekt benötigen Sie
Aufbau der Rennstrecke
Die Schaltung besteht aus zwei Teilen: dem Eingang und dem Ausgang. Der Eingang ist eine Banane (optional), die über ein langes Überbrückungskabel mit GPIO 16 auf dem Raspberry Pi Pico verbunden ist. GPIO 16 hat auch eine 1 Mega-Ohm-Widerstand um es mit GND zu verbinden. Dies ist ein Pulldown-Widerstand und stellt sicher, dass der GPIO-Pin eine konstante 0-V-Referenz sieht. Ohne sie wäre die Eingabe unregelmäßig. Dieser Vorgang kann für mehrere Eingänge wiederholt werden. Ihre einzigen Grenzen sind GPIO-Pins, 1-Mega-Ohm-Widerstände und Bananen.
Der Ausgang ist eine einfache LED, deren langes Bein (Anode) mit GPIO 15 und der kurze Bein (Kathode) über einen 100-Ohm-Widerstand mit GND verbunden ist.
Die Banane kann durch alles ersetzt werden, was leitend ist. Als Inputs können Alufolie, Knetmasse und anderes Obst/Gemüse verwendet werden. Sie können auch auf die kulinarischen Eingänge für blanke Drähte verzichten. In bestimmten Fällen funktioniert das besser.
Bauen Sie den Schaltkreis auf und überprüfen Sie Ihre Verbindungen noch einmal, bevor Sie fortfahren.
Konfigurieren von CircuitPython
Wir haben uns aus zwei Hauptgründen für CircuitPython für dieses Projekt entschieden. Erstens ist es so einfach zu bedienen und zu verstehen. Unser Code ist leicht zu lesen, zu debuggen und wir können ihn auf jedem Gerät schreiben. sogar ein Chromebook. Zweitens verfügt CircuitPython über das Touchio-Modul, das die Erstellung von Touch-Eingaben mithilfe des GPIO vereinfacht. Doch bevor wir mit dem Projekt beginnen können, müssen wir die neueste Version von CircuitPython auf den Raspberry Pi Pico schreiben.
1. Besuchen Sie die offizielle CircuitPython-Seite für Raspberry Pi Pico Und Laden Sie das neueste UF2-Firmware-Image herunter. Zum Zeitpunkt des Schreibens war dies CircuitPython 8.10. Wir haben uns für den Raspberry Pi Pico entschieden, da wir kein WLAN benötigen, aber dieses Projekt könnte zum Auslösen eines Web-Events verwendet werden, dafür benötigen Sie ein Raspberry Pi Pico W.
2. Während Sie die BOOTSEL-Taste gedrückt halten, verbinden Sie den Raspberry Pi Pico mit Ihrem Computer. Ein neues Laufwerk, RPI-RP2, wird angezeigt.
3. Kopieren Sie die heruntergeladene CircuitPython UF2-Datei nach RPI-RP2. Dadurch wird CircuitPython in den internen Flash-Speicher des Pico geschrieben. Ein neues Laufwerk, CIRCUITPY, wird angezeigt.
Den Code schreiben
Zum Schreiben des Codes haben wir Thonny unter Windows 10 verwendet. Sie können den Texteditor Ihrer Wahl verwenden, aber Thonny verfügt über eine hervorragende CircuitPython- (und MicroPython-)Integration, die die Verwendung zum Kinderspiel macht. Das Beste daran ist, dass es kostenlos und einfach auf Windows-, macOS- und Linux-Geräten zu installieren ist.
Den Code schreiben
1. Laden Sie Thonny herunter und installieren Sie es falls Sie es noch nicht haben. Thonny ist ein Python-Editor, der Python 3, MicroPython und CircuitPython abdeckt.
2. Öffnen Sie Thonny und gehen Sie zu Extras >> Optionen.
3. Wählen Sie „Interpreter“ aus, stellen Sie dann den Interpreter auf „CircuitPython“ und den Port auf „Automatisch“ ein und klicken Sie auf „OK“. Thonny stellt nun eine Verbindung zum Pico her, auf dem CircuitPython ausgeführt wird.
4. Klicken Sie auf Datei >> Öffnen und wählen Sie das CircuitPython-Gerät aus. Wählen Sie dann code.py aus. Code.py wird von CircuitPython als Hauptdatei für ein Projekt verwendet. Es ist so eingestellt, dass es beim Einschalten des Pico automatisch ausgeführt wird.
5. Löschen Sie jeglichen Code in code.py. Wenn Sie den Code benötigen, sichern Sie ihn unbedingt auf Ihrem Computer.
6. Importieren Sie vier Codemodule, die für das Funktionieren des Projekts erforderlich sind. Touchio wird verwendet, um eine kapazitive Berührungseingabe über einen GPIO-Pin zu erstellen. Die Zeit steuert, wie lange der Code zwischen den Aktionen pausiert. Board wird verwendet, um mit dem GPIO zu arbeiten. Der Import mit * bedeutet, dass wir den Modulnamen nicht angeben müssen. Digitalio wird verwendet, um den Status eines Pins zu steuern. Es kann eine Eingabe oder Ausgabe sein.
import touchio
import time
from board import *
from digitalio import DigitalInOut, Direction
7. Erstellen Sie ein Objekt, eine LED, setzen Sie den GPIO-Pin auf GP15 und legen Sie ihn dann als Ausgang fest. Dadurch wird sichergestellt, dass beim Auslösen der LED Strom vom Pin GPIO 15 zur Anode der LED fließt. Da die Kathode über den 100-Ohm-Widerstand mit GND verbunden ist, schaltet der gesamte Stromkreis die LED ein.
led = DigitalInOut(GP15)
led.direction = Direction.OUTPUT
8. Erstellen Sie ein Objekt, led_state, und speichern Sie darin den ganzzahligen Wert 0. Mit diesem Objekt wird der aktuelle Zustand der LED erfasst. Es kann entweder ausgeschaltet (0) oder eingeschaltet (1) sein.
led_state = 0
9. Erstellen Sie ein Objekt, touch_pin um eine Verbindung zwischen dem Code und dem physischen GPIO-Pin herzustellen.
touch_pin = touchio.TouchIn(GP16)
10. Erstellen Sie eine Schleife, um den Code kontinuierlich auszuführen.
while True:
11. Erstellen Sie innerhalb der Schleife eine Druckfunktion, die den aktuellen Status des Touch-Eingabepins meldet. Wir verwenden %s, um den in touch_pin.value gespeicherten Wert zu verwenden und ihn in eine Zeichenfolge zur Verkettung mit dem Text umzuwandeln.
print("The pin state is %s" % touch_pin.value)
12. Schreiben Sie einen bedingten Test, um zu überprüfen, ob der Eingang berührt wurde und ob die LED ausgeschaltet ist. Beide Tests müssen bestanden werden, damit der bedingte Test bestanden wird.
if touch_pin.value == True and led_state == False:
13. Stellen Sie die LED auf Einschalten ein und aktualisieren Sie dann das led_state-Objekt auf 1. damit der Code weiß, dass die LED leuchtet. Eine halbe Sekunde schlafen um ein versehentliches Entprellen zu verhindern (doppeltes Drücken). Dieser Code wird nur ausgeführt, wenn der Bedingungstest erfolgreich ist.
led.value = True
led_state = 1
time.sleep(0.5)
14. Erstellen Sie einen bedingten Test, um zu prüfen, ob der Eingang berührt wurde und die LED derzeit leuchtet. Dieser Code schaltet die LED aus.
elif touch_pin.value == True and led_state == True:
15. Schalten Sie die LED aus und aktualisieren Sie das led_state-Objekt damit der Code weiß, dass die LED aus ist, und dann eine halbe Sekunde innehalten.
led.value = False
led_state = 0
time.sleep(0.5)
16. Halten Sie den Code außerhalb der bedingten Tests, aber immer noch innerhalb der Schleife, für 0,1 Sekunden an. Jedes Mal, wenn die Schleife iteriert, wird sie 0,1 Sekunden lang angehalten. Dies ist nützlich, um den Projektcode zu beschleunigen.
time.sleep(0.1)
17. Speichern Sie den Code in code.py auf dem CircuitPython-Gerät (Himbeer-Pi-Pico).
18. Wenn nicht, sollte der Code automatisch ausgeführt werden Klicken Sie auf Stopp und dann auf Ausführen.
19. Berühren Sie die Banane, um die LED ein-/auszuschalten.
Vollständige Codeliste
import touchio
import time
from board import *
from digitalio import DigitalInOut, Direction
led = DigitalInOut(GP15)
led.direction = Direction.OUTPUT
led_state = 0
touch_pin = touchio.TouchIn(GP16)
while True:
print("The pin state is %s" % touch_pin.value)
if touch_pin.value == True and led_state == False:
led.value = True
led_state = 1
time.sleep(0.5)
elif touch_pin.value == True and led_state == True:
led.value = False
led_state = 0
time.sleep(0.5)
time.sleep(0.1)