Mündəricat:

Paltaryuyan maşın bildiriş sensoru: 6 addım (şəkillərlə birlikdə)
Paltaryuyan maşın bildiriş sensoru: 6 addım (şəkillərlə birlikdə)

Video: Paltaryuyan maşın bildiriş sensoru: 6 addım (şəkillərlə birlikdə)

Video: Paltaryuyan maşın bildiriş sensoru: 6 addım (şəkillərlə birlikdə)
Video: Paltaryuyan maşının sirkələnməsinə son ! Sirkələnmənin qarşısını necə almaq olar ? 2024, Iyul
Anonim
Image
Image
Prototip
Prototip

Bu paltaryuyan maşın sensoru paltaryuyan maşının üstündə oturur və maşından gələn titrəməni aşkar etmək üçün akselerometrdən istifadə edir. Yuma dövrünün bitdiyini hiss edəndə telefonuma mənə bir bildiriş göndərir. Bunu qurdum, çünki maşın bitdikdə artıq səs siqnalı vermir və çamaşırları çıxarmağı unutmaqdan bezmişəm.

Kodu burada tapa bilərsiniz:

Tam hissə siyahısı:

  • WEMOS LOLIN32
  • Yarım ölçülü Çörək Paneli (prototip hazırlamaq üçün)
  • 59x88x30 mm Matrix Board ilə ABS Layihə Kutusu
  • Sparkfun LIS3DH - Üç Eksenli Accelerometer Breakout
  • 1x ZVP3306A P-kanallı MOSFET, 160 mA, 60 V, 3 Pinli E-Xətti
  • 1x BC549B TO92 30V NPN Transistor
  • 5 mm LED Mavi 68 mcd
  • 1x 100k 0.125W CF Rezistor
  • 1x 330k 0.125W CF Rezistor
  • 2x 10k 0.250W CF Rezistor
  • 1x 100 0.250W CF Rezistor
  • 2 Pinli Qadın JST PH-Style Kabel (14 sm)
  • 4x M1219-8 Neodim Disk Maqnit 6x4mm

Addım 1: Prototip

Prototip
Prototip

Cihaz ESP32 mikro nəzarətçisindən istifadə edir. Bu vəziyyətdə, AliExpress -də təxminən 7 dollara satın ala biləcəyiniz Wemos Lolin32 inkişaf etdirmə lövhəsindən istifadə edirəm. Sürətölçən Sparkfun LIS3DH -dir, akselerometrin daha sonra görəcəyiniz kimi analoqdan çox rəqəmsal olması vacibdir. Köhnə bir bluetooth hoparlör dəstindən aldığım batareya.

ESP32, akselerometrə I2C vasitəsilə qoşulur. Kodun ilk versiyası, hər 20ms -də ölçülən sürətlənmə dəyəri üçün üç sürətləndirmə oxunu (x, y və z) sorğu etdi. Çörək taxtasının prototipini paltaryuyan maşının üzərinə qoyaraq, yuma dövrünün müxtəlif mərhələlərində sürətlənmə zirvələrini göstərən yuxarıdakı qrafiki hazırladım. Mütləq sürətlənmənin 125 mq -dan (normal cazibə qüvvəsinin 125 mində biri) çox olduğu zirvələr narıncı rəngdə göstərilmişdir. Bu dövrləri aşkar edərək onlardan istifadə edərək paltaryuyan maşının vəziyyətini təyin etmək istəyirik.

Cihazın açıldığını və ya söndürüldüyünü necə təyin etmək olar?

Bu cihazı qurmağın məqsədlərindən biri, tamamilə passiv olması idi. Yəni heç bir düyməyə basılmamalıdır; sadəcə işləyəcəkdi. Güc kabellərini paltaryuyan maşına uzatmaq həqiqətən mümkün olmadığı üçün çox aşağı gücə sahib olmalıdır.

Xoşbəxtlikdən, LIS3DH sürətölçən, sürətlənmə müəyyən bir həddi keçdikdə bir fasilə verə biləcək bir xüsusiyyətə malikdir (unutmayın ki, bu, accelerometerin quraşdırılmış yüksək ötürücü filtrindən istifadə etməyi tələb edir-ətraflı məlumat üçün Githubdakı koda baxın) və ESP32 oyandırıla bilər fasilə ilə dərin yuxu rejimindən çıxa bilər. Bu xüsusiyyətlərin birləşməsindən istifadə edərək hərəkətlə tetiklenen çox aşağı güclü yuxu rejimi yarada bilərik.

Yalançı kod belə görünür:

# Cihaz oyanır

reports_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: accelerometer.above_threshold (): counter ++ else: counter- if counter> notification_threshold: # final spin cycle yuxu (1 saniyə) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Burada görə bilərsiniz ki, cari oyanış dövründə neçə saniyə sürətlənmə aşkar etdiyimizi müəyyən etmək üçün sayğacdan istifadə edirik. Sayğac sıfıra düşərsə, cihazı yenidən yuxuya qoya bilərik. Sayğac 240 -a çatırsa (bildiriş həddi), bu o deməkdir ki, 4 dəqiqəlik titrəmə aşkarladıq. Cihazın son dönmə dövrünü düzgün algıladığından əmin olmaq üçün bu eşiklərin dəyərlərini dəyişə bilərik. Kifayət qədər titrəmə aşkar edildikdən sonra, bildiriş göndərməzdən əvvəl başqa 5 dəqiqə daha yata bilərik (mənim vəziyyətimdə bu, yuyulmanın sona çatması üçün lazım olan müddətdir).

Addım 2: Blynk vasitəsilə bir bildiriş göndərmək

Blynk vasitəsilə bildiriş göndərilməsi
Blynk vasitəsilə bildiriş göndərilməsi

Blynk, telefonunuzdakı bir tətbiq ilə IoT cihazları ilə qarşılıqlı əlaqə qurmaq üçün hazırlanmış bir xidmətdir. Bu vəziyyətdə, Blynk API -yə sadə bir HTTP POST tərəfindən tetiklenen push bildiriş API -dən istifadə edirəm.

Addım 3: Enerji İstehsalını Ölçmək və Batareya Ömrünü Hesablamaq

Güc istehlakının ölçülməsi və batareyanın ömrünün qiymətləndirilməsi
Güc istehlakının ölçülməsi və batareyanın ömrünün qiymətləndirilməsi

ESP32 çipi, dərin yuxuda olduqda (5uA qədər aşağı) çox az enerji istehlakı ilə reklam olunur. Təəssüf ki, bir çox fərqli inkişaf lövhəsindəki sxemlər çox fərqli enerji istehlakı xüsusiyyətlərini təmin edir - bütün ESP32 inkişaf lövhələri bərabər yaradılmır. Məsələn, bu layihəyə ilk başladığımda, dərin yuxu rejimində (güc LED -i söndürüldükdən sonra da) təxminən 1mA güc sərf edəcək Sparkfun ESP32 Thing -dən istifadə etdim. O vaxtdan bəri dərin yuxu rejimində 144.5uA cərəyanı ölçdüyüm Lolin32 (Lite versiyası deyil) istifadə edirəm. Bu ölçməni etmək üçün sadəcə batareya və cihazla birlikdə bir multimetr bağladım. Çörək taxtası ilə prototip hazırlayarkən bunu etmək əlbəttə daha asandır. Cihaz oyandığında cari istifadəni də ölçdüm:

  • Dərin yuxu: 144.5uA
  • Oyanış: 45mA
  • Wifi aktivdir: 150mA

Maşını həftədə iki dəfə istifadə etdiyimi fərz etsəm, sensorun hər vəziyyətdə sərf etdiyi vaxt üçün aşağıdakı vaxtları təxmin etdim:

  • Dərin yuxu: 604090 saniyə (~ 1 həftə)
  • Oyanış: 720 saniyə (12 dəqiqə)
  • Wifi aktivdir: 10 saniyə

Bu rəqəmlərdən, batareyanın nə qədər davam edəcəyini təxmin edə bilərik. 0.2mA orta enerji istehlakı əldə etmək üçün bu lazımlı kalkulyatordan istifadə etdim. Təxmini batareya ömrü 201 gün və ya təxminən 6 aydır! Əslində cihazın təxminən 2 ay sonra işləməyəcəyini gördüm, buna görə ölçülərdə və ya batareyanın tutumunda bəzi səhvlər ola bilər.

Addım 4: Batareya səviyyəsinin ölçülməsi

Batareya səviyyəsinin ölçülməsi
Batareya səviyyəsinin ölçülməsi
Batareya səviyyəsinin ölçülməsi
Batareya səviyyəsinin ölçülməsi

Cihazın batareyanın tükəndiyini söyləsəydi yaxşı olardı deyə düşünürəm ki, nə vaxt doldurmalıyam. Bunu ölçmək üçün batareyanın gərginliyini ölçməliyik. Batareya 4.3V - 2.2V gərginlik aralığına malikdir (ESP32 minimum iş gərginliyi). Təəssüf ki, ESP32-nin ADC pinlərinin gərginlik aralığı 0-3.3V-dir. Bu o deməkdir ki, ADC -ni həddindən artıq yükləməmək üçün batareyanın gərginliyini maksimum 4.3 -dən 3.3 -ə endirməliyik. Bir gərginlik bölücü ilə bunu etmək mümkündür. Batareyadan yerə uyğun dəyərləri olan iki rezistoru bağlayın və ortadakı gərginliyi ölçün.

Təəssüf ki, sadə bir gərginlik bölücü dövrə, gərginlik ölçülməsə belə batareyadan enerjini boşaldır. Yüksək dəyərli rezistorlar istifadə edərək bunu azalda bilərsiniz, lakin aşağı tərəfi odur ki, ADC dəqiq ölçmə aparmaq üçün kifayət qədər cərəyan çəkə bilməz. Bu gərginlik bölücü formuluna görə 4.3V -dan 3.3V -ə düşəcək 100kΩ və 330kΩ dəyərli rezistorlardan istifadə etmək qərarına gəldim. Ümumi 430kΩ müqavimətini nəzərə alsaq, cari 11.6uA (Ohm qanunu ilə) çəkilişini gözləyərdik. Dərin yuxumuzda cari istifadənin 144uA olduğunu nəzərə alsaq, olduqca əhəmiyyətli bir artımdır.

Batareya gərginliyini bildiriş göndərməzdən əvvəl yalnız bir dəfə ölçmək istədiyimiz üçün, heç bir şey ölçmədiyimiz müddət ərzində gərginlik bölücü dövrəni söndürməyin mənası var. Xoşbəxtlikdən, bunu GPIO pinlərindən birinə qoşulmuş bir neçə tranzistorla edə bilərik. Bu stackexchange cavabında verilən dövrəni istifadə etdim. Yuxarıdakı fotoşəkildə bir Arduino və bir çörək taxtası ilə dövrə sınadığımı görə bilərsiniz (unutmayın ki, gözləniləndən daha yüksək bir gərginlik ölçməyimə səbəb olan dövrədə bir səhv var).

Yuxarıda göstərilən dövrə yerində olduqda, batareya faiz dəyərini əldə etmək üçün aşağıdakı yalançı kodu istifadə edirəm:

batareya_sayı ():

# batareya gərginliyi dövrəsini aktivləşdirmək gpio_set_level (BATTERY_EN_PIN, HIGH) # Batareya səviyyəsi 0 ilə 4095 arasında bir ədəd olaraq qaytarılır adc_value = adc1_get_value (ADC_PIN) bölücü 100k/330k ohm rezistorlardan istifadə edir # 4.3V -> 3.223, 2.4 -> 1.842 gözlənilən_max = 4.3*330/(100+330) gözlənilən_min = 2.4*330/(100+330) batareya səviyyəsi = (adc_voltage -gözlənilən_min)/(gözlənilən_max -gözlənilən_dəqiqə) batareya səviyyəsinə qayıt * 100.0

Addım 5: Daha gözəl etmək

Daha gözəl etmək
Daha gözəl etmək
Daha gözəl etmək
Daha gözəl etmək
Daha gözəl etmək
Daha gözəl etmək

Çörək taxtası versiyası yaxşı işləsə də, daha səliqəli və daha etibarlı olacaq bir paketə qoymaq istədim (boşa çıxa bilən və ya kəsilə bilən tellər yoxdur). İstənilən ölçüdə bir pin lövhəsi, montaj tutacaqları və vintləri bir araya gətirmək üçün ehtiyaclarım üçün mükəmməl bir layihə qutusu tapmağı bacardım. Həm də 2 funt sterlinqdən ucuz qiymətə öldü. Qutunu aldıqdan sonra, etməli olduğum şey komponentləri pin lövhəsinə lehimləmək idi.

Bəlkə də bunun ən hiyləgər tərəfi, batareyanın gərginlik dövrəsinin bütün komponentlərini Lolin32 -nin yanındakı kiçik yerə yerləşdirmək idi. Neyse ki, bir az qarmaqarışıq pokery və lehimlə edilən uyğun bağlantılar ilə dövrə səliqəli şəkildə uyğun gəlir. Ayrıca, Wemos Lolin32 -də müsbət batareya terminalını açmaq üçün bir pin olmadığı üçün, batareya konnektorundan pin lövhəsinə bir tel lehim etməli oldum.

Cihazın hərəkəti aşkar etdikdə yanıb -sönən bir LED də əlavə etdim.

Addım 6: Toxunuşları bitirmək

Image
Image
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək

Qutunun altına 4 ədəd 6 mm x 4 mm ölçülü neodim maqnitləri yapışdırdım ki, bu da paltaryuyan maşının metal səthinə etibarlı şəkildə yapışa bilər.

Layihə qutusu artıq kabellərə giriş təmin etmək üçün kiçik bir çuxurla gəlir. Xoşbəxtlikdən, mikro USB konnektoruna daxil olmaq üçün ESP32 lövhəsini bu çuxura yaxın yerləşdirə bildim. Bıçaqla dəliyi genişləndirdikdən sonra, kabel batareyanın asanlıqla doldurulmasını təmin etmək üçün mükəmməl uyğun gəlir.

Bu layihənin detallarından hər hansı biri ilə maraqlanırsınızsa, şərh yazmaqdan çekinmeyin. Kodu görmək istəyirsinizsə, Github -da yoxlayın:

github.com/alexspurling/washingmachine

Tövsiyə: