Raspberry Pi tərəfindən idarə olunan bir nəfəs işığı: 5 addım
Raspberry Pi tərəfindən idarə olunan bir nəfəs işığı: 5 addım
Anonim
Raspberry Pi tərəfindən idarə olunan bir nəfəs işığı
Raspberry Pi tərəfindən idarə olunan bir nəfəs işığı

Burada təsvir olunan "Nəfəs alma Məşq İşığı", nəfəs alma hərəkətlərinizdə sizə dəstək ola biləcək və daimi bir nəfəs ritmini saxlamağa kömək edə biləcək sadə və nisbətən ucuz bir pulsasiya edən işıqdır. Həm də istifadə edilə bilər, məsələn. uşaqlar üçün sakitləşdirici gecə işığı kimi. İndiki mərhələdə daha çox işləyən bir prototipdir.

Raspberry Pi ilə "fiziki hesablama" üçün ucuz və sadə bir nümunə qurmaq üçün də istifadə edə bilərsiniz. yeni başlayanlar səviyyəsində bir təhsil layihəsi olaraq istifadə ediləcək, Burada analoq (fırlanan potensiometr) və rəqəmsal girişlər (düymə), həmçinin rəqəmsal (LED) və PWM çıxışı (LED zəncirləri) var və dəyişikliklərin təsiri birbaşa görünür.

İşıq dörd fazadan ibarət təkrarlanan dairələrdən keçir: yaşıldan (yuxarıdan qırmızıya) keçid, qırmızıdan yalnız bir faza, qırmızıdan yaşıla keçid və yalnız yaşıldan ibarət bir mərhələ. Bu fazaların uzunluğu potansiyometrlərlə dəyişdirilə bilən sabitlərlə müəyyən edilir. Düymələrə basaraq prosesi başlatmaq, dayandırmaq, davam etdirmək və dayandırmaq olar. LEDlər cari mərhələni göstərir. Pimoroni "Firefly Light" nümunəsinə əsaslanır (bura baxın). "Firefly Light" a bənzər bir Raspberry Pi (Sıfır), Pimoroni Explorer pHAT (və ya HAT) və iki IKEA SÄRDAL LED işıq zənciri tələb olunur. Sonrakılar, pHAT -ın iki PMW/motor limanına bağlanır. Bir kavanoz istifadə etmək əvəzinə LEDləri IKEA şəkil çərçivəsinə qoydum. Parlaqlıq/ nəbz eni dəyişikliyi üçün əlavə sinus funksiyasını tətbiq edərək orijinal "atəşböcəyi işığı" python skriptini bir qədər optimallaşdırmağa çalışdım və qaralma mərhələləri arasında iki "tutma" mərhələsi təqdim etdim. Daha rahat hiss edən yüngül bir model tapmaq üçün parametrləri dəyişdirərkən, cihazın çox dəqiq müəyyən edilmiş nizamlı bir nəfəs alma modelini dəstəkləməyə kömək edə biləcəyini gördüm. Beləliklə, bəziləriniz bu "Nəfəs alma işığını" meditasiya və ya təlim məqsədləri üçün faydalı hesab edə bilərsiniz. Explorer pHAT -ın dörd rəqəmsal və dörd analoq girişi olduğu üçün sürüşmə və ya fırlanan potensiometrlərdən istifadə edərək dörd fərqli parametrə qədər tənzimləmək və düymələrdən istifadə edərək işıqlar üçün start/yenidən başlat/dayandır funksiyalarını tətbiq etmək çox asandır. Bu, cihazdan istifadə etməyə və Pi -yə monitör olmadan parametrləri ehtiyaclarınıza uyğunlaşdırmağa imkan verəcəkdir.

Əlavə olaraq Explorer pHAT, LED və ya səs siqnalları əlavə etmək üçün iki ədəd 5V və iki Ground portu və iki PWM çıxışı olan mühərriklər və ya oxşar qurğular üçün dörd rəqəmsal çıxış portu ilə birlikdə gəlir. Zəhmət olmasa LED -lərinizin gərginliyini azaltmaq üçün düzgün rezistorlardan istifadə etdiyinizə əmin olun.

Pimoroni's Explorer pHAT python kitabxanası bütün bu I/O portlarını idarə etməyi son dərəcə sadə edir.

Cihazın 0, 2 və 4 potansiyometrləri və düymələri olan bu təlimatlı versiyalarında təsvir edilmişdir. Ehtiyaclarınıza uyğun birini seçin.

Cihazı özbaşına idarə etmək üçün ya güc paketindən, ya da "Firefly Light" üçün təsvir edildiyi kimi Pimoroni LiPo şim və LiPo batareyasının birləşməsindən istifadə etmək olar.

Yenilənmiş versiyalar 28 Dekabr 2018: "dörd potansiyometr və dörd düymə" versiyası əlavə edildi. 30: 4-poti versiyası və fritzing şəkilləri üçün kod əlavə edildi.

Addım 1: İstifadə olunan / Tələb olunan materiallar

İstifadə olunan materiallar / tələb olunur
İstifadə olunan materiallar / tələb olunur
İstifadə olunan materiallar / tələb olunur
İstifadə olunan materiallar / tələb olunur
İstifadə olunan materiallar / tələb olunur
İstifadə olunan materiallar / tələb olunur

- Raspberry Pi Zero (4.80 GBP, Pimoroni, Böyük Britaniya) və mikro SD kart (> = 8 GB)/ Raspian

- Pimoroni Explorer pHAT (Pimoroni, İngiltərədə 10 GBP). İsteğe bağlı: tək sıra başlıq, keçid kabelləri

- 12 LEDli IKEA SÄRDAL LED zəncir işıqları (2 x, hər biri 3.99 € IKEA Almaniyada) və ya oxşar 3-5V LED zənciri.- IKEA RIBBA şəkil çərçivəsi (13 x 18 sm, IKEA Almaniyada 2.49 avro).

- LEDləri saxlamaq üçün bir parça PU köpük (2 x 18 x 13,5 sm). Alternativ olaraq styro köpük istifadə edilə bilər.

- Difüzor rolunu oynayan qeyri -şəffaf plastik parçası (18 x 13,5 sm).

- İki ədəd rəngli şəffaf kağız (hər biri 9 x 13,5 sm). Qırmızı və yaşıldan istifadə etdim.

- Xarici ekran rolunu oynayan nazik, çox şəffaf olmayan plastik təbəqə (18 x 13,5 sm). İncə ağ polikarbonat təbəqədən istifadə etdim. Ayarlanabilir versiya üçün isteğe bağlı:

Yayılma vaxtını və yaylağın müddətini və ya alternativ olaraq parlaqlıq kimi digər parametrləri tənzimləmək üçün.- 10, 20 və ya 50 kOhm potansiyometrləri (dördə qədər, sırasıyla iki 10 kOhm dörd 50 Ohm istifadə etdim).

Başlat/dayandır/durdur/durdur/davam düymələri kimi:- Düymələri bas (dördə qədər, dörd və ya iki istifadə etdim)

Dairənin mərhələləri üçün göstərici olaraq:- Rəngli LEDlər və lazımi rezistorlar (istifadə edəcəyiniz LED-lərin xüsusiyyətlərindən asılı olacaq).

  1. təxminən 140 Ohm 5.2 -> 2, 2 V (sarı, narıncı, qırmızı; bəzi yaşıl LEDlər),
  2. 5.3 -> 3.3 V üçün təxminən 100 Ohm (bir qədər yaşıl; mavi, ağ LED)

- Jumper kabelləri və çörək taxtası

İsteğe bağlı olaraq, batareyadan idarə olunan versiya üçün:

  • 5V Micro-USB güc paketi və ya
  • Pimoroni Zero LiPo shim və LiPo batareyası

Addım 2: Lazout və Montaj

Lazout və montaj
Lazout və montaj
Lazout və montaj
Lazout və montaj
Lazout və montaj
Lazout və montaj

İstehsalçı tərəfindən təsvir edildiyi kimi Explorer pHAT -ı yığın. Tullanan kabellərin pHATs I/O portlarına sadələşdirilmiş qoşulması üçün tək sıra qadın başlıq əlavə etdim. Pi qurun və Pimoroni tərəfindən təsvir edildiyi kimi Explorer HAT/pHAT üçün Pimoroni kitabxanasını quraşdırın. Pi -ni söndürün və pHAT -ı Pi -yə bağlayın. Telləri kəsərək tellərin ucunu qalaylayaraq batareya paketlərini LED zəncirlərindən çıxarın. Ortada iki ədəd 2x kişi keçid kabelini kəsin, tellərin ucunu qalaylayın. Keçid kabellərini LED zəncirlərinə lehimləyin və ya yapışan bant və ya büzülmə borusu istifadə edərək lehim nöqtələrini təcrid edin. Lehimdən əvvəl, hansı tellərin artı və ya torpaq portlarına bağlanmalı olduğunu yoxlayın və müvafiq olaraq işarələyin. Müxtəlif rəngli tullanan tellərdən istifadə etdim. LEDləri, diffuzoru və ekran təbəqələrini uyğun ölçüdə saxlamaq üçün köpüyü kəsin. LED tutma lövhəsində LED-lərin yerləşdiriləcəyi yerləri qeyd edin və köpüyə 3-5 mm deşik vurun. Sonra 24 LED -i verilən mövqelərə daxil edin. Rəngli kağızları və diffuzor lövhələrini LED lövhəyə qoyun (şəkillərə baxın), çərçivəni paketin üstünə qoyun. Çərçivədəki köpük təbəqələrini düzəldin, məsələn. yapışan bant istifadə edərək. LED şerit kabellərini Explorer pHAT -ın "motor" portlarına bağlayın. Ayarlanabilir versiya üçün potansiyometrlər, düymələr, idarəetmə LEDləri (və/və ya səs siqnalları) və rezistorları çörək lövhəsinə yerləşdirin və Explorer pHAT -da müvafiq portlarla birləşdirin.

Pi -ni işə salın və Pimoroni veb saytında təsvir edildiyi kimi tələb olunan kitabxanaları quraşdırın, sonra verilən Python 3 skriptini işə salın. LED zəncirlərindən biri işləmirsə, yanlış istiqamətə bağlana bilər. Sonra ya pHAT üzərindəki artı/eksi əlaqələrini dəyişə və ya proqramda dəyişiklik edə bilərsiniz, məsələn. "eh.motor.one.backwards ()" ı "… irəli ()" olaraq dəyişdirin.

Proqram daxilində dəyişə biləcəyiniz sabit parametrləri olan skriptlər və potensialiometrlərlə bəzi parametrləri dəyişdirə biləcəyiniz bir nümunə və düymələri istifadə edərək işıq dövrünü başlata və dayandıra bilərsiniz. Ssenariləri "nəfəs işığı" nın öz planınıza uyğunlaşdırmaq çox çətin olmamalıdır.

Addım 3: Python Skriptləri

Explorer HAT/pHAT üçün Pimoroni'nin Python kitabxanası, HAT -lərin I/O portlarına əlavə edilmiş komponentlərə daxil olmağı son dərəcə sadə edir. İki nümunə: "eh.two.motor.backwards (80)", PWM/motor portu 2 -yə qoşulmuş cihazı 80% maksimum intensivliklə geriyə istiqamətdə idarə edir, "eh.output.three.flash ()" bir LED bağlayır İşığın bir neçə variantını yaratdım, əsasən dörd düyməni və potansiyometrləri əlavə edərək artan nəzarət səviyyələrini əlavə etdim..py "proqramında dörd parametr parametrinin hamısının dəyişdirilməsi lazımdır. Əlavə olaraq "Nəfəs alma işığı var lin cosin.py" adlı bir versiya, iki karartma fazının uzunluğunun iki potansiyometr və ən çox işlənmiş "Nəfəs alma işığı var lin cosin3.py" istifadə edərək dörd potansiyometr və düymə versiyası üçün tənzimlənə bilər.. Proqramlar Python 3 -də yazılmışdır.

Bütün hallarda velosiped sürmə prosesi iki düyməni istifadə etməklə dayandırıla bilər, dörd düyməli versiyada da prosesi kəsə və yenidən başlata bilərsiniz. Əlavə olaraq, xüsusi fazaları göstərən rəqəmsal çıxış portlarına dörd (rəngli) LED qoşula bilər. Cihazın dövrü dörd mərhələdən ibarətdir:

- yuxarı LED -lərin aşağı endiyi və aşağı LED -lərin intensivliyini artırdığı "nəfəs alma" mərhələsi

- "nəfəsinizi tutun" mərhələsi, burada yuxarı LEDlər söndürülür və aşağı LEDlər maksimuma qoyulur

- aşağı LED -lərin aşağı işıqlandırıldığı və yuxarı LED -lərin intensivliyini artırdığı "nəfəs alma" mərhələsi

- "aşağı nəfəs alma" mərhələsi, burada aşağı LED -lər söndürülür və yuxarı LED -lər maksimum yanır.

Bütün dörd mərhələnin uzunluğu ya proqramda sabit ola bilən və/və ya potensiometrdən istifadə olunaraq tənzimlənə bilən fərdi rəqəmsal parametrlə müəyyən edilir.

Beşinci parametr maksimum intensivliyi təyin edir. LED -lərin maksimum parlaqlığını təyin etməyə imkan verir ki, bu da onu gecə işığı kimi istifadə etmək istəsəniz lazımlı ola bilər. Əlavə olaraq, karartma prosesini yaxşılaşdırmağa imkan verə bilər, çünki 80 ilə 100% intensivlik arasında fərq görmək çətindir.

Parlaqlığın artması/azalması üçün isteğe bağlı (co-) sinus funksiyası əlavə edirdim, çünki fazalar arasında daha hamar bir əlaqə yaradır. Digər funksiyaları sınamaqdan çekinmeyin. Məsələn, fasilələri aradan qaldıra və hər iki LED zənciri üçün iki fərqli (kompleks) sinus funksiyasından istifadə edə və potansiyometrlərlə tezliyi və amplitudu tənzimləyə bilərsiniz.

# "Nəfəs alan" lampa: iki düymə və iki potensiometr versiyası

# Pimoroni Explorer pHAT üçün firefly nümunəsinin bir dəyişikliyi # burada: sinoid artım/motor/PWM dəyərlərinin azalması # xətti funksiya üçün xətti və səssiz kosin funksiyasını açar # Bu "var" versiyası analoq girişləri oxuyur, əvvəlcədən təyin edilmiş parametrləri ləğv edir # oxuyur rəqəmsal giriş, Pi -ni işə saldıqdan sonra başlamaq və dayandırmaq üçün "" düymələri "Cron" dan istifadə edə bilərsiniz: Cron, işlərin vaxtını təyin etmək üçün istifadə olunan bir Unix proqramıdır və skriptin işə salınmasına imkan verən rahat @yenidən başlatma funksiyasına malikdir. Pi yüklədiyiniz zaman. Bir terminal açın və crontab'ınızı redaktə etmək üçün crontab -e yazın. #ilə başlayan bütün sətirləri keçərək faylın sonuna qədər gedin və aşağıdakı sətri əlavə edin (kodunuzun /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & crontab-ı bağlayın və yadda saxlayın (nano istifadə edirsinizsə, control-x, y düymələrinə basın və çıxmaq və saxlamaq üçün daxil edin). "" "idxal vaxtı idxal araşdırıcısı eh idxal riyaziyyat sabit dəyərləri kimi # sinus xmax = 316 addım = 5 # addım eni, məsələn 315/5, 63 addım/dövr start_button = 0 # bu, 1 nömrəli giriş portuna bağlı olan bir düymənin vəziyyətini təyin edir stop_button = 0 # bu, 3 nömrəli giriş portuna bağlı olan bir düymənin vəziyyətini təyin edir pauza_1 = 0.02 # uzunluqları təyin edir "nəfəs alma" mərhələsindəki addımlar arasındakı fasilələr, bununla da artım sürəti və müddəti duraklama_2 = 0.04 # ayarlar "nəfəs alma" artım sürəti fasilə_3 = 1.5 # nəfəs və nəfəs alma mərhələləri arasında fasilə (nəfəs almağa davam edin) fasilə_4 = 1.2 # nəfəsin sonunda fasilə. faza (nəfəs alın) max_intens = 0.9 # maksimum intensivlik/parlaqlıq max_intens_100 = 100*max_intens # % -də eyni # LED -lərin "nəfəs alma" təəssüratını optimallaşdırmağa və titrəməni azaltmağa imkan verə bilər. l_cosin = cosinus törəmə dəyərləri olan # siyahı (100> = x> = 0) l_lin = # xətti dəyərləri olan siyahı (100> = x> = 0) # aralığında i üçün cosinus funksiyalar siyahısı yaradır (0, 316, 3): # 315 Pi*100 -ə yaxındır, 105 addım # print (i) n_cosin = [((((math.cos (i/100))+1)/2)*100] # generate value # print (n_cosin) l_cosin = l_cosin + n_cosin # siyahıya dəyər əlavə edin # çap (l_cosin) # aralığında i üçün xətti siyahı yaradın (100, -1, -1): # 100 -dən sıfıra saymaq n_lin = l_lin = l_lin + n_lin # print (l_lin) # darıxdırıcı siyahı göstərir çap () çap ("" "İşıq dövrlərinə başlamaq üçün" Başlat "Düyməsinə (Bir Giriş)" "") bas () çap et ("" "Dayandırmaq üçün) işıq, "Dur" düyməsini basılı tutun (Üçüncü Giriş) "" ")" ()) yazdırın () # Başlat Düyməsinə basılana qədər gözləyin (start_button == 0): start_button = eh.input.one.read () # oxu bir nömrəli düymə eh.output.one.blink () # bir dəfə yanıb -sönmə LED nömrəsi. yuxu (0.5) # saniyədə iki dəfə oxumaq = eh.an alog.one.read () # qırmızı-> yaşıl ramping dərəcəsini təyin edir pause_1 = set_1*0.02 # dəyərləri 0 ilə 0.13 saniyə/addım çap arasında dəyişəcək ("set_1:", set_1, " -> duraklatma _1:", pause_1) set_2 = eh.analog.two.read () # yaşıl -> qırmızı ramping rate pause_2 = set_2*0.02 # dəyərləri 0 ilə 0.13 saniyə/addım çap arasında dəyişəcək ("set_2:", set_2, " -> duraklatma _2: ", pause_2) #" inhalyasiya "mərhələsi eh.output.one.on () # aralığında x üçün LED (len (l_lin)) üçün LED və ya" '' siqnalını verə bilər: fx = max_intens*l_lin [x] # xətti əyri eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'for x in range (len (l_cosin)): fx = max_intens*l_cosin [x] # xətti əyri eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # Dur düyməsinə basıldığını yoxlayın stop_button = eh.input.three.read () # inhalyasiya mərhələsinin sonunda "nəfəsinizi qoruyun" fasiləsi eh.output.two.on () # iki LED -i yandırın eh.motor.one. geriyə (0) eh.motor.two.backwards (max_intens_100) time.sleep (pause_3) eh.output.two.off () # Stop düyməsinə basıldığını yoxlayın stop_button = eh.input.three.read () # "exhale" fazası eh.output.three.on () # x aralığında üç düymlük LED yandırın (len (l_lin)): fx = max_intens*l_lin [x] # xətti əyri eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx)) time.sleep (pause_2) '' 'x x aralığında (len (l_cosin)): fx = max_intens*l_cosin [x] # xətti əyri eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. geriyə (fx) vaxt.yuxu (pauza_2) eh.output.three.off () # Stop düyməsinə basıldığını yoxlayın stop_button = eh.input.three.read () # "nəfəs alma" və "nəfəs alma" mərhələləri arasında # fasilə eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () #Stop düyməsinə basıldığını yoxla stop_button = eh.input.three.read () # bağlama, bütün çıxış portlarının eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () çap () çap et ("Əlvida")

İşığı müstəqil bir cihaz kimi istifadə etmək istəyirsinizsə, məsələn. yuxu və ya oyanma işığı olaraq, Pi-yə mobil enerji mənbəyi əlavə edə bilərsiniz və proqramı yüklədikdən sonra başlaya bilərsiniz və müəyyən vaxtlarda açmaq və ya söndürmək üçün "Cron" dan istifadə edə bilərsiniz. "Cron" un necə istifadə ediləcəyi başqa yerdə geniş şəkildə izah edilmişdir.

Addım 4: Video nümunələri

Bu addımda, normalda (yəni bütün dəyərlər> 0, #1) və həddindən artıq şəraitdə işığı göstərən bir çox video tapa bilərsiniz, çünki bütün dəyərlər sıfıra qoyulur (#2), yalnız genişlənir (#3 və #4), və eniş yoxdur (#5 və #6).

Addım 5: Bəzi qeydlər

Zəhmət olmasa səhv terminlərdən, yazım səhvlərindən və səhvlərdən üzr istəyin. Mən nə ingilis dilində danışıram, nə də elektrik, elektronika və ya proqramlaşdırma sahələrində ətraflı məlumatım yoxdur. Həqiqətən, öz dilimdə düzgün terminləri çətinliklə bildiyim şeylər haqqında ingilis dilində təlimat yazmağa çalışdığım deməkdir. Beləliklə, təkmilləşdirmə üçün hər hansı bir göstəriş, düzəliş və ya fikir qəbul edilir