Mundarija:

Oq shovqinli tungi yorug'lik: 11 qadam (rasmlar bilan)
Oq shovqinli tungi yorug'lik: 11 qadam (rasmlar bilan)

Video: Oq shovqinli tungi yorug'lik: 11 qadam (rasmlar bilan)

Video: Oq shovqinli tungi yorug'lik: 11 qadam (rasmlar bilan)
Video: BİR O'ZİNGİZ KO'RİNG / DUNYODAGİ ENG G'ALATİ ER-XOTİNLAR / Buni Bilasizmi? 2024, Noyabr
Anonim
Oq shovqinli tungi yorug'lik
Oq shovqinli tungi yorug'lik
Oq shovqinli tungi yorug'lik
Oq shovqinli tungi yorug'lik

Bu mening 1 yoshli bolam uchun Rojdestvo uchun qilgan loyiham. Rostini aytsam, bu men va xotinim uchun aqlli sovg'a edi. Bu oq shovqin mashinasi, u veb -interfeys orqali tanlangan turli xil tovushlarni o'ynata oladi, shuningdek, vaqtga qarab rangini o'zgartiradigan chiroqlarni o'z ichiga oladi (qizil chiroqlar to'shakda, sariq - bu sizning xonangizda o'ynashingiz mumkin degan ma'noni anglatadi, yashil - bu yaxshi degan ma'noni anglatadi) chiqish uchun). O'g'lim vaqtni aytishga hali juda yosh bo'lgani uchun, rangga asoslangan tungi chiroq haqiqatan ham yaxshi g'oya bo'lib tuyuldi.

Bu juda oson loyiha va men kodni allaqachon yozganim uchun, bu qiyinchilik shkalasi bo'yicha 5dan 1 tasi bo'lishi mumkin. Agar sizda erta tongda sizni bezovta qiladigan kichkintoylaringiz bo'lsa, siz ham shunday qilishni xohlaysiz.

1 -qadam: qismlar ro'yxati

Qismlar ro'yxati
Qismlar ro'yxati
Qismlar ro'yxati
Qismlar ro'yxati
Qismlar ro'yxati
Qismlar ro'yxati

1. Raspberry Pi Zero W

2. Qandaydir ish (men buni Amazondan ishlatganman)

3. Pimoronidan Blinkt

4. Pimoroni -dan Phat spikeri (Bundan tashqari, siz arzon dinamikli boshqa DAC -dan foydalanishingiz mumkin)

Karnay phat-ni yig'ish uchun siz lehimlashning ba'zi asosiy ko'nikmalariga ega bo'lishingiz kerak, mahsulot sahifasidan asta-sekin ko'rsatmalar bilan bog'lanish mavjud, shuning uchun siz uni buzolmaysiz.

5. [Ixtiyoriy] Panelga o'rnatilgan mikro USB kabel - Adafruitdan

6. ba'zi ulash simlari yoki o'tish joylari

Bo'ldi shu!

2 -qadam: Raspbianni yoqing va taxtalarni ulang

Raspbian -ni yoqing va taxtalarni ulang
Raspbian -ni yoqing va taxtalarni ulang

Men bu qurilish uchun Raspian Stretch lite -dan foydalanmoqdaman. Shunday qilib, siz xohlagan asbob bilan microSD -ga yozib oling, keyin pi -ni yoqing. Agar sizga uyingizning Wi -Fi tarmog'iga ulanish va ssh -ni yoqish uchun boshsiz pi olishda yordam kerak bo'lsa, Internetda buni qanday qilishni ko'rsatadigan ko'plab darsliklar bor, lekin siz buni qolganlarida qilganingizga ishonch hosil qilishingiz kerak bo'ladi. ishlamoq.

Http://pinout.xyz -dan foydalanib, siz ikkala taxtani ham yuqoriga ko'tarib, ularning pinoutlarini bu saytda olishingiz mumkin. Blinkt taxtasi faqat 4 ta ulanishni talab qiladi, dinamik Phat esa 9 ta ulanishni talab qiladi.

Ish tugagandan so'ng, fotosuratga o'xshash bo'lishi kerak. Endi biz hamma narsa ishlayotganini tekshirishimiz kerak.

3 -qadam: Kerakli dasturiy ta'minotni o'rnatish

Endi biz ulangan bo'lsak, Blinkt va Speaker Phat platalarini ishga tushirish uchun zarur bo'lgan dasturiy ta'minotni o'rnatishimiz kerak bo'ladi. SSH pi -ga kirsa, siz o'zingizni uy katalogida topasiz. Quyidagilarni kiriting:

burish https://get.pimoroni.com/blinkt | bash

va keyin bu tugallangach, bu:

jingalak -sS https://get.pimoroni.com/speakerphat | bash

Bu ikkala Pimoroni taxtasi uchun kerak bo'lgan hamma narsani o'rnatadi. Agar siz ls buyrug'ini kiritsangiz, Pimoroni katalogini ko'rishingiz kerak. Keling, kod yozamiz va Blinkt taxtasini sinab ko'ramiz.

4 -qadam: Ba'zi kodlarni yozing va uni sinab ko'ring

Mkdir skriptlarini yozib, "skriptlar" deb nomlangan katalog yarating va biz u erda ishlash uchun kerak bo'lgan hamma narsani saqlaymiz. O'zingizni o'sha papkaga kiritish uchun cd skriptlari.

Endi biz xohlagan narsa - tungi vaqt uchun qizil xira chiroqlar, sokin o'yinlar uchun sariq xira chiroqlar va chiqishga to'g'ri kelganda biroz yorqinroq yashil chiroqlar. Men uchun kechki 19:30 dan 6:15 gacha qizil chiroqlar yoqilishini xohlardim, va 6:15 da ular bir soat davomida sariq rangga, keyin esa soat 7:15 da yashil rangga aylanadi. Men, shuningdek, xonada hech kim bo'lmaganida, ularni ertalab soat 8:30 da o'chirishlarini xohlardim.

Buning ikkita usuli bor. Birinchisi (men tanlagan usul) to'rt xil skript bilan, cron ishlaridan ishlaydi. Boshqa yo'l - bu ishga tushirishda ishlaydigan vaqt funktsiyasini o'z ichiga olgan bitta skript. Men aslida skriptni shunday qilish uchun yozganman, lekin bu ishni cronga qaraganda samarasiz bo'lib tuyuldi, shuning uchun men uni o'zgartirdim. Agar siz "bitta skript" usulini xohlasangiz, menga xabar bering va men uni sharhlarda joylashtirishim mumkin.

Shunday qilib, qizil yozuvdan boshlaylik. Touch red.py, keyin nano red.py kiriting. Keyin quyidagi kodni kiriting.

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0))

Yellow.py va green.py uchun ham xuddi shunday qiling.

sariq.py:

#!/usr/bin/env python

blinkt.set_clear_on_exit (noto'g'ri) blinkt.set_brightness (0,2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) #2, 3, 4 va 5 -piksellarni sariq blinkt.show () ga o'rnatadi

green.py:

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (Noto'g'ri) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #barcha piksellarni yashil blinkt.show ()

Va nihoyat, biz kerak bo'lmaganda Blinktni tozalash uchun skriptni xohlaymiz (lightsout.py):

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (To'g'ri) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #barcha piksellarni o'chiradi blinkt.show ()

Bo'ldi shu. Python red.py ni sinab ko'rish va ikkita o'rta piksel qizil rangda yonib turishini ko'rish uchun. Keyin tozalash uchun python lightsout.py yozing. Bo'ldi shu! Keyin biz ularni cron yorlig'iga o'rnatishimiz kerak, shunda ular biz xohlagan vaqtda ishlaydi.

5 -qadam: Ushbu skriptlarni Cron -ga qo'shish

SSH terminalida crontab -e yozing

faylning oxiriga o'ting va quyidagi qatorlarni qo'shing:

15 6 * * * python /home/pi/scripts/yellow.py15 7 * * * python /home/pi/scripts/green.py 30 8 * * * python /home/pi/scripts/lightsout.py 30 19 * * * python /home/pi/scripts/red.py

Bu skriptlarni oldingi bosqichda tasvirlangan vaqtda ishlashini o'rnatadi, davom ettiring va ularni sizning ehtiyojlaringizga moslang.

Bu tungi yorug'lik uchun! Juda oson. Keling, ushbu qurilishning "Oq shovqin" qismini o'rnatishga o'tamiz.

6 -qadam: Phat karnayini sinab ko'rish

Dinamik Phat -ni sinab ko'rishning eng oson usuli - bu sox -ni o'rnatish va buyruq satridan statikni ishga tushirish.

sudo apt-get o'rnatish sox

O'rnatilgandan so'ng, biz bir nechta namunali ijro buyruqlarini sinab ko'rishimiz mumkin. Bu to'lqin kabi eshitilishi kerak.

play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30

Qanday tasalli! Ctrl+c uni to'xtatadi. Lekin, bu nima? Phat karnayining yuzida bir nechta LEDlar yonadi va bizda Blinkt chiroqlariga to'sqinlik qila olmaydi. Keling, ularni o'chirib qo'yaylik.

Buning uchun biz /etc/asound.conf faylini o'zgartirishimiz va VU o'lchagich plaginini olib tashlashimiz kerak, shuning uchun u birinchi navbatda LEDlarni boshqarishga urinmaydi. Men buni shunchaki nomini o'zgartirish orqali qildim. Bu buyruqni kiriting

Sox ishlaydi, va bu juda zo'r, lekin men bu mashinaning oq shovqinli qismi uchun bir nechta ko'chiriladigan MP3larni ishlatishni rejalashtirgandim, shuning uchun menga boshqa o'yinchi kerak edi, yaxshisi engilroq narsa. mpg123 - men bunga qaror qildim. Buni hozir sudo apt-get install mpg123 bilan o'rnating

Xo'sh, endi biz Phat Spikeri kutilganidek ishlashini bilamiz, interfeys va tegishli skriptlarni yaratish vaqti keldi.

7 -qadam: Kichik veb -server va veb -ilovani o'rnatish

Flask - bu Python -da yozilgan mikro veb -ramka. U veb -server uchun zarur bo'lgan barcha funktsiyalarni ta'minlaydi (u ilova vazifasini bajaradi). Uni quyidagi buyruq bilan o'rnating:

pip3 kolbasini o'rnating

Bu biroz vaqt talab etadi, shuning uchun kuting. Bu tugallangandan so'ng, biz veb -sayt ishga tushganda kerak bo'lgan papkalarni yig'ishimiz kerak bo'ladi va bu papkalarning o'ziga xos nomlari bor. Veb -saytni joylashtirish joyidan boshlaylik. Uy katalogidan mkdir www bilan www deb nomlangan yangi katalog yarating. Endi o'sha katalogga www www kiriting. Bu erda bizga yana ikkita katalog kerak, biri statik, ikkinchisi shablon.

Bizga, shuningdek, yuklanadigan MP3 -larni joylashtirish uchun joy kerak. Buning uchun men uy katalogida "tovushlar" deb nomlangan katalog yaratdim. Men MP3 -larimni Google -da oqlanadigan oqlangan MP3 -ni qidirish orqali topdim. Ko'chirish uchun juda ko'p bo'sh joylar. Fayllarni yuklash uchun WinSCP -dan foydalandim.

Siz ularni pastdagi omxplayer buyrug'i bilan sinab ko'rishingiz mumkin --vol -### qismi sizning xonangiz uchun to'g'ri ovoz balandligini terish uchun. Yana Ctrl+C o'yinchini to'xtatadi.

Endi bizda hammasi joyida, pi ishga tushganda veb -serverni turish uchun bir nechta python yozamiz. Www katalogiga qayting va webapp.py (nano webapp.py) deb nomlangan yangi faylni ishga tushiring va quyidagi kodni kiriting.

webbapp.py:

#!/usr/bin/python

idishni import qilishdan Flask, render_template, so'rov, importni qayta yo'naltirish os app = Flask (_ name_) @app.route ('/') def index (): return render_template ('index.html') @app.route ('/rain), usullari = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~/skriptlar/tovushlar/yomg'ir.mp3") qaytishni qayta yo'naltirish ('/') @app.route ('/to'lqinlar', usullar = ['POST']) def to'lqinlar (): os.system ("mpg123 -f 20500 -halqa -1 ~/skriptlar/tovushlar/to'lqinlar.mp3") qaytish yo'naltirilishi ('/') @app.route ('/whitenoise', methods = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") Qayta yo'naltirish (') /') @app.route ('/stop ', methods = [' POST ']) def stop (): os.system ("killall mpg123") qaytishni qayta yo'naltirish ('/') agar _name_ ==' _main_ 'bo'lsa: app.run (disk raskadrovka = To'g'ri, xost = '0.0.0.0')

Ko'rib turganingizdek, bu veb -ilovada 5 ta sahifa bo'ladi, bittasi indeks uchun, 3 ta 3 xil tovush uchun (to'lqin, yomg'ir va oqartirish) va to'xtash uchun yana 1 ta. Barcha 4 indeks bo'lmagan sahifalar omxplayer-ga yuborilgan buyruqni bajargandan so'ng, indeksga ('/') qaytadi, shuning uchun biz faqat bitta index.html yaratishimiz kerak, boshqa hech narsa yo'q. Men killall -ni to'xtatish funktsiyasi sifatida ishlataman, chunki omxplayerga "to'xtatish" buyrug'ini yuborishning yaxshiroq yo'lini topa olmadim. Agar siz buni yaxshiroq yo'lini bilsangiz, men buni eshitishni juda xohlardim!

Endi index.html -ni yig'amiz.

8 -qadam: veb -sayt yaratish

Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish
Veb -sayt yaratish

Bu men yaratishda ishlatgan rasmlar, lekin o'zingizni xohlaganingizcha qiling. Ularning barchasi biz ilgari tuzgan statik papkada saqlanishi kerak. Bu erda qilmoqchi bo'lgan index.html fayli shablonlar papkasida bo'lishi kerak. Bu juda muhim, aks holda ularning hech biri ishlamaydi. Bu mening index.html kodim (yana, bu oddiy html, shuning uchun uni siz uchun mos keladigan tarzda o'zgartiring).

Instructables xom HTML -ni joylashtirishga ruxsat bermagani uchun, bu mening Dropbox -da mavjud bo'lgan faylga havola:

www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…

Ammo, agar o'lsa, HTML fayli shunchaki CSS va 2x2 o'lchamli jadval bo'lib, ularda 4 ta belgi mavjud bo'lib, ularda post qiymatlari bo'lgan tugmalar mavjud:

ariza shakli = "/whitenoise" usuli = "post"

src = "/static/whitenoise.png" input = "Oq shovqin"

O'zingizni qilish juda oson bo'lishi kerak.

Oxirgi qadam - webapp.py ishga tushganda ishlashiga ishonch hosil qilish, yana men buni crontab -ga qo'shib qildim. Shunday qilib, yana crontab -e yozing va oxirigacha quyidagilarni qo'shing:

@qayta yuklash python3 /home/pi/www/webapp.py

Keyin pi -ni qayta ishga tushiring, boshqa mashinadagi (telefoningizda) brauzerni pi -ning IP -manziliga yo'naltiring (agar buni statik qilib qo'ysangiz yaxshi bo'ladi) va u ishlaganligini tekshiring. Tugmalarni bosing va shovqin eshitasizmi.

Android telefonida siz veb -saytni asosiy ekranga belgilashingiz mumkin, bu men uni ilova kabi ko'rinishini olish uchun qildim. Agar siz haqiqatan ham uni "pro" ko'rinishiga keltirmoqchi bo'lsangiz, mos keladigan.ico faylini toping yoki yarating va veb -saytga o'z belgisini bering, u telefoningizning bosh ekranida ko'rinadi va ilovaga o'xshaydi. Veb -saytga ikonka (favikon) qo'shish bo'yicha ko'plab onlayn darsliklar.

9 -qadam: Hammasini alohida holatga jamlang

Hamma narsani alohida holatga jamlang
Hamma narsani alohida holatga jamlang
Hamma narsani alohida holatga jamlang
Hamma narsani alohida holatga jamlang
Hamma narsani alohida holatga jamlang
Hamma narsani alohida holatga jamlang

Endi hamma narsa sinovdan o'tkazildi va ishlayapti, hamma narsani alohida holatga qo'shish vaqti keldi.

Men uy atrofida qolgan plastmassadan foydalanib, Raspberry Pi Zero uchun tayanch qurdim. Keyin men mikro USB panelini o'rnatish uchun bir nechta teshik ochdim va zargarlik buyumlari yordamida teshikdan to'rtburchaklar kesib oldim. Panelni o'rnatish kabeli biroz qattiqroq, shuning uchun kelajakda Pi -dagi mikro USB port uchun to'g'ri burchakli adapter sotib olsam bo'ladi.

Men korpusning tepasida ikkita teshik ochib, ularni Dremel bilan ulash orqali karnay o'ynashi uchun kichik bir teshik ochdim. Keyin dinamik Phat -ni o'rnatish uchun qopqog'idagi teshiklarni burg'ulashdi. Shunisi e'tiborga loyiqki, bu rasmni olganimdan so'ng, men orqamga qaytib, yana bir nechta teshik ochdim, chunki shovqin korpus ichida qolib ketdi. Men "Blinkt" ga plakat yopishtiruvchi buyumlarni o'rnatdim, chunki u erda hech qanday teshik yo'q, lekin macun yaxshi ushlab turgandek ko'rinadi, shunday bo'ladi.

10 -qadam: Bu shunday

Bo'ldi shu!
Bo'ldi shu!

Tarmoqqa ulang va ishingiz tugadi. Mana meniki kechki 8dan keyin ishlaydi. Pi -dagi yashil LED bu fotosurat ko'rinadigan darajada yorqin emas.

Keyinchalik men kiritgan ba'zi tahrirlar:

Webapp.py va index.html fayllariga yana 4 ta sahifa qo'shdim. Bu to'rttasi "qizil", "sariq", "yashil" va "o'chirilgan". O'z -o'zidan tushunarli. Agar men rafiqam bilan charchaganimizda va bezovtalanishni xohlamasak, uni yashil rangdan sariq rangga o'tkazishni xohlardim.

@app.route ('/qizil', usullar = ['POST']) def red (): os.system ("python ~/scripts/red.py") qaytish yo'naltirish ('/')

Asosan, 4 marta, 4 xil skriptni ishga tushirish, so'ngra bu sahifalarni chaqiradigan indeksdagi boshqa tugmalar.

Men aytgan boshqa o'zgarish, lekin men yana bir nechta teshik ochdim va karnay atrofidagi bo'shliqni kengaytirdim, chunki shovqin muhofazadan yaxshi chiqmadi.

Agar men qo'shimcha o'zgartirishlar kiritsam, albatta bu erga qaytib, ularni ro'yxatiga kiritaman.

11 -qadam: Qo'shimcha

Buni qurganimdan so'ng, men rafiqam bilan ikkalamiz tez -tez telefonimizni pastga yotqizib yoki uxlab yotganimizda qoldiramiz. Shunday qilib, men 36 -sonli jismoniy pinga bir lahzali tugmachani qo'shdim va rc.local -da ishga tushirish uchun quyidagi kodni kiritdim (men buni button.py deb nomladim):

#!/usr/bin/env python

GPIO sifatida RPi. GPIO -ni import qilish vaqtini import qilish protsessorini import qilish GPIO.setmode (GPIO. BOARD) # Jismoniy pinni raqamlash sxemasidan foydalanish tugmasi = 36 # Tugma jismoniy pin 16 ga ulangan GPIO.setup (tugma, GPIO. IN, pull_up_down) = GPIO. PUD_UP) # Tugmani kiritish usuliga aylantiring, Rezistorni tortishish holatini rost holatida faollashtiring: agar GPIO.input (tugma) == 0: # tugmani kuting, returnprocess = False # Dastlab ovoz o'chirilgan s = subprocess. Popen (s. --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") boshqa: os.system (" killall mpg123 ") os.sistema ("python /home/pi/scripts/lightsout.py")

Ko'rib turganingizdek, men ham omxplayer -dan mpg123 -ga o'tdim, chunki u ancha yengil va ishlatish oson.

Lekin, negadir men bu skriptni rc.local -ga qo'yganimda, u haqiqatan ham ishga tushganda muammosiz ishlaydi. Ammo ovoz haqiqatan ham notinch. Men skriptni odatdagidek ishlatsam, macunda bunday muammolar bo'lmaydi. Menda bu muammoni hal qilishga vaqt bor, shuning uchun kimda qandaydir fikr bo'lsa, menga ayting! Rahmat.

Tavsiya: