КМБ для начинающих ардуинщиков


Замануха
ArduinoВы всю жизнь завидовали подросткам-гикам из американских фильмов, которые не напрягаясь из всякого хлама делают роботов или систему контроля доступа в комнату?
Вам надоело писать программы на комп — хотите увидеть как ваш код заставит дрыгаться и ползать что-то материальное, прямо на столе?
Всегда хотели научится делать что-нибудь электронное, но не знаете чем отличается транзистор от конденсатора?
С недавних пор, благодаря итальянцам, ваши мечты могут несколько материализоваться.
Речь пойдёт о довольно известной, и многим уже изрядно надоевшей, платформе Ардуино.

Итак что же это за платформа, чем она может помочь радиоламмеру почувствовать себя гиком от электроники и почему заслужила ненависть в среде профессионалов?

Коротенько.
Arduino — это банальный радио-конструктор, весьма простой, но достаточно функциональный для очень быстрого прототипирования и воплощения в жизнь самых безумных идей. Эта плата даёт возможность познакомиться с микроконтроллерами и реализовать свои идеи в железе, часто, даже не беря в руки паяльника.

Основа платформы – собственно плата ардуино, со своим стандартом расположения выводов, программируемая из-под своей среды (Ардуино ИДЕ) на языке Виринг (фактически С++). Благодаря простоте освоения и доступности платформа получила широкое распространение, появились клоны платы, некоторые с полезными улучшениями.

Документация и схема Arduino распространяется под лицензией Creative Commons Attribution Share-Alike и доступны на официальном сайте Arduino.
Однако, само название Arduino является торговой маркой и поэтому все платы-клоны называются по другому (хотя и включают в своём названии «duino»)
Например, самый известный клон — Freeduino.

мотор-шилдФункционал платы довольно широк, но всё же ограничен, добавить возможностей можно с помощью плат расширения – шилдов. Вот в этих шилдах и зарыта основная крутизна платформы.
Единый стандарт на расположение выводов (у оригинальной платы и у клонов), а также растущая популярность, сделали её привлекательной для разработки сторонними производителями сотен шилдов. Нет другой подобной платформы с таким набором возможных расширений. Например, Ethernet-шилд позволяет подключить Arduino к компьютерной сети и даже работать в Интернете (клиентом или сервером).

Ещё есть Motor-шилд, Wave-шилд, GPS-шилд, GSM-шилд, Wi-Fi-шилд, LCD-шилд, — Bluetooth-шилд и т.д.
И всё это даже не беря паяльник в руки!GPS-шилд
Поэтому саму плату часто сравнивают с материнкой компа, а шилды – с платами расширения – звуковухами, видюхами и пр. (не совсем корректно, конечно, но суть в целом отражает).

Любая возможность автоматизировать что-то с лёгкостью реализуется с Arduino!
Выкладывать своё сердцебиение в Twitter или напоминать про полив цветов через Интернет?
Пожалуйста!
Зачитывать RSS-ленту, слушать музыку ветра или сигналы из муравейника через ИК-маяки – легко!
Автоматизация аквариума, элементы умного дома, кодовый замок или цифровая отмычка…
А какое поле деятельности для робототехники!

Поподробней про железо
Сама плата ардуино — это просто микроконтроллер AVR (Atmega8/168/328 или Atmega1280/2560), прошитый бутлоадером с минимальной необходимой обвязкой и преобразователем USB-UART.
Понятно?
Не очень? Тогда по пунктам=)

Микроконтроллер (МК) это такая микросхема в которую можно засунуть программу. Программа эта может обрабатывать нажатия кнопок, вращения ручек управления, получать сигналы с различных датчиков, общаться с компом или другими устройствами через различные интерфейсы, выводить обработанную информацию на различные устройства индикации, или управлять исполнительными устройствами.

С кнопками и ручкам вроде всё понятно, а вот про остальное поясню —
Датчики могут быть чего угодно — температуры, давления, освещённости, присутствия, ускорения, расстояния до препятствия и пр. Интерфейсы как довольно специализированные I2C, SPI, CAN и пр. так и распространенные COM-порт, USB, Bluetooth, WiFi, Ethernet и пр. Устройства индикации от светодиодов и пищалок до графических дисплеев. Исполнительные устройства – моторчики, сервомашинки, клапана, реле, электромагниты и пр.

С чем то из этого списка МК может работать напрямую (надо только два проводка, чтобы соединить МК и кнопку), а для каких-то других примочек потребуются дополнительные детали (крутить мотором напрямую не получится – нужен какой-нибудь усилитель-драйвер).

Вот эти дополнительные детали необходимые МК для работы с внешним миром и называют обвязкой.

Строго говоря обвязкой называют электронные компоненты(радиодетали) необходимые для работы МК(или ещё чего-нибудь) в данных условиях. Кое что жизненно необходимо для запуска самого МК, а что-то просто добавляет функционал и удобства всякие.

Arduino
Итак обвязка МК для ардуины следующая:

Кварцевый резонатор — задаёт тактовую частоту 16МГц для МК.

Линейный стабилизатор — обеспечивает стабильное питание для МК.
На плату мы можем подавать от 7 до 12В
(Например — 7-вольтовый адаптер от кассы, 9-вольтовая крона, 12в в машине.) «лишнее» напряжение стабилизатор отбросит в тепло, а на МК пойдёт ровно 5В.

Преобразователь USB-UART – чтоб МК мог общаться с компом по USB.
UART у МК уже есть на борту, а USB – нету.
Первые ардуины подключались к COM-порту (это и есть UART =) – требовалось лишь согласовать уровни (у компа — от -12В до +12В, у МК от 0 до +5В), потом решили что USB всё же удобней, но пришлось ставить преобразователь интерфейсов.

Светодиоды — Индикатор питания (PWR)
Пользовательский (L) – им может индицировать состояние выполняемой программы
RX, TX – для индикации обмена данными с компом по USB

Кнопка Reset – для сброса МК и, соответственно, перезапуска прошитой программы

Разьёмы — для штекера питания, USB шнурка, подключения внешнего программатора (SPI/ICSP) для соединения с внешними элементами или втыкания шилдов.

Как уже упоминалось, сердцем ардуины является МК AVR.
Также, упоминалось, что МК это программируемая микросхема, которая может что-то воспринимать, как-то это обрабатывать и демонстрировать внешнему миру свою реакцию на всё происходящее.
Так вот, воспринимает МК события внешнего мира по изменению уровней напряжения на своих выводах-ножках. Также и реакцию демонстрирует – меняет уровни напряжений на выходах.
Уровни напряжений принято называть сигналами, а сигналы делить на цифровые и аналоговые. (часто сигналами называют не только напряжение в данный момент времени, но и последовательность их за какой-то промежуток времени)

Следует оговорится, что любые сигналы на выводах МК не должны быть ниже 0 и не должны превышать напряжения питания (5 вольт). Если нужно проанализировать сигнал выходящий за эти пределы, то придётся его перед подачей на МК преобразовать произвольным методом и привести к этому диапазону.

Цифровых сигналов всего два вида – 0 и 1 (логический ноль и логическая единица, LOW и HIGH). Причём за ноль принимается все что меньше 2 вольт (т.е 0…2 = LOW) а за единицу всё что выше 3 вольт (т.е 3…5 = HIGH) Всё что между (т.е 2…3) ни вызывает у цифровых устройств никаких эмоций – это считается помехами и игнорируется.
Это если считывается внешний сигнал, а если выводится то HIGH=5В, LOW=0В.

Все ноги у МК (не считая нескольких отданных под питание, тактирование, сброс, и опорное напряжение для аналоговой части) могут работать в режиме цифровых вводов/выводов. (то есть с одного и того же вывода программа может как считать внешний цифровой сигнал, так и самостоятельно выставлять 0 или 1)

Ну и зачем это надо? — спросит пытливый читатель=) цифровой ввод – для кнопки или датчика (многие датчики имеют цифровой выход типа: событие наступило — 1 не наступило – 0. Например — есть препятствие на расстоянии менее 30 см. — 1, концентрация метана в атмосфере выше допустимой – 1 и т.п.) А в случае выхода можно что-нибудь включать-выключать.

Аналоговый сигнал это всё множество цифирек от 0 до 5 вольт (т.е и 1.5В и 3.136В), вот только представляется внутри МК это всё в виде цифирек (от 0 до 1023 ) и значит имеет определённую разрешающую способность – (ограниченную точность) — порядка 5мВ. (точнее 0,004883В, т.е 0,003В=0; 0,015В=3; 1В=204)
Да, а ещё аналоговый сигнал оцифровывается с ограниченной скоростью – приблизительно 10000 раз в секунду (иногда не хватает=).
С аналоговым выводом чуть сложнее. Он есть, но МК AVR не могут непосредственно выдать произвольное напряжение, зато он может генерить ШИМ.
Подробности ниже не переключайтесь=)

Но сигналы сами по себе не интересны – надо чтоб их что-нибудь воспринимало, какой нам интерес от периодически переключающегося (то 0 то 1) вывода если он никуда не подключен? Вот если подцепить к нему светодиод то он будет моргать=) Красиво. Возможно даже информативно. А лампочку можно? А мотор? Напрямую нельзя=(
Тут следует вникнуть ещё в один электрический нюанс. То, что подключается к источнику сигнала (выводу МК) называют нагрузкой. Нагрузка потребляет от источника ток — тем больший, чем меньше её сопротивление. Мощная нагрузка – низкоомная — потребляет бОльший ток, высокоомная нагрузка — маленькая — потребляет меньший ток. Закон Ома ещё кто-нибудь помнит?=))
А источник, в свою очередь, может отдать определённый ток – меньше можно, больше ни-ни! (сгорит, ну или просто просядет напряжение, но это уже нюансы=)
Так, выводы Атмеги могут отдать 40 мА. Светодиодам хватит, а чем покрупнее придётся рулить через драйвера какие-нибудь. L293D
Например, чтобы покрутить моторчики для Ардуины предусмотрен Мотор-шилд. На нём, как раз и установлена микросхема-драйвер L293D задача которой – принимать управляющие сигналы от МК и согласно им подавать питание на мощный мотор.
Вход у неё высокомный — от выхода МК она потребляет маааленький ток, а на мотор может подавать напряжение вообще с другого источника (можно поставить силовую батарею аж на 36В) и ток пропускает через себя до 1.2А!

Но просто включать-выключать мотор как-то не концептуально, хотелось бы регулировать скорость вращения, тем более что мы заикнулись о том, что МК выдаёт аналоговый сигнал с помощью какого-то-там ШИМ-а.

Итак, ШИМ (Широтно-Импульсная Модуляция) или PWM – (Pulse Width Modulation).
Суть метода заключается как раз в включении-выключении чего-нибудь инерционного, только ооочень быстром включении-выключении. То есть ножка МК «дергается» — 0-1-0.. почти 500 раз в секунду.

Кстати последовательность 0-1-0, принято называть импульсом, а длительность нахождения вывода в состоянии HIGH (1)– шириной импульса.

Причём, время в котором вывод находится в состоянии HIGH (1, т.е. «включено») и LOW (0, т.е. «выключено») можно регулировать – т.е. менять (модулировать) ширину импульса.
Наша нагрузка (например мотор включенный через драйвер) будет получать (в среднем за какое-то время) больше или меньше энергии. Дёрганье происходит с очень большой частотой, поэтому толчки сглаживаются и усредняются (интегрируются), например инерцией ротора двигателя. И скорость его вращения будет уже не максимальной, а меньшей — соответствующей соотношению времени действия 1 и 0.
Если подключить светодиод, то в роли интегратора выступит инерция нашего глаза – мы увидим изменение яркости свечения, а не изменения моргания.
Если же на выходе не предусмотрено ничего инерционного, а очень хочется получить изменяемое напряжение, то подключают специальную интегрирующую цепочку и снимают усреднённый и совершенно аналоговый сигнал уже с неё.

Программно можно организовать ШИМ на любом выводе, но это будет жрать вычислительные ресурсы, поэтому пользуются аппаратными «генераторами» закреплёнными за строго опредёлёнными ножками.

ТТХ
Мы тут всё говорим о функционале о его широте, но ограниченности, как его расширить и что для этого нужно, а о том, что собственно может сама плата так и не сказали.
Исправляюсь.
Теперь, когда разобрались с тем как МК общается с внешним миром можно наконец со всей осмысленностью посмотреть на ТТХ Ардуины и подумать, что из всего можно сделать.

Итак резюмируем все данные:

Питание
Постоянное напряжение 7 — 12В
Либо от USB

Порты ввода/вывода:
14 цифровых вводов/выводов, (работают с напряжением 0 и 5в)
6 из которых могут выдавать ШИМ сигнал,
+ 6 аналоговых входов

естественно аналоговые входы тоже можно использовать как цифровые, итого выходит 20 вводов/выводов =).

Аппаратно поддерживаемые интерфейсы
(программно можно ещё много всего наворотить=)
USB (только с компом – определяется как USB Serial Convertor и добавляет в
систему свой последовательный порт)
UART
I2C
SPI

Память (для Atmega328)
32 Кбайт программируемой памяти (тут хранится ваша программа)
2 Кбайт ОЗУ(RAM — тут всякие промежуточные вычисления)
512 байт энергонезависимой памяти (EEPROM) (сюда можно запихивать всякие изменяемые в процессе работы настройки, чтобы они сохранялись после отключения питания)

Тактовая частота
Работают все ардуины на частоте 16МГц.

Arduino позволяют использовать большую часть выводов микроконтроллера во внешних схемах.
То есть пару от нас всё-таки спрятали – это выводы предназначенные для подключения кварцевого резонатора. Atmega может тактироваться безо всяких внешних элементов – от внутреннего генератора, тогда эти выводы можно использовать, но внутренний генератор может раскачать МК только до 8МГц. Так что вздохнули и забыли об этих выводах – удвоение производительности важнее=)

В классической ардуине(Duemilanove/UNO) МК вставлен в панельку (разъем такой, специальный, для микросхем) и можно его заменить если сожгли или захотели провести апгрейд/даунгрейд.
В некоторых клонах и более современных моделях стоят впаянные атмеги, в корпусах для поверхностного монтажа (для снижения стоимости или уменьшения высоты платы). Такие корпуса весьма проблематично перепаять самостоятельно (расстояние между ножками МК менее 1мм).

Вообще ардуин а есть ещё куча разновидностей версий и клонов, но почти все они друг с другом совместимы. С шилдами правда не все… Подробней можно посмотреть здесь.

Про программирование
Программа для МК обычно называется прошивкой, а прошивают её в кристалл с помощью специальных устройств – программаторов.
Для разных МК и для разных нужд существует куча программаторов – от специализированных (шьёт только AVR) до универсальных(шьёт всё), от простых (7 проводков от LPT-порта к ножкам МК) до сложных (часто и сами они построены на МК=).
Общего у всех программаторов одно – их надо где-то взять (купить, взять у товарища, спаять)
И тут проявляется первое свойство ардуины – ей не нужен программатор – ваш код может заливаться в неё через обычный USB шнурок.
Достигается это не встроенным программатором, а специальной прошивкой – бутлоадером.

Кстати, пользовательская прошивка в ардуиновской терминологии называется скетч.

Ардуиновский бутлоадер это такая специальная программа которая запускается сразу после включения МК и слушает UART ожидая спецкоманды.
Если команда поступила, то следующие за ней данные будут «прошиты» в МК (будет загружен скетч). Если команды не поступило то бутлоадер передаёт управление предыдущей прошитой программе(скетчу).
Т.о. процесс загрузки скетча происходит следующим образом – комп плату сбрасывает(резетит), посылает команду на прошивку, передаёт сам скетч, проверяет записанное, затем снова резет, бутлоадер ждёт команды, её естественно не поступает, начинает выполнятся свежезалитый скетч. Все этм махинации происходят самостоятельно – от юзера требуется только нажать одну кнопку=)
В картинках.

Отсюда вытекают ещё несколько полезных свойств киллерфич ардуины:
1.Все манипуляции между компом и ардуиной (как обмен данными так и прошивка) происходят по одному каналу связи – USB. Не надо лишних проводов, не надо ничего вставлять – вынимать, не надо ничего нажимать на плате.

Вот поступали к вам на комп данные об активности кота в соседней комнате у миски по USB, захотелось снизить чувствительность – много лишних сработок – подправили прошивку, залили и снова получаете данные. Всё не вставая со стула. Удобно=)

2.Наличие бутлоадера защищает МК от кривых рук начинающего. Прямой прошивкой обычным программатором заблокировать контроллер до невменяемого состояния(кирпич) довольно просто, а при работе через бутлоадер до опасных настроек не добраться, и чтоб вы не делали – все ваши эксперименты через Ардуино ИДЕ будут безопасны (разумеется только с программной точки зрения=).

Кстати саму ардуину можно использовать как программатор и шить ею другие кристаллы, но это совсем другая история=)

Скетчи пишутся в Ардуино ИДЕ на Виринге который фактически С++. Через неё и загружаются. Там же есть терминал для обмена данными с платой. Всё в одно месте — служба одного окна практически=)
Всё программирование просто, интуитивно понятно, куча встроенных и внешних библиотек, есть масса документации, разобраться и начать работать с ардуиной можно буквально реально за один вечер!

Кстати, Ардуино ИДЕ — это просто надстройка над WinAVR…но это тоже совсем другая история=)

За и против. Холивар
В общем всё тёплое и пушистое =)
Естественно это всё не просто так, за простоту приходится платить.
Для программирования вам практически не понадобятся знания о программировании именно МК и их внутренней архитектуре. Это и плюс и минус. Происходит некоторое абстрагирование от «железа». У юзера нет понимания что происходит внутри кристалла — пишется «немикроконтроллерный» код, к тому же формируемая Ардуино ИДЕ прошивка и так не оптимальна (в силу упрощений и ограничений).
Часть очень важных и полезных функций МК спрятана от пользователя — «что бы не усложнять»=)
Простота и пушистость ардуины, а так же дружелюбность необозримого сообщества, резко снизила порог вхождения. Теперь программером-железячником (эмбеддером) могут себя почувствовать (а то и считать и называть) весьма далёкие от технических наук люди — и гуманитарии, и дизайнеры, и домохозяйки, и (оужос!)офисный планктон, и куда без них, школота дети.
Собственно сообщество в значительной мере из таких людей и состоит, и им же развивается.
Естественно появился специфический стиль программирования (копи-паст из примеров) и сборки девайсов (проводки-макетки-скотч-китайские модули) — Ардуино-стайл (Arduino-style) неизменно раздражающий более профессиональных профессионалов.

За это некоторые и невзлюбили эту, по сути, замечательную платформу. То есть любой школьник купит ардуину день-два поковыряет её, изучит, сделает какой нибудь таймер или систему жизнеобеспечения аквариума и станет говорить, что программирует контроллеры.
Раздражает. Согласен.
Толпы фанатов (в основном зарубежных) напоминающих эпл-гиков, пускающих по форумам восторженные слюни на своих ардуино-роботов, ардуино-таймеры, ардуино-хакерские-девайсы, и прочие ардуино-свистелки-перделки-мигалки-поделки.
Притом что можно всё это сделать луче, дешевле, правильнее, изящнее.
Раздражает. Согласен.
Но для того чтобы делать луче, дешевле, правильнее, изящнее, что бы действительно можно было сказать, что ты программируешь контроллеры надо долго учится. А начинать с чего то надо? И ведь лучше не с моргания светодиодом, а с по-настоящему интересных устройств. А многим вообще-то и так хорошо. Работает ведь? Функции выполняет? Зачем в дебри лезть. Ну да дороже, не оптимально, не изящно. Зато здесь и сейчас.

В общем, с одной стороны вы за очень короткий срок научитесь делать законченные рабочие устройства… А надо ли смотреть на другую сторону? =)
Если очень хочется дальше развиваться можно писать не на Виринге а на С (хоть на ассемблере) не в Ардуино ИДЕ а в любом компиляторе (хоть в том же WinAVRе который в папке с Ардуино ИДЕ лежит)
Надоел загрузчик? Грохнуть его – есть возможность шить Ардуину через USB бит-бангом – потребуется только собрать шнурок-перемычку – и в вашем распоряжение все ресурсы кристалла и возможность шить его напрямую.

В общем, не парьтесь, приобщайтесь — это просто и прикольно=)

Вникать дальше
ХоумМейд Arduino — как сделать Arduino своими руками

По теме
Ардуино что это и зачем?
Почему Arduino побеждает и почему он здесь, чтобы остаться?
Arduino, термины, начало работы
Состав стартера (точка входа для начинающих ардуинщиков)
Возможные ошибки при работе с Arduino

Купить Arduino или CraftDuino — можно в нашем Магазине.


0 комментариев на «“КМБ для начинающих ардуинщиков”»

  1. Да, Arduino это прикольно — самое то для приобщения к миру цифровой техники.
    Жалко только, что Arduino для детей трудновато, как мне кажется, будет. Им хорошо бы с радиоконструктора начать (лампочки, резисторы, индуктивности, выключатели). И в принципе такие детали и приобрести не проблема, вот только ещё бы схемок под это дело интересных найти и описания элементов бы.

    • Sketch for Arduino (визуальное программирование для детей) в младших классах идет на ура!

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение