Innehållsförteckning:

ESP32 kapacitiv pekingång med "metallhålspluggar" för knappar: 5 steg (med bilder)
ESP32 kapacitiv pekingång med "metallhålspluggar" för knappar: 5 steg (med bilder)

Video: ESP32 kapacitiv pekingång med "metallhålspluggar" för knappar: 5 steg (med bilder)

Video: ESP32 kapacitiv pekingång med
Video: How to user Makerfabs ESP32 3.5" TFT Capacitive Touch with Camera 2024, November
Anonim
Image
Image
Hårdvara
Hårdvara

När jag slutförde designbeslut för ett kommande ESP32 WiFi Kit 32 -baserat projekt som kräver tre knappar, var ett märkbart problem att WiFi Kit 32 inte har en enda mekanisk tryckknapp, men ensam tre mekaniska knappar, för inmatning. WiFi Kit 32 har dock gott om kapacitiva pekingångar, så jag spenderade lite tid på att montera hårdvara, skriva programvara och testa en ingångsdesign med tre knappar med hjälp av ESP32 kapacitiv pekingångsfunktion och tre 3/8 "" metalliska hålpluggar "för knappar.

Som alla som har experimenterat med ESP32 kapacitiva pekingångar har upptäckt, är pekingångarna verkligen bullriga nog för att kräva filtrering för tillförlitlig ingångsdetektering. För att minimera det totala antalet delar för det kommande projektet, bestämde jag att ett enkelt avbrottsdrivet digitalt filter (mer av en "debounce" än ett filter, men jag går bort), i motsats till att lägga till extern filterhårdvara, kan tysta de bullriga ingångarna. Och efter testning blev det uppenbart att ESP32 -kapacitiva ingångar, tre 3/8 "metallhålskontakter och lite digital" filtrering "-programvara verkligen skulle ge en tillförlitlig ingång med tre knappar för designen.

Så om du är intresserad av att testa kapacitiv ingång med digital filtrering på en ESP32 har jag inkluderat källkoden "Buttons.ino" i Arduino miljöformat tillsammans med monterings- och programmeringsinstruktioner, plus en kort beskrivning av källkoden, för vad jag upptäckte var en mycket pålitlig ingång med tre knappar.

Och som vanligt har jag förmodligen glömt en eller två filer eller vem vet vad mer, så om du har några frågor, tveka inte att fråga eftersom jag gör många misstag.

Och en sista notering, jag får ingen kompensation i någon form, inklusive men inte begränsat till gratisprover, för någon av komponenterna som används i denna design

Steg 1: Hårdvara

Hårdvara
Hårdvara
Hårdvara
Hårdvara
Hårdvara
Hårdvara

Designen använder följande hårdvara:

  • En, WiFi -kit 32.
  • Tre, 3/8 "metalliska hålproppar.
  • Tre, 4 "längder på 28awg tråd.

För att montera hårdvaran utförde jag följande steg:

  • Avskalade och förtinnade ändarna på varje 4 "trådlängd som visas.
  • Lödde den första tråden till stift 13 på ESP32 (ingången TOUCH4, eller "T4").
  • Lödde den andra ledningen till stift 12 på ESP32 (TOUCH5, eller "T5", ingång).
  • Lödde den tredje ledningen till stift 14 på ESP32 (ingången TOUCH6 eller "T6").
  • Lödde en av var och en av de tre 3/8 "metalliska hålpropparna till de fria ändarna av de tre trådlängderna.

Steg 2: Programvara

Programvara
Programvara

Filen "Buttons.ino" är en Arduino -miljöfil som innehåller programvaran för designen. Förutom den här filen behöver du grafikbiblioteket "U8g2lib" för WiFi Kit32 OLED -skärmen (se https://github.com/olikraus/u8g2/wiki för ytterligare information om detta bibliotek).

Med U8g2lib -grafikbiblioteket installerat i din Arduino -katalog och "Buttons.ino" inläst i Arduino -miljön, kompilera och ladda ner programvaran till ESP32.

När den har laddats ner och körts bör displayens översta rad läsa "Knappar" med den andra raden på displayen "1 2 3" som knappindikatorer. Under var och en av knapparna 1, 2, 3 finns de ofiltrerade pekläsningsvärdena, och under var och en av dessa finns knapptryckningsindikatorerna ("1" för nedtryckt, "0" för ej tryckt). Som kan ses i videon (och som testat på lång sikt bekräftat) ger mjukvarufiltret tillförlitlig knappinmatningsdetektering utan falsk utlösning.

Steg 3: Om programvaran

Programvaran innehåller tre huvudsakliga kodavsnitt; Arduino krävs "setup ()" och "loop ()" sektioner, och en "Interrupts" sektion. Sektionen setup () innehåller koden som är nödvändig för att initiera OLED och avbryta tjänster. OLED -inställningsfunktionerna beskrivs i länken ovan. Avbrytningsinställningarna för tjänsten är följande:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" skapar en semafor för "InterruptService ()" (avbrottsrutinen) för att informera loop () när det är dags att köra ett looppass.
  • "timerInterruptService = timerBegin (0, 80, true)" skapar en timer med hårdvarutimer 0 med en förskala på 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" kopplar InterruptService () till timern.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" sätter avbrottstjänsthastigheten till 1000hz.
  • "timerAlarmEnable (timerInterruptService)" startar timerlarmet och därmed avbryter tjänsten.

När installationen är klar matas loop () in och stannar omedelbart vid linjen:

if (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), vilket betyder loop () väntar vid denna tidpunkt tills semaforen från InterruptService () kommer. När semaforen kommer körs loop () -koden, uppdaterar OLED -displayen med knappdata och återgår sedan till toppen för att åter vänta på nästa semafor. Med InterruptService () som körs på 1000hz och ett LOOP_DELAY -värde på 30, kör loop () var 30: e ms eller med en uppdateringshastighet på 33.333hz. Även om detta är en högre uppdateringsfrekvens för skärmen än vad som krävs för de flesta ESP32 -applikationer, använde jag den här inställningen för att illustrera filtret. Jag testade och bestämde den tid som krävs för att köra ett enda loop () -pass till 20 ms.

InterruptService () anropas av timern som skapades i setup () med en hastighet av 1000hz. När den kallas uppdaterar den två nedräknare, nLoopDelay och nButtonDelay. När nLoopDelay är nedräknat ner till noll skickar den semaforen så att loop () kan utföra en enda passering och återställer nLoopDelay. När nButtonDelay är nedräknat ner till noll, återställs det också och knappen "filter" körs.

Varje knappfilter har en unik filterräknare (t.ex. nButton1Count, nButton2Count och nButton3Count). Så länge det beröringsinmatningsvärde som tilldelats knappen är större än eller lika med det definierade tröskelvärdet (BUTTON_THRESHHOLD), förblir filterräknaren som tilldelas knappen och knappen noll. Om pekingångsvärdet som tilldelas knappen är mindre än det definierade tröskelvärdet, ökas filterräknaren som tilldelas knappen med en var 20: e ms. När filterräknaren överskrider knappfiltervärdet (BUTTON_FILTER) anses knappen vara "nedtryckt". Effekten av denna metod är att skapa ett filter som kräver 80ms (20ms nButtonDelay * 4ms nButtonCountN där N är knappnumret) av kontinuerliga pekskärmsinmatningsvärden under det definierade tröskelvärdet för att betrakta knappen som faktiskt är nedtryckt. Varje gång som är mindre än 80 ms anses vara en "glitch" och avvisas av filtret.

Med tanke på denna korta beskrivning, om du har några frågor är du välkommen att fråga och jag kommer att göra mitt bästa för att svara på dem.

Hoppas du gillade det!

Steg 4: "Kommande projekt"

De
De

Det kommande projektet, "Intelligrill® Pro", är en rökare -monitor med dubbla temperaturer med:

  • Steinhart-Hart temperatursondberäkningar (i motsats till "uppslagningstabeller") för ökad noggrannhet.
  • Prediktiv tid till slutförande på sond 1 med den ökade noggrannheten som härrör från Steinhart-Hart-beräkningarna.
  • En andra sond, sond 2, för övervakning av rökningstemperatur (begränsad till 32 till 399 grader).
  • Kapacitiva touch -ingångskontroller (som i den här instruktionsboken).
  • WIFI -baserad fjärrövervakning (med en fast IP -adress, möjliggör övervakning av rökarens framsteg var som helst en internetuppkoppling är tillgänglig).
  • Utökat temperaturområde (igen 32 till 399 grader).
  • Larm för slutförande av ljud både i Intelligrill® -sändaren och på de flesta WiFi -kompatibla övervakningsenheter.
  • Temperaturvisning i antingen grader F eller grader C.
  • Tidsformat i antingen HH: MM: SS eller HH: MM.
  • Batteridisplay i antingen volt eller % laddad.
  • Och snart kommer PID -utgång för skruvar som baseras på rökare.

"Intelligrill® Pro" testar för att bli den mest exakta, funktionsförpackade och pålitliga HTML -baserade Intelligrill® jag har designat.

Det är fortfarande under test, men med måltiderna hjälper det att förbereda under testet, jag har gått upp mer än några kilo.

Återigen, jag hoppas att du gillar det!

Steg 5: Nästa upp: ESP32 NTP-temperatursond Analog ingång med Steinhart-Hart-korrigering

Var beredd att damma av dina algebraböcker för den här.

Rekommenderad: