Mundarija:

Raspberry Pi tomonidan boshqariladigan nafas nuri: 5 qadam
Raspberry Pi tomonidan boshqariladigan nafas nuri: 5 qadam

Video: Raspberry Pi tomonidan boshqariladigan nafas nuri: 5 qadam

Video: Raspberry Pi tomonidan boshqariladigan nafas nuri: 5 qadam
Video: Параплан и новый город ► 6 Прохождение Dying Light 2: Stay Human 2024, Iyul
Anonim
Raspberry Pi tomonidan boshqariladigan nafas nuri
Raspberry Pi tomonidan boshqariladigan nafas nuri

Bu erda tasvirlangan "Nafas olish mashqlari nuri" - bu oddiy va nisbatan arzon pulsatsiyalanuvchi yorug'lik, bu sizni nafas mashqlarini bajarishda qo'llab -quvvatlaydi va doimiy nafas olish ritmini saqlashga yordam beradi. Bundan tashqari, masalan, ishlatilishi mumkin. bolalar uchun tinchlantiruvchi tungi yorug'lik sifatida. Hozirgi bosqichda bu ko'proq ishlaydigan prototip.

Siz uni Raspberry Pi bilan "jismoniy hisoblash" uchun arzon va oddiy misol sifatida ishlatishingiz mumkin, masalan. boshlang'ich darajadagi o'quv loyihasi sifatida foydalanish uchun, bu erda siz analog (aylanadigan potentsiometr) va raqamli kirishlar (tugma), shuningdek raqamli (LED) va PWM chiqishi (LED zanjirlari) va o'zgarishlarning ta'siri to'g'ridan -to'g'ri ko'rinadi.

Yorug'lik to'rt bosqichdan iborat takrorlanuvchi doiralar orqali o'tadi: yashil (yuqori) dan qizil (pastgacha) o'tish, faqat qizil, qizil-yashil o'tish va faqat yashil faza. Bu fazalarning uzunligi potentsiometrlar yordamida o'zgartirilishi mumkin bo'lgan doimiylar bilan belgilanadi. Bosish tugmachalarini bosib jarayonni boshlash, to'xtatib turish, davom ettirish va to'xtatish mumkin. LEDlar hozirgi bosqichni bildiradi, u Pimoroni "Firefly Light" misoliga asoslangan (bu yerga qarang). "Firefly Light" ga o'xshab, u Raspberry Pi (nol), Pimoroni Explorer pHAT (yoki HAT) va ikkita IKEA SÄRDAL LED yorug'lik zanjirini talab qiladi. Keyinchalik pHAT ning ikkita PMW/motor portiga ulangan. Men kavanozdan foydalanish o'rniga LEDlarni IKEA rasm ramkasiga joylashtirdim. Men asl "o't o'chiruvchi yorug'lik" python skriptini biroz optimallashtirishga harakat qildim, nashrida/ impuls kengligining o'zgarishi uchun ixtiyoriy sinus funktsiyasini amalga oshirdim va karartma fazalari o'rtasida ikkita "ushlab turish" fazasini kiritdim. O'ziga qulayroq ko'rinadigan yorug'lik modelini topish uchun parametrlarni o'zgartirib, men shuni aniqladimki, qurilma aniq belgilangan, muntazam nafas olish rejimini qo'llab -quvvatlashga yordam beradi. Shunday qilib, sizlardan ba'zilari bu "nafas olish nuri" ni meditatsiya yoki mashg'ulotlar uchun foydali deb topishi mumkin. Explorer pHAT -da to'rtta raqamli va to'rtta analogli kirish mavjud bo'lganligi sababli, slayd yoki aylanuvchi potentsiometrlar yordamida to'rt xil parametrni tartibga solish va tugmalar yordamida chiroqlar uchun ishga tushirish/qayta ishga tushirish/to'xtatish funktsiyalarini kiritish juda oson. Bu sizga qurilmadan foydalanishga va parametrlarga ehtiyojingizga qarab optimallashtirishga imkon beradi, agar monitorga Pi ulanmagan bo'lsa.

Bundan tashqari, Explorer pHAT to'rtta raqamli chiqish portiga ega, ular svetodiodlar yoki signallarni qo'shish imkonini beradi, shuningdek, ikkita 5V va ikkita Ground portlari va dvigatellar yoki shunga o'xshash qurilmalar uchun ikkita PWM chiqish portlari. LEDlarning kuchlanishini pasaytirish uchun to'g'ri rezistorlardan foydalanganingizga ishonch hosil qiling.

Pimoroni Explorer pHAT python kutubxonasi ushbu kirish/chiqish portlarini boshqarishni juda osonlashtiradi.

Qurilmaning 0, 2 va 4 potentsiometrlari va tugmachalari bo'lgan ushbu ko'rsatma versiyalarida tasvirlangan. Sizning ehtiyojlaringizga mos keladiganini tanlang.

Qurilmani avtonom tarzda ishga tushirish uchun quvvat to'plami yoki Pimoroni LiPo shim va LiPo batareyasining kombinatsiyasidan foydalanish mumkin.

Yangilangan versiyalar 2018 yil 28 -dekabr: "to'rtta potansiyometr va to'rtta tugmachali" versiyasi qo'shildi. 30: 4-poti versiyasi uchun kod va shovqinli tasvirlar qo'shilgan.

1 -qadam: Ishlatilgan materiallar / zarur

Ishlatilgan materiallar / zarur
Ishlatilgan materiallar / zarur
Ishlatilgan materiallar / zarur
Ishlatilgan materiallar / zarur
Ishlatilgan materiallar / zarur
Ishlatilgan materiallar / zarur

- Raspberry Pi Zero (Buyuk Britaniyaning Pimoroni shahrida 4,80 GBP) va Raspian bilan micro SD karta (> = 8 GB)

- Pimoroni Explorer pHAT (Buyuk Britaniyaning Pimoroni shahrida 10 GBP). Majburiy emas: bitta qatorli sarlavha, o'tish kabellari

- 12 LEDli IKEA SÄRDAL LED zanjir chiroqlari (har biri IKEA Germaniyada 2 x, har biri 3,99 evro) yoki shunga o'xshash 3-5V LED zanjir.- IKEA RIBBA rasm ramkasi (13 x 18 sm, IKEA Germaniyada 2,49 evro).

- PU ko'pikli bo'lak (2 x 18 x 13,5 sm), LEDlarni ushlab turish uchun. Shu bilan bir qatorda, ko'pikli polistirol ham ishlatilishi mumkin.

- Shaffof bo'lmagan plastmassa bo'lagi (18 x 13,5 sm), diffuzor vazifasini bajaradi.

- Ikki varaq rangli shaffof qog'oz (har biri 9 x 13,5 sm). Men qizil va yashil ranglardan foydalanardim.

- Yupqa, juda shaffof bo'lmagan plastmassa varaq (18 x 13,5 sm), tashqi ekran vazifasini bajaradi. Men ingichka oq polikarbonat varaqdan foydalandim. Ixtiyoriy, sozlanishi versiya uchun:

Rampa vaqtini va platoning davomiyligini yoki yorqinlik kabi boshqa parametrlarni sozlash uchun.- 10, 20 yoki 50 kOm potentsiometrlari (to'rttagacha, men mos ravishda ikkita 10 kOm to'rt 50 Ohm).

Ishga tushirish/to'xtatish/to'xtatib turish/davom etish tugmalari sifatida:- tugmachalarni bosing (to'rttagacha, men to'rt yoki ikkitasini ishlatardim)

Doira fazalari uchun indikator sifatida:- Rangli LEDlar va kerakli rezistorlar (siz foydalanadigan LEDlarning xususiyatlariga bog'liq bo'ladi).

  1. taxminan 140 Ohm 5.2 -> 2, 2 V uchun (sariq, to'q sariq, qizil; ba'zi yashil LEDlar),
  2. taxminan 100 Ohm 5,3 -> 3,3 V uchun (ba'zi yashil; ko'k, oq LEDlar)

- o'tish kabellari va non paneli

Batareya bilan ishlaydigan versiya uchun ixtiyoriy:

  • 5V Micro-USB quvvat to'plami yoki
  • Pimoroni Zero LiPo shim va LiPo batareyasi

2 -qadam: Lazout va montaj

Lazout va yig'ilish
Lazout va yig'ilish
Lazout va yig'ilish
Lazout va yig'ilish
Lazout va yig'ilish
Lazout va yig'ilish

Ishlab chiqaruvchi tomonidan ta'riflanganidek, pHAT Explorer -ni yig'ing. Men o'tish kabellarini pHAT kirish -chiqish portlariga soddalashtirilgan ulanish uchun bitta qatorli ayol sarlavhasini qo'shdim. Pi -ni o'rnating va Pimoroni tomonidan tasvirlangan Explorer HAT/pHAT uchun Pimoroni kutubxonasini o'rnating. Pi -ni o'chiring va pHAT -ni Pi -ga ulang, simlarni kesib, simlarning uchini qalaylab, LED zanjirlaridan batareya paketlarini chiqarib oling. O'rta qismida ikkita 2x erkak o'tish kabelini kesib oling, simlarning uchini qalaylang. O'tkazgich kabellarini LED zanjirlariga lehimlang va yopishqoq lenta yoki qisish trubkasi yordamida lehim nuqtalarini ajratib oling. Lehimlashdan oldin, qaysi simlarning ortiqcha yoki tuproqli portlarga ulanishi kerakligini tekshiring va ularga mos ravishda belgilang. Men har xil rangdagi o'tish simlarini ishlatardim. LEDlarni, diffuzorni va ekran varaqlarini mos o'lchamdagi ushlab turish uchun ko'pikni kesib tashlang. LED ushlab turuvchi plastinkada LEDlar joylashtiriladigan joylarni belgilang va ko'pikka 3-5 mm teshik qiling. Keyin 24 LEDni berilgan joylarga joylashtiring. Rangli qog'ozlar va diffuzor plitalarini LED plastinkasiga joylashtiring (rasmlarga qarang), ular ramkani paketning tepasiga joylashtiradi. Ko'pikli qatlamlarni ramkaga mahkamlang, masalan. yopishqoq lenta yordamida. LED chiziqli kabellarni Explorer pHAT "motorli" portlariga ulang. Tartibga solinadigan versiya uchun potansiyometrlarni, tugmachalarni, nazorat qilish LEDlarini (va/yoki signalizatorlarini) va rezistorlarni joylashtiring va ularni pHAT Explorer Explorer portlariga ulang.

Pi -ni ishga tushiring va Pimoroni veb -saytida tasvirlangan kerakli kutubxonalarni o'rnating, so'ng taqdim etilgan Python 3 skriptini ishga tushiring. Agar LED zanjirlaridan biri ishlamasa, u noto'g'ri yo'nalishda ulangan bo'lishi mumkin. Keyin siz pHAT -dagi ortiqcha/minus ulanishlarni o'zgartirishingiz yoki dasturni o'zgartirishingiz mumkin, masalan. "eh.motor.one.backwards ()" ni "… oldinga ()" ga o'zgartiring.

Siz dasturda o'zgartirishingiz mumkin bo'lgan sozlamalarga ega bo'lgan skriptlarni topasiz va ba'zi sozlamalarni potentsiometrlar yordamida o'zgartirishingiz va tugmalar yordamida yorug'lik aylanishini boshlashingiz va to'xtatishingiz mumkin. O'zingizning "nafas olish nuri" sxemasiga mos keladigan skriptlarni sozlash juda qiyin bo'lmasligi kerak.

3 -qadam: Python skriptlari

Explorer HAT/pHAT uchun Pimoroni Python kutubxonasi, HAT -larning kirish -chiqish portlariga biriktirilgan komponentalarni kiritishni juda osonlashtiradi. Ikkita misol: "eh.two.motor.backwards (80)" "PWM/motor port 2 ga ulangan qurilmani 80% maksimal intensivlik bilan orqaga yo'naltiradi," eh.output.three.flash () "LEDni ulangan qiladi. To'rtta tugmachani va potansiyometrni qo'shib, nazoratning yuqori darajasini qo'shib, yorug'likning bir nechta variantini yaratdim. "Nafas olish nuri sobit lin kosin" deb nomlangan Python dasturini topasiz..py "bu erda barcha to'rtta parametr sozlamalari dasturda o'zgartirilishi kerak. Bundan tashqari, "Breathing light var lin cosin.py" deb nomlangan versiya mavjud bo'lib, u erda ikki karartma fazasining uzunligini ikkita potentsiometr yordamida sozlash mumkin va to'rtta potansiyometr va tugmachali tugmalar uchun "Nafas olish nuri var lin cosin3.py" versiyasi.. Dasturlar Python 3 da yozilgan.

Barcha holatlarda velosipedda yurish jarayonini ikkita tugma yordamida chaqirish va to'xtatish mumkin, to'rt tugmachali versiyada siz jarayonni to'xtatishingiz va qayta boshlashingiz mumkin. Bundan tashqari, raqamli chiqish portlariga ma'lum fazalarni ko'rsatadigan to'rtta (rangli) LED ulanishi mumkin. Qurilmaning aylanishi to'rt bosqichdan iborat:

- "nafas olish" fazasi, bu erda yuqori LEDlar xira, pastki LEDlar esa intensivlikni oshiradi

- "nafasingizni ushlab turish" bosqichi, bu erda yuqori LEDlar o'chiriladi va pastki LEDlar maksimal darajada o'rnatiladi

- "ekshalatsiya" bosqichi, bu erda pastki LEDlar pastroq bo'ladi va yuqori LEDlar intensivlikni oshiradi

- "ekshalatsiyadan chiqish" fazasi, bu erda pastki LEDlar o'chadi va yuqori LEDlar maksimal darajada yonadi.

Barcha to'rt bosqichning uzunligi individual raqamli parametr bilan belgilanadi, bu dasturda o'rnatilishi va/yoki potentsiometr yordamida sozlanishi mumkin.

Beshinchi parametr maksimal intensivlikni belgilaydi. Bu sizga LEDlarning maksimal yorqinligini o'rnatishga imkon beradi, agar siz uni tungi yorug'lik sifatida ishlatmoqchi bo'lsangiz qulay bo'lishi mumkin. Bundan tashqari, bu sizga karartma jarayonini yaxshilashga imkon beradi, chunki menda 80 dan 100% gacha intensivlik o'rtasidagi farqni ko'rish qiyin degan taassurot bor.

Men yorqinlikni oshirish/kamaytirish uchun ixtiyoriy (qo'shma) sinus funktsiyasini qo'shgan edim, chunki bu fazalar orasidagi silliqroq aloqani beradi. Boshqa funktsiyalarni sinab ko'ring. Masalan, Siz tanaffuslarni bartaraf qilishingiz va ikkala LED zanjiri uchun ikkita turli xil (murakkab) sinus funktsiyasidan foydalanishingiz, shuningdek chastota va amplitudani potentsiometrlar yordamida sozlashingiz mumkin.

# "Nafas oluvchi" chiroq: ikkita tugma va ikkita potentsiometrli versiya

# Pimoroni Explorer pHAT uchun o't o'chiruvchi misolni o'zgartirish # bu erda: motor/PWM qiymatlarining sinoid ko'payishi/kamayishi # chiziqli funktsiya uchun chiziqli va ovozsiz kosin funktsiyasini o'chirish # "Var" versiyasi analog kirishni o'qiydi, oldindan belgilangan sozlamalarni bekor qiladi # o'qiladi raqamli kirish, "" tugmachalarini ishga tushirish va to'xtatish uchun "" ni ishga tushirish uchun siz Cron -dan foydalanishingiz mumkin: Cron - bu ishlarni rejalashtirish uchun ishlatiladigan Unix dasturi va u skriptni ishga tushirishga imkon beradigan qulay @qayta yuklash funktsiyasiga ega. Qachonki sizning Pi chizilmasin. Terminalni oching va crontab -e ni yozing va crontab -ni tahrirlang. Faylning pastki qismiga o'ting, #-dan boshlanadigan barcha satrlarni bosib o'ting va quyidagi qatorni qo'shing (agar sizning kodingiz /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & crontab-ni yoping va saqlang (agar siz nanodan foydalansangiz, control-x, y tugmalarini bosing va chiqish va saqlash uchun kiriting). "" "import vaqtini import qilish tadqiqotchisi eh import matematik doimiy qiymatlari sifatida #sinus xmax = 316 qadam = 5 # qadam kengligi, masalan. 315/5 63 qadam beradi/tsikl start_button = 0 # bu kirish portiga ulangan tugma holatini belgilaydi 1 stop_button = 0 # bu kirish portiga ulangan tugma holatini belgilaydi 3 pauza_1 = 0,02 # uzunligi "nafas olish" bosqichidagi bosqichlar oralig'idagi tanaffuslar, shu bilan pamping tezligi va davomiyligi pauza_2 = 0,04 # "nafas chiqarish" tezligi pauza_3 = 1,5 # nafas olish va chiqarish bosqichlari orasidagi tanaffus (nafasni ushlab turish) pauza_4 = 1,2 # nafas oxirida tanaffus. faza (nafas chiqaring) max_intens = 0,9 # maksimal intensivlik/yorqinlik max_intens_100 = 100*max_intens # % da bir xil # LEDlarning "nafas oladigan" taassurotini optimallashtirishga va miltillashni kamaytirishga imkon berishi mumkin. l_cosin = kosinusdan olingan qiymatlar bilan # ro'yxat (100> = x> = 0) l_lin = # chiziqli qiymatli ro'yxat (100> = x> = 0) # i oralig'ida kosinus funktsiyalar ro'yxatini tuzish (0, 316), 3): # 315 Pi*100 ga yaqin, 105 qadam # print (i) n_cosin = [((((math.cos (i/100))+1)/2)*100] # hosil qilish qiymati # chop etish (n_cosin) l_cosin = l_cosin + n_cosin # ro'yxatga qiymat qo'shish # chop etish (l_cosin) # i uchun chiziqli ro'yxat yaratish (100, -1, -1): # 100 dan nolgacha n_lin = l_lin = l_lin + n_lin # print (l_lin) # zerikarli ro'yxatni ko'rsatadi print () print ("" "Yorug'lik davrlarini boshlash uchun" Ishga tushirish "tugmachasini (Bir kiritish)" "") chop etish () chop etish ("" "To'xtatish uchun) yorug'lik, "To'xtatish" tugmachasini bosib ushlab turing (Uch kiritish) "" ") print () # Start tugmasi bosilguncha kuting (start_button == 0): start_button = eh.input.one.read () # o'qish tugma birinchi raqamli eh.output.one.blink () # miltillovchi LED raqami bir marta. uxlash (0,5) # soniyada ikki marta o'qish # yonib turganda yonish = eh.an alog.one.read () # qizil-> yashil tezlikni pasayishini belgilaydi pauza_1 = set_1*0.02 # qiymatlari 0 dan 0.13 sekundgacha bosiladi ("set_1:", set_1, " -> pauza _1:", pauza_1) set_2 = eh.analog.two.read () # yashil rangni belgilaydi -> qizil rampa tezligi pauza_2 = set_2*0.02 # qiymatlari 0 dan 0.13 sekundgacha/qadam bosish ("set_2:", set_2, " -> pauza _2: ", pauza_2) #" nafas olish "fazasi eh.output.one.on () # diapazonda x uchun" len (l_lin)) uchun LED yoki signal beruvchi signalni boshqarishi mumkin (len (l_lin)): fx = max_intens*l_lin [x] # chiziqli egri eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'x uchun diapazonda (len (l_cosin)): fx = max_intens*l_cosin [x] # chiziqli egri eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # to'xtatish tugmasi bosilganligini tekshiring stop_button = eh.input.three.read () # "nafasingizni ushlab turing" inhalatsiya bosqichining oxirida pauza qiling eh.output.two.on () # ikkita LEDni yoqing eh.motor.one orqaga (0) eh.motor.two.wardwards (max_intens_100) time.sleep (pause_3) eh.output.two.off () # Stop tugmasi bosilganligini tekshiring stop_button = eh.input.three.read () # "nafas chiqarish" fazasi eh.output.three.on () # x diapazonidagi LED uchun "dyuym" ni yoqing (len (l_lin)): fx = max_intens*l_lin [x] # chiziqli egri eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx)) time.sleep (pause_2) '' 'x uchun diapazonda (len (l_cosin)): fx = max_intens*l_cosin [x] # chiziqli egri eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. orqaga (fx) time.sleep (pause_2) eh.output.three.off () # Stop tugmasi bosilganligini tekshiring stop_button = eh.input.three.read () # "nafas chiqarish" va "nafas olish" bosqichlari o'rtasida pauza 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 Stop tugmasi bosilganligini tekshiring stop_button = eh.input.three.read () # yopilish, barcha chiqish portlarining aylanishi eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () chop etish () chop etish ("Xayr, xayr")

Agar siz yorug'likni mustaqil qurilma sifatida ishlatmoqchi bo'lsangiz, masalan. uyqu yoki uyg'onish nuri sifatida siz Pi-ga mobil quvvat manbasini qo'shishingiz va yuklashdan keyin dasturni ishga tushirishingiz va "Cron" dan foydalanib, uni ma'lum vaqtlarda yoqishingiz yoki o'chirishingiz mumkin. "Cron" dan qanday foydalanish boshqa joylarda batafsil tasvirlangan.

4 -qadam: Video misollar

Bu qadamda siz yorug'likni normal (ya'ni, 0, #1) va o'ta og'ir sharoitlarda ko'rsatadigan bir qancha videolarni topasiz, chunki barcha qiymatlar nolga (#2) o'rnatiladi, faqat rampada (#3 va #4), va rampa yo'q (#5 va #6).

5 -qadam: Ba'zi izohlar

Iltimos, noto'g'ri so'zlar, xatolar va xatolar uchun uzr so'raymiz. Men na ingliz tilini bilaman, na elektr, elektronika yoki dasturlash bo'yicha puxta bilimga ega emasman. Bu shuni anglatadiki, men o'z tilimda to'g'ri atamalarni deyarli bilmaydigan narsalar haqida inglizcha ko'rsatma yozishga harakat qilaman. Shunday qilib, takomillashtirish bo'yicha har qanday maslahatlar, tuzatishlar yoki g'oyalar ma'qul

Tavsiya: