Если вам надоело ждать, пока интернет-вещей станет распространён настолько, что подключение к домашней сети, голосовые ассистенты и прочие смарт-функции появятся во всех домашних устройствах, можно это исправить своими руками. Например — сделать умный холодильник для пива или вина, который будет отслеживать количество бутылок и напоминать о необходимости добавить их в список покупок. Ничего сложного в этом нет, понадобится Raspberry Pi второго поколения, контроллер Nintendo Wii Balance Board, холодильник, несколько часов свободного времени и желание разобраться с кодом для реализации всех умных функций. В итоге должен получиться умный холодильник, который сможет удаленно сообщать о количестве бутылок в нем и вести статистику: количество выпитого и даже время.
Чтобы все получилось, нужен инструмент и алгоритм определения количества бутылок в холодильнике. В качестве инструмента будет использоваться Wii Balance Board, а алгоритм предельно прост: нужно знать массу пустого холодильника и вес одной бутылки, чтобы посчитать общее количество бутылок внутри. Правда стоит учитывать один важный факт: все напитки должны быть в таре одного объема. Несмотря на бешеную популярность крафта и склонность пивоваров разливать его в емкости как минимум четырех разных объемов, в умном холодильнике должно быть все стандартизировано. Правильнее всего будет остановить выбор на объеме 0.5 литра, а уж сорта можно брать по своему усмотрению. IPA, APA, стауты, сауэры, гозе — это остается на ваше усмотрение, но с одной оговоркой, что холодильник сможет показывать только общее количество бутылок. Организовать деление по сортам и вести отдельную статистику для каждого будет проблематично.
Впрочем, самодельные гаджеты тем и хороши, что проекты можно дорабатывать по своему усмотрению и постепенно добавлять все новые функции. Например, количество бутылок разных сортов все-таки можно разделить в статистике, если к каждой полке подвести отслеживающие массу датчики и ставить бутылки с разными сортами вина и пива на разные уровни. Кроме того, можно добавить датчик температуры, передающий данные в режиме реального времени, а для большой семьи — камеру, которая будет делать снимок каждый раз при открытии дверцы и показывать, кто именно расхищает ваши запасы. Однако вернемся к базовому проекту, который станет основой для любых дальнейших экспериментов с умным холодильником для спиртного.
Выбор Wii Balance Board обоснован тем, что контроллер стоит достаточно дешево (а у кто-то дома может лежать ненужный), он передает данные по Bluetooth, а управление может быть относительно легко настроено на Python. Главное — помнить, что максимально допустимый вес для Wii Balance Board составляет 150 кг.
Комплектующие
Компактный холодильник (14 100 руб.)
Raspberry Pi 2 (2600 руб.)
Nintendo Wii Balance Board (2550 руб.)
Датчик открывания дверцы (110 руб.)
Адаптер Bluetooth (170 руб.)
Настройка Wii Balance Board для использования в качестве весов
Подключите Bluetooth-адаптер к Raspberry Pi и установите нужные библиотеки с помощью командной строки терминала:
$ sudo apt-get install python-bluetooth bluez python-gobject
Чтобы увидеть адрес bluetooth-адаптера нужно набрать:
$ hcitool dev
Devices:
hci0 00:1A:7D:DA:71:13
После этого Wii Balance Board будет готова к подключению и передачи данных. Для этого нужно скачать файлы по ссылке. Скопируйте скрипт gr8w8upd8m8.py (автоматический) или xwiibind.sh (с инструкциями) на Raspberry Pi и запустите его:
$ sudo python gr8w8upd8m8.py
Нажмите кнопку синхронизации на Wii Balance Board, после этого вы должны увидеть примерно следующее:
Found Wiiboard at address
00:23:CC:2E:E1:44
Trying to connect...
Connected to Wiiboard at address
00:23:CC:2E:E1:44
Wiiboard connected
ACK to data write received
84.9185297 lbs
84.8826412 lbs
84.9275927 lbs
Это означает, что Wii Balance Board теперь работает в качестве весов. Можно нажать CTRL+C для остановки скрипта.
Модификация Wii Balance Board
Для использования Wii Balance Board в этом проекте понадобится несколько небольших улучшений. Во-первых, питание от четырех пальчиковых батареек нужно заменить на адаптер переменного тока. Это можно сделать с использованием подключенного к розетке аккумулятора Wii Fit. Кроме того, нужно сделать рычаг, который обеспечит легкое нажатие кнопки синхронизации Wii Balance Board. Это придется делать каждый раз после запуска скрипта из первого этапа. Едва ли вам захочется каждый раз приподнимать тяжелый холодильник, так что рычаг однозначно нужен.
Подключение дверного сенсора
Чтобы при каждом открытии дверцы холодильник «понимал», что оттуда могла исчезнуть бутылка, датчик открытия двери нужно подключить к GPIO 17 на Raspberry Pi. После этого скачайте скрипт по ссылке и запустите его. При открытии и закрытии дверцы должно получиться что-то типа этого:
$ sudo python switch_test.py
Open
Closed
Open
Closed
Создание облачной инфраструктуры
Данные с холодильника должны передаваться в облако и систематизироваться. Это этого лучше всего использовать готовые решения, например, сервис Initial State. Создайте там учетную запись и установите модуль Initial State Python на Raspberry Pi:
$ curl -sSL
Https://get.initialstate.com/python -o - | Sudo Bash
Ответьте согласием на предложение создать тестовый скрипт, чтобы проверить возможность потоковой передачи данных. Запустите сценарий ($ python is_example.py) и убедитесь, что новый источник данных появился в учетной записи Initial State. Для создания других источников понадобится ключ доступа Initial State. Найдите его в своей учетной записи.
Последние приготовления
Скопируйте скрипт beerfridge_make.py на Pi и перед запуском измените несколько параметров с помощью текстового редактора. В верхней части будет находиться раздел настроек пользователя:
# --------- User Settings ---------
WEIGHT_SAMPLES = 1500
WEIGHT_BASE = 83.04
WEIGHT_BOTTLE = 1.266
BUCKET_NAME = "Beer Fridge"
BUCKET_KEY =
"INSERT_BUCKET_KEY_HERE"
ACCESS_KEY =
"INSERT_ACCESS_KEY_HERE"
# ---------------------------------
WEIGHT_SAMPLES — параметр, определяющий, какое изменение веса Wii Balance Board будет считать уменьшением количества бутылок в холодильнике.
WEIGHT_BASE — вес пустого холодильника в фунтах.
WEIGHT_BOTTLE — средний вес бутылки в фунтах.
BUCKET_NAME — имя блока данных, которое будет отображаться в учетной записи Initial State.
BUCKET_KEY — этот параметр может иметь произвольное значение.
ACCESS_KEY - это ключ доступа учетной записи Initial State.
Начало использования холодильника
Остается только запустить финальный скрипт:
$ sudo python
beerfridge_make.py
Теперь каждый раз, когда вы будете закрывать дверцу холодильника, будет происходить измерение веса и подсчет количества бутылок. Можно немного поэкспериментировать и посмотреть статистику изменений в учетной записи Initial State.