- PVSM.RU - https://www.pvsm.ru -

Список покупок

Описание

Список покупок [1]У меня всегда неожиданно заканчиваются продукты. Казалось, ещё вчера был стратегический запас пива, а сегодня его уже нет. Ну и, конечно, когда обнаруживаешь, что чего-то не хватает, под рукой нет ни телефона, ни записной книжки. Не удивительно, поскольку дело обычно происходит на кухне в самый разгар готовки.

Я решил создать аппарат, который позволит одним нажатием кнопки отметить, чего не хватает. Аппарат передаёт информацию об отсутствующих продуктах на телефон и реагирует, если что-то было куплено.

В этой заметке я бы хотел рассказать о том, как я собрал эту штуку, с какими сложностями столкнулся и как вышел из положения.

Демонстрация работы

История напоминалки

Я не первый, кто придумал вешать список покупок на стену. Примерно такую же штуку использовали в начале XX века в Америке. Хозяйка отмечала, что кончилось, вставляя колышки в отверстия перед названием продукта. Помощники по кухне покупали необходимое и доставали колышки. Эти напоминалки выглядели примерно так:

Список покупок

Я понял, что мне совершенно необходимо перенести эту идею в XXI век, и я принялся за дело.

Архитектура системы

Система состоит из трёх компонентов:

  1. Доска с кнопками
  2. Сервер, обрабатывающий запросы
  3. iOS приложение

При нажатии кнопки доска шлёт запрос на сервер. Сервер сохраняет состояние и использует Apple Push Notifications, чтобы оповестить приложение. Приложение запрашивает состояние с сервера и отправляет туда обновления о купленных продуктах. Каждые 5 минут доска обновляет свое состояние с сервера.

Доска с кнопками

Основа системы – микроконтроллер STM32F051 [2]. Я использую именно его из-за простоты подключения и работы.
В качестве Wi-Fi модуля я выбрал RN-XV WiFly [3]. Этот модуль чрезвычайно просто программировать и использовать: всё, что надо, это питание, сброс и UART подключение.
На доске установлено 35 кнопок без фиксации (то есть, кнопка пропускает ток, только пока держишь палец). Каждая кнопка содержит небольшой светодиод.

Я использовал кнопки TL1265 [4]. Каждая кнопка подключаласть через отдельный транзистор. Это было необходимо, чтобы не превышать максимальную силу тока регистров сдвига:
Список покупок [5]

Кнопки (и их светодиоды) подключены с использованием регистров сдвига. 74HC165A [6] для считывания состояния кнопок:
Список покупок [7]

74HC594 [8] для управления светодиодами:
Список покупок [9]

К сожалению, бесплатная верия программы Eagle CAD накладывает ограничение на размер одной схемы. Так что пришлось делать несколько небольших схем с кнопками, основной управляющий модуль и связывать всё это проводами:
Список покупок

С другой стороны основной слой выглядит вот так:
Список покупок

Раньше я травил схемы дома, но на этот раз решил заказать в компании OSH Park [10]. Схемы были изготовлены за 10 дней. К качеству претензий нет:

Список покупок


В доме валялось довольно много старых транзисторов и резисторов, устанавливаемых в сквозное отверстие, почти все ушли на этот проект:

Список покупок

Сервер, обрабатывающий запросы

Пожалуй, это было самой простой частью. Сервер написан на PHP, использует MySQL для хранения состояния и stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', ...) для отсылки Apple Push Notifications.

iOS приложение

Тут тоже ничего сложного. Два экрана, один с закончившимися продуктами, другой с полным списком:

Список покупок

Сборка корпуса

Мне очень нравятся аккуратные корпуса любительских проектов. Основой корпуса для этого проекта послужила обычная фоторамка. Сплошное стекло пришлось заменить вырезанным на заказ прозрачным пластиком:

Список покупок

С надписями дело было сложнее. Мне никак не удавалось либо аккуратно подписать, либо аккуратно вырезать отвестия для кнопок. В результате я нашел, как мне кажется, весьма изящное решение. Используя лазерный резак, я сначала проделал отверстия для кнопок. Потом, на меньшей мощности, вырезал борозды для букв. Я залил борозды, используя перо и белые чернила. Вот процесс работы:

Список покупок


Таким образом у меня получилось три слоя:

Автор: apple_fan

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/news/48653

Ссылки в тексте:

[1] Image: http://habrastorage.org/storage3/39c/547/9d3/39c5479d3712b7873d9dcd471dce7d07.jpg

[2] STM32F051: http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1574/LN7

[3] RN-XV WiFly: https://www.sparkfun.com/products/11048

[4] TL1265: http://www.mouser.com/ds/2/140/TL1265-26217.pdf

[5] Image: http://habrastorage.org/storage3/696/72c/ac5/69672cac5fd3870a664b0bef026296ff.png

[6] 74HC165A: http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf

[7] Image: http://habrastorage.org/storage3/131/3fb/ec6/1313fbec6e91fc0d65cae0feda8cc622.png

[8] 74HC594: http://www.ti.com/lit/ds/symlink/sn74hc594.pdf

[9] Image: http://habrastorage.org/storage3/8ef/c6e/e69/8efc6ee69c7b9b47d73e240ff5532a3b.png

[10] OSH Park: http://oshpark.com

[11] Источник: http://habrahabr.ru/post/202550/