Inhaltsverzeichnis:

ESP32 Kapazitiver Touch-Eingang mit "Metallic Hole Plugs" für Tasten - Gunook
ESP32 Kapazitiver Touch-Eingang mit "Metallic Hole Plugs" für Tasten - Gunook

Video: ESP32 Kapazitiver Touch-Eingang mit "Metallic Hole Plugs" für Tasten - Gunook

Video: ESP32 Kapazitiver Touch-Eingang mit
Video: ESP32 programmieren - kapazitiver Touch-Sensor (TTP223) 2024, Juli
Anonim
Image
Image
Hardware
Hardware

Als ich die Designentscheidungen für ein bevorstehendes ESP32 WiFi Kit 32-basiertes Projekt abschloss, das drei Tasteneingaben erforderte, war ein auffälliges Problem, dass das WiFi Kit 32 keinen einzigen mechanischen Druckknopf, sondern nur drei mechanische Tasten für die Eingabe besitzt. Das WiFi-Kit 32 verfügt jedoch über viele kapazitive Berührungseingaben, daher habe ich einige Zeit damit verbracht, Hardware zusammenzubauen, Software zu schreiben und ein Drei-Tasten-Eingabedesign mit der kapazitiven Berührungseingabefunktion von ESP32 und drei 3/8" "metallischen Lochstopfen" zu testen Tasten.

Wie jeder, der mit den kapazitiven ESP32-Touch-Eingaben experimentiert hat, festgestellt hat, sind die Touch-Eingaben mit Sicherheit laut genug, um eine Filterung für eine zuverlässige Eingabeerkennung zu erfordern. Um die Gesamtanzahl der Teile für das kommende Projekt zu minimieren, habe ich festgestellt, dass ein einfacher Interrupt-gesteuerter digitaler Filter (eher eine "Entprellung" als ein Filter, aber ich schweife ab), im Gegensatz zum Hinzufügen externer Filterhardware, die verrauschten Eingänge beruhigen könnte. Und nach dem Testen stellte sich heraus, dass die kapazitiven ESP32-Eingänge, drei 3/8-Zoll-Metalllochstopfen und eine digitale "Filter" -Software tatsächlich einen zuverlässigen Drei-Tasten-Eingang für das Design bieten würden.

Wenn Sie also daran interessiert sind, kapazitive Eingaben mit digitaler Filterung auf einem ESP32 zu testen, habe ich den Quellcode "Buttons.ino" im Arduino-Umgebungsformat zusammen mit Montage- und Programmieranweisungen sowie einer kurzen Beschreibung des Quellcodes eingefügt, z was ich als sehr zuverlässige Drei-Tasten-Eingabe entdeckt habe.

Und wie immer habe ich wahrscheinlich ein oder zwei Dateien vergessen oder wer weiß was noch, also wenn Sie Fragen haben, zögern Sie bitte nicht zu fragen, da ich viele Fehler mache.

Und eine letzte Anmerkung, ich erhalte keine Entschädigung in irgendeiner Form, einschließlich, aber nicht beschränkt auf kostenlose Muster, für die in diesem Design verwendeten Komponenten

Schritt 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Das Design verwendet die folgende Hardware:

  • Eins, WiFi-Kit 32.
  • Drei 3/8" Metalllochstopfen.
  • Drei, 4" Längen von 28awg Draht.

Um die Hardware zusammenzubauen, habe ich die folgenden Schritte durchgeführt:

  • Abisoliert und verzinnt die Enden jeder 4 "Drahtlänge wie gezeigt.
  • Löten Sie den ersten Draht an Pin 13 des ESP32 (der TOUCH4 oder "T4", Eingang).
  • Löten Sie den zweiten Draht an Pin 12 des ESP32 (der TOUCH5 oder "T5", Eingang).
  • Löten Sie den dritten Draht an Pin 14 des ESP32 (der TOUCH6- oder "T6" -Eingang).
  • Löten Sie jeweils einen der drei 3/8" Metalllochstopfen an die freien Enden der drei Drahtlängen.

Schritt 2: Software

Software
Software

Die Datei "Buttons.ino" ist eine Arduino-Umgebungsdatei, die die Software für das Design enthält. Zusätzlich zu dieser Datei benötigen Sie die Grafikbibliothek "U8g2lib" für das WiFi Kit32 OLED-Display (weitere Informationen zu dieser Bibliothek finden Sie unter

Wenn die U8g2lib-Grafikbibliothek in Ihrem Arduino-Verzeichnis installiert ist und "Buttons.ino" in die Arduino-Umgebung geladen ist, kompilieren Sie die Software und laden Sie sie in den ESP32 herunter.

Nach dem Herunterladen und Ausführen sollte in der oberen Zeile des Displays "Buttons" angezeigt werden, während in der zweiten Zeile des Displays "1 2 3" als Tastenindikatoren angezeigt wird. Unter jedem der 1, 2, 3 Tastenanzeigen befinden sich die ungefilterten Berührungslesewerte, und darunter befinden sich jeweils die Tastendruckanzeigen ("1" für gedrückt, "0" für nicht gedrückt). Wie im Video zu sehen (und durch Langzeittests bestätigt) bietet der Softwarefilter eine zuverlässige Erkennung von Tasteneingaben ohne Fehlauslösung.

Schritt 3: Über die Software

Die Software enthält drei Hauptcodeabschnitte; der Arduino benötigte die Abschnitte "setup()" und "loop()" sowie einen Abschnitt "Interrupts". Der Abschnitt setup() enthält den Code, der zum Initialisieren von OLED- und Interrupt-Diensten erforderlich ist. Die OLED-Setup-Funktionen sind im obigen Link beschrieben. Die Einrichtungsfunktionen für den Interrupt-Dienst sind wie folgt:

  • "timerLoopSemaphore = xSemaphoreCreateBinary()" erstellt ein Semaphor für "InterruptService()" (die Interrupt-Service-Routine), um loop() zu informieren, wenn es Zeit ist, einen Schleifendurchlauf auszuführen.
  • "timerInterruptService = timerBegin(0, 80, true)" erstellt einen Timer, der den Hardware-Timer 0 mit einer Vorskalierung von 80 verwendet.
  • "timerAttachInterrupt(timerInterruptService, & InterruptService, true)" hängt InterruptService() an den Timer an.
  • "timerAlarmWrite(timerInterruptService, 1000, true)" setzt die Interrupt-Service-Rate auf 1000 Hz.
  • "timerAlarmEnable(timerInterruptService)" startet den Timer-Alarm und unterbricht damit den Dienst.

Wenn das Setup abgeschlossen ist, wird loop() eingegeben und stoppt sofort an der Zeile:

if(xSemaphoreTake(timerLoopSemaphore, portMAX_DELAY) == pdTRUE), was bedeutet, dass loop() an dieser Stelle wartet, bis das Semaphor von InterruptService() eintrifft. Wenn der Semaphor ankommt, wird der loop()-Code ausgeführt, aktualisiert das OLED-Display mit den Tastendaten und kehrt dann nach oben zurück, um wieder auf den nächsten Semaphor zu warten. Wenn InterruptService() mit 1000 Hz und einem LOOP_DELAY-Wert von 30 ausgeführt wird, wird loop() alle 30 ms oder mit einer Anzeigeaktualisierungsrate von 33,333 Hz ausgeführt. Obwohl dies eine höhere Bildwiederholfrequenz als für die meisten ESP32-Anwendungen erforderlich ist, habe ich diese Einstellung verwendet, um die Reaktionsfähigkeit des Filters zu veranschaulichen. Ich habe getestet und festgestellt, dass die Zeit, die für die Ausführung eines einzelnen loop()-Durchlaufs erforderlich ist, 20 ms beträgt.

InterruptService() wird von dem in setup() erstellten Timer mit einer Rate von 1000 Hz aufgerufen. Wenn es aufgerufen wird, aktualisiert es zwei Abwärtszähler, nLoopDelay und nButtonDelay. Wenn nLoopDelay auf Null heruntergezählt wird, sendet es das Semaphor, das es loop() ermöglicht, einen einzelnen Durchgang auszuführen, und setzt dann nLoopDelay zurück. Wenn nButtonDelay auf Null heruntergezählt wird, wird es ebenfalls zurückgesetzt und dann die Schaltfläche "Filter" ausgeführt.

Jeder Schaltflächenfilter hat einen eindeutigen Filterzähler (z. B. nButton1Count, nButton2Count und nButton3Count). Solange der der Taste zugeordnete Touch-Eingabewert größer oder gleich dem definierten Schwellwert (BUTTON_THRESHOLD) ist, bleiben der der Taste und der Taste zugeordnete Filterzähler Null. Wenn der der Schaltfläche zugewiesene Berührungseingabewert kleiner als der definierte Schwellenwert ist, wird der der Schaltfläche zugewiesene Filterzähler alle 20 ms um eins erhöht. Wenn der Filterzähler den Schaltflächenfilterwert (BUTTON_FILTER) überschreitet, wird die Schaltfläche als "gedrückt" betrachtet. Der Effekt dieser Methode besteht darin, einen Filter zu erstellen, der 80 ms (20 ms nButtonDelay * 4 ms nButtonCountN, wobei N die Tastennummer ist) kontinuierlicher Berührungseingabewerte unterhalb des definierten Schwellenwerts benötigt, um die tatsächlich gedrückte Taste zu berücksichtigen. Jeder Zeitpunkt von weniger als 80 ms wird als "Glitch" betrachtet und vom Filter zurückgewiesen.

Wenn Sie nach dieser kurzen Beschreibung Fragen haben, können Sie diese gerne stellen und ich werde mein Bestes tun, um sie zu beantworten.

Hoffe es hat dir gefallen!

Schritt 4: Das "bevorstehende Projekt"

Die
Die

Das kommende Projekt "Intelligrill® Pro" ist ein Rauchermonitor mit zwei Temperatursonden, der Folgendes bietet:

  • Steinhart-Hart-Temperatursondenberechnungen (im Gegensatz zu "Look-Up"-Tabellen) für erhöhte Genauigkeit.
  • Voraussagezeit bis zur Fertigstellung von Sonde 1 unter Berücksichtigung der erhöhten Genauigkeit, die aus den Steinhart-Hart-Berechnungen abgeleitet wurde.
  • Eine zweite Sonde, Sonde 2, zur Überwachung der Rauchertemperatur (begrenzt auf 32 bis 399 Grad).
  • Kapazitive Berührungseingabesteuerungen (wie in diesem Instructable).
  • WIFI-basierte Fernüberwachung (mit einer festen IP-Adresse ermöglicht die Überwachung des Raucherfortschritts von jedem Ort aus, an dem eine Internetverbindung verfügbar ist).
  • Erweiterter Temperaturbereich (wieder 32 bis 399 Grad).
  • Akustische Abschlussalarme sowohl im Intelligrill®-Sender als auch auf den meisten WiFi-fähigen Überwachungsgeräten.
  • Temperaturanzeige in Grad F oder Grad C.
  • Zeitformat entweder in HH:MM:SS oder HH:MM.
  • Batterieanzeige entweder in Volt oder % geladen.
  • Und demnächst PID-Ausgang für Raucher auf Schneckenbasis.

"Intelligrill® Pro" testet, um der genaueste, funktionsreichste und zuverlässigste HTML-basierte Intelligrill® zu werden, den ich entwickelt habe.

Es wird noch getestet, aber mit den Mahlzeiten, die es während des Tests zubereiten hilft, habe ich mehr als ein paar Pfund zugenommen.

Nochmals, ich hoffe es gefällt euch!

Schritt 5: Als nächstes: ESP32 NTP-Temperaturfühler-Analogeingang mit Steinhart-Hart-Korrektur

Seien Sie bereit, Ihre Algebra-Bücher für dieses zu entstauben.

Empfohlen: