Daftar Isi:

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

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

Video: Input Sentuh Kapasitif ESP32 Menggunakan
Video: SENSOR SENTUH TANPA PERLU DISENTUH Tutorial Singkat Module Capacitive Touch Sensor Sentuh TTP223 2024, Juli
Anonim
Image
Image
Perangkat keras
Perangkat keras

Saat saya menyelesaikan keputusan desain untuk proyek berbasis ESP32 WiFi Kit 32 mendatang yang membutuhkan input tiga tombol, satu masalah yang terlihat adalah bahwa WiFi Kit 32 tidak memiliki satu tombol mekanis, namun hanya tiga tombol mekanis, untuk input. Namun, WiFi Kit 32 memang memiliki banyak input sentuh kapasitif, jadi saya menghabiskan beberapa waktu untuk merakit perangkat keras, menulis perangkat lunak, dan menguji desain input tiga tombol menggunakan fitur input sentuh kapasitif ESP32 dan tiga "colokan lubang logam" 3/8" untuk tombol.

Seperti yang telah ditemukan oleh siapa pun yang telah bereksperimen dengan input sentuh kapasitif ESP32, input sentuh pasti cukup berisik sehingga memerlukan penyaringan untuk deteksi input yang andal. Untuk meminimalkan jumlah bagian total untuk proyek yang akan datang, saya menentukan bahwa filter digital sederhana yang digerakkan oleh interupsi (lebih dari "debounce" daripada filter, tetapi saya ngelantur), dibandingkan dengan menambahkan perangkat keras filter eksternal, dapat menenangkan input yang bising. Dan setelah pengujian, menjadi jelas bahwa input kapasitif ESP32, tiga colokan lubang logam 3/8", dan beberapa perangkat lunak "penyaringan" digital, memang akan memberikan input tiga tombol yang andal untuk desain.

Jadi jika Anda tertarik untuk menguji input kapasitif dengan penyaringan digital pada ESP32, saya telah menyertakan kode sumber "Buttons.ino" dalam format lingkungan Arduino bersama dengan instruksi perakitan dan pemrograman, ditambah deskripsi singkat tentang kode sumber, untuk apa yang saya temukan sebagai input tiga tombol yang sangat andal.

Dan seperti biasa, saya mungkin lupa satu atau dua file atau siapa yang tahu apa lagi, jadi jika Anda memiliki pertanyaan, jangan ragu untuk bertanya karena saya membuat banyak kesalahan.

Dan satu catatan terakhir, saya tidak menerima kompensasi dalam bentuk apa pun, termasuk tetapi tidak terbatas pada sampel gratis, untuk komponen apa pun yang digunakan dalam desain ini.

Langkah 1: Perangkat Keras

Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras

Desain menggunakan perangkat keras berikut:

  • Satu, Paket WiFi 32.
  • Tiga, 3/8 "colokan lubang logam.
  • Tiga, 4" panjang kawat 28awg.

Untuk merakit perangkat keras, saya melakukan langkah-langkah berikut:

  • Stripping dan tinned ujung masing-masing 4 "panjang kawat seperti yang ditunjukkan.
  • Solder kabel pertama ke pin 13 ESP32 (input TOUCH4, atau "T4",).
  • Solder kabel kedua ke pin 12 ESP32 (input TOUCH5, atau "T5",).
  • Solder kabel ketiga ke pin 14 ESP32 (input TOUCH6, atau "T6").
  • Solder salah satu dari masing-masing tiga colokan lubang logam 3/8 "ke ujung bebas dari tiga panjang kawat.

Langkah 2: Perangkat Lunak

Perangkat lunak
Perangkat lunak

File "Buttons.ino" adalah file lingkungan Arduino yang berisi perangkat lunak untuk desain. Selain file ini, Anda akan memerlukan perpustakaan grafis "U8g2lib" untuk tampilan OLED Kit32 WiFi (lihat https://github.com/olikraus/u8g2/wiki untuk informasi lebih lanjut tentang perpustakaan ini).

Dengan pustaka grafis U8g2lib terinstal di direktori Arduino Anda, dan "Buttons.ino" dimuat ke lingkungan Arduino, kompilasi dan unduh perangkat lunak ke dalam ESP32.

Setelah diunduh dan dijalankan, baris atas tampilan harus bertuliskan "Tombol" dengan baris kedua dari tampilan bertuliskan "1 2 3" sebagai indikator tombol. Di bawah masing-masing indikator tombol 1, 2, 3 adalah nilai pembacaan sentuh tanpa filter, dan di bawah masing-masing indikator ini adalah indikator penekanan tombol ("1" untuk ditekan, "0" untuk tidak ditekan). Seperti yang dapat dilihat di video (dan setelah pengujian jangka panjang dikonfirmasi), filter perangkat lunak menyediakan deteksi input tombol yang andal tanpa pemicu yang salah.

Langkah 3: Tentang Perangkat Lunak

Perangkat lunak ini berisi tiga bagian kode utama; Arduino membutuhkan bagian "setup()" dan "loop()", dan bagian "Interrupt". Bagian setup() berisi kode yang diperlukan untuk menginisialisasi OLED dan layanan interupsi. Fungsi pengaturan OLED dijelaskan dalam tautan di atas. Fungsi pengaturan layanan interupsi adalah sebagai berikut:

  • "timerLoopSemaphore = xSemaphoreCreateBinary()" membuat semaphore untuk "InterruptService()" (rutin layanan interupsi) untuk menginformasikan loop() saat tiba waktunya untuk mengeksekusi loop pass.
  • "timerInterruptService = timerBegin(0, 80, true)" membuat timer menggunakan timer perangkat keras 0 dengan skala awal 80.
  • "timerAttachInterrupt(timerInterruptService, & InterruptService, true)" melampirkan InterruptService() ke timer.
  • "timerAlarmWrite(timerInterruptService, 1000, true)" menyetel tingkat layanan interupsi ke 1000hz.
  • "timerAlarmEnable(timerInterruptService)" memulai alarm pengatur waktu, dan dengan demikian mengganggu layanan.

Dengan pengaturan selesai, loop() dimasukkan dan segera berhenti di baris:

if(xSemaphoreTake(timerLoopSemaphore, portMAX_DELAY) == pdTRUE), artinya loop() akan menunggu pada titik ini sampai semaphore dari InterruptService() tiba. Ketika semaphore tiba, kode loop() dijalankan, memperbarui tampilan OLED dengan data tombol, lalu kembali ke atas untuk menunggu semaphore berikutnya. Dengan InterruptService() berjalan pada 1000hz dan nilai LOOP_DELAY 30, loop() dijalankan setiap 30ms, atau pada kecepatan pembaruan tampilan 33.333hz. Meskipun ini adalah kecepatan refresh tampilan yang lebih tinggi daripada yang diperlukan untuk sebagian besar aplikasi ESP32, saya menggunakan pengaturan ini untuk menggambarkan responsivitas filter. Saya melakukan pengujian dan menentukan waktu yang diperlukan untuk mengeksekusi satu loop() pass menjadi 20ms.

InterruptService() dipanggil oleh timer yang dibuat di setup() pada kecepatan 1000hz. Saat dipanggil, ia memperbarui dua penghitung turun, nLoopDelay dan nButtonDelay. Ketika nLoopDelay dihitung mundur ke nol, ia mengirimkan semaphore yang memungkinkan loop() untuk mengeksekusi satu pass lalu me-reset nLoopDelay. Ketika nButtonDelay dihitung mundur ke nol, itu juga diatur ulang kemudian tombol "filter" dijalankan.

Setiap filter tombol memiliki penghitung filter unik (mis. nButton1Count, nButton2Count, dan nButton3Count). Selama nilai input sentuh yang ditetapkan ke tombol lebih besar atau sama dengan nilai ambang batas yang ditentukan (BUTTON_THRESHHOLD), penghitung filter yang ditetapkan ke tombol dan tombol tetap nol. Jika nilai input sentuh yang ditetapkan ke tombol kurang dari ambang batas yang ditentukan, penghitung filter yang ditetapkan ke tombol akan bertambah satu setiap 20 ms. Ketika penghitung filter melebihi nilai filter tombol (BUTTON_FILTER), tombol dianggap "ditekan". Efek dari metode ini adalah membuat filter yang membutuhkan 80 ms (20 md nButtonDelay * 4 md nButtonCountN di mana N adalah nomor tombol) nilai input sentuh berkelanjutan di bawah ambang batas yang ditentukan untuk mempertimbangkan tombol yang benar-benar ditekan. Setiap saat kurang dari 80 ms dianggap sebagai "kesalahan" dan ditolak oleh filter.

Dengan uraian singkat ini, jika Anda memiliki pertanyaan, jangan ragu untuk bertanya dan saya akan melakukan yang terbaik untuk menjawabnya.

Semoga Anda menikmatinya!

Langkah 4: "Proyek Mendatang"

NS
NS

Proyek mendatang, "Intelligrill® Pro", adalah monitor perokok probe suhu ganda yang menampilkan:

  • Perhitungan pemeriksaan suhu Steinhart-Hart (sebagai lawan dari tabel "pencarian") untuk meningkatkan akurasi.
  • Waktu prediktif hingga penyelesaian pada probe 1 menggabungkan peningkatan akurasi yang diperoleh dari perhitungan Steinhart-Hart.
  • Probe kedua, probe 2, untuk memantau suhu perokok (terbatas pada 32 hingga 399 derajat).
  • Kontrol input sentuh kapasitif (seperti dalam Instruksi ini).
  • Pemantauan jarak jauh berbasis WIFI (dengan alamat IP tetap, memungkinkan pemantauan kemajuan perokok dari mana saja tersedia koneksi internet).
  • Rentang suhu yang diperpanjang (sekali lagi 32 hingga 399 derajat).
  • Alarm penyelesaian yang dapat didengar baik di dalam pemancar Intelligrill® dan di sebagian besar perangkat pemantauan berkemampuan WiFi.
  • Tampilan suhu dalam derajat F atau derajat C.
  • Format waktu dalam JJ:MM:SS atau JJ:MM.
  • Tampilan baterai dalam volt atau % terisi.
  • Dan segera hadir, keluaran PID untuk perokok berbasis auger.

"Intelligrill® Pro" sedang menguji untuk menjadi Intelligrill® berbasis HTML yang paling akurat, penuh fitur, dan andal yang pernah saya rancang.

Ini masih dalam pengujian, tetapi dengan makanan yang membantu mempersiapkannya selama pengujian, berat badan saya naik lebih dari beberapa kilogram.

Sekali lagi, saya harap Anda menikmatinya!

Langkah 5: Selanjutnya: Input Analog Probe Suhu ESP32 NTP Dengan Koreksi Steinhart-Hart

Bersiaplah untuk membersihkan buku aljabar Anda untuk yang satu ini.

Direkomendasikan: