[Из песочницы] Новый Год, гирлянда, arduino

Начал изучать тему умных домов, пришел к Arduino и возникла необходимость потренироваться на кошках. А тут как раз Новый Год наступает… Дело ясное, будем делать десятиканальную гирлянду. С паяльником с детских цветомузыкальных времен, в принципе, дружен, но последние 20 лет занимался все больше программированием.В основном, комплектующие покупались на ebay. Некоторые, в местном радиомагазине, но в магазине они в 2–3 раза дороже. Китайцы рулят.Начал с рисования схемы и трассировки платы. Посмотрел несколько программ, остановился на CadSoft Eagle. Если разобраться с управлением, все что надо делает. Автотрассировка проявила себя никак — совершенно нелогичное размещение деталей и бесчисленные переходы между слоями. В итоге нарисовал схему в Eagle Schematic, трассировку делал вручную в Eagle Board — все детали уже были соединены линиями, оставалось только разместить куда надо и нарисовать дорожки. После небольшей практики все достаточно удобно.

Изучил как сейчас травят платы, метод принтера — утюга не впечатлил вообще.Купил в магазине текстолит с позитивным фоторезистом, напечатал плату на пленке (без инверсии), наложил пленку на текстолит, проэкспонировал две с половиной минуты в солярии, проявил в 1,5% растворе гидроксида натрия (NaOH) и протравил в 30% растворе хлорного железа (FeCl3).

Результат — сказка! Все очень четкое, мелкие буквы остались на своих местах. Далее лудим, паяем.

d3e1ee6ffe5a42ce8a1a06436b275dbb.gif

Как уже писалось на Хабре, чтоб программировать Arduino Pro Mini без танцев с бубном, надо покупать правильный USB to TTL UART модуль с пином DTR.

Логика программы: одна ветка гирлянды (24 диода) — один бит, т.е. состояние десяти веток задается десятью битами числа (0 — все выключено, 2^10–1 — все включено).Есть некоторое количество шаблонов переключения. При подаче питания программа начинает перебирать шаблоны в случайном порядке.

— При коротком нажатии кнопки происходит переключение на полностю случайное включение каждой ветви.— Среднее нажатие кнопки меняет в цикле кратность задержки, т.е. базовая задержка 500 мс умножается на 1–3.— Длинное нажатие кнопки переводит девайс в сервисный режим. Сначала загораются все ветви, потом при коротком нажатии кнопки последовательно загорается каждая.

Долго тупил в стандартную функцию возведения в степень pow () — возвращала совсем не то, что ожидалось. Пока не открыл документацию и не обнаружил, что в pow () аргументы float, результат double, а непонятки возникают при приведении в int. В итоге пришлось пользоваться самописной рекурсивной int power (int, int).

Потом наступил адский ад — распайка 240 диодов. И у каждого, заметьте, две ноги. Всего получается 480. Определенно, не самое эффективно проведенное время жизни. Еще наступил на грабли с термопистолетом. Он отлично усаживает термоусадку, но при этом жилы витой пары сплавляюся в единое целое. Выглядит без повреждений, но все провода закорочены. Одну ветку полностью переделывал.

В итоге получилось замечательная гирлянда:

[embedded content]

Всех с наступающим Новым Годом, счастья и здоровья!

Список использованных деталей:0. Arduino Pro Mini, 5V, 16M1. Резисторы R11-R20 — 220 кОм, все остальные, в том числе и токоорганичивающие на LEDы, 220 Ом3. N-канальный полевой транзистор Q1-Q10 — IRFZ44N. В принципе, ток в LED цепях течет небольшей, транзисторы или сборку можно взять и менее мощные. На 20V питания и цепи из 24 LED, ток порядка 20 мА4. Блок питания от ноутбука Dell. Выдает +20V5. Линейный стабилизатор напряжения 5V для питания Arduino — ST78S05. Сильно греется, пришлось ставить на радиатор.6. Конденсаторы к стабилизатору 220u/35V, 47u/16V7. 240х LED 5 мм + 11х LED 3 мм для индикации8. Кнопка9. 10 м UTP кабеля, который был разрезан и на его жилы паялись диоды.

Processing исходник

© Habrahabr.ru