Мазмұны:

Ақ шуыл түнгі жарық: 11 қадам (суреттермен)
Ақ шуыл түнгі жарық: 11 қадам (суреттермен)

Бейне: Ақ шуыл түнгі жарық: 11 қадам (суреттермен)

Бейне: Ақ шуыл түнгі жарық: 11 қадам (суреттермен)
Бейне: Басқа тышты деген осы 😡 2024, Шілде
Anonim
Ақ шуыл түнгі жарық
Ақ шуыл түнгі жарық
Ақ шуыл түнгі жарық
Ақ шуыл түнгі жарық

Бұл менің 1 жасар балама Рождество мерекесіне арнап жасаған жоба. Шынымды айтсам, бұл мен үшін және әйелім үшін ақылға сый болды. Бұл веб -интерфейс арқылы таңдалған бірнеше түрлі дыбыстарды ойнай алатын, сонымен қатар уақытына байланысты түсі өзгеретін шамдарды қосатын ақ шуыл машинасы (қызыл шамдар төсекте болуды білдіреді, сары - сіздің бөлмеңізде ойнай аласыз, ал жасыл - бұл жақсы) шығу үшін). Менің балам уақытты айтуға тым кішкентай болғандықтан, түске негізделген түнгі жарық шынымен жақсы идея болып көрінді.

Бұл өте оңай жоба, мен кодты жазғандықтан, бұл қиындық шкаласы бойынша 5 -тен 1 болуы мүмкін. Егер сізде балаларды таңертең ерте мазалайтын балалар болса, сіз оны жасағыңыз келеді.

1 -қадам: бөлшектер тізімі

Бөлшектер тізімі
Бөлшектер тізімі
Бөлшектер тізімі
Бөлшектер тізімі
Бөлшектер тізімі
Бөлшектер тізімі

1. Raspberry Pi Zero W

2. Қандай да бір іс (мен мұны Amazon -дан қолдандым)

3. Пиморониден Блинкт

4. Pimoroni -ден Phat динамигі (Сіз сондай -ақ арзан динамиктермен басқа DAC -ты қолдана аласыз)

Динамикті біріктіру үшін сізге дәнекерлеудің кейбір қарапайым дағдылары қажет болады, өнім бетінде қадамдық нұсқаулық бар, сондықтан оны бұрап алмайсыз.

5. [ҚОСЫМША] Панельдік микро USB кабелі - Adafruit компаниясынан

6. кейбір байланыстырушы сымдар немесе секіргіштер

Міне бітті!

2 -қадам: Raspbian -ды күйдіріп, тақталарды қосыңыз

Raspbian -ды күйдіріп, тақталарды іліңіз
Raspbian -ды күйдіріп, тақталарды іліңіз

Мен бұл құрастыру үшін Raspian Stretch lite қолданамын. Сондықтан оны кез келген құралмен microSD -ге жазыңыз, содан кейін пиді отқа салыңыз. Егер сізге үйдің Wi -Fi желісіне қосылуға және ssh қосуға басы жоқ пи алуға көмек қажет болса, Интернетте мұны қалай жасауға болатынын көрсететін көптеген оқулықтар бар, бірақ сіз мұны қалған уақыт ішінде орындағаныңызға көз жеткізуіңіз керек. жұмыс істеу.

Http://pinout.xyz көмегімен сіз екі тақтаны да тартып, олардың тораптарын осы сайттан ала аласыз. Blinkt тақталары тек 4 қосылымды қажет етеді, ал динамик Phat 9 қажет.

Аяқтағаннан кейін фотосуретке ұқсас болуы керек. Енді біз бәрі жұмыс істейтінін тексеруіміз керек.

3 -қадам: Қажетті бағдарламалық қамтамасыз етуді орнату

Біз қосылғаннан кейін Blinkt және Speaker Phat тақталарын іске қосу үшін қажетті бағдарламалық жасақтаманы орнатуымыз қажет. SSH -ге кіріңіз, сонда сіз үй каталогында боласыз. Мынаны енгізіңіз:

бұйра https://get.pimoroni.com/blinkt | bash

содан кейін бұл аяқталғаннан кейін:

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

Бұл Pimoroni тақталарына қажет нәрсенің бәрін орнатады. Егер сіз ls командасын енгізсеңіз, сіз Pimoroni каталогын көресіз. Енді код жазып, Блинкт тақтасын тексерейік.

4 -қадам: Кейбір кодты жазу және оны тексеру

Mkdir сценарийлерін теру арқылы «сценарийлер» деп аталатын каталог жасаңыз, сонда біз іске қосу үшін қажет нәрсенің бәрін сақтаймыз. Бұл қалтаға кіру үшін CD сценарийлері.

Бізге қажет нәрсе - түнгі уақытта қызыл күңгірт шамдар, тыныш ойнауға арналған сары күңгірт шамдар және сыртқа шыққанда сәл ашық жасыл шамдар. Мен үшін кешкі 19: 30 -дан таңғы 6: 15 -ге дейін қызыл шамдар қажет болды, ал таңғы 6: 15 -те олар бір сағат бойы сарыға, сосын 7: 15 -те жасылға айналады. Мен олардың таңертеңгі сағат 8.30 -да бөлмеде ешкім болмайтын кезде сөндірілуін қаладым.

Мұны істеудің екі әдісі бар. Біріншісі (мен таңдаған әдіс) - cron тапсырмаларынан тұратын төрт түрлі сценарий. Мұны істеудің екінші әдісі - іске қосылған кезде орындалатын уақыт функциясын қамтитын бір сценарий. Мен сценарийді алдымен осылай жасау үшін жаздым, бірақ бұл оны cron -ға қарағанда тиімді емес сияқты көрінді, сондықтан мен оны ауыстырдым. Егер сіз «бір сценарий» әдісін алғыңыз келсе, маған хабарлаңыз, мен оны түсініктемелерде жаза аламын.

Сонымен, қызыл жазудан бастайық. Touch red.py, содан кейін nano red.py теріңіз. Содан кейін келесі кодты енгізіңіз.

#!/usr/bin/env python

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 және green.py үшін де солай жасаңыз.

yellow.py:

#!/usr/bin/env python

blinkt blinkt.set_clear_on_exit (жалған) blinkt.set_brightness (0,2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (4, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) #2, 3, 4 және 5 пикселдерін сарыға blinkt.show () мәніне қояды

green.py:

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (Жалған) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #барлық пикселдерді жасыл blinkt.show () етіп орнатады

Ақыр соңында, біз қажет болмаған кезде Блинкті тазартатын сценарийді қалаймыз (lightsout.py):

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #барлық пикселдерді blinkt.show () өшіруге орнатады

Міне бітті. Python red.py теріп, екі орта пиксель қызыл түспен жанатынын тексеріңіз. Содан кейін оны тазарту үшін python lightsout.py теріңіз. Міне бітті! Содан кейін біз оларды cron қойындысына орнатуымыз керек, олар біз қалаған уақытта жұмыс істейді.

5 -қадам: Бұл сценарийлерді Cron -ге қосу

SSH терминалында crontab -e типті

файлдың соңына жылжып, келесі жолдарды қосыңыз:

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

Бұл сценарийлерді алдыңғы қадамда сипатталған уақытта іске қосады, әрі қарай жалғастырыңыз және оларды сіздің қажеттіліктеріңізге сәйкес реттеңіз.

Бұл түнгі жарық үшін! Супер жеңіл. Енді осы құрылыстың ақ шу бөлігін орнатуға көшейік.

6 -қадам: Phat динамигін тексеру

Динамик Phat -ті тексерудің ең оңай жолы - sox орнату және пәрмен жолынан статиканы іске қосу.

sudo apt-get sox орнатыңыз

Орнатылғаннан кейін біз бірнеше ойнату үлгісін қолдана аламыз. Бұл толқын сияқты естілуі керек.

play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 трапеция амод 0.1 30

Қандай тыныштандырады! Ctrl+c оны тоқтатады. Бірақ, бұл не? Динамик Phat динамигінің алдында көптеген жарық диодтары бар, және біз олардың Blinkt шамдарына кедергі келтіре алмаймыз. Сондықтан оларды өшіруге рұқсат етіңіз.

Мұны істеу үшін бізге /etc/asound.conf файлын өзгерту керек және VU метр плагинін алып тастау керек, сондықтан ол бірінші кезекте жарық диодты жүргізуге тырыспайды. Мен мұны жай атауын өзгерту арқылы жасадым. Бұл пәрменді теріңіз mv /etc/asound.conf /etc/asound.conf.bak Мен мұны Google -дің біраз бөлігі арқылы таптым, сондықтан жақсы әдіс болуы мүмкін.

Sox жұмыс істейді, және бұл керемет, бірақ мен осы машинаның ақ шуыл бөлігі үшін бірнеше айналмалы MP3-ді қолдануды жоспарладым, сондықтан маған басқа ойнатқыш қажет болды, жақсырақ жеңіл нәрсе. mpg123 - мен шешкен нәрсе. Енді оны sudo apt-get install mpg123 көмегімен орнатыңыз

Жарайды, енді біз Phat Speaker спикері күтілгендей жұмыс істейтінін білеміз, интерфейсті және сәйкес сценарийлерді құруға уақыт келді.

7 -қадам: Шағын веб -сервер мен веб -қосымшаны орнату

Flask - бұл Python тілінде жазылған шағын веб -құрылым. Ол веб -серверге қажет барлық функцияларды қамтамасыз етеді (ол қосымша ретінде әрекет етеді). Оны келесі пәрменмен орнатыңыз:

pip3 колбасын орнатыңыз

Бұл біраз уақытты алады, сондықтан күтіңіз. Аяқтағаннан кейін, біз веб -сайт жұмыс істеген кезде қажет қалталарды жинауымыз керек және бұл қалталардың нақты атаулары бар. Веб -сайтты орналастыратын жерден бастайық. Үй каталогынан mkdir www көмегімен www деп аталатын жаңа каталог жасаңыз. Енді осы каталогқа www cd енгізіңіз. Мұнда бізге тағы екі каталог қажет, олардың бірі статикалық, екіншісі шаблон деп аталады.

Бізге сондай -ақ айналмалы MP3 файлдарын орналастыратын орын қажет. Мен бұл үшін үй каталогында «дыбыстар» деп аталатын каталог жасадым. Мен MP3 -ді Google -ден ақталатын ақшыл MP3 -ті іздеп таптым. Бос орындар көп. Мен файлдарды жүктеу үшін WinSCP қолдандым.

Сіз оларды төмендегі omxplayer командасымен --vol -### бөлігімен ойнап, сіздің бөлмеңізге қажетті дыбыс деңгейін теру үшін тексергіңіз келуі мүмкін. Тағы да Ctrl+C ойнатқышты тоқтатады.

Енді бізде бәрі бар, pi іске қосылған кезде веб -серверді тұрғызу үшін кейбір питон жазуға рұқсат етіңіз. Www каталогына оралыңыз және webapp.py (nano webapp.py) деп аталатын жаңа файлды іске қосыңыз және келесі кодты енгізіңіз.

webbapp.py:

#!/usr/bin/python

колбадан импорттаудан Flask, render_template, сұрау, импорттауды қайта жіберу os app = Flask (_ name_) @app.route ('/') def index (): render_template ('index.html') @app.route ('/rain') қайтару, әдістер = ['POST']) def rain (): os.system («mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3») қайтару бағыттау ('/') @app.route ('/толқындар', әдістер = ['POST']) def толқындары (): os.system («mpg123 -f 20500 --loop -1 ~/сценарийлер/дыбыстар/толқындар.mp3») қайтару бағыттау ('/') @app.route ('/whitenoise', әдістері = ['POST']) def whitenoise (): os.system («mpg123 --loop -1 ~/сценарийлер/дыбыстар/whitenoise.mp3») қайта бағыттауды қайтару (') /') @app.route ('/stop ', methods = [' POST ']) def stop (): os.system («killall mpg123»), егер _name_ ==' _main_ 'болса, қайта бағыттауды қайтарады ('/'): app.run (debug = True, host = '0.0.0.0')

Көріп отырғаныңыздай, бұл веб -қосымшаның 5 беті болады, олардың біреуі индексте, 3 -інде 3 түрлі дыбыс үшін (толқын, жаңбыр және ақшылдау) 3 және тоқтату үшін тағы 1 бетте болады. Барлық 4 индексті емес беттер omxplayer-ге жіберілген пәрменді орындағаннан кейін индекске ('/') қайта бағытталады, сондықтан бізге тек index.html жасау керек, басқа ештеңе жоқ. Мен killall -ды мұнда тоқтату функциясы ретінде қолданамын, себебі omxplayer -ге «тоқтату» пәрменін жіберудің жақсы әдісін таба алмадым. Егер сіз мұны істеудің жақсы әдісін білсеңіз, мен оны тыңдағым келеді!

Енді index.html біріктірейік.

8 -қадам: веб -сайт құру

Веб -сайт құру
Веб -сайт құру
Веб -сайт құру
Веб -сайт құру
Веб -сайт құру
Веб -сайт құру
Веб -сайт құру
Веб -сайт құру

Бұл мен құрастыру үшін қолданған суреттер, бірақ өз бетіңізше жасаңыз. Олардың бәрін біз бұрын жасаған статикалық қалтада сақтау керек. Біз жасайтын index.html файлы шаблондар қалтасында болуы керек. Бұл өте маңызды, әйтпесе олардың ешқайсысы жұмыс істемейді. Міне, менің index.html коды (тағы да бұл қарапайым html, сондықтан оны сіз үшін жұмыс істейтін жолмен өзгертіңіз).

Instructables шикі HTML -ді жіберуге рұқсат бермейтіндіктен, бұл менің Dropbox -та бар файлға сілтеме:

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

Бірақ егер ол қайтыс болса, HTML файлы - бұл қарапайым CSS және 2x2 кестесі, сол 4 белгішесі бар, келесідей мәндері бар түймелер:

әрекет формасы = «/whitenoise» әдісі = «пост»

src = «/static/whitenoise.png» енгізу = «Ақ шу»

Өзіңізді жасау өте оңай болуы керек.

Соңғы қадам - webapp.py іске қосылған кезде жұмыс істейтініне көз жеткізу, мен мұны crontab -қа қосу арқылы жасадым. Сонымен, тағы бір рет crontab -e теріп, соңына келесіні қосыңыз:

@reboot python3 /home/pi/www/webapp.py

Содан кейін pi -ді қайта жүктеңіз, басқа компьютердегі (телефоныңыздағы) шолғышты pi -дің IP -ге көрсетіңіз (егер сіз оны статикалық ете алсаңыз жақсы) және оның жұмыс істегенін тексеріңіз. Түймешіктерді шертіп, шу естілетінін көріңіз.

Android телефонында веб -сайтты негізгі экранға бетбелгі қоюға болады, бұл мен оны қолданбаға ұқсас етіп жасау үшін жасадым. Егер сіз оны «кәсіби» етіп көрсеткіңіз келсе, сәйкес келетін.ico файлын табыңыз немесе жасаңыз және веб -сайтқа телефоныңыздың негізгі экранында пайда болатын және қосымшаға ұқсайтын өзіндік белгісін беріңіз. Веб -сайтқа белгішені (фавикон) қалай қосуға болатыны туралы көптеген онлайн оқулықтар.

9 -қадам: Барлығын бір істе жинаңыз

Бәрін бір істе кептелту
Бәрін бір істе кептелту
Бәрін бір істе кептелту
Бәрін бір істе кептелту
Бәрін бір істе кептелту
Бәрін бір істе кептелту

Енді бәрі тексерілген және жұмыс істеп жатқан кезде, бәрін істе жинайтын уақыт келді.

Мен үйдің айналасында қалған пластмассадан Raspberry Pi Zero -ға арналған тіреуіш жасадым. Содан кейін мен микро USB панелінің бекіткіші үшін бірнеше тесіктер бұрғыладым, ал кейбір зергерлік файлдарды пайдаланып, тесіктен төртбұрышты етіп алдым. Панельді бекіту кабелі сәл қатты, сондықтан мен болашақта Pi -дегі микро USB портына тік бұрышты адаптер сатып аламын.

Мен корпустың жоғарғы жағындағы кішкене саңылауды екі ойық бұрғылап, оларды Дремельмен жалғау арқылы ойнату үшін кесіп алдым. Содан кейін динамик Phat орнату үшін қақпақтағы тесіктер бұрғыланды. Бұл фотосуретті түсіргеннен кейін мен қайтып оралдым және тағы бірнеше тесік жасадым, себебі шу корпустың ішінде қалып қойды. Мен бұл плакатты шыбықтарды қолдана отырып, Blinkt -ті орнаттым, себебі оның саңылаулары жоқ, бірақ шыбық жақсы ұсталатын сияқты, сондықтан болады.

10 -қадам: Міне

Міне бітті!
Міне бітті!

Розеткаға қосыңыз және сіз аяқтадыңыз. Міне менікі кешкі сегізден кейін жүгіреді. Пи -дегі жасыл жарық диоды бұл фотосуреттегідей жарқын емес.

Кейінірек мен жасаған кейбір түзетулер:

Мен webapp.py және index.html файлдарына тағы 4 бетті қостым. Олардың төртеуі «қызыл», «сары», «жасыл» және «өшірілген». Өте түсінікті. Егер мен әйелі екеуміздің шаршағанымызды және алаңдатқымыз келмесе, оны жасыл түстен сарыға ауыстыруды білгім келді.

@app.route ('/red', әдістері = ['POST']) def red (): os.system («python ~/scripts/red.py») қайта бағыттауды қайтару ('/')

Негізінде бұл 4 рет, 4 түрлі сценарийлерді, содан кейін сол беттерді шақыратын индексте бірнеше батырмаларды іске қосады.

Мен айтқан басқа өзгеріс, бірақ мен тағы бірнеше тесіктер бұрғылап, динамиктің айналасындағы саңылауды кеңейттім, себебі шу қоршауды жақсы көтермеді.

Егер мен қандай да бір қосымша өзгертулер енгізетін болсам, міндетті түрде осында қайтып келіп, оларды тізімге енгіземін.

11 -қадам: Қосымша

Бұл құрылысты жасағаннан кейін мен әйелім екеуміз телефонды жиі төменге тастап кететінімізді түсіндім, баланы төсекке немесе ұйықтап жатқанда. Мен 36 -физикалық түйреуішке бір сәтте басу түймесін қостым және rc.local -де іске қосу үшін келесі кодты енгіздім (мен оны button.py деп атадым):

#!/usr/bin/env python

RPi. GPIO -ны GPIO ретінде импорттау импорттау GPIO.setmode (GPIO. BOARD) импорттау ішкі процесінің импорты импорттау GPIO.setmode (GPIO. BOARD) # Физикалық түйреуішті нөмірлеу схемасын қолдану түймесі = 36 # Түйме физикалық түйінге 16 GPIO.setup (түйме, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Түймені кіріске айналдыру, Резисторды «True» күйінде іске қосу: егер GPIO.input (түйме) == 0: # Түймені басуды күтіңіз returnprocess = False # Бастапқыда дыбыс өшірулі болып орнатылады s = ішкі процесс. Ашық ([«ps», «ax»], stdout = subprocess. PIPE) for x in s.stdout: if re.search («mpg123», x): returnprocess = True if returnprocess == False: os.system («mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & «) os.system (» python /home/pi/scripts/red.py «) басқа: os.system (» killall mpg123 «) os.жүйе («python /home/pi/scripts/lightsout.py»)

Көріп отырғаныңыздай, мен omxplayer -ден mpg123 -ке ауыстым, себебі ол әлдеқайда жеңіл және қарапайым.

Дегенмен, мен қандай да бір себептермен бұл сценарийді rc.local -ге енгізгенде, ол іске қосылғанда еш қиындықсыз іске қосылады. Бірақ аудио шынымен де қатал. Мен сценарийді қалыпты күйде іске қосқанда, мұндай мәселелер болмайды. Мен бұл мәселені шешуге уақыт таптым, сондықтан егер біреуде қандай да бір идея болса, маған хабарлаңыз! Рахмет.

Ұсынылған: