Table des matières:

Entrée tactile capacitive ESP32 utilisant des "bouchons à trous métalliques" pour les boutons : 5 étapes (avec photos)
Entrée tactile capacitive ESP32 utilisant des "bouchons à trous métalliques" pour les boutons : 5 étapes (avec photos)

Vidéo: Entrée tactile capacitive ESP32 utilisant des "bouchons à trous métalliques" pour les boutons : 5 étapes (avec photos)

Vidéo: Entrée tactile capacitive ESP32 utilisant des
Vidéo: # 056 Недорогие Интеллектуальные дисплеи для Arduino, ESP8266 и других 2024, Novembre
Anonim
Image
Image
Matériel
Matériel

Alors que je finalisais les décisions de conception pour un prochain projet basé sur le ESP32 WiFi Kit 32 nécessitant une entrée à trois boutons, un problème notable était que le WiFi Kit 32 ne possède pas un seul bouton-poussoir mécanique, mais seulement trois boutons mécaniques, pour l'entrée. Cependant, le WiFi Kit 32 a beaucoup d'entrées tactiles capacitives, j'ai donc passé du temps à assembler du matériel, à écrire des logiciels et à tester une conception d'entrée à trois boutons utilisant la fonction d'entrée tactile capacitive ESP32 et trois "bouchons métalliques" 3/8 "pour boutons.

Comme tous ceux qui ont expérimenté les entrées tactiles capacitives ESP32 l'ont découvert, les entrées tactiles sont très certainement suffisamment bruyantes pour nécessiter un filtrage pour une détection d'entrée fiable. Pour minimiser le nombre total de pièces pour le projet à venir, j'ai déterminé qu'un simple filtre numérique piloté par interruption (plus un "anti-rebond" qu'un filtre, mais je m'égare), par opposition à l'ajout de matériel de filtre externe, pourrait calmer les entrées bruyantes. Et après les tests, il est devenu évident que les entrées capacitives ESP32, trois bouchons métalliques 3/8" et un logiciel de "filtrage" numérique, fourniraient en effet une entrée fiable à trois boutons pour la conception.

Donc, si vous souhaitez tester l'entrée capacitive avec filtrage numérique sur un ESP32, j'ai inclus le code source "Buttons.ino" dans le format de l'environnement Arduino ainsi que des instructions d'assemblage et de programmation, ainsi qu'une brève description du code source, pour ce que j'ai découvert être une entrée à trois boutons très fiable.

Et comme d'habitude, j'ai probablement oublié un fichier ou deux ou qui sait quoi d'autre, donc si vous avez des questions, n'hésitez pas à demander car je fais beaucoup d'erreurs.

Et une dernière note, je ne reçois aucune compensation sous quelque forme que ce soit, y compris, mais sans s'y limiter, des échantillons gratuits, pour aucun des composants utilisés dans cette conception

Étape 1: Matériel

Matériel
Matériel
Matériel
Matériel
Matériel
Matériel

La conception utilise le matériel suivant:

  • Un, le kit Wi-Fi 32.
  • Trois bouchons métalliques de 3/8".
  • Trois longueurs de 4" de fil 28awg.

Pour assembler le matériel, j'ai effectué les étapes suivantes:

  • Dénudez et étamez les extrémités de chaque longueur de fil de 4" comme indiqué.
  • Soudé le premier fil à la broche 13 de l'ESP32 (l'entrée TOUCH4, ou "T4").
  • Soudé le deuxième fil à la broche 12 de l'ESP32 (entrée TOUCH5, ou "T5").
  • Soudé le troisième fil à la broche 14 de l'ESP32 (l'entrée TOUCH6, ou "T6").
  • Soudé un de chacun des trois bouchons métalliques de 3/8" aux extrémités libres des trois longueurs de fil.

Étape 2: Logiciel

Logiciel
Logiciel

Le fichier "Buttons.ino" est un fichier d'environnement Arduino contenant le logiciel pour la conception. En plus de ce fichier, vous aurez besoin de la bibliothèque graphique "U8g2lib" pour l'écran OLED WiFi Kit32 (voir https://github.com/olikraus/u8g2/wiki pour plus d'informations sur cette bibliothèque).

Avec la bibliothèque graphique U8g2lib installée dans votre répertoire Arduino et "Buttons.ino" chargé dans l'environnement Arduino, compilez et téléchargez le logiciel dans l'ESP32.

Une fois téléchargé et en cours d'exécution, la ligne supérieure de l'écran doit indiquer « Boutons » avec la deuxième ligne de l'écran indiquant « 1 2 3 » comme indicateurs de bouton. Au-dessous de chacun des indicateurs de bouton 1, 2, 3 se trouvent les valeurs de lecture tactile non filtrées, et en dessous de chacun d'eux se trouvent les indicateurs de pression de bouton ("1" pour enfoncé, "0" pour non enfoncé). Comme on peut le voir dans la vidéo (et comme l'ont confirmé les tests à long terme), le filtre logiciel fournit une détection fiable des entrées de bouton sans faux déclenchement.

Étape 3: À propos du logiciel

Le logiciel contient trois sections de code principales; l'Arduino nécessitait des sections "setup()" et "loop()", et une section "Interruptions". La section setup() contient le code nécessaire pour initialiser OLED et interrompre les services. Les fonctions de configuration OLED sont décrites dans le lien ci-dessus. Les fonctions de configuration du service d'interruption sont les suivantes:

  • "timerLoopSemaphore = xSemaphoreCreateBinary()" crée un sémaphore pour "InterruptService()" (la routine de service d'interruption) pour informer loop() lorsqu'il est temps d'exécuter une boucle.
  • "timerInterruptService = timerBegin(0, 80, true)" crée une minuterie à l'aide de la minuterie matérielle 0 avec une pré-échelle de 80.
  • "timerAttachInterrupt(timerInterruptService, & InterruptService, true)" attache InterruptService() à la minuterie.
  • "timerAlarmWrite(timerInterruptService, 1000, true)" définit le taux de service d'interruption à 1000hz.
  • "timerAlarmEnable(timerInterruptService)" démarre l'alarme de la minuterie et interrompt ainsi le service.

Une fois la configuration terminée, loop() est entré et s'arrête immédiatement à la ligne:

if(xSemaphoreTake(timerLoopSemaphore, portMAX_DELAY) == pdTRUE), signifiant loop() attendra à ce stade jusqu'à ce que le sémaphore d'InterruptService() arrive. Lorsque le sémaphore arrive, le code loop() s'exécute, mettant à jour l'affichage OLED avec les données du bouton, puis revenant en haut pour attendre à nouveau le sémaphore suivant. Avec InterruptService() s'exécutant à 1000hz et une valeur LOOP_DELAY de 30, loop() s'exécute toutes les 30ms, ou à un taux de mise à jour de l'affichage de 33,333hz. Bien qu'il s'agisse d'un taux de rafraîchissement d'affichage supérieur à celui requis pour la plupart des applications ESP32, j'ai utilisé ce paramètre pour illustrer la réactivité du filtre. J'ai testé et déterminé que le temps requis pour exécuter une seule boucle () était de 20 ms.

InterruptService() est appelé par le timer créé dans setup() à une fréquence de 1000hz. Lorsqu'il est appelé, il met à jour deux décompteurs, nLoopDelay et nButtonDelay. Lorsque nLoopDelay est décompté jusqu'à zéro, il envoie le sémaphore permettant à loop() d'exécuter un seul passage puis réinitialise nLoopDelay. Lorsque nButtonDelay est décompté jusqu'à zéro, il est également réinitialisé puis le bouton "filtres" s'exécute.

Chaque filtre de bouton a un compteur de filtre unique (par exemple nButton1Count, nButton2Count et nButton3Count). Tant que la valeur de saisie tactile affectée au bouton est supérieure ou égale à la valeur seuil définie (BUTTON_THRESHHOLD), le compteur de filtre affecté au bouton et au bouton reste à zéro. Si la valeur de saisie tactile attribuée au bouton est inférieure au seuil défini, le compteur de filtre attribué au bouton est incrémenté de un toutes les 20 ms. Lorsque le compteur du filtre dépasse la valeur du filtre du bouton (BUTTON_FILTER), le bouton est considéré comme « appuyé ». L'effet de cette méthode est de créer un filtre nécessitant 80 ms (20 ms nButtonDelay * 4 ms nButtonCountN où N est le numéro du bouton) de valeurs de saisie tactile continues inférieures au seuil défini pour considérer le bouton réellement enfoncé. Tout temps inférieur à 80 ms est considéré comme un "glitch" et est rejeté par le filtre.

Compte tenu de cette brève description, si vous avez des questions, n'hésitez pas à les poser et je ferai de mon mieux pour y répondre.

J'espère que vous en avez profité!

Étape 4: Le « Projet à venir »

Les
Les

Le projet à venir, "Intelligrill® Pro", est un moniteur de fumeur à double sonde de température comprenant:

  • Calculs de sonde de température Steinhart-Hart (par opposition aux tables de « recherche ») pour une précision accrue.
  • Temps prédictif d'achèvement sur la sonde 1 intégrant la précision accrue dérivée des calculs Steinhart-Hart.
  • Une deuxième sonde, la sonde 2, pour surveiller la température du fumeur (limitée à 32 à 399 degrés).
  • Commandes d'entrée tactile capacitives (comme dans ce Instructable).
  • Surveillance à distance basée sur le WIFI (avec une adresse IP fixe, permet de surveiller la progression du fumeur depuis n'importe où une connexion Internet est disponible).
  • Plage de température étendue (encore 32 à 399 degrés).
  • Alarmes d'achèvement sonores à la fois dans l'émetteur Intelligrill® et sur la plupart des appareils de surveillance compatibles WiFi.
  • Affichage de la température en degrés F ou en degrés C.
  • Format de l'heure au format HH:MM:SS ou HH:MM.
  • Affichage de la batterie en volts ou en % de charge.
  • Et bientôt, la sortie PID pour les fumeurs à vis sans fin.

"Intelligrill® Pro" teste pour devenir l'Intelligrill® HTML le plus précis, riche en fonctionnalités et fiable que j'ai conçu.

C'est encore en cours de test, mais avec les repas qu'il aide à préparer pendant les tests, j'ai pris plus de quelques kilos.

Encore une fois, j'espère que ça vous plaira !

Étape 5: Ensuite: Entrée analogique de la sonde de température ESP32 NTP avec correction Steinhart-Hart

Soyez prêt à dépoussiérer vos livres d'algèbre pour celui-ci.

Conseillé: