İçindekiler:

Düğmeler için "Metalik Delik Tapaları" Kullanan ESP32 Kapasitif Dokunmatik Giriş: 5 Adım (Resimlerle)
Düğmeler için "Metalik Delik Tapaları" Kullanan ESP32 Kapasitif Dokunmatik Giriş: 5 Adım (Resimlerle)

Video: Düğmeler için "Metalik Delik Tapaları" Kullanan ESP32 Kapasitif Dokunmatik Giriş: 5 Adım (Resimlerle)

Video: Düğmeler için
Video: Profil Kaynağı | Delik - Yırtık Tamiri (1.5mm) - Gazaltı (MIG/MAG) [Kaynak Nasıl Yapılır?] 2024, Temmuz
Anonim
Image
Image
Donanım
Donanım

Üç düğme girişi gerektiren yaklaşan bir ESP32 WiFi Kit 32 tabanlı proje için tasarım kararlarını sonlandırırken, göze çarpan bir sorun, WiFi Kit 32'nin giriş için tek bir mekanik düğmeye sahip olmamasına rağmen tek başına üç mekanik düğmeye sahip olmasıydı. Bununla birlikte, WiFi Kit 32'de çok sayıda kapasitif dokunmatik giriş var, bu yüzden ESP32 kapasitif dokunmatik giriş özelliğini ve üç adet 3/8" "metalik delik tapasını" kullanarak donanımı bir araya getirmek, yazılım yazmak ve üç düğmeli giriş tasarımını test etmek için biraz zaman harcadım. düğmeler.

ESP32 kapasitif dokunmatik girişleri deneyen herkesin keşfettiği gibi, dokunmatik girişler kesinlikle güvenilir giriş algılaması için filtreleme gerektirecek kadar gürültülüdür. Yaklaşan proje için toplam parça sayısını en aza indirmek için, harici filtre donanımı eklemek yerine, basit bir kesintiye dayalı dijital filtrenin (bir filtreden daha fazla "geri dönme" dir, ancak konuyu saptırdım), gürültülü girişleri susturabileceğini belirledim.. Ve testten sonra, ESP32 kapasitif girişlerinin, üç adet 3/8" metalik delik tapasının ve bazı dijital "filtreleme" yazılımlarının tasarım için gerçekten güvenilir bir üç düğmeli giriş sağlayacağı ortaya çıktı.

Bu nedenle, bir ESP32'de dijital filtreleme ile kapasitif girişi test etmekle ilgileniyorsanız, Arduino ortam formatına "Buttons.ino" kaynak kodunu, montaj ve programlama talimatları ile birlikte kaynak kodunun kısa bir açıklamasını ekledim. son derece güvenilir bir üç düğme girişi olduğunu keşfettiğim şey.

Ve her zamanki gibi, muhtemelen bir veya iki dosyayı unuttum ya da kim bilir başka neler var, bu yüzden herhangi bir sorunuz varsa, lütfen sormaktan çekinmeyin, çünkü birçok hata yapıyorum.

Ve son bir not, bu tasarımda kullanılan bileşenlerin herhangi biri için ücretsiz numuneler dahil ancak bunlarla sınırlı olmamak üzere hiçbir şekilde tazminat almadım.

Adım 1: Donanım

Donanım
Donanım
Donanım
Donanım
Donanım
Donanım

Tasarım aşağıdaki donanımı kullanır:

  • Bir, WiFi Kiti 32.
  • Üç, 3/8" metalik delik tapaları.
  • Üç, 4" uzunluğunda 28awg tel.

Donanımı monte etmek için aşağıdaki adımları gerçekleştirdim:

  • Her 4" tel uzunluğunun uçları gösterildiği gibi soyulmuş ve kalaylanmıştır.
  • İlk kabloyu ESP32'nin (TOUCH4 veya "T4" girişi) pim 13'üne lehimleyin.
  • İkinci kabloyu ESP32'nin (TOUCH5 veya "T5" girişi) pim 12'ye lehimleyin.
  • Üçüncü kabloyu ESP32'nin (TOUCH6 veya "T6" girişi) pim 14'e lehimleyin.
  • Üç 3/8" metalik delik tapasının her birini üç kablo uzunluğunun serbest uçlarına lehimleyin.

Adım 2: Yazılım

Yazılım
Yazılım

"Buttons.ino" dosyası, tasarım için yazılımı içeren bir Arduino ortam dosyasıdır. Bu dosyaya ek olarak, WiFi Kit32 OLED ekranı için "U8g2lib" grafik kitaplığına ihtiyacınız olacak (bu kitaplık hakkında daha fazla bilgi için bkz.

Arduino dizininizde kurulu U8g2lib grafik kütüphanesi ve Arduino ortamına yüklenen "Buttons.ino" ile yazılımı derleyin ve ESP32'ye indirin.

İndirilip çalıştırıldıktan sonra, ekranın üst satırında "Düğmeler", ikinci satırda düğme göstergeleri olarak "1 2 3" yazılmalıdır. 1, 2, 3 düğmeli göstergelerin her birinin altında filtrelenmemiş dokunmatik okuma değerleri bulunur ve bunların her birinin altında düğme basma göstergeleri bulunur ("1" basıldığında, "0" basılmadığında). Videoda görüldüğü gibi (ve uzun süreli testlerin onaylandığı gibi), yazılım filtresi, yanlış tetikleme olmadan güvenilir düğme girişi algılaması sağlar.

Adım 3: Yazılım Hakkında

Yazılım üç ana kod bölümü içerir; Arduino için "setup()" ve "loop()" bölümleri ve bir "Interrupts" bölümü gerekiyordu. setup() bölümü, OLED'i başlatmak ve hizmetleri kesmek için gerekli kodu içerir. OLED kurulum işlevleri yukarıdaki bağlantıda açıklanmıştır. Kesinti hizmeti kurulum işlevleri aşağıdaki gibidir:

  • "timerLoopSemaphore = xSemaphoreCreateBinary()", bir döngü geçişi yürütme zamanı geldiğinde loop()'u bilgilendirmek üzere "InterruptService()" (kesme hizmeti rutini) için bir semafor oluşturur.
  • "timerInterruptService = timerBegin(0, 80, true)", 80 ön ölçeğiyle donanım zamanlayıcı 0'ı kullanarak bir zamanlayıcı oluşturur.
  • "timerAttachInterrupt(timerInterruptService, & InterruptService, true)", InterruptService() öğesini zamanlayıcıya ekler.
  • "timerAlarmWrite(timerInterruptService, 1000, true)", kesme hizmet hızını 1000hz olarak ayarlar.
  • "timerAlarmEnable(timerInterruptService)", zamanlayıcı alarmını başlatır ve böylece hizmeti keser.

Kurulum tamamlandığında loop() girilir ve hemen satırda durur:

if(xSemaphoreTake(timerLoopSemaphore, portMAX_DELAY) == pdTRUE), anlam döngüsü() bu noktada InterruptService() semaforu gelene kadar bekleyecektir. Semafor geldiğinde, loop() kodu yürütülür, OLED ekranı düğme verileriyle güncellenir, ardından bir sonraki semaforu beklemek için tekrar en üste döner. InterruptService() 1000hz'de ve LOOP_DELAY değeri 30 olduğunda, loop() her 30ms'de bir veya 33.333hz ekran güncelleme hızında yürütülür. Bu, çoğu ESP32 uygulaması için gerekenden daha yüksek bir ekran yenileme hızı olsa da, filtrenin yanıt verme hızını göstermek için bu ayarı kullandım. Test ettim ve tek bir loop() geçişini yürütmek için gereken süreyi 20ms olarak belirledim.

InterruptService(), setup() içinde oluşturulan zamanlayıcı tarafından 1000hz hızında çağrılır. Çağrıldığında, iki aşağı sayacı günceller, nLoopDelay ve nButtonDelay. nLoopDelay sıfıra geri sayıldığında, loop()'un tek bir geçiş yürütmesine izin veren semaforu gönderir ve ardından nLoopDelay'i sıfırlar. nButtonDelay sıfıra geri sayıldığında, o da sıfırlanır ve ardından "filtreler" düğmesi çalışır.

Her düğme filtresinin benzersiz bir filtre sayacı vardır (örn. nButton1Count, nButton2Count ve nButton3Count). Düğmeye atanan dokunmatik giriş değeri, tanımlanan eşik değerinden (BUTTON_THRESHHOLD) büyük veya ona eşit olduğu sürece, düğmeye ve düğmeye atanan filtre sayacı sıfır kalır. Düğmeye atanan dokunmatik giriş değeri tanımlanan eşikten azsa, düğmeye atanan filtre sayacı her 20ms'de bir artırılır. Filtre sayacı, düğme filtre değerini (BUTTON_FILTER) aştığında, düğmeye "basılmış" olarak kabul edilir. Bu yöntemin etkisi, düğmeye fiilen basıldığını düşünmek için tanımlanan eşiğin altında 80ms (20ms nButtonDelay * 4ms nButtonCountN, burada N, düğme numarasıdır) gerektiren bir filtre oluşturmaktır. 80 ms'den daha kısa bir süre "aksaklık" olarak kabul edilir ve filtre tarafından reddedilir.

Bu kısa açıklamayı göz önünde bulundurarak, herhangi bir sorunuz varsa, lütfen çekinmeden sorun, yanıtlamak için elimden geleni yapacağım.

Umarım eğlenmişsinizdir!

Adım 4: "Yaklaşan Proje"

NS
NS

Yaklaşan proje "Intelligrill® Pro", aşağıdaki özelliklere sahip çift sıcaklık problu bir sigara içici monitörüdür:

  • Artan doğruluk için Steinhart-Hart sıcaklık probu hesaplamaları ("arama" tablolarının aksine).
  • Steinhart-Hart hesaplamalarından elde edilen artırılmış doğruluğu içeren sonda 1'de tahmini tamamlanma süresi.
  • Sigara içen sıcaklığını izlemek için ikinci bir sonda, sonda 2 (32 ila 399 derece ile sınırlıdır).
  • Kapasitif dokunmatik giriş kontrolleri (bu Talimatta olduğu gibi).
  • WIFI tabanlı uzaktan izleme (sabit bir IP adresiyle, internet bağlantısının olduğu her yerden sigara içen kişinin gelişiminin izlenmesini sağlar).
  • Genişletilmiş sıcaklık aralığı (yine 32 ila 399 derece).
  • Hem Intelligrill® vericisinde hem de çoğu WiFi özellikli izleme cihazında sesli tamamlama alarmları.
  • F veya C derecelerinde sıcaklık göstergesi.
  • SS:DD:SS veya SS:DD olarak saat formatı.
  • Pil göstergesi, volt veya şarj yüzdesi olarak.
  • Ve yakında, burgu tabanlı sigara içenler için PID çıktısı.

"Intelligrill® Pro", tasarladığım en doğru, özellik dolu ve güvenilir HTML tabanlı Intelligrill® olmak için test ediyor.

Hala test altında, ancak test sırasında hazırlanmasına yardımcı olduğu yemeklerle birkaç kilodan fazla kazandım.

Tekrar, umarım beğenirsiniz!

Adım 5: Sıradaki: Steinhart-Hart Düzeltmeli ESP32 NTP Sıcaklık Probu Analog Girişi

Bunun için cebir kitaplarınızın tozunu almaya hazır olun.

Önerilen: