Innholdsfortegnelse:

ESP32 kapasitiv berøringsinngang ved bruk av "metalliske hullplugger" for knapper: 5 trinn (med bilder)
ESP32 kapasitiv berøringsinngang ved bruk av "metalliske hullplugger" for knapper: 5 trinn (med bilder)

Video: ESP32 kapasitiv berøringsinngang ved bruk av "metalliske hullplugger" for knapper: 5 trinn (med bilder)

Video: ESP32 kapasitiv berøringsinngang ved bruk av
Video: ESP32 Capacitive Touch Sensor Pins with Arduino IDE 2024, Juli
Anonim
Image
Image
Maskinvare
Maskinvare

Da jeg var i ferd med å fullføre designbeslutninger for et kommende ESP32 WiFi Kit 32 -basert prosjekt som krever inngang på tre knapper, var et merkbart problem at WiFi Kit 32 ikke har en enkelt mekanisk trykknapp, men alene tre mekaniske knapper, for inngang. WiFi Kit 32 har imidlertid mange kapasitive berøringsinnganger, så jeg brukte litt tid på å sette sammen maskinvare, skrive programvare og teste en inngang med tre knapper ved bruk av ESP32 kapasitiv berøringsinngang og tre 3/8 "metalliske hullplugger" for knappene.

Som alle som har eksperimentert med ESP32 kapasitive berøringsinnganger har oppdaget, er berøringsinngangene absolutt støyende nok til å kreve filtrering for pålitelig inngangsdeteksjon. For å minimere det totale antallet tellinger for det kommende prosjektet, bestemte jeg meg for at et enkelt avbruddsbasert digitalt filter (mer "en" tilbakeslag "enn et filter, men jeg går ut), i motsetning til å legge til ekstern filtermaskinvare, kunne stille ned de støyende inngangene. Og etter testing ble det tydelig at ESP32 -kapasitive innganger, tre 3/8 "metalliske hullplugger og noe digital" filtrering "-programvare faktisk ville gi en pålitelig inngang med tre knapper for designet.

Så hvis du er interessert i å teste kapasitiv inngang med digital filtrering på en ESP32, har jeg tatt med kildekoden "Buttons.ino" i Arduino -miljøformatet sammen med monterings- og programmeringsinstruksjoner, pluss en kort beskrivelse av kildekoden, for det jeg oppdaget som en svært pålitelig inngang med tre knapper.

Og som vanlig har jeg sannsynligvis glemt en eller to filer, eller hvem vet hva annet, så ikke nøl med å spørre hvis du har spørsmål. Jeg gjør mange feil.

Og en siste merknad, jeg mottar ingen kompensasjon i noen form, inkludert men ikke begrenset til gratis prøver, for noen av komponentene som brukes i dette designet

Trinn 1: Maskinvare

Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare

Designet bruker følgende maskinvare:

  • Ett, WiFi -sett 32.
  • Tre, 3/8 "metalliske hullplugger.
  • Tre, 4 "lengder på 28awg ledning.

For å montere maskinvaren utførte jeg følgende trinn:

  • Fjernet og fortinn endene på hver 4 "trådlengde som vist.
  • Loddet den første ledningen til pinne 13 på ESP32 (TOUCH4, eller "T4", inngang).
  • Loddet den andre ledningen til pinne 12 på ESP32 (TOUCH5, eller "T5", inngang).
  • Loddet den tredje ledningen til pinne 14 på ESP32 (TOUCH6 eller "T6" inngangen).
  • Loddet en av hver av de tre 3/8 "metalliske hullpluggene til de frie endene av de tre ledningslengdene.

Trinn 2: Programvare

Programvare
Programvare

Filen "Buttons.ino" er en Arduino -miljøfil som inneholder programvaren for designet. I tillegg til denne filen trenger du "U8g2lib" grafikkbibliotek for WiFi Kit32 OLED -skjermen (se https://github.com/olikraus/u8g2/wiki for ytterligere informasjon om dette biblioteket).

Med grafikkbiblioteket U8g2lib installert i Arduino -katalogen, og "Buttons.ino" lastet inn i Arduino -miljøet, kompilerer og laster du ned programvaren til ESP32.

Når den er lastet ned og kjørt, skal den øverste linjen på displayet lese "Knapper" med den andre linjen på displayet som "1 2 3" som knappindikatorer. Under hver av knappene 1, 2, 3 er de ufiltrerte berøringsverdiene, og under hver av disse er knappetrykkindikatorene ("1" for trykket, "0" for ikke trykket). Som det kan sees i videoen (og som testet på lang sikt bekreftet), gir programvarefilteret pålitelig knappinngangsdeteksjon uten falsk utløsning.

Trinn 3: Om programvaren

Programvaren inneholder tre hovedkodeseksjoner; Arduino krevde "setup ()" og "loop ()" seksjoner, og en "Interrupts" seksjon. Oppsett () delen inneholder koden som er nødvendig for å initialisere OLED og avbryte tjenester. OLED -oppsettfunksjonene er beskrevet i lenken ovenfor. Avbruddstjenestens oppsettfunksjoner er som følger:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" oppretter en semafor for "InterruptService ()" (avbruddstjenesterutinen) for å informere loop () når det er på tide å utføre et loop -pass.
  • "timerInterruptService = timerBegin (0, 80, true)" oppretter en timer som bruker maskinvaretimer 0 med en forhåndsskala på 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" legger InterruptService () til timeren.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" setter avbruddstiden til 1000hz.
  • "timerAlarmEnable (timerInterruptService)" starter timeralarmen, og dermed avbryter tjenesten.

Når oppsettet er fullført, blir loop () angitt og stopper umiddelbart på linjen:

hvis (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), betyr loop () vil vente på dette punktet til semaforen fra InterruptService () kommer. Når semaforen kommer, kjøres loop () -koden, oppdaterer OLED -displayet med knappedata, og går deretter tilbake til toppen for å vente på neste semafor igjen. Med InterruptService () som kjører på 1000hz og en LOOP_DELAY -verdi på 30, kjøres loop () hver 30.ms, eller med en visningsoppdateringshastighet på 33.333hz. Selv om dette er en høyere skjermoppdateringsfrekvens enn nødvendig for de fleste ESP32 -applikasjoner, brukte jeg denne innstillingen for å illustrere responsen til filteret. Jeg testet og bestemte tiden som kreves for å utføre en enkelt sløyfe () pass til 20 ms.

InterruptService () kalles av timeren som ble opprettet i setup () med en hastighet på 1000hz. Når den blir kalt, oppdaterer den to nedtellere, nLoopDelay og nButtonDelay. Når nLoopDelay er nedtelt ned til null, sender den semaforen slik at loop () kan utføre et enkelt pass og tilbakestiller nLoopDelay. Når nButtonDelay er nedtelt ned til null, blir det også tilbakestilt og knappen "filtrerer" utføres.

Hvert knappefilter har en unik filterteller (f.eks. NButton1Count, nButton2Count og nButton3Count). Så lenge berøringsinngangsverdien som er tilordnet knappen er større enn eller lik den definerte terskelverdien (BUTTON_THRESHHOLD), forblir filtertelleren som er tilordnet knappen og knappen null. Hvis berøringsinngangsverdien som er tilordnet knappen er mindre enn den definerte terskelen, økes filtertelleren som er tilordnet knappen med en hver 20. ms. Når filtertelleren overskrider knappfilterverdien (BUTTON_FILTER), regnes knappen som "trykket". Effekten av denne metoden er å lage et filter som krever 80 ms (20 ms nButtonDelay * 4 ms nButtonCountN hvor N er knappetallet) med kontinuerlige berøringsinngangsverdier under den definerte terskelen for å vurdere knappen som faktisk er trykket. Hver gang mindre enn 80 ms regnes som en "feil" og blir avvist av filteret.

Gitt denne korte beskrivelsen, hvis du har spørsmål, kan du gjerne spørre, så skal jeg gjøre mitt beste for å svare på dem.

Håper du likte det!

Trinn 4: "Kommende prosjekt"

De
De

Det kommende prosjektet, "Intelligrill® Pro", er en røykermonitor med dobbel temperatur sonde med:

  • Steinhart-Hart temperatursondeberegninger (i motsetning til "oppslag" -tabeller) for økt nøyaktighet.
  • Forutsigbar tid til ferdigstillelse på sonde 1 som inneholder den økte nøyaktigheten fra Steinhart-Hart-beregningene.
  • En andre sonde, sonde 2, for overvåking av røykertemperatur (begrenset til 32 til 399 grader).
  • Kapasitive berøringsinngangskontroller (som i denne instruksjonsboken).
  • WIFI -basert ekstern overvåking (med en fast IP -adresse, gjør det mulig å overvåke røykerfremgangen hvor som helst en internettforbindelse er tilgjengelig).
  • Utvidet temperaturområde (igjen 32 til 399 grader).
  • Hørbare fullføringsalarmer både i Intelligrill® -senderen og på de fleste WiFi -kompatible overvåkingsenheter.
  • Temperaturvisning i enten grader F eller grader C.
  • Tidsformat i enten HH: MM: SS eller HH: MM.
  • Batteridisplay i enten volt eller % ladet.
  • Og kommer snart, PID -utgang for sneglebaserte røykere.

"Intelligrill® Pro" tester for å bli den mest nøyaktige, funksjonelle og pålitelige HTML -baserte Intelligrill® jeg har designet.

Det er fortsatt under test, men med måltider hjelper det å forberede under testing, jeg har gått opp mer enn noen få kilo.

Igjen, jeg håper du liker det!

Trinn 5: Neste opp: ESP32 NTP temperaturprobe analog inngang med Steinhart-Hart-korreksjon

Vær forberedt på å støve av algebrabøkene dine for denne.

Anbefalt: