Indholdsfortegnelse:
- Trin 1: Hardware
- Trin 2: Software
- Trin 3: Om softwaren
- Trin 4: "Det kommende projekt"
- Trin 5: Næste op: ESP32 NTP-temperatursonde Analog input med Steinhart-Hart-korrektion
Video: ESP32 kapacitiv berøringsindgang ved hjælp af "metalliske hulpropper" til knapper: 5 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Da jeg var ved at færdiggøre designbeslutninger til et kommende ESP32 WiFi Kit 32 -baseret projekt, der krævede input med tre knapper, var et mærkbart problem, at WiFi Kit 32 ikke har en enkelt mekanisk trykknap, men alligevel alene tre mekaniske knapper, til input. WiFi Kit 32 har dog masser af kapacitive berøringsindgange, så jeg brugte lidt tid på at samle hardware, skrive software og teste et input med tre knapper ved hjælp af ESP32 kapacitiv berøringsindgangsfunktion og tre 3/8 "" metalliske hulpropper "til knapper.
Som enhver, der har eksperimenteret med ESP32 kapacitive berøringsindgange, har opdaget, er berøringsindgange bestemt støjende nok til at kræve filtrering for pålidelig inputdetektering. For at minimere det samlede antal tæller til det kommende projekt, fastslog jeg, at et simpelt interrupt -drevet digitalt filter (mere et "debounce" end et filter, men jeg afviger), i modsætning til tilføjelse af ekstern filterhardware, kunne dæmpe de støjende input. Og efter test blev det tydeligt, at de kapacitive ESP32 -input, tre 3/8 "metalhulpropper og noget digital" filtrering "-software faktisk ville give en pålidelig indgang med tre knapper til designet.
Så hvis du er interesseret i at teste kapacitiv input med digital filtrering på en ESP32, har jeg inkluderet kildekoden "Buttons.ino" i Arduino -miljøformatet sammen med samle- og programmeringsinstruktioner plus en kort beskrivelse af kildekoden, for hvad jeg opdagede at være en meget pålidelig input med tre knapper.
Og som sædvanlig har jeg sandsynligvis glemt en eller to filer, eller hvem ved hvad mere, så hvis du har spørgsmål, tøv ikke med at spørge, da jeg laver masser af fejl.
Og en sidste note, jeg modtager ingen kompensation i nogen form, inklusive men ikke begrænset til gratis prøver, for nogen af de komponenter, der bruges i dette design
Trin 1: Hardware
Designet anvender følgende hardware:
- Den ene, WiFi Kit 32.
- Tre, 3/8 "metalliske hulpropper.
- Tre, 4 "længder på 28awg ledning.
For at samle hardware udførte jeg følgende trin:
- Fjernet og fortinnet enderne af hver 4 "trådlængde som vist.
- Loddet den første ledning til pin 13 på ESP32 (TOUCH4, eller "T4", input).
- Loddet den anden ledning til pin 12 på ESP32 (TOUCH5, eller "T5", input).
- Loddet den tredje ledning til pin 14 på ESP32 (TOUCH6 eller "T6" input).
- Loddet en af hver af de tre 3/8 "metalliske hulpropper til de frie ender af de tre trådlængder.
Trin 2: Software
Filen "Buttons.ino" er en Arduino -miljøfil, der indeholder softwaren til designet. Ud over denne fil skal du bruge "U8g2lib" -grafikbiblioteket til WiFi Kit32 OLED -skærmen (se https://github.com/olikraus/u8g2/wiki for yderligere oplysninger om dette bibliotek).
Med U8g2lib -grafikbiblioteket installeret i dit Arduino -bibliotek, og "Buttons.ino" indlæst i Arduino -miljøet, skal du kompilere og downloade softwaren til ESP32.
Når den er downloadet og kører, skal den øverste linje på displayet læse "Knapper" med den anden linje i displayet "1 2 3" som knapindikatorer. Under hver af de 1, 2, 3 knapindikatorer er de ufiltrerede berøringsværdier, og under hver af disse er knappetrykindikatorerne ("1" for trykket, "0" for ikke trykket). Som det kan ses i videoen (og som langsigtet testet bekræftet), giver softwarefilteret pålidelig knapindgangsdetektering uden falsk udløsning.
Trin 3: Om softwaren
Softwaren indeholder tre hovedkodesektioner; Arduino krævede "setup ()" og "loop ()" sektioner og en "Interrupts" sektion. Afsnittet setup () indeholder den kode, der er nødvendig for at initialisere OLED og afbryde tjenester. OLED -opsætningsfunktionerne er beskrevet i ovenstående link. Afbrydelse af serviceopsætningsfunktionerne er som følger:
- "timerLoopSemaphore = xSemaphoreCreateBinary ()" opretter en semafor for "InterruptService ()" (rutinen for afbrydelser) for at informere loop (), når det er tid til at udføre et loop -pass.
- "timerInterruptService = timerBegin (0, 80, true)" opretter en timer ved hjælp af hardware timer 0 med en forudskala på 80.
- "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" knytter InterruptService () til timeren.
- "timerAlarmWrite (timerInterruptService, 1000, true)" indstiller afbrydelseshastigheden til 1000hz.
- "timerAlarmEnable (timerInterruptService)" starter timeralarmen og afbryder dermed tjenesten.
Når opsætningen er fuldført, indtastes loop () og stopper straks ved linjen:
hvis (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), betyder loop () vil vente på dette tidspunkt, indtil semaforen fra InterruptService () ankommer. Når semaforen ankommer, udføres loop () -koden, opdaterer OLED -displayet med knapdata og vender derefter tilbage til toppen for igen at afvente det næste semafor. Når InterruptService () kører på 1000hz og en LOOP_DELAY -værdi på 30, udføres loop () hver 30. ms eller med en skærmopdateringshastighed på 33.333hz. Selvom dette er en højere skærmopdateringshastighed end krævet for de fleste ESP32 -applikationer, brugte jeg denne indstilling til at illustrere filterets lydhørhed. Jeg testede og bestemte den tid, der kræves for at udføre et enkelt loop () -pass til 20 ms.
InterruptService () kaldes af timeren oprettet i setup () med en hastighed på 1000hz. Når det kaldes, opdaterer det to nedtællere, nLoopDelay og nButtonDelay. Når nLoopDelay nedtælles ned til nul, sender den semaforen, så loop () kan udføre et enkelt pass og nulstiller derefter nLoopDelay. Når nButtonDelay tælles ned til nul, nulstilles det også, og knappen "filtrerer" udføres.
Hvert knapfilter har en unik filtertæller (f.eks. NButton1Count, nButton2Count og nButton3Count). Så længe den berøringsindgangsværdi, der er tildelt knappen, er større end eller lig med den definerede tærskelværdi (BUTTON_THRESHHOLD), forbliver filtertælleren, der er tildelt knappen og knappen, nul. Hvis den berøringsindgangsværdi, der er tildelt knappen, er mindre end den definerede tærskel, øges filtertælleren, der er tildelt knappen, med en hver 20. ms. Når filtertælleren overskrider knappefilterværdien (BUTTON_FILTER), betragtes knappen som "trykket". Effekten af denne metode er at oprette et filter, der kræver 80ms (20ms nButtonDelay * 4ms nButtonCountN hvor N er knappenummeret) af kontinuerlige berøringsinputværdier under den definerede tærskel for at overveje, at knappen faktisk er trykket. Enhver gang mindre end 80 ms betragtes som en "fejl" og afvises af filteret.
I betragtning af denne korte beskrivelse, er du velkommen til at stille spørgsmål, så vil jeg gøre mit bedste for at besvare dem.
Håber du nød det!
Trin 4: "Det kommende projekt"
Det kommende projekt, "Intelligrill® Pro", er en rygermonitor med dobbelttemperatur sonde med:
- Steinhart-Hart temperatur sondeberegninger (i modsætning til "opslag" -tabeller) for øget nøjagtighed.
- Forudsigelig tid til færdiggørelse på probe 1, der inkorporerer den øgede nøjagtighed, der stammer fra Steinhart-Hart-beregningerne.
- En anden sonde, sonde 2, til overvågning af rygtemperatur (begrænset til 32 til 399 grader).
- Kapacitive berøringsindgangskontroller (som i denne instruktionsbog).
- WIFI -baseret fjernovervågning (med en fast IP -adresse, muliggør overvågning af rygerens fremskridt, hvor som helst en internetforbindelse er tilgængelig).
- Udvidet temperaturområde (igen 32 til 399 grader).
- Hørbare fuldførelsesalarmer både i Intelligrill® -senderen og på de fleste WiFi -kompatible overvågningsenheder.
- Temperaturvisning i enten grader F eller grader C.
- Tidsformat i enten HH: MM: SS eller HH: MM.
- Batteridisplay i enten volt eller % opladet.
- Og snart kommer PID -output til sneglerbaserede rygere.
"Intelligrill® Pro" tester for at blive den mest præcise, funktionsfyldte og pålidelige HTML -baserede Intelligrill®, jeg har designet.
Det er stadig under test, men med måltiderne hjælper det med at forberede under testen, jeg har taget mere end et par kilo på.
Igen, jeg håber du nyder det!
Trin 5: Næste op: ESP32 NTP-temperatursonde Analog input med Steinhart-Hart-korrektion
Vær forberedt på at støve dine algebra -bøger af for denne.
Anbefalede:
Test Bare Arduino, med spilsoftware ved hjælp af kapacitiv input og LED: 4 trin
Test Bare Arduino, med spilsoftware ved hjælp af kapacitiv input & LED: " Push-It " Interaktivt spil ved hjælp af et blottet Arduino -bord, ingen eksterne dele eller ledninger nødvendig (bruger en kapacitiv 'touch' input). Vist ovenfor viser, at den kører på to forskellige tavler. Push-It har to formål. For hurtigt at demonstrere/v
Spil med 4 knapper ved hjælp af et analogt input: 6 trin (med billeder)
4-knapsspil ved hjælp af en analog indgang: Denne instrukser fokuserer på at bruge en analog indgangslinje til flere knapper, som kan detekteres uafhængigt af hinanden.Og for at fremhæve brugen af disse knapper er software til at spille fire forskellige 4-knapsspil. Alle spil (8 i t
Få blind til at genkende ting ved at røre ved ting omkring dem ved hjælp af MakeyMakey: 3 trin
Få blind til at genkende ting ved at røre ved tingene omkring dem ved hjælp af MakeyMakey: introduktion Dette projekt har til formål at gøre blindes liv let ved at identificere ting omkring dem gennem følesansen. Mig og min søn Mustafa tænkte vi på at finde et værktøj til at hjælpe dem og i den periode, hvor vi bruger MakeyMakey -hardware til
Sådan laver du en drone ved hjælp af Arduino UNO - Lav en quadcopter ved hjælp af mikrokontroller: 8 trin (med billeder)
Sådan laver du en drone ved hjælp af Arduino UNO | Lav en Quadcopter ved hjælp af mikrokontroller: Introduktion Besøg min Youtube -kanal En Drone er en meget dyr gadget (produkt) at købe. I dette indlæg vil jeg diskutere, hvordan jeg gør det billigt ?? Og hvordan kan du lave din egen sådan til en billig pris … Nå i Indien alle materialer (motorer, ESC'er
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter - Rc Helikopter - Rc -fly ved hjælp af Arduino: 5 trin (med billeder)
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter | Rc Helikopter | Rc -fly ved hjælp af Arduino: At betjene en Rc -bil | Quadcopter | Drone | RC -fly | RC -båd, vi har altid brug for en modtager og sender, antag at vi til RC QUADCOPTER har brug for en 6 -kanals sender og modtager, og den type TX og RX er for dyr, så vi laver en på vores