Isi kandungan:

Input Sentuh Kapasitif ESP32 Menggunakan "Palam Lubang Logam" untuk Butang: 5 Langkah (dengan Gambar)
Input Sentuh Kapasitif ESP32 Menggunakan "Palam Lubang Logam" untuk Butang: 5 Langkah (dengan Gambar)

Video: Input Sentuh Kapasitif ESP32 Menggunakan "Palam Lubang Logam" untuk Butang: 5 Langkah (dengan Gambar)

Video: Input Sentuh Kapasitif ESP32 Menggunakan
Video: How to use Capacitive touch pins of ESP32 Development board to control AC but or LED - Robojax 2024, Disember
Anonim
Image
Image
Perkakasan
Perkakasan

Semasa saya menyelesaikan keputusan reka bentuk untuk projek berasaskan ESP32 WiFi Kit 32 yang akan datang yang memerlukan input tiga butang, satu masalah yang ketara adalah bahawa WiFi Kit 32 tidak mempunyai satu butang tekan mekanikal, tetapi tiga butang mekanikal sahaja, untuk input. Walau bagaimanapun, Kit WiFi 32 mempunyai banyak input sentuhan kapasitif, jadi saya meluangkan masa untuk mengumpulkan perkakasan, menulis perisian dan menguji reka bentuk input tiga butang menggunakan ciri input sentuh kapasitif ESP32 dan tiga "lubang palam logam" 3/8 untuk butang.

Seperti yang diketahui oleh sesiapa yang telah bereksperimen dengan input sentuh kapasitif ESP32, input sentuhan pastinya cukup bising sehingga memerlukan penapisan untuk pengesanan input yang boleh dipercayai. Untuk meminimumkan jumlah bahagian untuk projek yang akan datang, saya menentukan bahawa penapis digital yang didorong oleh gangguan sederhana (lebih daripada "penyingkiran" daripada penapis, tetapi saya merosot), berbanding menambah perkakasan penapis luaran, dapat meredakan input yang bising. Dan setelah menguji, menjadi jelas bahawa input kapasitif ESP32, tiga palam lubang logam 3/8 ", dan beberapa perisian" penyaringan "digital, sememangnya akan memberikan input tiga butang yang boleh dipercayai untuk reka bentuk.

Oleh itu, jika anda berminat untuk menguji input kapasitif dengan penapisan digital pada ESP32, saya telah memasukkan kod sumber "Buttons.ino" dalam format persekitaran Arduino bersama dengan arahan pemasangan dan pengaturcaraan, serta penerangan ringkas mengenai kod sumber, untuk apa yang saya dapati menjadi input tiga butang yang sangat dipercayai.

Dan seperti biasa, saya mungkin lupa satu atau dua fail atau yang tahu apa lagi, jadi jika anda mempunyai sebarang pertanyaan, jangan ragu untuk bertanya kerana saya melakukan banyak kesilapan.

Dan satu catatan terakhir, saya tidak menerima pampasan dalam bentuk apa pun, termasuk tetapi tidak terhad kepada sampel percuma, untuk mana-mana komponen yang digunakan dalam reka bentuk ini

Langkah 1: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan

Reka bentuk menggunakan perkakasan berikut:

  • Satu, Kit WiFi 32.
  • Palam lubang logam 3/8 ".
  • Tiga, 4 "panjang wayar 28awg.

Untuk memasang perkakasan, saya melakukan langkah-langkah berikut:

  • Dilucutkan dan diikat hujung setiap panjang wayar 4 "seperti yang ditunjukkan.
  • Memateri wayar pertama ke pin 13 dari ESP32 (input TOUCH4, atau "T4").
  • Memateri wayar kedua ke pin 12 dari ESP32 (input TOUCH5, atau "T5").
  • Memateri wayar ketiga ke pin 14 dari ESP32 (input TOUCH6, atau "T6").
  • Memateri salah satu daripada tiga palam lubang logam 3/8 "ke hujung bebas dari tiga panjang wayar.

Langkah 2: Perisian

Perisian
Perisian

Fail "Buttons.ino" adalah fail persekitaran Arduino yang mengandungi perisian untuk reka bentuk. Sebagai tambahan kepada fail ini, anda memerlukan pustaka grafik "U8g2lib" untuk paparan OLED WiFi Kit32 (lihat https://github.com/olikraus/u8g2/wiki untuk maklumat lebih lanjut mengenai perpustakaan ini).

Dengan perpustakaan grafik U8g2lib dipasang di direktori Arduino anda, dan "Buttons.ino" dimuat ke dalam persekitaran Arduino, menyusun dan memuat turun perisian ke dalam ESP32.

Setelah dimuat dan dijalankan, baris atas paparan harus dibaca "Butang" dengan baris kedua paparan berbunyi "1 2 3" sebagai penunjuk butang. Di bawah setiap indikator butang 1, 2, 3 adalah nilai baca sentuh yang tidak difilter, dan di bawah masing-masing terdapat petunjuk penekan butang ("1" untuk ditekan, "0" untuk tidak ditekan). Seperti yang dapat dilihat dalam video (dan seperti yang telah lama diuji), penapis perisian menyediakan pengesanan input butang yang boleh dipercayai tanpa pemicu palsu.

Langkah 3: Mengenai Perisian

Perisian ini mengandungi tiga bahagian kod utama; bahagian Arduino yang diperlukan "persediaan ()" dan "gelung ()", dan bahagian "Selang". Bahagian persediaan () mengandungi kod yang diperlukan untuk memulakan perkhidmatan OLED dan mengganggu perkhidmatan. Fungsi penyediaan OLED dijelaskan dalam pautan di atas. Fungsi penyediaan perkhidmatan gangguan adalah seperti berikut:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" membuat semaphore untuk "InterruptService ()" (rutin perkhidmatan interrupt) untuk memberitahu loop () apabila tiba masanya untuk melaksanakan loop loop.
  • "timerInterruptService = timerBegin (0, 80, true)" membuat pemasa menggunakan pemasa perkakasan 0 dengan prescale 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" melampirkan InterruptService () pada pemasa.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" menetapkan kadar perkhidmatan gangguan kepada 1000hz.
  • "timerAlarmEnable (timerInterruptService)" memulakan penggera pemasa, dan dengan itu mengganggu perkhidmatan.

Dengan penyiapan selesai, gelung () dimasukkan dan segera berhenti di garisan:

jika (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), bermaksud loop () akan menunggu pada ketika ini sehingga semaphore dari InterruptService () tiba. Apabila semaphore tiba, kod gelung () dijalankan, mengemas kini paparan OLED dengan data butang, kemudian kembali ke atas lagi untuk menunggu semaphore seterusnya. Dengan InterruptService () berjalan pada 1000hz dan nilai LOOP_DELAY 30, loop () dijalankan setiap 30ms, atau pada kadar kemas kini paparan 33.333hz. Walaupun ini adalah kadar penyegaran paparan yang lebih tinggi daripada yang diperlukan untuk kebanyakan aplikasi ESP32, saya menggunakan tetapan ini untuk menggambarkan respons penapis. Saya melakukan ujian dan menentukan masa yang diperlukan untuk melaksanakan satu gelung () lulus menjadi 20ms.

InterruptService () dipanggil oleh pemasa yang dibuat dalam persediaan () pada kadar 1000hz. Apabila dipanggil, ia mengemas kini dua kaunter turun, nLoopDelay dan nButtonDelay. Apabila nLoopDelay dikira ke bawah menjadi sifar, ia menghantar semaphore yang membolehkan gelung () untuk melaksanakan satu hantaran kemudian menetapkan semula nLoopDelay. Apabila nButtonDelay dihitung ke bawah menjadi sifar, ia juga diset semula kemudian tombol "filter" dijalankan.

Setiap penapis butang mempunyai kaunter penapis unik (mis. NButton1Count, nButton2Count dan nButton3Count). Selagi nilai input sentuhan yang diberikan pada butang lebih besar daripada atau sama dengan nilai ambang yang ditentukan (BUTTON_THRESHHOLD), penghitung penapis yang diberikan pada butang dan butang tetap sifar. Sekiranya nilai input sentuhan yang diberikan pada butang kurang dari ambang yang ditentukan, penghitung penapis yang diberikan pada butang akan bertambah satu setiap 20ms. Apabila penghitung penapis melebihi nilai penapis butang (BUTTON_FILTER), butang tersebut dianggap "ditekan". Kesan kaedah ini adalah untuk membuat penapis yang memerlukan 80ms (20ms nButtonDelay * 4ms nButtonCountN di mana N adalah nombor butang) nilai input sentuhan berterusan di bawah ambang yang ditentukan untuk mempertimbangkan butang sebenarnya ditekan. Bila-bila masa kurang dari 80ms dianggap "kesalahan" dan ditolak oleh penapis.

Dengan penerangan ringkas ini, jika anda mempunyai sebarang pertanyaan, jangan ragu untuk bertanya dan saya akan berusaha sebaik mungkin untuk menjawabnya.

Semoga anda menikmatinya!

Langkah 4: "Projek Akan Datang"

The
The

Projek yang akan datang, "Intelligrill® Pro", adalah monitor perokok probe suhu ganda yang menampilkan:

  • Pengiraan probe suhu Steinhart-Hart (berbanding jadual "cari") untuk peningkatan ketepatan.
  • Masa ramalan hingga selesai pada probe 1 yang menggabungkan peningkatan ketepatan yang diperoleh dari pengiraan Steinhart-Hart.
  • Probe kedua, probe 2, untuk memantau suhu perokok (terhad kepada 32 hingga 399 darjah).
  • Kawalan input sentuhan kapasitif (seperti dalam Instructable ini).
  • Pemantauan jarak jauh berasaskan WIFI (dengan alamat IP tetap, membolehkan pemantauan kemajuan perokok dari mana sahaja sambungan internet tersedia).
  • Julat suhu yang dilanjutkan (sekali lagi 32 hingga 399 darjah).
  • Penggera penyelesaian yang dapat didengar baik dalam pemancar Intelligrill® dan pada kebanyakan peranti pemantauan berkemampuan WiFi.
  • Paparan suhu sama ada darjah F atau darjah C.
  • Format masa sama ada HH: MM: SS atau HH: MM.
  • Paparan bateri sama ada volt atau% dicas.
  • Dan akan datang, output PID untuk perokok berasaskan auger.

"Intelligrill® Pro" sedang diuji untuk menjadi Intelligrill® yang telah dirancang oleh HTML yang paling tepat, lengkap dan boleh dipercayai.

Masih dalam ujian, tetapi dengan makanan yang membantu untuk disiapkan semasa ujian, saya mendapat lebih daripada beberapa paun.

Sekali lagi, saya harap anda menikmatinya!

Langkah 5: Seterusnya: Input Analog Suhu ESP32 NTP Dengan Pembetulan Steinhart-Hart

Bersedia untuk membersihkan buku aljabar anda untuk buku ini.

Disyorkan: