Съдържание:

Интелигентен стенен календар: 5 стъпки
Интелигентен стенен календар: 5 стъпки

Видео: Интелигентен стенен календар: 5 стъпки

Видео: Интелигентен стенен календар: 5 стъпки
Видео: Основные ошибки при возведении перегородок из газобетона #5 2024, Юли
Anonim
Интелигентен стенен календар
Интелигентен стенен календар

Съпругата ми и аз имахме класически хартиен стенен календар, на който отбелязахме важни дати. Ние също използваме Google календар на нашите смартфони за маркиране на събития, така че това означаваше двойна работа. Затова реших да създам някакъв интелигентен стенен календар, който да показва нашите напомняния, събития и някои други данни. Тъй като имам различни стари електронни части, моята цел беше да ги използвам възможно най -много и да изградя календара с възможно най -малко разходи.

В този урок ще ви покажа как да изградите интелигентен стенен календар, показващ събития от няколко профила в Google. Той също така ще показва час, дата, време, температура и някои допълнителни данни. Той ще се захранва от компютър Raspberry Pi със свързан към него сензор за движение с пасивен инфрачервен сензор (PIR), така че дисплеят да се включи, когато се открие движение в стаята, но да се изключи след няколко минути бездействие. Този урок се основава на няколко други урока, които намерих в интернет и ще дам връзките към тях за по -добро разбиране. Необходими са някои основни познания по програмиране (HTML, Python, …).

Стъпка 1: Хардуерът

Както бе споменато по -рано, аз се опитах да използвам възможно най -много стари електронни части, за да намаля разходите. Въпреки това някои елементи трябваше да купя, така че ще изброя всичко необходимо за строителството.

- Комплект Raspberry Pi. Първоначално използвах стария си модел 2 от друг проект. Работи, но редактирането и презареждането на уеб страницата ми отне много време, така че в крайна сметка преминах към модел 3, който работи по -плавно https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = малина+pi+комплект & _sacat = 0

- LCD екран. Използвах екрана от стария си лаптоп, така че трябваше само да купя платка с драйвер за LVDS за него и захранването https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ драйвер+LVDS+платка & _sacat = 0

-Пластмасова кутия за съхранение на електрониката

- Пасивен инфрачервен сензор за движение

- AM2302 сензор за температура/влажност

- Черно пластмасово плъзгащо се свързващо вещество за LCD рамка

- Различни кабели (HDMI, 5.5 мм за DC захранване, кабели за джъмпер за спойка без запояване, …)

Стъпка 2: Създаване на LCD дисплей

Създаване на LCD дисплей
Създаване на LCD дисплей
Създаване на LCD дисплей
Създаване на LCD дисплей
Създаване на LCD дисплей
Създаване на LCD дисплей

Използвах LCD екрана от стария си остарял лаптоп. Има няколко урока за това как да направя това, следвах този:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

Демонтирах капака на стария си лаптоп, извадих LCD дисплея и след това поръчах правилната платка с драйвер за LVDS. Предоставих на продавача кода на продукта, който може да бъде намерен от задната страна на LCD дисплея, в моя случай той е LP171WE3 (TL) (A2) - вижте долния десен етикет на последната снимка и след това той ми изпрати съответния LVDS. Моля, обърнете внимание, че ще се нуждаете и от захранване за дисплея, затова помолете продавача да го изпрати. Купих и хубава пластмасова кутия с размери 14,5 × 7,5 × 2 см, която да приляга добре към таблото на водача и да я прикрепя към задната страна на LCD.

Сега LCD дисплеят има метална рамка, която не изглежда красива. Първоначално я боядисвах със спрей до черно, но боята започна да се отлепя. Затова взех четири черни пластмасови плъзгащи се свързващи вещества, които обикновено се използват за подвързване на листове хартия, подрязах ги съответно и ги прикрепих, за да покрият рамката. Това изглеждаше добре, затова свързах всички кабели, включих HDMI към старите си Raspberry Pi и Voila - работи! На дисплея се показваше снимка, така че бях готов да премина към следващата стъпка - каква информация да покажа на дисплея и как да я покажа.

Стъпка 3: Настройка на софтуера

Когато търсих в интернет за някои улики, как да изградя календар, бях вдъхновен от тази страница https://dakboard.com/site. Те предоставят готовия продукт (дисплея, компютъра и работния софтуер), но също така имат отличен урок за DIY решение (https://blog.dakboard.com/diy-wall-display/). Препоръчвам ви да следвате този урок, поне за първата част с инструкциите за подготовка и настройка на системата на Raspberry, така че браузърът автоматично да зарежда желаната уеб страница при зареждане.

Това работи добре, но аз търсех някакво решение, което би могло да бъде по -персонализирано според моите желания. Реших да настроя собствен уеб сървър и да създам уеб страница, която да показва допълнителна информация освен календара. Избрах Wordpress.org, тъй като е добре документиран и има добра подкрепа и голяма общност, която да ви помогне. Ето урока за това как да инсталирате Wordpress на Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. С инсталиран Wordpress беше време да проектирам началната си страница. Можете да използвате една от многото предоставени теми или да проектирате от нулата. Както и да е, за това са необходими известни познания по HTML програмиране.

Аз съм проектирал моята страница, така че от лявата страна да се показва календарът (https://sl.wordpress.org/plugins/google-calendar-events/), докато от дясната страна се показват времето и датата (https://www.timeanddate.com/clocks/free.html и https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Прогнозата за времето е от тази страница (https://www.1a-vreme.si/vremensko-okno/), която предоставя джаджа за прогноза за словенските градове, но предполагам, че джаджи за други страни могат да бъдат намерени и в интернет. Температурата се събира с помощта на сензор AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), както е обяснено в края на тази глава. В долната част е прост ежедневен таймер за обратно броене, който показва колко дни остават до някакво събитие (интересно за децата ми да знаят, колко дни ще трябва да чакат за нещо). В горния десен край е приставката MetaSlider (https://wordpress.org/plugins/ml-slider/), която произволно се плъзга до избрани снимки на моето семейство. Освен това използвах плъгина Background Slider (https://sl.wordpress.org/plugins/background-slider-master/), за да ми покаже произволна картина за по-хубав фон.

Както бе споменато по -горе, вътрешната температура се събира с помощта на сензор AM2302. Има много уроци за това как да се получи температура, следвах този: https://www.modmypi.com/blog/am2302-temphumidity-sensor. По-късно преместих този сензор на друг Raspberry Pi с работещ Home Assistant, защото е по-лесно да се четат и публикуват стойности с помощта на неговия компонент DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant може също да събира външна температура, използвайки различни метеорологични компоненти, използвах компонент YR.no (https://www.home-assistant.io/components/sensor.yr/). С това написах скрипт за автоматизация, за да събера вътрешна/външна температура от тези компоненти и да ги запиша в текстов файл, който след това се показва в моя стенен календар. За повече информация относно Home Assistant вижте началната страница (https://www.home-assistant.io/).

Стъпка 4: По избор - Изключване на дисплея

Сега нашият календар е настроен и работи, точно както ни харесва. Но не искаме дисплеят да се включва денонощно. Искаме да продължи само когато някой е у дома. Също така не искаме да бъде включен посред нощ, когато отидем до тоалетната, е твърде светло! Така че ще прикачим инфрачервен сензор, който да забележи, когато някой стои пред него, и ще добавим някои времеви ограничения, когато трябва да се включи.

Моля, обърнете внимание, че уменията ми за програмиране са доста ограничени, така че следното не може да бъде оптимално, тъй като съм го избрал от различни онлайн форуми и уроци, но по същество работи. Все пак всяка препоръка все още се приветства. Първо ще започнем с тест за ръчно включване/изключване на монитора. За целта ще създадем два файла (например monitor_on.sh и monitor_off.sh) и ще напишем някакъв код в него. Най -лесният начин да направите това е да влезете в Raspberry, като използвате SSH и въведете

sudo nano monitor_on.sh

и въведете следния код

tvservice -предпочитан;

startx/usr/bin/graphical_launcher `fgconsole`

Натиснете CTRL+X, за да запазите и излезете, след което създайте втория файл

sudo nano monitor_off.sh

и въведете следния код

tvservice -off;

Отново натиснете CTRL+X, за да запазите и излезете. Направете тези новосъздадени файлове изпълними:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

Сега, за да опитате дали тези команди работят, въведете

sudo./monitor_off.sh

sudo./monitor_on.sh

Сега мониторът трябва да се изключи и включи съответно. Забелязах, че на Raspberry Pi 2 бяха необходими почти 10 секунди, за да се включи мониторът. На Raspberry Pi 3 отнема 1-2 секунди. След това ще свържем инфрачервен сензор, който ще задейства тези скриптове. Отново има много уроци как да настроите Raspberry Pi и PIR, последвах този: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. По принцип създайте файл с помощта на nano редактор (например motion_sensor.py) и въведете подходящия код на Python в него. По -долу е примерът на моя файл:

импортиране на RPi. GPIO като GPIOимпортиране на времеимпортсисимпорт подпроцесимпорт дата -час като dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = Falselast_motion time.time () SHUTOFF_DELAY = 180 # секунди SHUTOFF_DELAY): отпечатайте „Няма натрапници“, iturned_off = Truetime.sleep (1) subprocess.call (['/home/pi/monitor_off.sh'], shell = True) elif i == 1: #При извеждане от сензор за движение е ВИСОК, включете монитора ONprint "Открит нарушител", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush (), ако е изключен и dt.datetime.now (). час> 5 и dt.datetime. now (). час <23: turn_off = Falsesubprocess.call (['/home/pi/monitor_on.sh'], shell = True), ако _name_ == '_main _': try: main () с изключение на KeyboardInterrupt: GPIO.cleanup ()

Обърнете внимание, че „GPIO.setup (17, GPIO. IN)“показва, че изходният щифт от PIR е свързан към щифт 17 на Raspberry Pi. Кой пин зависи от това дали дефинирате GPIO.setmode (GPIO. BOARD) или GPIO.setmode (GPIO. BCM). Разликата е обяснена тук: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Имам # пред GPIO. BOARD, така че се игнорира и се използва GPIO. BCM.

Забележете линията

SHUTOFF_DELAY = 180 #секунди

Тук е посочено колко дълго мониторът е включен от последното движение, преди да бъде изключен. Това е полезно, защото не искам мониторът да се изключва/включва постоянно, когато минавам покрай него, но искам да го държа включен за известно време, преди да е изключен. Избрах интервала от 180 секунди, така че мониторът да се изключи около 3 минути след засичането на последното движение.

И накрая, този ред

ако е изключено и dt.datetime.now (). час> 6 и dt.datetime.now (). час <23:

заявява, че мониторът се включва само между 6:00 и 23:00, така че не ме безпокои през нощта. Линиите

отпечатайте "Без натрапници", т.е.

и

отпечатайте "Открит нарушител", т.е.

са само за тестване на скрипта, можете да ги изтриете по -късно, когато той ще работи. Сега тествайте скрипта:

sudo python motion_sensor.py

Трябва да видите съобщения „Нарушител е открит“, ако махнете над сензора, в противен случай ще бъде „Без натрапници“. Когато този скрипт бъде тестван и работи, настройте го да стартира при стартиране:

sudo nano ~/.config/lxsession/LXDE-pi/автостарт

и добавете следния ред

@sudo/usr/bin/python /home/pi/motion_sensor.py

Разбира се, трябва да посочите правилното име на файла на скрипта на Python, който сте създали.

Стъпка 5: Закачете календара

С всичко настроено, време е да закачите календара на стената!

Първоначално мислех да скрия Raspberry Pi зад LCD дисплея, така че да е необходим само един кабел (DC захранване). Но тъй като Raspberry работи на 5V, а LCD дисплеят работи на 12V, ще ми трябва допълнителен трансформатор. Също така корпусът на Raspberry е доста дебел, което означава, че LCD ще бъде на разстояние около 3 сантиметра от стената. Затова изоставих това и оставих само LCD електрониката зад LCD, така че сега тя е на по -малко от 1 сантиметър от стената. Придобих два кабела с дължина 5 метра, един HDMI и един 5, 5 мм за DC захранване. И двата кабела са бели, като стената, което означава, че не се открояват много. Поставих LCD на стената и поставих Raspberry върху хладилника на отсрещната стена, така че той е скрит, но все пак лесно достъпен.

Препоръчано: