Le toucher capacitif est un moyen simple de détecter l’entrée de l’utilisateur en mesurant la constante diélectrique. Si elle est différente d’une mesure de référence, elle peut être utilisée comme entrée. Par le passé, nous avons utilisé un Capteur tactile MPR121 pour déclencher un événement à l’aide d’un Raspberry Pi Pico. Le MPR121 est un capteur Stemma QT fiable qui se présente sous divers facteurs de forme pour les pinces crocodiles et les calibres de fil standard. Nous l’aimons tellement que nous l’avons mis sur notre liste de meilleure page d’ajouts Stemma QT et Grove. Mais y a-t-il un moyen de le faire sans utiliser de carte capteur ?
En utilisant juste un morceau de fil et une résistance de 1 méga ohm dans une banane, nous pouvons créer notre propre interface tactile et prendre une collation saine. Dans ce tutoriel, nous utiliserons la banane pour allumer et éteindre une LED.
Pourquoi quelque chose d’aussi simple ? Apprendre à allumer/éteindre une LED est le meilleur moyen de comprendre le fonctionnement de chaque partie de votre projet. Bien sûr, nous pourrions transformer la banane en barre d’espace et jouer Oiseaux volants, utilisez-le pour ouvrir une fenêtre de navigateur et « Rick-roll » un ami ou démarrez un robot pour faire une course folle vers la porte. Mais avant de pouvoir faire cela, nous devons comprendre comment et pourquoi les choses fonctionnent, et l’humble LED est un moyen simple et bon marché de le faire.
Pour ce projet, vous aurez besoin
Construire le circuit
Il y a deux parties dans le circuit : l’entrée et la sortie. L’entrée est une banane (en option), connectée au GPIO 16 sur le Raspberry Pi Pico à l’aide d’un long fil de liaison. GPIO 16 dispose également d’un Résistance 1 Méga Ohm pour le connecter à GND. Il s’agit d’une résistance pulldown et garantit que la broche GPIO voit une référence 0V constante. Sans cela, l’entrée serait erratique. Ce processus peut être répété pour plusieurs entrées, vos seules limites sont les broches GPIO, les résistances de 1 méga ohm et les bananes.
La sortie est une simple LED avec la jambe longue (anode) connectée au GPIO 15 et la jambe courte (cathode) connectée à GND via une résistance de 100 ohms.
La banane peut être remplacée par tout ce qui est conducteur. Du papier d’aluminium, du play-doh et d’autres fruits/légumes peuvent être utilisés comme intrants. Vous pouvez également renoncer aux entrées culinaires pour les fils dénudés. Dans certains cas, cela fonctionne mieux.
Construisez le circuit et vérifiez vos connexions avant de continuer.
Configuration de CircuitPython
Nous avons choisi CircuitPython pour ce projet pour deux raisons principales. Premièrement, il est si facile à utiliser et à comprendre. Notre code est facile à lire, à déboguer et nous pouvons l’écrire sur n’importe quel appareil, même un Chromebook. Deuxièmement, CircuitPython possède le module Touchio qui facilite la création d’entrées tactiles à l’aide du GPIO. Mais avant de pouvoir démarrer le projet, nous devons écrire la dernière version de CircuitPython sur le Raspberry Pi Pico.
1. Accédez à la page officielle de CircuitPython pour le Framboise Pi Pico et téléchargez la dernière version de l’image du micrologiciel UF2. Au moment de la rédaction, il s’agissait de CircuitPython 8.10. Nous avons choisi le Raspberry Pi Pico car nous n’avons pas besoin de Wi-Fi, mais ce projet pourrait être utilisé pour déclencher un événement Web, pour cela vous aurez besoin d’un Raspberry Pi Pico W.
2. Tout en maintenant le bouton BOOTSEL enfoncé, connectez le Raspberry Pi Pico à votre ordinateur. Un nouveau lecteur, RPI-RP2 apparaîtra.
3. Copiez le fichier CircuitPython UF2 téléchargé sur RPI-RP2. Cela écrira CircuitPython dans le stockage flash interne du Pico . Un nouveau lecteur, CIRCUITPY apparaîtra.
Écrire le code
Pour écrire le code, nous avons utilisé Thonny sur Windows 10. Vous êtes libre d’utiliser votre choix d’éditeur de texte, mais Thonny a une excellente intégration CircuitPython (et MicroPython) qui en fait un jeu d’enfant à utiliser. Mieux encore, il est gratuit et facile à installer sur les appareils Windows, macOS et Linux.
Écrire le code
1. Téléchargez et installez Thonny si vous ne l’avez pas déjà. Thonny est un éditeur Python qui couvre Python 3, MicroPython et CircuitPython.
2. Ouvrez Thonny et allez dans Outils >> Options.
3. Sélectionnez Interprète, puis définissez l’interpréteur sur CircuitPython, port sur automatique, puis cliquez sur OK. Thonny va maintenant se connecter au Pico exécutant CircuitPython.
4. Cliquez sur Fichier >> Ouvrir et sélectionnez le périphérique CircuitPython. Sélectionnez ensuite code.py. Code.py est utilisé par CircuitPython comme fichier principal d’un projet. Il est configuré pour s’exécuter automatiquement lorsque le Pico est mis sous tension.
5. Supprimez tout code dans code.py. Si vous avez besoin du code, assurez-vous de le sauvegarder sur votre ordinateur.
6. Importez quatre modules de code nécessaires au fonctionnement du projet. Touchio est utilisé pour créer une entrée tactile capacitive à l’aide d’une broche GPIO. Le temps contrôle la durée de pause du code entre les actions. La carte est utilisée pour travailler avec le GPIO, importer en utilisant * signifie que nous n’avons pas à inclure le nom du module. Digitalio est utilisé pour contrôler l’état d’une broche. Il peut s’agir d’une entrée ou d’une sortie.
import touchio
import time
from board import *
from digitalio import DigitalInOut, Direction
7. Créez un objet, une led et réglez la broche GPIO sur GP15, puis définissez-la comme une sortie. Cela garantira que lorsque la LED est déclenchée, le courant circulera de la broche GPIO 15 à l’anode de la LED. Comme la cathode est connectée à GND via la résistance de 100 ohms, le circuit complet allumera la LED.
led = DigitalInOut(GP15)
led.direction = Direction.OUTPUT
8. Créez un objet, led_state et stockez la valeur entière 0 à l’intérieur de celui-ci. Cet objet sera utilisé pour enregistrer l’état actuel de la LED. Il peut être désactivé (0) ou activé (1).
led_state = 0
9. Créer un objet, touch_pin pour établir une connexion entre le code et la broche GPIO physique.
touch_pin = touchio.TouchIn(GP16)
dix. Créez une boucle pour exécuter le code en continu.
while True:
11. À l’intérieur de la boucle, créez une fonction d’impression qui signalera l’état actuel de la broche d’entrée tactile. Nous utilisons %s pour utiliser la valeur stockée dans touch_pin.value et la convertir en une chaîne pour la concaténation au texte.
print("The pin state is %s" % touch_pin.value)
12. Écrivez un test conditionnel pour vérifier si l’entrée a été touchée et que la LED est éteinte. Les deux tests doivent réussir pour que le test conditionnel réussisse.
if touch_pin.value == True and led_state == False:
13. Réglez la LED pour qu’elle s’allume, puis mettez à jour l’objet led_state à 1, pour que le code sache que la LED est allumée. Dormir une demi-seconde pour éviter tout rebond accidentel (double pression). Ce code ne s’exécutera que si le test conditionnel réussit.
led.value = True
led_state = 1
time.sleep(0.5)
14. Créez un test conditionnel pour vérifier si l’entrée a été touchée et que la LED est actuellement allumée. Ce code éteindra la LED.
elif touch_pin.value == True and led_state == True:
15. Éteignez la LED, mettez à jour l’objet led_state pour que le code sache que la LED est éteinte, puis faire une pause d’une demi-seconde.
led.value = False
led_state = 0
time.sleep(0.5)
16. En dehors des tests conditionnels, mais toujours à l’intérieur de la boucle, mettez le code en pause pendant 0,1 seconde. Chaque fois que la boucle itère, elle s’arrêtera pendant 0,1 seconde, ce qui est utile pour rythmer le code du projet.
time.sleep(0.1)
17. Enregistrez le code dans code.py sur l’appareil CircuitPython (Framboise Pi Pico).
18. Le code devrait s’exécuter automatiquement, sinon cliquez sur Arrêter puis sur Exécuter.
19. Touchez la banane pour activer/désactiver la LED.
Liste complète des codes
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)