İçindekiler:

Çamaşır Makinesi Bildirim Sensörü: 6 Adım (Resimli)
Çamaşır Makinesi Bildirim Sensörü: 6 Adım (Resimli)

Video: Çamaşır Makinesi Bildirim Sensörü: 6 Adım (Resimli)

Video: Çamaşır Makinesi Bildirim Sensörü: 6 Adım (Resimli)
Video: SAMSUNG TELEFONLARDA KİMSENİN BİLMEDİĞİ BİLDİRİM AYARI #samsung #android #samsungbildirim 2024, Aralık
Anonim
Image
Image
Prototip
Prototip

Bu çamaşır makinesi sensörü, çamaşır makinemin üstüne oturur ve makineden gelen titreşimi algılamak için bir ivme ölçer kullanır. Yıkama işleminin bittiğini algıladığında telefonuma bir bildirim gönderiyor. Bunu yaptım çünkü bittiğinde makine artık bip sesi çıkarmıyor ve çamaşırları çıkarmayı unutmaktan bıktım.

Kodu burada bulabilirsiniz:

Tam parça listesi:

  • WEMOS LOLIN32
  • Yarım Boy Breadboard (prototipleme için)
  • Matrix Board ile ABS Proje Kutusu 59x88x30mm
  • Sparkfun LIS3DH - Üç Eksen İvmeölçer Koparma
  • 1x ZVP3306A P-kanal MOSFET, 160 mA, 60 V, 3-Pin E-Line
  • 1x BC549B TO92 30V NPN Transistör
  • 5mm LED Mavi 68 mcd
  • 1x 100k 0.125W CF Direnç
  • 1x 330k 0.125W CF Direnç
  • 2x 10k 0.250W CF Direnç
  • 1x 100 0.250W CF Direnç
  • 2-Pin Dişi JST PH-Tarzı Kablo (14cm)
  • 4x M1219-8 Neodimyum Disk Mıknatıs 6x4mm

Adım 1: Prototip

Prototip
Prototip

Cihaz bir ESP32 mikrodenetleyici kullanır. Bu durumda, AliExpress'te yaklaşık 7 $ karşılığında satın alabileceğiniz Wemos'un Lolin32 geliştirme kartını kullanıyorum. İvmeölçer Sparkfun LIS3DH'dir - daha sonra göreceğiniz gibi ivmeölçerin analog yerine dijital olması önemlidir. Eski bir bluetooth hoparlör setinden aldığım pil.

ESP32, ivme ölçere I2C aracılığıyla bağlanır. Kodun ilk versiyonu, her 20 ms'de bir ölçülen hızlanma değeri için üç hızlanma eksenini (x, y ve z) basitçe yokladı. Breadboard prototipini çamaşır makinesine yerleştirdim ve yıkama döngüsünün çeşitli aşamalarında hızlanma zirvelerini gösteren yukarıdaki grafiği oluşturdum. Mutlak ivmenin 125 mg'dan (normal yerçekiminin 125 binde biri) daha büyük olduğu zirveler turuncu renkle gösterilmiştir. Bu periyotları tespit etmek ve çamaşır makinesinin durumunu belirlemek için kullanmak istiyoruz.

Makinenin açık mı kapalı mı olduğu nasıl belirlenir?

Bu cihazı yapmanın amaçlarından biri, tamamen pasif olmasıydı. yani hiçbir düğmeye basılmasına gerek yoktur; sadece işe yarayacaktı. Benim durumumda güç kablolarını çamaşır makinesine uzatmak gerçekten mümkün olmadığı için çok düşük güç olmalıdır.

Neyse ki LIS3DH ivmeölçer, hızlanma belirli bir eşiği aştığında bir kesintiyi tetikleyebileceği bir özelliğe sahiptir (not, bunun için ivmeölçerin yerleşik yüksek geçiş filtresinin kullanılması gerekir - ayrıntılar için Github'daki koda bakın) ve ESP32 uyandırılabilir bir kesinti yoluyla derin uyku modundan çıkar. Hareketle tetiklenen çok düşük güçte bir uyku modu oluşturmak için bu özellik kombinasyonunu kullanabiliriz.

Sözde kod şuna benzer:

# Cihaz uyandırma

notice_threshold = 240 counter = 10 accelerometer.set_threshold(96) #96mg while counter > 0: if accelerometer.above_threshold(): counter++ else: counter-- if counter > notice_threshold: # son dönüş döngüsü algılandı uyku(1 saniye) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()

Burada, mevcut uyanma süresi boyunca kaç saniyelik hızlanma tespit ettiğimizi tespit etmek için bir sayaç kullandığımızı görebilirsiniz. Sayaç sıfıra düşerse cihazı tekrar uyku moduna alabiliriz. Sayaç 240'a (bildirim eşiği) ulaşırsa bu, 4 dakikalık titreşim algıladığımız anlamına gelir. Cihazın son dönüş döngüsünü doğru bir şekilde algıladığından emin olmak için bu eşiklerin değerlerini değiştirebiliriz. Yeterli titreşim algılandığında, bir bildirim göndermeden önce 5 dakika daha uyuyabiliriz (benim durumumda bu, yıkamanın gerçekten tamamlanması için geçen süredir).

2. Adım: Blynk Üzerinden Bildirim Gönderme

Blynk Üzerinden Bildirim Gönderme
Blynk Üzerinden Bildirim Gönderme

Blynk, telefonunuzdaki bir uygulama ile IoT cihazlarıyla etkileşime izin vermek için tasarlanmış bir hizmettir. Bu durumda, Blynk API'sine basit bir HTTP POST tarafından tetiklenen anında iletme bildirimi API'sini kullanıyorum.

Adım 3: Güç Tüketiminin Ölçülmesi ve Pil Ömrünün Tahmin Edilmesi

Güç Tüketiminin Ölçülmesi ve Pil Ömrünün Tahmin Edilmesi
Güç Tüketiminin Ölçülmesi ve Pil Ömrünün Tahmin Edilmesi

ESP32 yongasının, derin uykudayken (5uA kadar düşük) çok düşük güç tüketimine sahip olduğu bildiriliyor. Ne yazık ki, birçok farklı geliştirme kartındaki devre çok farklı güç tüketimi özellikleri sağlar - tüm ESP32 geliştirme kartları eşit yaratılmamıştır. Örneğin, bu projeye ilk başladığımda, derin uyku modunda (güç LED'ini devre dışı bıraktıktan sonra bile) yaklaşık 1mA güç tüketecek olan Sparkfun ESP32 Thing'i kullandım. O zamandan beri derin uyku modundayken 144.5uA akım ölçtüğüm Lolin32'yi (Lite sürümü değil) kullanıyorum. Bu ölçümü yapmak için pil ve cihaza seri olarak bir multimetre bağladım. Bir breadboard ile prototip oluştururken bunu yapmak kesinlikle daha kolaydır. Cihaz uyanıkken de mevcut kullanımı ölçtüm:

  • Derin uyku: 144.5uA
  • Uyanık: 45mA
  • Wifi etkin: 150mA

Makineyi haftada iki kez kullandığımı varsayarsak, sensörün her durumda harcadığı süre için aşağıdaki zamanlamaları tahmin ettim:

  • Derin uyku: 604090 saniye (~1 hafta)
  • Uyanık: 720 saniye (12 dakika)
  • Wifi etkin: 10 saniye

Bu rakamlardan pilin ne kadar dayanacağını tahmin edebiliriz. Ortalama 0.2mA güç tüketimi elde etmek için bu kullanışlı hesap makinesini kullandım. Tahmini pil ömrü 201 gün veya yaklaşık 6 aydır! Gerçekte, cihazın yaklaşık 2 ay sonra çalışmayı durduracağını öğrendim, bu nedenle ölçümlerde veya pilin kapasitesinde bazı hatalar olabilir.

Adım 4: Pil Seviyesini Ölçme

Pil Seviyesini Ölçme
Pil Seviyesini Ölçme
Pil Seviyesini Ölçme
Pil Seviyesini Ölçme

Cihazın pilin ne zaman azaldığını bana söyleyebilmesinin iyi olacağını düşündüm, böylece ne zaman şarj edeceğimi biliyorum. Bunu ölçmek için pilin voltajını ölçmemiz gerekir. Akü, 4.3V - 2.2V (ESP32'nin minimum çalışma voltajı) voltaj aralığına sahiptir. Ne yazık ki, ESP32'nin ADC pinlerinin voltaj aralığı 0-3.3V'dir. Bu, ADC'nin aşırı yüklenmesini önlemek için pilin voltajını maksimum 4,3'ten 3,3'e düşürmemiz gerektiği anlamına gelir. Bunu bir voltaj bölücü ile yapmak mümkündür. Aküden toprağa uygun değerlere sahip iki direnç bağlayın ve ortadaki voltajı ölçün.

Ne yazık ki, basit bir voltaj bölücü devre, voltaj ölçülmediğinde bile pilden gücü boşaltacaktır. Bunu, yüksek değerli dirençler kullanarak azaltabilirsiniz, ancak olumsuz tarafı, ADC'nin doğru bir ölçüm yapmak için yeterli akımı çekemeyebileceğidir. Bu voltaj bölücü formülüne göre 4.3V'tan 3.3V'a düşecek olan 100kΩ ve 330kΩ değerinde dirençler kullanmaya karar verdim. Toplam 430kΩ direnç göz önüne alındığında, 11.6uA'lık bir akım çekişi bekleriz (Ohm yasasını kullanarak). Derin uyku akımı kullanımımızın 144uA olduğu göz önüne alındığında, oldukça önemli bir artış.

Bir bildirim göndermeden hemen önce pil voltajını sadece bir kez ölçmek istediğimiz için, hiçbir şey ölçmediğimiz zaman boyunca voltaj bölücü devreyi kapatmak mantıklıdır. Neyse ki, bunu GPIO pinlerinden birine bağlı birkaç transistör ile yapabiliriz. Bu yığın değişimi cevabında verilen devreyi kullandım. Yukarıdaki fotoğrafta devreyi Arduino ve breadboard ile test ettiğimi görebilirsiniz (devrede beklenenden daha yüksek bir voltaj ölçmemin nedeni devrede bir hata olduğunu unutmayın).

Yukarıdaki devre yerindeyken, pil yüzde değeri elde etmek için aşağıdaki sözde kodu kullanıyorum:

batarya yüzdesi():

# akü voltaj devresini etkinleştir gpio_set_level(BATTERY_EN_PIN, HIGH) # Pil seviyesi 0 ile 4095 arasında bir tamsayı olarak döndürülür adc_value = adc1_get_value(ADC_PIN) # akü voltaj devresini etkinleştir gpio_set_level(BATTERY_EN_PIN, LOW) float adc_voltage = 3,3 / 40_40 bölücü 100k / 330k ohm direnç kullanır # 4.3V -> 3.223, 2.4 -> 1.842 beklenen_maks = 4,3*330/(100+330) beklenen_min = 2,4*330/(100+330) pil_seviyesi = (adc_voltage-beklenen_min)/(beklenen_maks -expected_min) dönüş pil_seviyesi * 100.0

Adım 5: Daha Güzel Hale Getirmek

Güzelleştirmek
Güzelleştirmek
Güzelleştirmek
Güzelleştirmek
Güzelleştirmek
Güzelleştirmek

Breadboard sürümü iyi çalışıyor olsa da, onu daha düzenli ve daha güvenilir olacak bir pakete koymak istedim (gevşek veya kısa devre yapabilecek kablo yok). İhtiyaçlarım için doğru boyutta, bir pin kartı, montaj tutamakları ve hepsini bir araya getirmek için vidalar içeren mükemmel proje kutusunu bulmayı başardım. Ayrıca, 2 £ 'dan daha ucuza çok ucuzdu. Kutuyu aldıktan sonra tek yapmam gereken bileşenleri pin kartına lehimlemekti.

Belki de bunun en zor yanı, tüm akü voltajı devre bileşenlerini Lolin32'nin yanındaki küçük alana yerleştirmekti. Neyse ki biraz oynak oynama ve lehimle yapılan uygun bağlantılarla devre düzgün bir şekilde uyuyor. Ayrıca Wemos Lolin32'de pozitif pil terminalini ortaya çıkaracak bir pim bulunmadığından, pil konektöründen pin kartına bir kablo lehimlemek zorunda kaldım.

Ayrıca cihaz hareket algıladığında yanıp sönen bir LED ekledim.

Adım 6: Son Dokunuşlar

Image
Image
Son Dokunuşlar
Son Dokunuşlar
Son Dokunuşlar
Son Dokunuşlar

Kutunun tabanına, çamaşır makinesinin metal üst kısmına güvenli bir şekilde yapışmasını sağlayan 4 adet 6mm x 4mm neodimyum mıknatısı süper yapıştırdım.

Proje kutusu, kablolara erişim sağlamak için zaten küçük bir delik ile birlikte gelir. Neyse ki, mikro USB konektörüne erişim sağlamak için ESP32 kartını bu deliğe yakın bir yere yerleştirebildim. Deliği bir maket bıçağıyla genişlettikten sonra kablo, pilin kolayca şarj edilmesini sağlamak için mükemmel bir şekilde oturur.

Bu projenin herhangi bir detayıyla ilgileniyorsanız, lütfen yorum bırakmaktan çekinmeyin. Kodu görmek isterseniz, lütfen Github'da kontrol edin:

github.com/alexspurling/washingmachine

Önerilen: