INHOUDSOPGAWE:

ESP32 Kapasitiewe raakinvoer met behulp van "Metaalgatproppe" vir knoppies: 5 stappe (met foto's)
ESP32 Kapasitiewe raakinvoer met behulp van "Metaalgatproppe" vir knoppies: 5 stappe (met foto's)

Video: ESP32 Kapasitiewe raakinvoer met behulp van "Metaalgatproppe" vir knoppies: 5 stappe (met foto's)

Video: ESP32 Kapasitiewe raakinvoer met behulp van
Video: How to user Makerfabs ESP32 3.5" TFT Capacitive Touch with Camera 2024, November
Anonim
Image
Image
Hardeware
Hardeware

Terwyl ek besig was met die ontwerpbesluite vir 'n komende ESP32 WiFi Kit 32 -gebaseerde projek wat drie knoppie -invoer benodig, was 'n opvallende probleem dat die WiFi Kit 32 nie 'n enkele meganiese drukknop het nie, maar alleen drie meganiese knoppies vir invoer. Die WiFi Kit 32 het egter baie kapasitiewe aanraakinsette, so ek het 'n geruime tyd bestee aan die saamstel van hardeware, die skryf van sagteware en die toets van 'n ontwerp met drie knoppies met behulp van die ESP32 -kapasitiewe aanraakinvoerfunksie en drie 3/8 "" metaalproppe "vir knoppies.

Soos almal wat met die ESP32 -kapasitiewe aanraakinsette geëksperimenteer het, ontdek het, is die aanraakinsette beslis raserig genoeg om gefiltreer te word vir betroubare insetopsporing. Om die totale aantal tellings vir die komende projek te verminder, het ek vasgestel dat 'n eenvoudige onderbrekingsgedrewe digitale filter (meer '' terugval '' as 'n filter, maar ek dwaal af), in teenstelling met die toevoeging van eksterne filterhardeware, die raserige insette kan stilmaak. En na die toets het dit geblyk dat die ESP32 -kapasitiewe insette, drie 3/8 "metaalproppe en 'n paar digitale" filter "sagteware inderdaad 'n betroubare ingang van drie knoppies vir die ontwerp sou bied.

As u dus belangstel om kapasitiewe insette met digitale filter op 'n ESP32 te toets, het ek die bronkode "Buttons.ino" in die Arduino -omgewingsformaat opgeneem, saam met monteer- en programmeringsinstruksies, plus 'n kort beskrywing van die bronkode, vir wat ek ontdek het as 'n baie betroubare inset met drie knoppies.

En soos gewoonlik het ek waarskynlik 'n lêer of twee vergeet, of wie weet wat nog meer, so as u enige vrae het, moet asseblief nie huiwer om dit te vra nie, want ek maak baie foute.

En 'n laaste opmerking: ek ontvang geen vergoeding in enige vorm nie, insluitend maar nie beperk tot gratis monsters nie, vir enige van die komponente wat in hierdie ontwerp gebruik word

Stap 1: Hardeware

Hardeware
Hardeware
Hardeware
Hardeware
Hardeware
Hardeware

Die ontwerp maak gebruik van die volgende hardeware:

  • Een, WiFi -kit 32.
  • Drie, 3/8 "metaalproppe.
  • Drie, 4 "lengtes van 28awg draad.

Om die hardeware te monteer, het ek die volgende stappe uitgevoer:

  • Die ente van elke 4 "draadlengte gestroop en gebak, soos getoon.
  • Die eerste draad aan pen 13 van die ESP32 (die TOUCH4, of "T4", invoer) gesoldeer.
  • Soldeer die tweede draad aan pen 12 van die ESP32 (die TOUCH5, of "T5", invoer).
  • Soldeer die derde draad aan pen 14 van die ESP32 (die TOUCH6, of "T6" invoer).
  • Soldeer een van elk van die drie 3/8 "metaalproppe aan die vrye ente van die drie draadlengtes.

Stap 2: sagteware

Sagteware
Sagteware

Die lêer "Buttons.ino" is 'n Arduino -omgewingslêer wat die sagteware vir die ontwerp bevat. Benewens hierdie lêer, benodig u ook die "U8g2lib" grafiese biblioteek vir die WiFi Kit32 OLED -skerm (sien https://github.com/olikraus/u8g2/wiki vir meer inligting oor hierdie biblioteek).

Met die U8g2lib grafiese biblioteek geïnstalleer in u Arduino -gids en "Buttons.ino" in die Arduino -omgewing gelaai, stel u die sagteware op en laai dit af in die ESP32.

Sodra dit afgelaai en uitgevoer is, moet die boonste reël van die skerm "knoppies" lees, met die tweede reël van die skerm "1 2 3" as die knoppie -aanwysers. Onder elk van die 1, 2, 3 knoppie -aanwysers is die ongefiltreerde raakleeswaardes, en onder elkeen hiervan is die knoppie -drukaanwysers ("1" vir ingedruk, "0" vir nie ingedruk nie). Soos in die video gesien kan word (en as die langtermyn getoets bevestig word), bied die sagtewarefilter betroubare knoppie -invoeropsporing sonder vals sneller.

Stap 3: Oor die sagteware

Die sagteware bevat drie hoofkode -afdelings; die Arduino benodig "setup ()" en "loop ()" afdelings, en 'n "Interrupts" afdeling. Die afdeling setup () bevat die kode wat nodig is om OLED te begin en dienste te onderbreek. Die OLED -opstelfunksies word in die skakel hierbo beskryf. Die funksies vir onderbrekingsdiensopstelling is soos volg:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" skep 'n semafoor vir "InterruptService ()" (die onderbreekdiensroetine) om loop () in te lig wanneer dit tyd is om 'n luspas uit te voer.
  • "timerInterruptService = timerBegin (0, 80, true)" skep 'n timer met hardeware -timer 0 met 'n voorskaal van 80.
  • "timerAttachInterrupt (timerInterruptService, en InterruptService, true)" heg InterruptService () aan die timer.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" stel die diensonderbrekingsnelheid op 1000hz.
  • "timerAlarmEnable (timerInterruptService)" begin die timer -alarm en onderbreek dus diens.

As die opstelling voltooi is, word lus () ingevoer en stop dit onmiddellik by die lyn:

as (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), betekenislus () sal op hierdie punt wag totdat die semafoor van InterruptService () aankom. As die semafoor aankom, voer die lus () -kode uit, werk die OLED -skerm op met die knoppiegegevens, en keer dan terug na bo om weer te wag op die volgende semafoor. Met InterruptService () wat op 1000hz werk en 'n LOOP_DELAY -waarde van 30, loop loop () elke 30 ms uit, of teen 'n weergawesnelheid van 33.333hz. Alhoewel dit 'n hoër skermverfrissnelheid is as wat nodig is vir die meeste ESP32 -toepassings, het ek hierdie instelling gebruik om die reaksie van die filter te illustreer. Ek het getoets en bepaal die tyd wat nodig is om 'n enkele lus () -uitgang uit te voer, tot 20 ms.

InterruptService () word gebel deur die timer wat in setup () geskep is, teen 'n snelheid van 1000 Hz. As dit gebel word, werk dit twee afrekenaars by, nLoopDelay en nButtonDelay. As nLoopDelay af is afgetel tot nul, stuur dit die semafoor sodat lus () 'n enkele pas kan uitvoer en dan herstel nLoopDelay. As nButtonDelay af is afgetel tot nul, word dit ook teruggestel, dan word die knoppie "filters" uitgevoer.

Elke knoppiefilter het 'n unieke filterteller (bv. NButton1Count, nButton2Count en nButton3Count). Solank die raakinvoerwaarde wat aan die knoppie toegeken is groter is as of gelyk is aan die gedefinieerde drempelwaarde (BUTTON_THRESHHOLD), bly die filterteller wat aan die knoppie toegewys is en die knoppie nul. As die aanraakinvoerwaarde wat aan die knoppie toegeken is, laer is as die gedefinieerde drempel, word die filterteller wat aan die knoppie toegeken word, elke 20 ms verhoog. As die filterteller die knoppiefilterwaarde (BUTTON_FILTER) oorskry, word die knoppie as 'ingedruk' beskou. Die effek van hierdie metode is om 'n filter te skep wat 80ms (20ms nButtonDelay * 4ms nButtonCountN waar N die knoppiegetal is) aaneenlopende aanraakinvoerwaardes onder die gedefinieerde drempel benodig om die werklike knoppie in ag te neem. Elke tyd wat minder as 80 ms word beskou as 'n "fout" en word deur die filter verwerp.

Gegewe hierdie kort beskrywing, as u enige vrae het, kan u dit gerus vra, en ek sal my bes doen om dit te beantwoord.

Hoop jy het dit geniet!

Stap 4: Die "komende projek"

Die
Die

Die komende projek, "Intelligrill® Pro", is 'n rokermonitor met dubbele temperatuur met:

  • Steinhart-Hart temperatuur sonde berekeninge (in teenstelling met "opsoek" tabelle) vir groter akkuraatheid.
  • Voorspellingstyd tot voltooiing op sonde 1 met die verhoogde akkuraatheid wat uit die Steinhart-Hart-berekeninge verkry word.
  • 'N Tweede sonde, sonde 2, vir die monitering van rokertemperatuur (beperk tot 32 tot 399 grade).
  • Kapasitiewe aanraakinvoerkontroles (soos in hierdie instruksies).
  • WIFI -gebaseerde afstandmonitering (met 'n vaste IP -adres, maak dit moontlik om die vordering van die roker te monitor vanaf enige plek waar 'n internetverbinding beskikbaar is).
  • Uitgebreide temperatuurreeks (weer 32 tot 399 grade).
  • Hoorbare voltooiingsalarme binne die Intelligrill® -sender en op die meeste WiFi -moniteringstoestelle.
  • Temperatuurweergawe in grade F of grade C.
  • Tydformaat in HH: MM: SS of HH: MM.
  • Batteryvertoning in volt of % gelaai.
  • En binnekort, PID -uitset vir rokers wat op aasbakke gebaseer is.

"Intelligrill® Pro" toets of dit die mees akkurate, funksieverpakte en betroubare HTML -gebaseerde Intelligrill® word wat ek ontwerp het.

Dit word nog steeds getoets, maar met die maaltye wat dit help om tydens die toets voor te berei, het ek meer as 'n paar kilogram opgetel.

Weereens, ek hoop jy geniet dit!

Stap 5: Volgende: ESP32 NTP Temperatuurprobe Analoge invoer met Steinhart-Hart-regstelling

Wees voorbereid om u algebraboeke vir hierdie een af te stof.

Aanbeveel: