Indholdsfortegnelse:

ESP32 kapacitiv berøringsindgang ved hjælp af "metalliske hulpropper" til knapper: 5 trin (med billeder)
ESP32 kapacitiv berøringsindgang ved hjælp af "metalliske hulpropper" til knapper: 5 trin (med billeder)

Video: ESP32 kapacitiv berøringsindgang ved hjælp af "metalliske hulpropper" til knapper: 5 trin (med billeder)

Video: ESP32 kapacitiv berøringsindgang ved hjælp af
Video: как сделать тестер электронных компонентов, используя Arduino nano, dfrobot 2024, November
Anonim
Image
Image
Hardware
Hardware

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

Hardware
Hardware
Hardware
Hardware
Hardware
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

Software
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
Det

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: