Table des matières:
- Étape 1: Matériel
- Étape 2: Logiciel
- Étape 3: À propos du logiciel
- Étape 4: Le « Projet à venir »
- Étape 5: Ensuite: Entrée analogique de la sonde de température ESP32 NTP avec correction Steinhart-Hart
Vidéo: Entrée tactile capacitive ESP32 utilisant des "bouchons à trous métalliques" pour les boutons : 5 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
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
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
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 »
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é:
Jeux à 4 boutons utilisant une seule entrée analogique : 6 étapes (avec photos)
Jeux à 4 boutons utilisant une entrée analogique : cette instructable se concentre sur l'utilisation d'une ligne d'entrée analogique pour plusieurs boutons qui peuvent être détectés indépendamment les uns des autres. Tous les jeux (8 en t
Un hack de pavé tactile pour ordinateur portable cool pour les projets Arduino ! : 18 étapes (avec photos)
Un hack de pavé tactile pour ordinateur portable cool pour les projets Arduino ! : Il y a quelque temps, lorsque je bricolais avec un pavé tactile PS/2 avec un microcontrôleur Arduino, j'ai découvert que deux de ses connexions intégrées peuvent être utilisées comme entrées numériques. Dans ce Instructable, apprenons comment nous pouvons utiliser l'ajout d'un pavé tactile PS/2
Fabriquer des panneaux acoustiques insonorisants avec des bouchons de liège : 4 étapes
Fabriquer des panneaux acoustiques insonorisants avec des bouchons en liège : Après avoir collectionné des bouchons en liège pendant des années, j'ai finalement trouvé une utilité pour eux : fabriquer des panneaux acoustiques insonorisants pour ma cabine de voix off. Depuis que les bouteilles de vin à bouchon à vis sont devenues plus répandues, j'ai conservé des bouchons de liège pour divers professionnels de la maison
Utilisez 1 entrée analogique pour 6 boutons pour Arduino : 6 étapes
Utiliser 1 entrée analogique pour 6 boutons pour Arduino : je me suis souvent demandé comment je pourrais obtenir plus d'entrées numériques pour mon Arduino. Il m'est récemment venu à l'esprit que je devrais pouvoir utiliser l'une des entrées analogiques pour introduire plusieurs entrées numériques. J'ai fait une recherche rapide et j'ai trouvé où les gens étaient ab
La congélation de la glace à l'intérieur des bidons Altoids les rend plus rigides pour couper des trous, etc. : 3 étapes
La congélation de la glace à l'intérieur des boîtes Altoids les rend plus rigides pour la découpe de trous, etc. Dans ce instructable, un moyen simple est montré de soutenir le métal de ces boîtes altoïdes. L'approche