İçindekiler:

Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı: 5 Adım
Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı: 5 Adım

Video: Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı: 5 Adım

Video: Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı: 5 Adım
Video: AKILLI CİHAZLARINIZI TEK YERDEN YÖNETİN | Home Assistant (Hassio) kurulumu 2024, Kasım
Anonim
Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı
Raspberry Pi Tarafından Kontrol Edilen Solunum Işığı

Burada anlatılan "Nefes Egzersiz Işığı", nefes egzersizlerinizde size destek olabilecek ve sabit bir solunum ritmini korumanıza yardımcı olabilecek basit ve nispeten ucuz bir nabız atışı ışığıdır. Ayrıca örneğin kullanılabilir. çocuklar için yatıştırıcı bir gece lambası olarak. Mevcut aşamada daha çok çalışan bir prototip.

Ayrıca, bir Raspberry Pi ile "fiziksel hesaplama" için ucuz ve basit bir örnek oluşturma olarak da kullanabilirsiniz, ör. başlangıç seviyesinde bir eğitim projesi olarak kullanılmak üzere, Burada analog (döner potansiyometre) ve dijital girişler (düğme) ile dijital (LED) ve PWM çıkışı (LED zincirleri) var ve değişikliklerin etkileri doğrudan görülebilir.

Işık, dört aşamadan oluşan tekrarlayan dairelerden geçer: yeşil (üst) ila kırmızı (alt) geçiş, yalnızca kırmızı faz, kırmızıdan yeşile geçiş ve yalnızca yeşil faz. Bu fazların uzunluğu, potansiyometreler tarafından değiştirilebilen sabitlerle tanımlanır. Butonlara basılarak süreç başlatılabilir, durdurulabilir, devam ettirilebilir ve durdurulabilir. LED'ler mevcut fazı gösterir. Pimoroni'nin “Ateş Böceği Işığı” örneğine dayanmaktadır (buraya bakınız). "Ateşböceği Işığı"na benzer şekilde bir Raspberry Pi (Sıfır), Pimoroni Explorer pHAT (veya HAT) ve iki IKEA SÄRDAL LED hafif zincir gerektirir. Daha sonra pHAT'nin iki PMW/motor portuna bağlanır. Bir kavanoz kullanmak yerine LED'leri bir IKEA resim çerçevesine yerleştirdim. Orijinal “ateş böceği ışığı” python betiğini biraz optimize etmeye çalışıyorum, parlaklık/darbe genişliği değişiklikleri için isteğe bağlı bir sinüs işlevi uyguluyorum ve karartma aşamaları arasına iki “tutma” aşaması ekledim. Daha rahat hissettiren bir ışık düzeni bulmak için parametreleri değiştirirken, cihazın çok net bir şekilde tanımlanmış, düzenli bir solunum düzenini desteklemeye yardımcı olabileceğini gördüm. Bu nedenle, bazılarınız bu “Nefes Işığını” meditasyon veya eğitim amaçları için faydalı bulabilir. Explorer pHAT'ın dört dijital ve dört analog girişi olduğundan, sürgülü veya döner potansiyometre kullanarak dört farklı parametreyi düzenlemek ve basmalı düğmeler kullanarak ışıklar için başlatma/yeniden başlatma/durdurma işlevlerini tanıtmak çok kolaydır. Bu, Pi'ye bir monitör takılması gerekmeden cihazı kullanmanıza ve parametreleri ihtiyaçlarınıza göre optimize etmenize olanak tanır.

Ek olarak Explorer pHAT, LED'lerin veya sesli uyarıların eklenmesine izin veren dört dijital çıkış bağlantı noktası, ayrıca iki 5V ve iki Toprak bağlantı noktası ve motorlar veya benzer cihazlar için iki PWM çıkış bağlantı noktası ile birlikte gelir. Lütfen LED'lerinizin voltajını azaltmak için doğru dirençleri kullandığınızdan emin olun.

Pimoroni'nin Explorer pHAT python kitaplığı, tüm bu I/O portlarını kontrol etmeyi son derece basit hale getirir.

0, 2 ve 4 potansiyometre ve butonlu cihazın bu eğitilebilir versiyonlarında anlatılmaktadır. İhtiyaçlarınıza uygun olanı seçin.

Cihazı bağımsız olarak çalıştırmak için, bir güç paketi veya "Ateşböceği Işığı" için açıklandığı gibi bir Pimoroni LiPo şim ve bir LiPo pil kombinasyonu kullanılabilir.

Güncellenmiş sürümler 28 Aralık 2018: 'dört potansiyometre ve dört buton' sürümü eklendi. Aralık. 30: 4-poti versiyonu için kod ve fritzing görselleri eklendi.

Adım 1: Kullanılan / Gerekli Malzemeler

Kullanılan / Gerekli Malzemeler
Kullanılan / Gerekli Malzemeler
Kullanılan / Gerekli Malzemeler
Kullanılan / Gerekli Malzemeler
Kullanılan / Gerekli Malzemeler
Kullanılan / Gerekli Malzemeler

- Raspberry Pi Zero (Pimoroni, İngiltere'de 4.80 GBP) ve Raspian ile bir mikro SD kart (>= 8 GB)

- Pimoroni Explorer pHAT (Pimoroni, İngiltere'de 10 GBP). İsteğe bağlı: tek sıra başlık, atlama kabloları

- IKEA SÄRDAL LED zincir lambaları, 12 LED'li (2 x, her biri IKEA Almanya'da 3,99 €) veya benzeri herhangi bir 3-5V LED zincir.- IKEA RIBBA resim çerçevesi (13 x 18 cm, IKEA Almanya'da 2,49 €).

- LED'leri tutmak için bir parça PU köpük (2 x 18 x 13,5 cm). Alternatif olarak strafor köpük kullanılabilir.

- Bir parça opak plastik (18 x 13,5 cm), difüzör görevi görür.

- İki yaprak renkli şeffaf kağıt (her biri 9 x 13,5 cm). Ben kırmızı ve yeşil kullandım.

- Dış ekran görevi gören bir parça ince, son derece opak plastik levha (18 x 13,5 cm). İnce bir beyaz polikarbonat levha kullandım. Ayarlanabilir sürüm için isteğe bağlı:

Rampa zamanlamasını ve plato süresini veya alternatif olarak parlaklık gibi diğer parametreleri ayarlamak için. - 10, 20 veya 50 kOhm potansiyometre (dörde kadar, iki adet 10 kOhm sırasıyla dört 50 Ohm kullandım).

Başlat/durdur/duraklat/devam düğmeleri olarak: - Basma düğmeleri (dörde kadar, dört veya iki tane kullandım)

Çemberin evreleri için gösterge olarak: - Renkli LED'ler ve gerekli dirençler (kullanacağınız LED'lerin özelliklerine bağlı olacaktır).

  1. 5,2 için yaklaşık 140 Ohm -> 2, 2 V (sarı, turuncu, kırmızı; bazı yeşil LED'ler),
  2. 5,3 -> 3,3 V için yaklaşık 100 Ohm (bazı yeşil; mavi, beyaz LED'ler)

- Jumper kabloları ve bir breadboard

Pille çalışan bir sürüm için isteğe bağlı:

  • 5V Mikro USB güç paketi veya
  • Pimoroni Zero LiPo şim ve bir LiPo pil

Adım 2: Lazout ve Montaj

Lazout ve Montaj
Lazout ve Montaj
Lazout ve Montaj
Lazout ve Montaj
Lazout ve Montaj
Lazout ve Montaj

Üretici tarafından tarif edildiği gibi Explorer pHAT'ı monte edin. Bağlantı kablolarının pHAT'lerin G/Ç bağlantı noktalarına basitleştirilmiş bağlantısı için tek sıra dişi başlık ekledim. Pi'nizi ayarlayın ve Pimoroni tarafından açıklandığı gibi Explorer HAT/pHAT için Pimoroni kitaplığını kurun. Pi'yi kapatın ve pHAT'ı Pi'ye takın. Kabloları keserek ve kabloların ucunu kalaylayarak pil takımlarını LED zincirlerinden çıkarın. Ortadan iki adet 2x erkek jumper kablosunu kesin, tellerin ucunu kalaylayın. Bağlantı kablolarını LED zincirlerine lehimleyin ve yapışkan bant veya daralan makaron kullanarak lehim noktalarını yalıtın. Lehimlemeden önce, hangi kabloların artı veya toprak bağlantı noktalarına bağlanması gerektiğini kontrol edin ve buna göre işaretleyin. Farklı renklerde jumper kabloları kullandım. LED'leri, difüzörü ve ekran levhalarını uygun boyutta tutmak için köpüğü kesin. LED tutma plakası üzerinde LED'lerin yerleştirileceği yerleri işaretleyin ve köpüğe 3-5 mm delikler açın. Ardından 24 LED'i verilen konumlara yerleştirin. Renkli kağıtları ve difüzör plakalarını LED plakasına yerleştirin (resimlere bakın), çerçeveyi paketin üzerine yerleştirin. Köpük katmanlarını çerçeveye sabitleyin, örn. yapışkan bant kullanarak. LED şerit kablolarını Explorer pHAT'ın "motor" bağlantı noktalarına takın. Ayarlanabilir versiyon için potansiyometreleri, basmalı butonları, kontrol LED'lerini (ve/veya buzzerleri) ve dirençleri devre tahtasına yerleştirin ve bunları Explorer pHAT'taki ilgili portlara bağlayın.

Pi'nizi başlatın ve gerekli kitaplıkları Pimoroni web sitesinde açıklandığı gibi kurun, ardından sağlanan Python 3 komut dosyasını çalıştırın. LED zincirlerinden biri çalışmıyorsa yanlış yönde bağlanmış olabilir. Ardından pHAT üzerindeki artı/eksi bağlantılarını değiştirebilir veya programda bir değişiklik yapabilirsiniz, örn. “eh.motor.one.backwards()” öğesini “… forwards()” olarak değiştirin.

Ekte, program içinde değiştirebileceğiniz sabit ayarlara sahip komut dosyaları ve potansiyometre ile bazı ayarları değiştirebileceğiniz ve butonları kullanarak ışık döngüsünü başlatıp durdurabileceğiniz bir örnek bulabilirsiniz. Senaryoları kendi “nefes ışığı” düzeninize göre ayarlamak çok zor olmamalı.

3. Adım: Python Komut Dosyaları

Pimoroni'nin Explorer HAT/pHAT için Python kitaplığı, HAT'lerin G/Ç bağlantı noktalarına bağlı bileşenlerin adreslenmesini son derece basit hale getirir. İki örnek: "eh.two.motor.backwards(80)", PWM/motor portu 2'ye bağlı cihazı %80 maksimum yoğunlukla geriye doğru çalıştırır, "eh.output.3,000.flash()" bir LED'i bağlı hale getirir durana kadar üç numaralı bağlantı noktasının çıkışını vermek için. Işığın birkaç varyasyonunu oluşturdum, temel olarak dört adede kadar basma düğmesi ve potansiyometre ekleyerek artan kontrol seviyeleri ekledim. Ekte, "Solunum ışığı sabit lin cosin" adlı bir Python programı bulabilirsiniz..py" burada dört parametre ayarının tümünün program içinde değiştirilmesi gerekir. Ek olarak, iki karartma aşamasının uzunluğunun iki potansiyometre kullanılarak ayarlanabildiği "Solunum ışığı var lin cosin.py" adlı bir sürüm ve dört potansiyometre ve düğme sürümü için en ayrıntılı "Solunum ışığı var lin cosin3.py" sürümü. Programlar Python 3 ile yazılmıştır.

Her durumda, döngü süreci iki buton kullanılarak başlatılabilir ve durdurulabilir, dört düğmeli versiyonda ayrıca süreci durdurabilir ve yeniden başlatabilirsiniz. Ayrıca dijital çıkış portlarına belirli fazları gösteren dört (renkli) LED bağlanabilir. Cihazın bir döngüsü dört aşamadan oluşur:

- üst LED'lerin düşük kısıldığı ve alt LED'lerin yoğunluğu artırdığı "nefes alma" aşaması

- üst LED'lerin kapatıldığı ve alt LED'lerin maksimuma ayarlandığı "nefesini tut" aşaması

- alt LED'lerin kısıldığı ve üst LED'lerin yoğunluğu artırdığı "nefes verme" aşaması

- alt LED'lerin kapatıldığı ve üst LED'lerin maksimum yandığı "nefes verme" aşaması.

Dört fazın tümünün uzunluğu, programda sabitlenebilen ve/veya bir potansiyometre kullanılarak ayarlanabilen ayrı bir sayısal parametre ile tanımlanır.

Beşinci bir parametre maksimum yoğunluğu tanımlar. Gece lambası olarak kullanmak istiyorsanız kullanışlı olabilecek LED'lerin maksimum parlaklığını ayarlamanıza olanak tanır. Ayrıca, %80 ile %100 yoğunluk arasında bir fark görmenin zor olduğu izlenimini edindiğim için, karartma sürecini iyileştirmenize de olanak sağlayabilir.

Fazlar arasında daha yumuşak bir bağlantı sağladığı için parlaklığın artması/azalması için isteğe bağlı (ko-)sinüs işlevi ekliyordum. Diğer işlevleri denemekten çekinmeyin. Örneğin. kırılmaları ortadan kaldırabilir ve her iki LED zinciri için iki farklı (karmaşık) sinüs fonksiyonu kullanabilir ve potansiyometre ile frekans ve genliği ayarlayabilirsiniz.

# "Nefes" lambası: iki düğme ve iki potansiyometre versiyonu

# Pimoroni Explorer pHAT için ateşböceği örneğinin bir modifikasyonu # burada: motor/PWM değerlerinin sinoid artışı/azalması # lineer fonksiyon için lineer ve mute kosin fonksiyonu # Bu "var" versiyonu analog girişleri okur, önceden tanımlanmış ayarları geçersiz kılar # okur dijital giriş, başlatmak ve durdurmak için düğmeler """ Pi'yi açtıktan sonra başlatmak için Cron'u kullanabilirsiniz: Cron, işleri programlamak için kullanılan bir Unix programıdır ve bir komut dosyasını çalıştırmanıza izin veren kullanışlı bir @reboot işlevine sahiptir. Pi'niz her önyükleme yaptığında. Bir terminal açın ve crontab'ınızı düzenlemek için crontab -e yazın. Dosyanın sonuna kadar kaydırın, # ile başlayan tüm satırları geçin ve aşağıdaki satırı ekleyin (kodunuzun /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Kapatın ve crontab'ınızı kaydedin (nano kullanıyorsanız, çıkmak ve kaydetmek için control-x, y tuşlarına basın ve enter'a basın). """ içe aktarma zamanı içe aktarma explorerhat as matematik sabit değerlerini içe aktarma #sinus xmax = 316 adım = 5 # adım genişliği, örn. 315/5 63 adım/döngü verir start_button = 0 # bu, 1 numaralı giriş bağlantı noktasına bağlı bir basmalı düğmenin durumunu tanımlar stop_button = 0 # bu, 3 numaralı giriş bağlantı noktasına bağlı bir düğmenin durumunu tanımlar duraklama_1 = 0,02 # uzunlukları ayarlar "nefes alma" aşamasındaki adımlardaki molaların sayısı, dolayısıyla rampa hızı ve süresi duraklama_2 = 0,04 # "nefes verme" rampa hızını ayarlar duraklama_3 = 1,5 # nefes alma ve nefes verme aşamaları arasında mola (nefes almaya devam et) duraklama_4 = 1,2 # nefes vermenin sonunda mola faz (nefes vermeye devam et) max_intens = 0,9 # maksimum yoğunluk/parlaklık max_intens_100= 100*max_intens # %'de aynı # LED'lerin "nefes alma" izlenimini optimize etmeye ve titremeyi azaltmaya izin verebilir. l_cosin= # kosinüs türetilmiş değerleri içeren liste (100 >= x >=0) l_lin= # doğrusal değerlere sahip liste (100 >= x >=0) # aralıktaki i için kosinüs fonksiyon listesi üret (0, 316), 3): # 315 Pi*100'e yakındır, 105 adım # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generate value # print (n_cosin) l_cosin = l_cosin + n_cosin #listeye değer ekle # print (l_cosin) # (100, -1, -1) aralığında i için doğrusal liste oluştur: # 100'den sıfıra geri sayım n_lin= l_lin=l_lin + n_lin # print (l_lin) # sıkıcı bir liste gösterir print () print ("""Işık döngülerini başlatmak için "Başlat" Düğmesine (Birinci Giriş) basın""") print () print ("""Durdurmak için ışığı, "Dur" Düğmesine basın ve basılı tutun (Üçüncü Giriş)""") print () # Başlat Düğmesine basılana kadar bekleyin (start_button==0): start_button=eh.input.one.read() # read bir numaralı düğme eh.output.one.blink() # bir kez yanıp sönen LED sayısı.sleep(0.5) # saniyede iki kez oku #run ışıkları while (stop_button==0): # BİR ve İKİ analog girişleri oku, ayarları tanımla set_1 =eh.an alog.one.read() # tanımlar kırmızı-> yeşil rampa hızı duraklama_1=set_1*0.02 # değerler 0 ile 0.13 saniye/adım yazdırma arasında değişecektir ("set_1:", set_1, " -> duraklat _1:", duraklat_1) set_2=eh.analog.two.read() # yeşili tanımlar -> kırmızı rampa hızı duraklama_2=set_2*0.02 # değerler 0 ile 0.13 sn/adım yazdır ("set_2:", set_2, " -> duraklama _2: ", duraklama_2) # "inhalasyon" aşaması eh.output.one.on() # x aralığında (len(l_lin)): fx=max_intens*l_lin [x] # lineer eğri eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() ''' aralıktaki x için (len(l_cosin)): fx=max_intens*l_cosin [x] # lineer eğri eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() # Durdur Düğmesine basılıp basılmadığını kontrol edin stop_button=eh.input.3.read() # "Nefesinizi koruyun" inhalasyon aşamasının sonunda duraklayın eh.output.two.on() # LED'i açın iki eh.motor.one.backwards(0) eh.motor.two.backwards(max_intens_100) time.sleep(pause_3) eh.output.two.off() #Durdur Düğmesine basılıp basılmadığını kontrol edin stop_button=eh.input.3,000.read() # "nefes verme" aşaması eh.output.3.on() # aralıktaki x için üç ''' LED'ini açın (len(l_lin)): fx=max_intens*l_lin [x] # lineer eğri eh.motor.one.backwards(max_intens_100-fx) eh.motor.two.backwards(fx)) x aralığında (len(l_cosin) için) time.sleep(pause_2) ''': fx=max_intens*l_cosin [x] # lineer eğri eh.motor.one.backwards(max_intens_100-fx) eh.motor.two. backs(fx) time.sleep(pause_2) eh.output.3,000.off() #Durdur Düğmesine basılıp basılmadığını kontrol edin stop_button=eh.input.3,000.read() # "nefes verme" ve "nefes alma" aşamaları arasında duraklama eh. output.four.on() eh.motor.one.backwards(max_intens_100) eh.motor.two.backwards(0) time.sleep(pause_4) eh.output.four.off() #Durdur Düğmesine basılıp basılmadığını kontrol edin stop_button =eh.input.3.read() # kapatma, tüm çıkış portlarının kapatılması eh.motor.one.stop() eh.motor.two.stop() eh.output.one.off() eh.output.two.off() eh.output.3.off() eh.output.four.off() yazdır () yazdır ("Güle güle")

Işığı bağımsız bir cihaz olarak kullanmak istiyorsanız, örn. uyku veya uyandırma ışığı olarak, Pi'ye bir mobil güç kaynağı ekleyebilir ve programı başlattıktan sonra başlatabilir ve belirli zamanlarda açıp kapatmak için "Cron" kullanabilirsiniz. "Cron" nasıl kullanılır, başka yerlerde çok ayrıntılı olarak açıklanmıştır.

4. Adım: Video Örnekleri

Bu adımda, normal (yani tüm değerler > 0, #1) ve aşırı koşullar altında, tüm değerler sıfıra (#2), yalnızca rampa (#3 ) olarak ayarlandığından, ışığı gösteren bir dizi video bulacaksınız. ve rampa yok (#5 ).;

Adım 5: Bazı Açıklamalar

Lütfen yanlış terimler, yazım hataları ve hatalar için özür dileriz. Ne anadili İngilizceyim ne de elektrik, elektronik veya programlama konularında ayrıntılı bilgim yok. Bu aslında kendi dilimde doğru terimleri pek bilmediğim şeyler hakkında İngilizce öğretilebilir bir şeyler yazmaya çalıştığım anlamına geliyor. Bu nedenle, iyileştirme için herhangi bir ipucu, düzeltme veya fikir memnuniyetle karşılanmaktadır. H

Önerilen: