Spisu treści:

Inteligentny kalendarz ścienny: 5 kroków
Inteligentny kalendarz ścienny: 5 kroków

Wideo: Inteligentny kalendarz ścienny: 5 kroków

Wideo: Inteligentny kalendarz ścienny: 5 kroków
Wideo: Doda i jej miny podczas przemówienia Górniak (oryg. cezarywisniewski_) 2024, Listopad
Anonim
Inteligentny kalendarz ścienny
Inteligentny kalendarz ścienny

Razem z żoną mieliśmy klasyczny papierowy kalendarz ścienny, na którym zaznaczaliśmy ważne daty. Używamy również kalendarza Google na naszych smartfonach do oznaczania wydarzeń, więc oznaczało to podwójną pracę. Postanowiłem więc zbudować jakiś inteligentny kalendarz ścienny, który będzie wyświetlał nasze przypomnienia, wydarzenia i inne dane. Ponieważ mam różne stare części elektroniczne, moim celem było ponowne ich wykorzystanie jak najwięcej i zbudowanie kalendarza przy jak najmniejszych kosztach.

W tym tutorialu pokażę jak zbudować inteligentny kalendarz ścienny, wyświetlający wydarzenia z kilku kont Google. Wyświetli również czas, datę, pogodę, temperaturę i kilka dodatkowych informacji. Będzie zasilany przez komputer Raspberry Pi z dołączonym do niego pasywnym czujnikiem ruchu na podczerwień (PIR), dzięki czemu wyświetlacz włącza się po wykryciu ruchu w pomieszczeniu, ale wyłącza się po kilku minutach bezczynności. Ten samouczek jest oparty na kilku innych samouczkach, które znalazłem w Internecie i podam linki do nich dla lepszego zrozumienia. Potrzebna jest podstawowa wiedza programistyczna (HTML, Python, …).

Krok 1: Sprzęt

Jak wspomniano wcześniej, próbowałem ponownie wykorzystać jak najwięcej starych części elektronicznych, aby obniżyć koszty. Jednak niektóre elementy musiałem kupić, więc wymienię wszystko, co jest potrzebne do budowy.

- Zestaw Raspberry Pi. Początkowo używałem mojego starego modelu 2 z jakiegoś innego projektu. Udało się, ale edycja i przeładowanie strony zajęło mi dużo czasu, więc ostatecznie przesiadłem się na model 3, który działa płynniej

- Ekran LCD. Użyłem ekranu ze starego laptopa, więc wystarczyło dokupić do niego płytkę sterownika LVDS i zasilacz https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ sterownik+LVDS+płyta&_sacat=0

- Plastikowe pudełko do przechowywania elektroniki

- Pasywny czujnik ruchu na podczerwień

- czujnik temperatury/wilgotności AM2302

- Czarny plastikowy segregator do ramki LCD

- Różne kable (HDMI, 5,5 mm do zasilania DC, bezlutowane kable połączeniowe do płytki stykowej, …)

Krok 2: Tworzenie wyświetlacza LCD

Tworzenie wyświetlacza LCD
Tworzenie wyświetlacza LCD
Tworzenie wyświetlacza LCD
Tworzenie wyświetlacza LCD
Tworzenie wyświetlacza LCD
Tworzenie wyświetlacza LCD

Użyłem ekranu LCD z mojego starego przestarzałego laptopa. Istnieje kilka samouczków, jak to zrobić, śledziłem ten:

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

Zdemontowałem obudowę mojego starego laptopa, wyjąłem wyświetlacz LCD, a następnie zamówiłem poprawną płytkę sterownika LVDS. Podałem sprzedawcy kod produktu, który można znaleźć z tyłu wyświetlacza LCD, w moim przypadku jest to LP171WE3 (TL)(A2) - patrz etykieta w prawym dolnym rogu na ostatnim zdjęciu, a następnie wysłał mi odpowiedni LVDS. Pamiętaj, że potrzebujesz również zasilacza do wyświetlacza, więc poproś sprzedawcę, aby go również wysłał. Kupiłem też ładne plastikowe pudełko o wymiarach 14,5 × 7,5 × 2 cm, aby ładnie pasowało do płyty sterownika i przymocowało je z tyłu wyświetlacza LCD.

Teraz wyświetlacz LCD ma metaliczną ramkę, która nie wygląda ładnie. Początkowo malowałem sprayem na czarno, ale farba zaczęła się łuszczyć. Wziąłem więc cztery czarne plastikowe segregatory, które są zwykle używane do wiązania kartek papieru, odpowiednio je przyciąłem i przymocowałem, aby zakryć ramkę. Wyglądało to dobrze, więc podłączyłem wszystkie kable, wpiąłem HDMI do mojego starego Raspberry Pi i Voila – zadziałało! Na wyświetlaczu pojawił się obraz, więc byłem gotów przejść do następnego kroku – jakie informacje pokazać na wyświetlaczu i jak je pokazać.

Krok 3: Konfiguracja oprogramowania

Kiedy szukałem w Internecie wskazówek, jak zbudować kalendarz, zainspirowała mnie ta strona https://dakboard.com/site. Dostarczają gotowy produkt (wyświetlacz, komputer i działające oprogramowanie), ale mają też doskonały samouczek dotyczący rozwiązania DIY (https://blog.dakboard.com/diy-wall-display/). Polecam zapoznać się z tym samouczkiem, przynajmniej w pierwszej części z instrukcjami przygotowania i konfiguracji systemu na Raspberry, aby przeglądarka automatycznie ładowała żądaną stronę internetową podczas startu.

Działało to ładnie, jednak szukałem rozwiązania, które można by dostosować do moich życzeń. Postanowiłem założyć własny serwer WWW i stworzyć stronę internetową, na której oprócz kalendarza będą wyświetlane dodatkowe informacje. Wybrałem Wordpress.org, ponieważ jest dobrze udokumentowany i ma dobre wsparcie oraz dużą społeczność, która może Ci pomóc. Oto samouczek dotyczący instalacji Wordpressa na Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Po zainstalowaniu Wordpressa nadszedł czas na zaprojektowanie mojej strony domowej. Możesz użyć jednego z wielu dostarczonych motywów lub zaprojektować od podstaw. W każdym razie potrzebna jest do tego pewna wiedza z zakresu programowania HTML.

Swoją stronę zaprojektowałem tak, aby po lewej stronie pokazywany był kalendarz (https://sl.wordpress.org/plugins/google-calendar-events/), a po prawej stronie czas i data (https://sl.wordpress.org/plugins/google-calendar-events/)://www.timeanddate.com/clocks/free.html i https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Prognoza pogody znajduje się na tej stronie (https://www.1a-vreme.si/vremensko-okno/), która zawiera widżety prognoz dla słoweńskich miast, ale przypuszczam, że widżety dla innych krajów można znaleźć również w Internecie. Temperatura jest mierzona za pomocą czujnika AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), jak wyjaśniono na końcu tego rozdziału. Na dole znajduje się prosty dzienny minutnik, który pokazuje, ile dni pozostało do jakiegoś wydarzenia (ciekawe, żeby moje dzieci wiedziały, ile dni będą musiały na coś czekać). W prawym górnym rogu znajduje się wtyczka MetaSlider (https://wordpress.org/plugins/ml-slider/), która losowo przesuwa się do wybranych zdjęć mojej rodziny. Dodatkowo użyłem wtyczki Background Slider (https://sl.wordpress.org/plugins/background-slider-master/), aby pokazać mi losowy obrazek dla ładniejszego tła.

Jak wspomniano wcześniej, temperatura wewnętrzna jest mierzona za pomocą czujnika AM2302. Jest wiele samouczków, jak uzyskać temperaturę, śledziłem ten: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Później przeniosłem ten czujnik do innego Raspberry Pi z uruchomionym Home Assistant, ponieważ łatwiej jest czytać i publikować wartości za pomocą jego komponentu DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant potrafi również zbierać temperaturę zewnętrzną za pomocą różnych komponentów pogodowych, ja użyłem komponentu YR.no (https://www.home-assistant.io/components/sensor.yr/). W tym celu napisałem skrypt automatyzacji, aby zebrać temperaturę wewnątrz/na zewnątrz z tych komponentów i zapisać je do pliku tekstowego, który jest następnie wyświetlany w moim kalendarzu ściennym. Więcej informacji na temat Home Assistant można znaleźć na stronie głównej (https://www.home-assistant.io/).

Krok 4: Opcjonalnie - wyłączanie wyświetlacza

Teraz mamy skonfigurowany i działający kalendarz, tak jak lubimy. Ale nie chcemy, aby wyświetlacz był włączony 24/7. Chcemy, żeby było włączone tylko wtedy, gdy ktoś jest w domu. Nie chcemy też, żeby włączała się w środku nocy, kiedy idziemy do toalety, jest za jasno! Dlatego dołączymy czujnik podczerwieni, aby zauważyć, kiedy ktoś stoi przed nim, i dodamy pewne limity czasowe, kiedy powinien się włączyć.

Zwróć uwagę, że moje umiejętności programistyczne są raczej ograniczone, więc poniższe nie mogą być optymalne, ponieważ wybrałem go z różnych forów internetowych i samouczków, ale zasadniczo działa. Mimo to każda rekomendacja jest nadal mile widziana. Najpierw zaczniemy od testu ręcznego włączania/wyłączania monitora. W tym celu utworzymy dwa pliki (na przykład monitor_on.sh i monitor_off.sh) i napiszemy w nich trochę kodu. Najłatwiej to zrobić, logując się do Raspberry za pomocą SSH i wpisując

sudo nano monitor_on.sh

i wpisz następujący kod

tvservice – preferowane;

startx /usr/bin/graphical_launcher `fgconsole`

Naciśnij CTRL+X, aby zapisać i wyjść, a następnie utwórz drugi plik

sudo nano monitor_off.sh

i wpisz następujący kod

tvservice --off;

Ponownie naciśnij CTRL + X, aby zapisać i wyjść. Spraw, aby te nowo utworzone pliki były wykonywalne:

sudo chmod + x monitor_on.sh

sudo chmod + x monitor_off.sh

Teraz, aby sprawdzić, czy te polecenia działają, wpisz

sudo./monitor_off.sh

sudo./monitor_on.sh

Monitor powinien się teraz odpowiednio wyłączyć i włączyć. Zauważyłem, że na Raspberry Pi 2 włączenie monitora zajęło prawie 10 sekund. Na Raspberry Pi 3 zajmuje to 1-2 sekundy. Następnie podłączymy czujnik podczerwieni, który uruchomi te skrypty. Ponownie, istnieje wiele samouczków, jak skonfigurować Raspberry Pi i PIR, śledziłem ten: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Zasadniczo utwórz plik za pomocą edytora nano (na przykład motion_sensor.py) i wpisz w nim odpowiedni kod Pythona. Poniżej przykład mojego pliku:

import RPi. GPIO jako GPIOimport timeimport sysimport subprocessimport datetime jako dtimport osGPIO.setwarnings(False)# GPIO.setmode(GPIO. BOARD)GPIO.setmode(GPIO. BCM)GPIO.setup(17, GPIO. IN) #PIRturned_off = Falselast_motion_time time.time()SHUTOFF_DELAY = 180 # sekundywhile True:i=GPIO.input(17)if i==0: #Gdy sygnał wyjściowy z czujnika ruchu jest LOW, wyłącz monitor, jeśli nie jest wyłączony i time.time() > (last_motion_time + SHUTOFF_DELAY):print "Brak intruzów", iturned_off = Truetime.sleep(1)subprocess.call(['/home/pi/monitor_off.sh'], shell=True)elif i==1: #Gdy wyjście z czujnika ruchu jest WYSOKA, włącz monitor ONprint "Wykryto intruza", itime.sleep(1)last_motion_time = time.time()sys.stdout.flush()if turn_off i dt.datetime.now().hour > 5 i dt.datetime. now().hour < 23:turned_off = Falsesubprocess.call(['/home/pi/monitor_on.sh'], shell=True)if _name_ == '_main_':try:main()except KeyboardInterrupt:GPIO.cleanup ()

Zauważ, że „GPIO.setup(17, GPIO. IN)” wskazuje, że pin wyjściowy z PIR jest podłączony do pinu 17 w Raspberry Pi. Który pin zależy od tego, czy zdefiniujesz GPIO.setmode(GPIO. BOARD) czy GPIO.setmode(GPIO. BCM). Różnica jest wyjaśniona tutaj: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Mam # przed GPIO. BOARD, więc jest ignorowany i używany jest GPIO. BCM.

Zwróć uwagę na linię

SHUTOFF_DELAY = 180 #sekund

Tutaj podano, jak długo monitor jest włączony od ostatniego wykrycia ruchu, zanim zostanie wyłączony. Jest to przydatne, ponieważ nie chcę, aby monitor stale się wyłączał/włączał, gdy przechodzę obok niego, ale chcę, aby był włączony przez jakiś czas, zanim się wyłączy. Wybrałem interwał 180 sekund, aby monitor wyłączał się po około 3 minutach od wykrycia ostatniego ruchu.

Wreszcie ta linia

if disabled_off i dt.datetime.now().hour > 6 i dt.datetime.now().hour < 23:

stwierdza, że monitor włącza się tylko między 6:00 a 23:00, więc nie przeszkadza mi to w nocy. Linie

drukuj "Żadnych intruzów", i

oraz

print "Wykryto intruza", i

służą tylko do testowania skryptu, możesz je później usunąć, gdy będziesz miał to działać. Teraz przetestuj skrypt:

sudo python motion_sensor.py

Powinieneś zobaczyć komunikat „Wykryto intruza”, jeśli pomachasz nad czujnikiem, w przeciwnym razie będzie to „Brak intruzów”. Gdy ten skrypt zostanie przetestowany i będzie działał, ustaw go tak, aby uruchamiał się przy starcie:

sudo nano ~/.config/lxsession/LXDE-pi/autostart

i dodaj następującą linię

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

Oczywiście musisz podać poprawną nazwę pliku utworzonego skryptu Pythona.

Krok 5: Zawieś kalendarz

Po skonfigurowaniu nadszedł czas, aby powiesić kalendarz na ścianie!

Początkowo myślałem o ukryciu Raspberry Pi za wyświetlaczem LCD, aby potrzebny był tylko jeden kabel (zasilanie DC). Ale ponieważ Raspberry działa na 5V, a wyświetlacz LCD na 12V, potrzebowałbym dodatkowego transformatora. Ponadto obudowa Raspberry jest dość gruba, co oznacza, że wyświetlacz LCD byłby oddalony od ściany o około 3 centymetry. Więc porzuciłem to i zostawiłem tylko elektronikę LCD za LCD, więc teraz jest mniej niż 1 centymetr od ściany. Kupiłem dwa kable o długości 5 metrów, jeden HDMI i jeden 5,5mm do zasilania DC. Oba kable są białe, podobnie jak ściana, co oznacza, że nie wyróżniają się zbytnio. Zamontowałem LCD na ścianie i umieściłem Raspberry na lodówce na przeciwległej ścianie, więc jest w zasadzie ukryty, ale nadal łatwo dostępny.

Zalecana: