Программирование и IT
Arduino для начинающих
Arduino — плата с микроконтроллером, которой можно объяснить, когда зажечь светодиод, а когда прочитать датчик. Программа пишется на упрощённом C++, заливается по USB и работает сама, без компьютера. Первое мигание светодиодом занимает минут двадцать.
В этой статье
Техника безопасности — до первой схемы#
Правила короткие, и нарушать их не стоит даже «один раз, аккуратно».
Сетевое напряжение 220 В — не для начинающих. Всё, что включается в
розетку, разбирать, переделывать и подключать к плате нельзя. Управление
комнатным светом, чайником, обогревателем выглядит соблазнительной первой
задачей и таковой не является: ошибка здесь стоит жизни, а не сгоревшей платы.
Начинай и первый год оставайся в низковольтных схемах: питание от USB,
батареек или адаптера на 5–12 В.
Не замыкай питание накоротко. Провод между выводами 5V и GND — это
короткое замыкание: плата греется, порт компьютера уходит в защиту, дорожки
могут выгореть. Перед подачей питания глазами пройди по схеме от плюса к
минусу и убедись, что на пути есть нагрузка.
Светодиод — только через резистор. Без него светодиод выходит из строя
почти сразу и может утянуть за собой вывод платы.
Отключай USB перед перекоммутацией. Переставлять провода на работающей
плате — надёжный способ что-нибудь спалить.
Мотор напрямую к выводу не подключается. Вывод Arduino Uno рассчитан
примерно на 20 мА, а двигатель, реле или длинная светодиодная лента потребляют
в десятки раз больше. Между ними ставят транзистор или готовый модуль-драйвер
с отдельным питанием.
Соблюдай полярность. Электролитический конденсатор, включённый наоборот,
вздувается и может хлопнуть; у светодиода длинная ножка — плюс.
Что такое плата и какую взять#
Arduino Uno — плата, на которой стоит микроконтроллер ATmega328P, разъём USB
для связи с компьютером и ряды выводов по краям. Ключевые числа: тактовая
частота 16 МГц, 32 КБ памяти под программу, 2 КБ оперативной, рабочее
напряжение 5 В.
Выводы делятся на три группы:
- цифровые, с номерами 0–13 — умеют только два состояния, «есть 5 вольт» и
«нет»; шесть из них (3, 5, 6, 9, 10, 11) дополнительно умеют выдавать
среднее значение; - аналоговые входы A0–A5 — измеряют напряжение и превращают его в число;
- питание — выводы
5V,3.3V,GND(общий, «земля») иVIN.
Первой платой бери именно Uno: у неё самый большой запас готовых примеров и
разъёмы, в которые провод просто втыкается. Nano — та же начинка в меньшем
корпусе, удобна, когда схема переезжает в корпус готового устройства.
Кроме платы нужен набор мелочи: макетная плата без пайки, перемычки,
светодиоды, резисторы на 220 и 330 Ом, тактовые кнопки. Всё это продаётся
стартовыми наборами и стоит недорого.
Среда и первая заливка#
Скачай Arduino IDE с официального сайта и установи. Дальше три шага:
- подключи плату кабелем USB;
- в меню «Инструменты» выбери тип платы — Arduino Uno;
- там же выбери порт: в Windows это
COM3и подобные, в Linux
/dev/ttyUSB0или/dev/ttyACM0, в macOS —/dev/cu.usbmodem….
Если в Linux порт виден, но заливка отказывает по правам, пользователя
добавляют в группу dialout и перезаходят в систему — эта логика разобрана в
разделе о правах доступа в шпаргалке по командам
Linux.
Две кнопки вверху окна: галочка проверяет программу, стрелка компилирует и
заливает её в плату. Загруженная программа остаётся в памяти микроконтроллера
и стартует сама при каждой подаче питания — компьютер после заливки не нужен.
Первая программа: мигание#
Программу для Arduino называют скетчем. В ней всегда есть две функции.
void
void
setup() выполняется один раз при включении — в ней настраивают выводы и
связь. loop() повторяется бесконечно, пока есть питание. pinMode задаёт
режим вывода: OUTPUT — выдавать, INPUT — читать. digitalWrite ставит на
выводе высокий или низкий уровень. delay останавливает программу на заданное
число миллисекунд, то есть 1000 — это одна секунда.
Залей скетч — и светодиод, впаянный на самой плате рядом с выводом 13,
замигает. Вместо числа 13 обычно пишут LED_BUILTIN: на разных платах
встроенный светодиод сидит на разных выводах.
Своя схема со светодиодом#
Теперь тот же скетч, но со светодиодом на макетной плате.
Собери цепь: вывод 8 платы → резистор → длинная ножка светодиода; короткая
ножка светодиода → GND. В скетче замени 13 на 8 в обеих функциях.
Номинал резистора считается по закону Ома. Светодиод не сопротивление, у него
своё падение напряжения — примерно 2 В у красного. Остаток напряжения гасит
резистор:
R = (U питания − U светодиода) / I
R = (5 В − 2 В) / 0,01 А = 300 Ом
Ток 10 мА (0,01 А) — комфортная для светодиода величина. Точно на 300 Ом
резистора в наборе не будет; берут ближайший больший из ряда — 330 Ом, и это
правильная сторона округления: меньший номинал даёт больший ток. Резистор на
220 Ом тоже распространён и допустим — ток получится около 13,6 мА.
Полярность светодиода: длинная ножка — анод, подключается к выводу платы через
резистор; короткая — катод, идёт на землю. Вставили наоборот — не загорится, но
и не сломается.
Читать входы и датчики#
Кнопка подключается между выводом и землёй, а внутренний подтягивающий резистор
включается прямо в программе:
void
void
Перевёрнутая логика тут не ошибка: при INPUT_PULLUP вывод сам подтянут к
питанию, а нажатая кнопка соединяет его с землёй.
Serial.begin(9600) открывает связь с компьютером, Serial.println шлёт туда
строку. Окно «Монитор порта» в среде показывает эти строки — это основной
инструмент отладки: переменную нельзя посмотреть отладчиком, зато можно
напечатать.
Аналоговые входы измеряют напряжение и выдают число от 0 до 1023, где 0 — ноль
вольт, а 1023 — пять. Так читаются потенциометр, фоторезистор, датчик
влажности почвы:
int raw = ; // 0…1023
float volts = raw * 5.0 / 1023.0; // перевод в вольты
Обратная операция — analogWrite(pin, value) со значением от 0 до 255: вывод
быстро переключается между нулём и пятью вольтами, и светодиод светится вполнакала,
а мотор через драйвер крутится медленнее.
Датчики для начала: DHT11 или DHT22 — температура и влажность, HC-SR04 —
расстояние ультразвуком, DS18B20 — точная температура, фоторезистор — уровень
освещённости. К большинству из них есть библиотека: «Инструменты» →
«Управление библиотеками», найти по названию, установить, взять пример из меню
«Файл» → «Примеры».
План первых проектов#
- Мигание и его вариации. Два светодиода поочерёдно, потом «бегущий
огонь» из пяти — здесь же осваивается массив и циклfor. - Кнопка. Включение по нажатию, затем переключатель, который меняет
состояние по каждому нажатию. Столкнёшься с дребезгом контактов и реши
его паузой или проверкой времени. - Плавное свечение.
analogWriteв цикле — светодиод разгорается и гаснет. - Датчик и порог. Фоторезистор зажигает свет, когда темнеет; значения
смотри в мониторе порта и подбирай порог по ним. - Показания наружу. Экран на I2C или трёхцветный светодиод как индикатор
состояния. - Устройство целиком. Термометр с экраном, автополив по влажности почвы,
счётчик у двери. Здесь появляется первая настоящая задача — уйти от
delay, который блокирует всю программу, к сравнениюmillis().
Отдельный совет про delay: пока в скетче одна задача, он удобен. Как только
нужно одновременно мигать и слушать кнопку, пауза начинает мешать, потому что
на это время плата не делает ничего. Приём «запомнить millis() и сравнивать»
разбирается в примере BlinkWithoutDelay из стандартного набора среды.
Частые ошибки#
Не выбран порт или плата. Самая частая причина сообщения об ошибке при
заливке. Проверь оба пункта меню «Инструменты».
Забыт общий провод. Если у схемы своё питание, её «земля» обязана быть
соединена с GND платы, иначе показания хаотичны, а модуль молчит.
pinMode в loop. Режим настраивают один раз в setup; в цикле он
просто тратит время.
Светодиод без резистора «на попробовать». Работает ровно до того момента,
когда перестаёт.
Долгие вычисления внутри loop. Микроконтроллер не многозадачен: пока
считается одно, остальное не выполняется.
Язык скетчей — это C++ с готовым набором функций и без ручного запуска сборки.
Всё, что ты выучишь про типы, циклы и функции в обычном
си плюс плюс, здесь работает один в один.
План по этапам
- Подключить и залить примерПоставить среду, выбрать плату и порт, залить Blink из стандартных примеров.
- Собрать свою цепьВынести светодиод на макетную плату через резистор, посчитав номинал по закону Ома.
- Добавить входПодключить кнопку через INPUT_PULLUP и управлять светодиодом по нажатию.
- Прочитать датчикСнять значения с аналогового входа, вывести их в монитор порта и подобрать порог срабатывания.
- Уйти от delayПереписать мигание на сравнение millis() так, чтобы кнопка отзывалась мгновенно.
- Собрать устройствоСоединить датчик, индикатор и логику в одну законченную вещь, работающую без компьютера.
Начать изучать эту тему у себя
План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.
Проверь себя
1.Какая функция скетча выполняется один раз при включении платы?
2.Какая функция задаёт вывод на работу в режиме выхода?
3.Питание 5 В, падение напряжения на светодиоде 2 В, нужный ток 0,01 А. Сколько ом должен быть резистор по закону Ома?
4.Какое число передать в delay(), чтобы пауза длилась 2 секунды?
Источники
-
Документация ArduinoПервоисточник: описание плат, справочник функций языка, руководствабесплатно
-
Справочник языка ArduinopinMode, digitalWrite, analogRead и остальные функции с примерамибесплатно
-
Tinkercad CircuitsСборка и запуск схемы с Arduino в браузере, без покупки платыбесплатно
Было полезно?