Cuprins:

Intrare tactilă capacitivă ESP32 utilizând „dopuri metalice” pentru butoane: 5 pași (cu imagini)
Intrare tactilă capacitivă ESP32 utilizând „dopuri metalice” pentru butoane: 5 pași (cu imagini)

Video: Intrare tactilă capacitivă ESP32 utilizând „dopuri metalice” pentru butoane: 5 pași (cu imagini)

Video: Intrare tactilă capacitivă ESP32 utilizând „dopuri metalice” pentru butoane: 5 pași (cu imagini)
Video: Simple touch sensor on ESP32 2024, Iulie
Anonim
Image
Image
Hardware
Hardware

În timp ce finalizam deciziile de proiectare pentru un viitor proiect ESP32 WiFi Kit 32 care necesită intrare cu trei butoane, o problemă remarcabilă a fost că WiFi Kit 32 nu are un singur buton mecanic, ci doar trei butoane mecanice, pentru intrare. Cu toate acestea, WiFi Kit 32 are o mulțime de intrări tactile capacitive, așa că am petrecut ceva timp asamblând hardware, scriind software și testând un design de intrare cu trei butoane utilizând funcția de intrare tactilă capacitivă ESP32 și trei prize de 3/8 "" gaură metalică "pentru butoane.

Așa cum a descoperit oricine a experimentat cu intrările tactile capacitive ESP32, intrările tactile sunt cu siguranță suficient de zgomotoase pentru a necesita filtrare pentru detectarea fiabilă a intrărilor. Pentru a minimiza numărul total de piese pentru viitorul proiect, am stabilit că un simplu filtru digital acționat prin întrerupere (mai degrabă un „debounce” decât un filtru, dar deviez), spre deosebire de adăugarea hardware-ului de filtru extern, ar putea liniști intrările zgomotoase. Și după testare, a devenit evident că intrările capacitive ESP32, trei prize de gaură metalică de 3/8 "și unele programe digitale de" filtrare ", ar oferi într-adevăr o intrare fiabilă cu trei butoane pentru proiectare.

Deci, dacă sunteți interesat să testați intrarea capacitivă cu filtrare digitală pe un ESP32, am inclus codul sursă "Buttons.ino" în formatul de mediu Arduino împreună cu instrucțiunile de asamblare și programare, plus o scurtă descriere a codului sursă, pentru ceea ce am descoperit a fi o intrare extrem de fiabilă cu trei butoane.

Și, ca de obicei, probabil că am uitat un dosar sau două sau cine știe ce altceva, așa că, dacă aveți întrebări, vă rog să nu ezitați să întrebați, deoarece fac multe greșeli.

Și o notă finală, nu primesc nicio compensație sub nici o formă, inclusiv, dar fără a se limita la eșantioane gratuite, pentru oricare dintre componentele utilizate în acest design

Pasul 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Proiectarea utilizează următorul hardware:

  • Unul, WiFi Kit 32.
  • Trei dopuri cu găuri metalice de 3/8 ".
  • Trei, 4 "lungimi de sârmă de 28awg.

Pentru a asambla hardware-ul, am parcurs următorii pași:

  • Îndepărtați și conservați capetele fiecărei lungimi de sârmă de 4 "așa cum se arată.
  • Am lipit primul fir la pinul 13 al ESP32 (intrarea TOUCH4 sau "T4").
  • A lipit al doilea fir la pinul 12 al ESP32 (intrarea TOUCH5 sau "T5").
  • A lipit al treilea fir la pinul 14 al ESP32 (intrarea TOUCH6 sau "T6").
  • Sudat câte unul din fiecare dintre cele trei dopuri de găuri metalice de 3/8 "la capetele libere ale celor trei lungimi de sârmă.

Pasul 2: Software

Software
Software

Fișierul „Buttons.ino” este un fișier de mediu Arduino care conține software-ul pentru proiectare. În plus față de acest fișier, veți avea nevoie de biblioteca grafică "U8g2lib" pentru afișajul WiFi Kit32 OLED (consultați https://github.com/olikraus/u8g2/wiki pentru informații suplimentare despre această bibliotecă).

Cu biblioteca grafică U8g2lib instalată în directorul dvs. Arduino și „Buttons.ino” încărcat în mediul Arduino, compilați și descărcați software-ul în ESP32.

Odată descărcat și rulat, linia de sus a afișajului ar trebui să citească „Butoane” cu a doua linie a afișajului citind „1 2 3” ca indicatori de buton. Sub fiecare dintre 1, 2, 3 indicatoare de buton se află valorile de citire la atingere nefiltrate, iar sub fiecare dintre acestea sunt indicatoarele de apăsare a butonului ("1" pentru apăsat, "0" pentru neapăsat). Așa cum se poate vedea în videoclip (și dacă testarea pe termen lung este confirmată), filtrul software asigură detectarea fiabilă a intrării butoanelor fără declanșare falsă.

Pasul 3: Despre software

Software-ul conține trei secțiuni principale de cod; Arduino necesită secțiuni „setup ()” și „loop ()” și o secțiune „Întrerupe”. Secțiunea setup () conține codul necesar pentru a inițializa OLED și a întrerupe serviciile. Funcțiile de configurare OLED sunt descrise în linkul de mai sus. Funcțiile de configurare a serviciului de întrerupere sunt după cum urmează:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" creează un semafor pentru "InterruptService ()" (rutina serviciului de întrerupere) pentru a informa bucla () când este timpul să executați o trecere de buclă.
  • "timerInterruptService = timerBegin (0, 80, true)" creează un temporizator utilizând temporizatorul hardware 0 cu o prescală de 80.
  • „timerAttachInterrupt (timerInterruptService, & InterruptService, true)” atașează InterruptService () la cronometru.
  • „timerAlarmWrite (timerInterruptService, 1000, true)” setează rata serviciului de întrerupere la 1000hz.
  • „timerAlarmEnable (timerInterruptService)” pornește alarma temporizatorului și astfel întrerupe serviciul.

Odată ce configurarea este completă, bucla () este introdusă și se oprește imediat la linie:

if (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), loop loop () va aștepta în acest moment până când sosește semaforul din InterruptService (). Când semaforul ajunge, codul loop () se execută, actualizând afișajul OLED cu datele butonului, apoi revenind în partea de sus pentru a aștepta din nou următorul semafor. Cu InterruptService () care rulează la 1000hz și o valoare LOOP_DELAY de 30, loop () se execută la fiecare 30ms sau la o rată de actualizare a afișajului de 33,333hz. Deși aceasta este o rată de reîmprospătare a afișajului mai mare decât cea necesară pentru majoritatea aplicațiilor ESP32, am folosit această setare pentru a ilustra reacția filtrului. Am testat și am determinat timpul necesar pentru a executa o singură buclă () pass să fie de 20 ms.

InterruptService () este apelat de cronometrul creat în setup () la o rată de 1000hz. Când este apelat, actualizează două contoare descendente, nLoopDelay și nButtonDelay. Când nLoopDelay este numărat în jos până la zero, acesta trimite semaforul care permite loop () să execute o singură trecere, apoi resetează nLoopDelay. Când nButtonDelay este numărat până la zero, acesta este resetat și apoi butonul „filtre” se execută.

Fiecare filtru de buton are un contor de filtru unic (de exemplu, nButton1Count, nButton2Count și nButton3Count). Atâta timp cât valoarea de intrare tactilă alocată butonului este mai mare sau egală cu valoarea pragului definită (BUTTON_THRESHHOLD), contorul de filtru atribuit butonului și butonul rămân zero. Dacă valoarea de intrare tactilă atribuită butonului este mai mică decât pragul definit, contorul filtrului atribuit butonului este incrementat cu unul la fiecare 20 ms. Când contorul filtrului depășește valoarea filtrului butonului (BUTTON_FILTER), butonul este considerat „apăsat”. Efectul acestei metode este de a crea un filtru care necesită 80 ms (20 ms nButtonDelay * 4ms nButtonCountN unde N este numărul butonului) de valori de intrare continuă tactilă sub pragul definit pentru a lua în considerare butonul efectiv apăsat. Orice timp mai mic de 80ms este considerat o „problemă” și este respins de filtru.

Având în vedere această scurtă descriere, dacă aveți întrebări, nu ezitați să întrebați și voi face tot posibilul să le răspund.

Sper ca ti-a placut!

Pasul 4: „Proiectul viitoare”

The
The

Viitorul proiect, „Intelligrill® Pro”, este un monitor pentru fumători cu sondă cu temperatură dublă, care conține:

  • Calculele sondei de temperatură Steinhart-Hart (spre deosebire de tabelele „căutare”) pentru o precizie sporită.
  • Timp predictiv până la finalizare pe sonda 1 încorporând precizia crescută derivată din calculele Steinhart-Hart.
  • O a doua sondă, sonda 2, pentru monitorizarea temperaturii fumătorului (limitată la 32 până la 399 grade).
  • Comenzi capacitive de intrare tactilă (ca în acest instructabil).
  • Monitorizare la distanță bazată pe WIFI (cu o adresă IP fixă, permite monitorizarea progresului fumătorului de oriunde este disponibilă o conexiune la internet).
  • Domeniu extins de temperatură (din nou de la 32 la 399 de grade).
  • Alarme sonore de finalizare atât în cadrul transmițătorului Intelligrill®, cât și pe majoritatea dispozitivelor de monitorizare compatibile WiFi.
  • Afișarea temperaturii fie în grade F, fie în grade C.
  • Formatul orei fie în HH: MM: SS, fie în HH: MM.
  • Afișarea bateriei fie în volți, fie în% încărcat.
  • Și în curând, ieșirea PID pentru fumătorii pe bază de melc.

"Intelligrill® Pro" testează pentru a deveni cel mai precis, mai bogat în funcții și mai fiabil bazat pe Intelligrill® pe care l-am proiectat.

Este încă sub test, dar cu mesele pe care le ajută să le pregătesc în timpul testării, am câștigat mai mult de câteva kilograme.

Din nou, sper să vă placă!

Pasul 5: Următorul: Intrare analogică a sondei de temperatură ESP32 NTP cu corecție Steinhart-Hart

Fiți pregătiți să vă îndepărtați cărțile de algebră pentru aceasta.

Recomandat: