Оглавление:

Умный настенный календарь: 5 шагов
Умный настенный календарь: 5 шагов

Видео: Умный настенный календарь: 5 шагов

Видео: Умный настенный календарь: 5 шагов
Видео: Как сделать календарь на 2023 год 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 = raspberry + pi + kit & _sacat = 0

- ЖК-экран. Я использовал экран своего старого ноутбука, поэтому мне нужно было купить для него только плату драйвера LVDS и блок питания https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ драйвер + LVDS + плата & _sacat = 0

- Пластиковый ящик для хранения электроники

- Пассивный инфракрасный датчик движения

- Датчик температуры / влажности AM2302

- Папка-папка из черного пластика для рамки ЖК-дисплея

- Различные кабели (HDMI, 5,5 мм для питания постоянного тока, кабели для перемычек без пайки и т. Д.)

Шаг 2: Создание ЖК-дисплея

Создание ЖК-дисплея
Создание ЖК-дисплея
Создание ЖК-дисплея
Создание ЖК-дисплея
Создание ЖК-дисплея
Создание ЖК-дисплея

Я использовал ЖК-экран своего старого устаревшего ноутбука. Есть несколько руководств о том, как это сделать, я следил за этим:

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

Я снял крышку своего старого ноутбука, вынул ЖК-дисплей и заказал нужную плату драйвера LVDS. Я предоставил продавцу код продукта, который можно найти на задней стороне ЖК-дисплея, в моем случае это LP171WE3 (TL) (A2) - см. Нижнюю правую этикетку на последнем изображении, а затем он отправил мне соответствующий LVDS. Обратите внимание, что вам также понадобится блок питания для дисплея, поэтому попросите продавца прислать его тоже. Я также купил красивую пластиковую коробку 14,5 × 7,5 × 2 см, чтобы она хорошо поместилась на плате драйвера и прикрепила ее к задней стороне ЖК-дисплея.

Теперь у ЖК-дисплея металлическая рамка, что не очень красиво. Изначально я покрасил его в черный цвет, но краска начала отслаиваться. Поэтому я взял четыре черных пластиковых папки-слайдера, которые обычно используются для переплета листов бумаги, обрезал их соответствующим образом и прикрепил, чтобы закрыть рамку. Это выглядело хорошо, поэтому я подключил все кабели, подключил HDMI к моему старому Raspberry Pi и вуаля - это сработало! На дисплее было изображение, поэтому я был готов перейти к следующему шагу - какую информацию отображать на дисплее и как ее отображать.

Шаг 3: Установка программного обеспечения

Когда я искал в Интернете подсказки, как построить календарь, меня вдохновила эта страница https://dakboard.com/site. Они предоставляют готовый продукт (дисплей, компьютер и рабочее программное обеспечение), но у них также есть отличный учебник для самостоятельного решения (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. Ниже приведен пример моего файла:

import RPi. GPIO as GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_offtion_ Falselast_mode time.time () SHUTOFF_DELAY = 180 # секунд пока True: i = GPIO.input (17) if i == 0: # Когда выходной сигнал датчика движения НИЗКИЙ, выключите монитор, если не выключено и time.time ()> (last_motion_time + SHUTOFF_DELAY): выведите «No intruders», iturned_off = Truetime.sleep (1) subprocess.call (['/ home / pi / monitor_off.sh'], shell = True) elif i == 1: # При выводе с датчика движения ВЫСОКИЙ, включите монитор. print «Злоумышленник обнаружен», itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () если Turn_off и dt.datetime.now (). hour> 5 и dt.datetime. now (). hour <23: Turn_off = Falsesubprocess.call (['/ home / pi / monitor_on.sh'], shell = True) if _name_ == '_main _': try: main () except 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 минуты после обнаружения последнего движения.

Наконец, эта строка

если Turn_off и dt.datetime.now (). hour> 6 и dt.datetime.now (). hour <23:

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

печать "Злоумышленникам запрещено", я

а также

print "Злоумышленник обнаружен", i

предназначены только для тестирования скрипта, вы можете удалить их позже, когда он заработает. Теперь протестируем скрипт:

sudo python motion_sensor.py

Вы должны увидеть сообщение «Злоумышленник обнаружен», если вы машете над датчиком, иначе будет «Злоумышленников нет». Когда этот сценарий протестирован и работает, настройте его запуск при загрузке:

sudo nano ~ /.config / lxsession / LXDE-pi / автозапуск

и добавьте следующую строку

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

Конечно, вы должны указать правильное имя файла созданного вами скрипта Python.

Шаг 5. Повесьте календарь

Когда все настроено, пора повесить календарь на стену!

Изначально я думал спрятать Raspberry Pi за ЖК-дисплеем, чтобы понадобился только один кабель (питание постоянного тока). Но поскольку Raspberry работает от 5 В, а ЖК-дисплей работает от 12 В, мне понадобится дополнительный трансформатор. Кроме того, корпус Raspberry довольно толстый, а это значит, что ЖК-экран будет находиться на расстоянии около 3 сантиметров от стены. Поэтому я отказался от этого и оставил только ЖК-электронику за ЖК-дисплеем, так что теперь он находится менее чем в 1 сантиметре от стены. Я приобрел два кабеля длиной 5 метров, один HDMI и один 5,5 мм для источника питания постоянного тока. Оба кабеля белые, как стена, а это значит, что они не сильно выделяются. Я прикрепил ЖК-экран к стене и поставил Raspberry на холодильник на противоположной стене, так что он в основном скрыт, но все же легко доступен.

Рекомендуемые: