Блог

Умная елка с защитой от котиков и другие новогодние идеи

Интерактивная елка от преподавателя GB: рецепт, видео, код. Гирлянда за 5 минут и другие идеи типа «Сделай сам».
24 декабря 20185 минут1153

Программируемая елочка на Arduino

Центр новогоднего интерьера — елка! Оформить ее необычно может каждый, но сделать ее «умной» — работа и развлечение для программиста. Посмотрите, какую елочку собрал в этом году преподаватель GeekBrains Иван Овчинников.

Елочка умеет:

  • включаться и менять режим работы по касанию ключа от домофона,
  • рисовать пиктограммы на диодном экранчике 8х8,
  • всячески мигать,
  • играть любую заданную мелодию (в нашем примере — Jingle Bells).

Чтобы сделать такую или похожую елку, читайте рецепт и смотрите код ниже!

Вам понадобятся:

  • Arduino Nano,
  • NFC-метка RC522,
  • круг из 24 диодов (24 LED circle),
  • матричный LED-экран 8x8,
  • пассивный зуммер (passive buzzer),
  • гирлянда (DIY LED),
  • несколько проводов, резисторов и делителей напряжения.

Время сборки: основная часть — около часа, гирлянда — почти целый день, но каждая следующая лампочка делается быстрее предыдущей.

Рецепт и пояснения от Ивана:

Берем плату Arduino Nano и подключаем к ней светодиод. Он будет гореть, когда елка включена, то есть послужит индикатором питания. Если это ваш первый опыт, найдите примеры на YouTube. Суть в том, что вы подаете напряжение на контакт (пин) платы, к которому присоединен LED, который и загорается.

Да и вообще это всегда первый шаг, как hello, world. Сначала учитесь подавать и выключать напряжение на контактах (пинах), потом делаете это по времени, дальше используете ШИМ, чтобы варьировать напряжение. То есть надо постепенно усложнять задачи.

Для тренировки можно, например, написать программу, которая будет сигналить SOS или плавно, по синусоиде, регулировать яркость диода.

Подключаем к Arduino «пищалку» (passive buzzer), которая будет играть мелодию. Ноты можно подобрать на слух или скачать в интернете. Как превратить нотную запись любой композиции в Arduino-код, пригодный для воспроизведения зуммером или колонкой, — читайте здесь.

Управляем пищалкой, как и диодом: подаем определенное напряжение на один из контактов.

Подключаем к Arduino круг из 24 диодов. Здесь управление чуть сложнее — надо задать не только адрес диода на ленте, но и его цвет. Для адресов используем цифры от 1 до 24, для цвета — палитру RGB. Что может быть удобнее? Отправляем значения напряжения на соответствующие контакты.

Делаем пульт управления из ключа от домофона. В моем случае ключ — это брелок с NFC-меткой, но носителем чипа может быть и карточка, и телефон, и другой предмет.

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

Возвращаемся к елке. Для работы с NFC берем плату расширения к Arduino MFRC522. Выясняем идентификационный код (UID) ключа. Это просто: в комплекте расширения есть считыватель, который фиксирует, кто и с какими данными к нему прикоснулся. Информация с чипа отправляется на последовательный порт Arduino по протоколу SPI. Ее можно вывести на экран:

Serial.println(uidDec);

Теперь задать реакцию елки на прикосновение к пульту — дело одного if().

Настраиваем экранчик 8х8 — тут больше всего программной мороки, но не волнуйтесь. Чтобы управлять диодами, надо указывать их адреса: строку и положение — в двоичной системе счисления. Например, если я передаю «1, b’10000001», в первой строке загораются первый и последний диоды. Еще я реализовал функцию отрисовки пиктограмм: диод загорается за диодом с интервалом 100 мс. Для этого я быстро написал программку на Java — ее код вы найдете в репозитории.

Готовим гирлянду. Придется много работать руками: параллельная пайка диодов — дело простое, но довольно занудное. Зачистил провод — припаял к ножке диода, зачистил провод — припаял с другой стороны, надел термоусадочную изоляцию, провел зажигалкой… И так по два раза на диод: для «питания» и «земли» (анода и катода соответственно). В моей гирлянде диодов 12, на большее не хватило вечера воскресенья. :)

Код: на GitHub.

Дополнительная идея

Датчик-дальномер позволит увязать режимы мигания и другие действия с приближением к елочке. Например, чем ближе подходишь, тем интенсивнее мигает гирлянда. Ультразвуковой датчик определяет расстояние с точностью до сантиметра.

Защита елки от котиков (и котиков — от елки)

Вы ведь не хотите, чтобы ваше творение рассыпалось в прах при атаке фурри-мафии? Вызовет ли елка гастрономический интерес питомцев или вдохновит их «достать звезду» с верхушки — пострадать могут все, включая ваше хорошее настроение.

Чтобы избежать жертв и разрушений, доступ к елке надо ограничить, но как? Сигнализация станет раздражителем для всех домашних, и не факт, что вы успеете прибежать на ее зов и спасти ситуацию.

В интернете есть Arduino-рецепты отпугивателей для кошек и собак, но действуют они не на всех. Да и не надо! Лучше не отпугивать питомца, а отвлечь. Эту идею подал сетевой администратор, владелец котика и Arduino-энтузиаст Александр, а развить помог Иван Овчинников.

Котейка подходит к елке — включается отвлекающий сигнал в другой части комнаты. Кот отходит на безопасное расстояние — сигнал выключается.

Простейшая реализация: берем две Arduino Nano и обе расширяем модулями Bluetooth. К плате на стороне елки цепляем датчик-дальномер.

Вторую «Дуню» размещаем в противоположном от елки углу и ставим на нее простой зуммер. Будем имитировать интересный котику шуршащий звук — будто скребется мышь. Для этого можно подавать очень короткие низкочастотные сигналы: по 50–100 мс.

Если вместо «пищалки» будете использовать mp3-модуль, лучше не включайте записи голосов других котов, чтобы ваш не заподозрил конкуренцию и не начал метить территорию. :)

При старте создаем пару «передатчик-приемник». Елка включается — проверяет датчик и, если кто-то совсем близко, отправляет сигнал на удаленную плату, а та шуршит.

Можно сделать два режима: для людей и для котиков. Если кто-нибудь подходит к елке на метр-полтора, гирлянда приветственно мигает. А если объект уже в полуметре или ближе — включаем отвлекающий элемент.

Шары с багами и кодом

Украсьте елочку символами ваших достижений за год! В интернет-магазинах сейчас легко найти прозрачные елочные шары из двух половинок. В них можно помещать фотографии, картинки или предметы. Например, можно напечатать и вырезать символические изображения самых грозных багов, выловленных вами. Или напечатать вкладыш с поздравительным кодом в стиле:

{
Mate.beHealthy();
Mate.beWealthy();
Mate.beWise();
}
while (Mate.age < 125);

Если конструкция шара позволяет открывать и закрывать его, за картинками можете спрятать сюрпризы для семьи и друзей: конфеты, миниатюрные фигурки или ювелирные украшения.

LED-гирлянда за 5 минут

Совсем нет времени, но хочется сделать что-нибудь новогоднее на Arduino? Возьмите рецепт «ленивой гирлянды» с Project Hub! На днях автор проекта как раз оптимизировал код и добавил новые режимы мигания.

Такой гирлянды вы не найдете в магазинах — она показывает 33 оригинальных анимации и переключает их случайным образом. Никогда не знаешь, какой режим включится следующим! При этом сделать ее очень легко, потому что все самое интересное реализовано в коде.

Просто спаяйте три проводка, загрузите программу на плату — и анимированная гирлянда готова! А если разыграется фантазия и захотите поупражняться, всегда можно добавить собственные режимы мигания.

Чтобы выбрать для своей гирлянды только самые красивые анимации, загляните в файл xtmas_neopixel_lite.ino из git-репозитория проекта. Как всегда в таких случаях, лучше не удалять лишнее из списка. Просто закомментируйте начало строк с объявлением ненужных анимаций — так вы сможете быстро вернуть все на место, если передумаете.

Пример:

symmRun symRun;
//metSingle mtrSgl;

После этого надо будет исправить ссылки на классы в массиве анимаций — добавить и/или убрать необходимое.

animation* anims[] = { ... };

Простенький, но приятный новогодний штрих к интерьеру!

Главное, чтобы ко всем внешним атрибутам праздника прилагались добрые человеческие отношения и стремления. Новый год должен быть счастливее уходящего — постараемся сделать его таким. Хороших вам праздников!

программированиеновый годхоббиarduinocpp
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup