Mündəricat:

Arduino İnteraktiv LED Qəhvə Masası: 6 Addım (Şəkillərlə birlikdə)
Arduino İnteraktiv LED Qəhvə Masası: 6 Addım (Şəkillərlə birlikdə)

Video: Arduino İnteraktiv LED Qəhvə Masası: 6 Addım (Şəkillərlə birlikdə)

Video: Arduino İnteraktiv LED Qəhvə Masası: 6 Addım (Şəkillərlə birlikdə)
Video: Arduino LED Coffee Table 2024, Iyul
Anonim
Image
Image
Arduino İnteraktiv LED Qəhvə Masası
Arduino İnteraktiv LED Qəhvə Masası

Obyekt masanın üstünə qoyulduqda bir obyektin altındakı işıqları yandıran interaktiv bir sehpa hazırladım. Yalnız o obyektin altında olan ledlər yanacaq. Yaxınlıq sensörlərindən səmərəli istifadə edərək bunu edir və yaxınlıq sensoru bir obyektin kifayət qədər yaxın olduğunu hiss etdikdə həmin obyektin altındakı bir qovşağı işıqlandıracaq. Yaxınlıq sensörlərinə ehtiyacı olmayan animasiyalar qoymaq üçün bir Arduino istifadə edir, ancaq çox sevdiyim həqiqətən möhtəşəm bir effekt əlavə edir.

Yaxınlıq sensorları fotodiodlardan və İQ yayıcılarından ibarətdir. Yayıcılar masadan işıq saçmaq üçün infraqırmızı işığı (insan gözünün görə bilmədiyi) istifadə edirlər və fotodiodlar cisimdən əks olunan infraqırmızı işığı alır. Nə qədər çox işıq yansırsa (cisim nə qədər yaxın olarsa), fotodiodlardan gələn gərginlik bir o qədər çox dəyişir. Bu, hansı düyünün yandırılacağını bildirmək üçün bir göstərici olaraq istifadə olunur. Düyünlər ws2812b ledlər və yaxınlıq sensoru toplusudur.

Əlavə edilmiş video bütün quruluş prosesini əhatə edir, aşağıda isə daha çox detalları təsvir edirəm.

Təchizat

  1. ws2812b LED Ampüller -
  2. 5V Güc Təchizatı -
  3. 2560 istifadə etdiyim hər hansı bir Arduino -
  4. Fotodiodlar
  5. IR yayıcıları
  6. 10 Ohm rezistorlar
  7. 1 MOhms Rezistorlar
  8. 47 pF kondansatör
  9. CD4051B Çoxlayıcılar
  10. SN74HC595 Vəziyyət Qeydləri
  11. ULN2803A Darlington Arrays
  12. Ledlər üçün böyük bir lövhə kimi istifadə etmək üçün hər hansı bir substrat, ev deposundan bir kağız kompozit lövhə istifadə etdim

Addım 1: Lövhəni yaradın və LEDləri daxil edin

Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin
Lövhəni yaradın və LEDləri daxil edin

Etdiyim ilk şey, sehpa içərisinə qoyacağımız ledləri ehtiva edən lövhə yaratmaq idi. Ev depolarından bir parça kağız kompozit taxtadan istifadə etdim və içdiyim sehpa üçün uyğun ölçülərə kəsdim. Lövhənin ölçüsünü kəsdikdən sonra, ledlərin getdiyi bütün delikləri qazdım. Lövhənin özündə 3 düym aralıda ayrılmış 8 satır və 12 sütun ws2812b var idi və onlar ilan şəklində bağlanmışdı. Onları yerində saxlamaq üçün isti yapışqan istifadə etdim.

Düyünə çevriləcək yerin mərkəzində dəlik açmalı oldum: bir kvadrat təşkil edən 4 ws2812b led, 2 fotodiod və 2 kiçik radiatorlu mərkəzdə. Düyün mərkəzindəki bu 4 delik, fotodiodlar və ir yayıcılar üçün ləkələr olardı (hər biri 2 ədəd). Maksimum pozlama təmin etmək üçün onları dəyişdim və hər düyünün mərkəzində təxminən 1 düym aralığında yerləşdirdim. Bunları yerinə isti yapışdırmağa ehtiyac yoxdu, digər tərəfdən çıxmamalarına əmin olmaq üçün digər tərəfdəki ipləri əydim. Müsbət və mənfi ucları müəyyən bir istiqamətə bükdüyümdən əmin oldum ki, dövrədə düzgün istiqamətləndirilsinlər. Bütün müsbət nəticələr lövhənin arxa tərəfinin sol tərəfində, bütün mənfi nəticələr isə lövhənin sağ tərəfində idi.

Addım 2: Dövrəni anlayın

Dövrəni anlayın
Dövrəni anlayın
Dövrəni anlayın
Dövrəni anlayın
Dövrəni anlayın
Dövrəni anlayın

Qeyd: Bütün cizgi rəsmləri tətbiq üçün dəqiq deyil (bəzi arduino sancaqları fərqlidir və mən bir neçə papatyanı zəncirlə bağlayıram, daha sonra bu barədə). Nəticə dövrənin mürəkkəbliyinə görə bir az fərqli idi, lakin bütün cizgi sxemləri hər bir hissənin necə prototip ediləcəyini başa düşmək üçün əla bir baza rolunu oynayır. Adi sxematik və dövrə diaqramı, layihədə istifadə olunan PCB -də olduğu kimidir.

KiCad layihəsini və gerber fayllarını ehtiva edən PCB kodunu burada tapa bilərsiniz: https://github.com/tmckay1/interactive_coffee_tabl…, əgər PCB -ləri özünüz sifariş etmək və bənzər bir layihə yaratmaq istəyirsinizsə. Lövhələr yaratmaq üçün NextPCB -dən istifadə etdim.

Bu cədvəli təşkil edən üç fərqli sxem var. Birincisi, ətraflı məlumat verməyəcəyik və ws2812b ledlərini gücləndirən sadə bir sxemdir. PWM məlumat siqnalı Arduinodan ws2812b led ampullərə göndərilir və hansı rənglərin harada göstərildiyini idarə edir. Ws2812b ledlərindən istifadə edirik, çünki onlar ayrı -ayrılıqda həll oluna bilər, buna görə də hansının açılacağını və hansının söndürülməsinə nəzarət edə biləcəyik. Ws2812b ledləri 5V xarici enerji mənbəyi ilə təchiz edilmişdir, çünki təkcə arduino bütün işıqları yandırmaq üçün kifayət qədər gücə malik deyil. Əlavə edilmiş cizgi diaqramında 330 Ohm çəkmə müqavimətindən istifadə edirlər, lakin bunu öz quruluşumda istifadə etmirəm.

İkinci dövrə IR yayıcılarını işə salır. Bu dövrə, İQ yayıcılarına güc göndərən bir darlington massivini idarə etmək üçün bir keçid qeydindən istifadə edir. Dəyişdirmə reyestri, az miqdarda sancaqdan birdən çox sancağa YÜKSƏK və DÜŞÜK siqnalları göndərə bilən inteqral dövrədir. Bizim vəziyyətimizdə 3 girişdən idarə oluna bilən, lakin 8 -ə qədər çıxışı idarə edən SN74HC595 keçid reyestrindən istifadə edirik. Bunu arduino ilə istifadə etməyin üstünlüyü, ardıcıl olaraq 8 növbəyə qədər qeydiyyatdan keçə biləcəyinizdir (arduino yalnız 8 -ə qədərini idarə edə bilər). Bu o deməkdir ki, 64 İQ yayıcısını açmaq və söndürmək üçün arduinodan yalnız 3 sancağa ehtiyacınız var. Darlington serialı, giriş siqnalı YÜKSEK olduqda cihazı xarici mənbədən gücləndirməyə və ya giriş sinyali YOX olarsa cihazı söndürməyə imkan verir. Beləliklə, nümunəmizdə, 5V xarici enerji mənbəyinin 8 İQ yayıcısına qədər açılmasına və söndürülməsinə imkan verən ULN2803A darlington massivindən istifadə edirik. İQ yayıcılarından maksimum amperaj əldə etmək üçün İQ yayıcıları ilə birlikdə 10 Ohm rezistordan istifadə edirik.

Üçüncü dövrə, fotodiodlardan birdən çox giriş almaq üçün bir multiplekserdən istifadə edir və çıxışı məlumat siqnalı ilə göndərir. Multiplexer, oxumaq istədiyiniz birdən çox girişi almaq üçün istifadə olunan və bu girişlərdən oxumaq üçün yalnız bir neçə pinə ehtiyacı olan bir cihazdır. Bunun əksini də edə bilər (demultiplex), amma biz burada bu tətbiq üçün istifadə etmirik. Beləliklə, fotodiodlardan 8 -ə qədər siqnal qəbul etmək üçün bir CD4051B multiplekserindən istifadə edirik və bu siqnallardan oxumaq üçün yalnız 3 girişə ehtiyacımız var. Üstəlik, 8 -ə qədər multiplekserə zəncir vura bilərik (arduino yalnız 8 -ə qədərini idarə edə bilər). Bu o deməkdir ki, arduino 64 ədəd fotodiod siqnalından yalnız 3 rəqəmsal pindən oxuya bilər. Fotodiodlar tərs istiqamətdə yönəldilmişdir, yəni pozitiv gərginlik mənbəyinə qoşulan müsbət qurğunun normal istiqamətdə istiqamətləndirilməsi əvəzinə, mənfi qurğunu müsbət gərginlik mənbəyinə təyin edirik. Bu, fotodiodları effektiv şəkildə aldığı işıq miqdarından asılı olaraq müqavimətini dəyişən foto rezistorlara çevirir. Daha sonra yerə yüksək dayanıqlı 1 MOhms rezistor əlavə edərək fotodiodların dəyişən müqavimətindən asılı olan bir gərginliyi oxumaq üçün bir gərginlik bölücü yaradırıq. Bu, fotodiodların nə qədər İQ işığından asılı olaraq arduino -ya daha yüksək və daha aşağı gərginlik almağımıza imkan verir.

Bu dizaynın çox hissəsini burada edən başqa bir şəxsdən izlədim: https://www.instructables.com/Infrared-Proximity-S… Bu dizaynda, 1 MOhm rezistorun qarşısına gəldiyimiz kimi 47pF kondansatör də əlavə etdilər. fotodiodlarla gərginlik bölücü yaratmaq üçün istifadə olunur. Əlavə etməsinin səbəbi, İQ yayıcılarını PWM siqnalı ilə açıb -söndürməsi və bunu etməsi, İQ yayıcıları dərhal açıldıqda fotodiodlardan kiçik bir geriləmə çəkdi. Bu, IR diodlarının fotodiodlarla eyni 5V enerji mənbəyini paylaşdıqları üçün bir obyektdən daha çox İQ işığı almadığı zaman belə fotodiodların müqavimətini dəyişdi. Kondansatör, İQ yayıcıları açılaraq söndürüldükdə bir gerilim düşməməsini təmin etmək üçün istifadə edilmişdir. Əvvəlcə eyni strategiyanı etməyi planlaşdırırdım, amma sınamaq üçün vaxtım bitdi, buna görə də İQ yayıcılarını həmişə açıq buraxdım. Gələcəkdə bunu dəyişdirmək istərdim, amma kodu və dövrəni yenidən dizayn edənə qədər, hal -hazırda PCB hər zaman IR işıqlarının yanması üçün hazırlanmışdır və kondansatörləri onsuz da saxlamışam. Bu PCB dizaynını istifadə edirsinizsə, kondansatörə ehtiyacınız olmayacaq, ancaq PC emissiya cihazlarını modulyasiya etməyə imkan verən shift qeydinə əlavə girişi qəbul edən başqa bir PCB versiyasını təqdim edəcəyəm. Bu enerji istehlakına çox qənaət edəcək.

Arduino -da sınaqdan keçirmək üçün prototip qurmaq üçün əlavə edilmiş cizgi diaqramlarını yoxlaya bilərsiniz. Hər bir dövrə üçün elektron cihazların quruluşunu və istiqamətini əks etdirən daha ətraflı rəngli sxem də mövcuddur. Əlavə edilmiş PCB sxemində 4 ümumi dövrə, İQ yayıcılarını açmaq üçün istifadə olunan 2 dövrə və fotodiodlardan oxumaq üçün 2 dövrə sahibik. PCB 2 qrupu, 1 IR yayıcı dövrə və 1 fotodiod dövrəsindən ibarət bir qrup ilə bir -birinin ardınca yönəldilmişdir ki, 8 qovşaqdan ibarət 2 sütun tək bir PCB -yə yerləşdirilə bilsin. Həm də iki dövrəni bir -birinə bağlayırıq, buna görə arduinodan üç pin iki keçid qeydini idarə edə bilər və 3 əlavə pin də lövhədəki iki multiplekseri idarə edə bilər. Əlavə PCB -lərə zəncir bağlaya bilmək üçün əlavə bir çıxış başlığı var.

Prototip hazırlamaq üçün izlədiyim bir neçə qaynaq:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Addım 3: Lehim Telləri Node

Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node
Lehim Telləri Node

Dövrün necə qurulduğunu başa düşdüyünüz üçün, irəli gedin və telləri hər bir qovluğa lehimləyin. Fotodiodları paralel (sarı və boz tellər) və ir yayıcılarını seriyalı (narıncı tel) lehimlədim. Daha sonra 5V güc mənbəyinə bağlanacaq fotodiodlara daha uzun sarı bir tel və pcb -nin fotodiod girişinə bağlanacaq mavi bir tel lehim etdim. 5V enerji mənbəyinə qoşulmaq üçün istifadə ediləcək İQ yayıcı sxeminə uzun bir qırmızı tel və PCB -nin İQ yayıcı girişinə qoşulan qara bir tel bağladım. Əslində telləri bir az qısaltdım, buna görə də sonunda hər sütundakı 5 düyünü bağlaya bildim (7 yerinə). Bunu sonradan düzəltməyi düşünürəm.

Addım 4: PCB komponentlərini lehimləyin və lövhəyə yapışdırın

PCB komponentlərini lehimləyin və lövhəyə yapışdırın
PCB komponentlərini lehimləyin və lövhəyə yapışdırın
PCB komponentlərini lehimləyin və lövhəyə yapışdırın
PCB komponentlərini lehimləyin və lövhəyə yapışdırın
PCB komponentlərini lehimləyin və lövhəyə yapışdırın
PCB komponentlərini lehimləyin və lövhəyə yapışdırın

Qeyd: Əlavə olunmuş şəkildəki PCB, hər bir daxili dövrə üçün güc girişi və çıxışı olmayan bir papatya zənciri hazırladığım ilk versiyadır. Yeni PCB dizaynı bu səhvi düzəldir.

Burada komponentləri PCB -yə lehimləmək üçün PCB sxeminə əməl etməlisiniz və sonra bunu etdikdən sonra PCB -ni lövhəyə lehimləyin. Bütün sarı və qırmızı tellərə payladığım 5V güc siqnalını bağlamaq üçün xarici dövrə lövhələrindən istifadə etdim. Fikirləşsəm, belə uzun qırmızı və sarı tellərə ehtiyacım yox idi və qovşaqları bir -birinə bağlaya bilərdim (ümumi bir xarici dövrə lövhəsinə bağlamaq əvəzinə). Bu, həqiqətən də lövhənin arxasındakı qarışıqlığın miqdarını azaldacaq.

8 satır ws2812b led və 12 sütuna malik olduğum üçün 7 satır və 11 qovşaq sütunu (cəmi 77 qovşaq) ilə sona çatdım. Fikir, bir düyün sütunu üçün PCB -nin bir tərəfini, digər sütunu isə digər tərəfdən istifadə etməkdir. 11 sütuna sahib olduğum üçün 6 PCB -yə ehtiyacım var idi (sonuncusu yalnız bir qrup komponentə ehtiyac duyur). Telləri çox qısa etdiyim üçün yalnız 55 qovşaq, 11 sütun və 5 sıra birləşdirə bildim. Şəkildə görə bilərsiniz, mən səhv etdim və xam telləri lövhəyə lehimlədim, tellər kifayət qədər incə olsaydı yaxşı olardı, amma mənim vəziyyətimdə çox qalın idi. Bu, hər bir IR emitent girişi və fotodiod girişi üçün bir -birinə çox yaxın olan yıpranmış tel uclarım olduğu anlamına gəlirdi, buna görə də bütün tel qısalmalarından çoxlu ayıklama baş verdi. Gələcəkdə şortların qarşısını almaq və əşyaları təmizləmək üçün PCB -ni lövhədəki tellərə bağlamaq üçün bağlayıcılardan istifadə edəcəyəm.

Arduino yalnız 8 növbəli qeyd və multiplekserə qədər papatya zənciri qura bildiyindən biri ilk 8 sütunu, digəri qalan 3 sütunu tutan iki ayrı zəncir yaratdım. Sonra hər bir zənciri yalnız 2 multiplekseri olan başqa bir pcb -yə bağladım ki, bu iki multiplekserdən gələn hər bir multiplekser məlumat siqnalını arduino -ya oxuya bilim. Bu iki multiplekser də papatya zəncirlə bağlanmışdı. Bu o deməkdir ki, arduino -da ümumilikdə 16 çıxış siqnalı və 2 analoq girişi var idi: ws2812b ledləri idarə etmək üçün 1 çıxış siqnalı, birinci növbəli qeydlər zənciri üçün 3 çıxış siqnalı, ilk multipleksor zənciri üçün 3 çıxış siqnalı, İkinci növbəli qeydlər zənciri üçün 3 çıxış siqnalı, ikinci multipleksor zənciri üçün 3 çıxış siqnalı, hər bir PCB məlumat siqnalını birləşdirən 2 multiplekser üçün 3 çıxış siqnalı və nəhayət 2 məcmu multiplekserdən hər bir məlumat siqnalı üçün 2 analoq giriş.

Addım 5: Kodu nəzərdən keçirin

Qeyd: Aşağıdakı interaktiv koda əlavə olaraq, ws2812b ledləri üçün animasiyalar hazırlamaq üçün üçüncü tərəf kitabxanasından istifadə etdim. Bunu burada tapa bilərsiniz:

İstifadə etdiyim kodu burada tapa bilərsiniz:

Üst hissədə, PCB -nin hər bir hissəsinə bağlanacaq arduino pinlərini təyin edirəm. Quraşdırma metodunda, multiplekserlər üçün çıxış pinlərini təyin etdim, İQ yayıcılarını yandırdım, hər bir fotodiod üçün ətrafdakı işığın oxunmasını izləyən və ws2812b ledlərinə yazacaq FastLED -i işə salan bir baseVal dizisi qurdum. Döngü metodunda, ws2812b zolağında olmaq üçün təyin edilmiş ledlərin siyahısını sıfırlayırıq. Daha sonra, multipoder zəncirlərindəki fotodiodlardan dəyərləri oxuyuruq və düyündəki fotodiodun oxunması ətraf işıq oxunuşlarının baza dəyərindən müəyyən bir həddən artıq olduğu təqdirdə, olması lazım olan ws2812b ledlərini təyin edirik. Açılmalı olan qovşaqda hər hansı bir dəyişiklik olarsa, LED -ləri təqdim edirik. Əks təqdirdə, işi sürətləndirmək üçün bir şey dəyişənə qədər döngə saxlayır.

Kod yəqin ki, təkmilləşdirilə bilər və mən bunu araşdırıram, ancaq masaya bir obyekt qoyulduqdan sonra işıqların yandırılmasından təxminən 1-2 saniyə gecikmə var. Düşünürəm ki, əsas problem FastLED -in masadakı 96 ledləri göstərmək üçün bir az vaxt tələb edir və kod cədvəldən 77 girişi keçib oxumalıdır. Bu kodu 8 led ilə sınadım və demək olar ki, anında tapdım, amma bu kodla işləyəcək və demək olar ki, anında işləyəcək, həm də kodu təkmilləşdirəcək LED -lərin şirin nöqtəsinə baxıram.

Addım 6: Arduino yandırın

Arduino yandırın!
Arduino yandırın!
Arduino yandırın!
Arduino yandırın!
Arduino yandırın!
Arduino yandırın!

İndi etməniz lazım olan hər şey arduino yandırmaq və masa funksiyasını görməkdir! Daha əvvəl qeyd etdiyimiz animasiyalar kitabxanasından istifadə edərək bir az sərin ws2812b led animasiyalar qoya bilərsiniz və ya sehpa kodunu taxıb hər bölmədə yandığını görə bilərsiniz. Hər hansı bir sualınızı və ya fikirlərinizi şərh etməkdən çekinmeyin və sizə vaxtında cavab verməyə çalışacağam. Sağol!

Tövsiyə: