Участник:Коллектив Авторов/Arduino
Ардуино (англ. Arduino, рус. пердуина) — электронный конструктор на базе микроконтроллера AVR w:ATmega и простой среды программирования. Ввиду своей простоты и доступности весьма популярен как среди небыдло-школоты, так и среди взрослых дядек, всерьез занимающихся разработкой электронных устройств.
Область применения
Сабж изначально заточен под создание интерактивных устройств (получили сигнал с датчика — отреагировали включением или отключением исполнительного устройства). Из этого непосредственно следуют его основные применения:
- Любительские поделки. Типичный пример — домашняя автоматизация: от напоминания злобным писком, что посетитель сортира забыл за собой смыть и выключить свет, и до… на что хватит фантазии и комплектующих.
- Обучение основам цифровой электроники и программирования. Мигающий светодиод™ — это здесь.
- Проектирование и макетирование цифровой электроники. Особенно ценится студентами соответствующих специальностей, так как позволяет за один вечер сделать курсовую работу, собрав и запрограммировав прототип на базе сабжа.
Матчасть
Основная плата
Плата, что неудивительно для конструктора, ничего особенного собой не представляет: собственно контроллер (на фото — ATmega 328P), минимальный набор всякой мелочи и — самое главное! — разъемы под периферию. На самом деле, у Arduino Uno на плате целых два контроллера: квадратная фиговина с 32 ногами являет собой точно такой же контроллер AVR ATmega модели 16U2, который не сильно отличается от 328P (16 кб памяти вместо 32 кб, зато с аппаратной поддержкой УПШ) и обеспечивает связь «главного» контроллера с компутером, выполняя функции программатора и аппаратного отладчика. Инженер-ага намекает, что вспомогательный контроллер тоже может быть доступен разработчику, хотя это и требует сильного колдунства (спойлер: два шестиконтактных разъема внутрисхемного программирования (ICSP) на плате служат для подключения внешнего программатора к соответствующему контроллеру).
Периферия
В результате надмозгового перевода с итальянского на аглицкий внешние модули сабжа получили название «щит» (англ. shield; по-русски их, разумеется, никто щитами не называет). Тысячи их! Строгой классификации нет и быть не может, но большинство из них принадлежит одной из следующих категорий:
- датчики (температуры, влажности, освещенности, магнитного поля, черта лысого итд.)
- исполнительные устройства (от светодиодных индикаторов до мощных симисторов с опторазвязкой, позволяющих коммутировать многокиловаттные нагрузки — например, электрочайник)
- накопители (мелкосхемы памяти, SD-флешки итд.)
- коммуникационные устройства (например, Bluetooth и WiFi)
- свистелки
- дуделки
- перделки
- прочая хуйня
Программирование
Среда разработки
Вполне заслуженно является традиционной мишенью для калометания, ибо сказано: «создайте систему, которой сможет пользоваться полный идиот, и только полный идиот будет ей пользоваться». Теоретически способна вызвать интерес у детсадовцев и у близких к ним по уровню интеллекта особей, но на практике быстро надоедает даже им, ибо уныла чуть более, чем полностью.
Язык
Си, синьоры! Точнее, специальное его подмножество, специально разработанное для сабжа и поддерживаемое средой разработки. Упрощенно говоря, можно считать, что где-то в недрах описана куча хитрых макросов (посредством #define) и определена функция main() примерно такого содержания:
void main(void)
{
setup();
for(;;)
loop();
}
К счастью, никто не мешает использовать для разработки канонiчный C/C++, а результат работы компилятора avr-gcc заливать в контроллер посредством дешевого программатора — именно такое использование сабжа считается единственно кошерным.
Пример программы
// мигающий светодиод™
#define LED_PIN 13 // см. фото: к этой ноге прямо на плате припаян светодиод
void setup()
{
pinMode (LED_PIN, OUTPUT); // будем использовать для вывода
}
void loop()
{
digitalWrite (LED_PIN, HIGH); // включаем светодиод
delay (1000); // ждем секунду (1000 миллисекунд)
digitalWrite (LED_PIN, LOW); // выключаем светодиод
delay (1000); // опять ждем секунду
}
Где взять?
Если хочется дешево и сердито — Китайпосылторг в помощь: для этого в простейшем случае достаточно зайти на Aliexpress и сказать «хочу сабж», после чего выбрать продавца, у которого рейтинг повыше, а цены пониже. Если сердитость важнее цены — есть Digikey, Mouser, Sparkfun и прочие наркодилеры.
В чем наебалово?
В цене периферийных модулей. Если цена китайского клона платы с контроллером вполне сравнима с ценой аналогичной платы, изготовленной на заказ в той же Поднебесной, то за обвес (даже китайский) приходится платить заметно больше — разумеется, по сравнению с обычными комплектующими.
Инженер-ага рекомендует более бюджетный и интересный, хотя и более сложный вариант: купить макетную плату («solderless prototype board»; прямо так и искать), в которую можно воткнуть дополнительные детали, а потом все это соединить между собой и подключить к сабжу проводами («jumper wire»). Ну а после того, как все номиналы деталей подобраны и большинство багов отловлено, уже можно собирать окончательный вариант устройства.
Альтернативы
Идея с использованием макетной платы имеет вполне очевидное дальнейшее развитие. Зададим себе вопрос «чем контроллер ATmega328P-PU принципиально отличается от других комплектующих» и ответим на него: «ничем». А это означает, что его можно точно также воткнуть в макетную плату, подключить шестью проводами программатор («AVR USB ISP»), рядом воткнуть кучку разноцветных светодиодов и хоть обмигаться.
А еще есть STM32F103. Но это уже ARM — то есть, совсем другая история архитектура.