Компонент · Контроллер

Arduino Uno

Arduino Uno — распространённая отладочная плата для изучения робототехники: логика 5V, простое программирование и устойчивость к ошибкам. Когда её выбирать.

Что это такое

Arduino Uno — компактная отладочная плата на базе 8-битного микроконтроллера ATmega328P производства Microchip. Она выводит выводы микросхемы на подписанные разъёмы, добавляет порт USB для программирования и питания и берёт на себя сложные части — регулятор напряжения, кварцевый резонатор, схему сброса, — чтобы вы могли сосредоточиться на коде и монтаже. Для огромного числа начинающих разработчиков робототехники Uno становится первым способом запустить двигатель или включить датчик.

Его долговечная привлекательность не в вычислительной мощности — по современным меркам он медленный и испытывает нехватку памяти. В этом и заключается прощение ошибок. Выводы 5 V выдерживают ошибки монтажа новичков, сообщество ответило почти на все возможные вопросы, а почти каждый датчик и драйвер для хобби-проектов поставляется с примером кода, рассчитанным на Uno.

Подписанная схема отладочной платы Arduino Uno: на левом крае находятся порт USB-B и разъём питания постоянного тока (DC), в центре — микроконтроллер ATmega328P, вдоль верхнего края — разъём цифрового I/O для выводов от D0 до D13, а вдоль нижнего — разъёмы питания и аналоговых входов от A0 до A5.
Arduino Uno с первого взгляда: USB и питание постоянного тока (DC) слева, ATmega328P выполняет вычисления, цифровой I/O проходит вдоль верхнего края, а питание и аналоговые входы — вдоль нижнего. Скачать SVG

Как это работает

Вы пишете скетч — программу на C++ с двумя функциями. setup() выполняется один раз при включении платы, после чего loop() работает бесконечно. Внутри них вы считываете входные данные и управляете выходами через выводы:

  • Цифровые выводы считывают или записывают сигнал HIGH/LOW (5 V / 0 V): нажатие кнопки, LED, вход направления драйвера двигателей.
  • Выводы PWM (с обозначением ~) имитируют аналоговое напряжение очень быстрым переключением. Так задаются скорость двигателя или яркость LED.
  • Аналоговые входы измеряют напряжение от 0–5 V и возвращают число от 0–1023. Так считываются потенциометр или аналоговый датчик линии.

На Uno нет операционной системы. Работает только ваш код, поэтому тайминг предсказуем — это ценно при замыкании контура управления на реальном роботе.

Когда его следует использовать

Выбирайте Uno, когда вы изучаете основы, когда вам нужны максимально доступные совместимые руководства и библиотеки или когда задача робота проста и требует работы в реальном времени: считать несколько датчиков, выполнять контур управления и приводить два двигателя. Робот, следующий за линией, обходящий препятствия или небольшая колёсная платформа с дифференциальным приводом полностью соответствуют его возможностям.

Выбирайте другое устройство, когда нужно Wi-Fi или Bluetooth (обычное решение — ESP32), сложная математика или компьютерное зрение (Raspberry Pi), либо большой объём памяти. Объём SRAM на Uno составляет всего 2 KB и заполняется быстрее, чем ожидают новички; обычно виноваты длинные строки и большие массивы.

Типичные ошибки

  • Это плата 5 V. Многие современные датчики рассчитаны на 3.3 V и могут повредиться от логики 5 V. Проверяйте техническое описание перед монтажом.
  • Не питайте двигатели от платы. Регулятор Uno не обеспечивает ток двигателей; используйте отдельную батарею и драйвер двигателей. Питание двигателей непосредственно через Uno — самая частая причина просадки питания и перезагрузки платы у начинающих.
  • delay() останавливает всё. Пока плата выполняет delay(), она не может считывать датчики или реагировать. Для любой отзывчивой системы отслеживайте время через millis().
  • Следите за памятью. Если плата без явной причины работает нестабильно, возможно, не хватает SRAM.

Выводы: что каждый вывод действительно может делать

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

Вывод Также Примечание для робота
D0 (RX) Аппаратный последовательный интерфейс Не использовать. Он занят USB-программатором
D1 (TX) Аппаратный последовательный интерфейс Не использовать. То же самое
D2, D3 Внешние прерывания 0 и 1 Единственные два вывода, способные срабатывать по любому фронту, — оставьте их для энкодеров
D3, D5, D6, D9, D10, D11 PWM (~) Шесть выводов analogWrite. Здесь задаётся скорость двигателей
D10–D13 SPI (SS, MOSI, MISO, SCK) Нужны для SD-карты или радиомодуля nRF24
D13 Встроенный LED К LED и резистору подключены — слабый вход, но хороший выход
A0–A5 Аналоговый вход, 10-битный При нехватке цифровых выводов их также можно использовать как цифровые
A4, A5 I²C (SDA, SCL) Общие для всех устройств I²C — использование как аналоговых входов лишает вас шины

Две из этих строк определяют большинство схем роботов. D2 и D3 — единственные настоящие выводы прерываний, поэтому робот с двумя колёсными энкодерами использует оба и не оставляет ни одного свободного. Кроме того, A4/A5 — шина I²C, поэтому MPU-6050 и аналоговый массив датчиков на Uno сразу начинают конкурировать за выводы.

Именно эта нехватка выводов чаще всего заставляет проект отказаться от Uno, а не недостаток скорости или памяти. Четырнадцать цифровых и шесть аналоговых выводов быстро заканчиваются, как только появляются драйвер двигателей (6 выводов), пара энкодеров (4 вывода, 2 из них — прерывания) и массив датчиков (6 аналоговых).

Питание и три способа ошибиться

Вход Напряжение Путь Примечание
USB 5 V Через самовосстанавливающийся предохранитель Не более 500 mA для всей платы
Разъём питания 7–12 V Через встроенный линейный регулятор Рекомендуемый источник
Вывод VIN 7–12 V Тот же регулятор То же, что и разъём, выведенный на вывод
Вывод 5V 5 V Непосредственно на шину Обходит регулятор — защиты нет

Регулятор линейный, поэтому разность между входным напряжением и 5 V превращается в тепло. При входном напряжении 12 V и токе 200 mA это (12 − 5) × 0.2 = 1.4 W в небольшом корпусе, причём он действительно сильно нагревается. Если есть возможность, подавайте 9 V, а не 12 V.

Стоит назвать три конкретные ошибки:

Питание двигателей от вывода 5 V. Регулятор не может обеспечить ток двигателей, поэтому напряжение шины падает, плата перезагружается, а симптом выглядит как программный сбой. Двигателям нужна отдельная шина питания, общая с платой только земля.

Подача напряжения на вывод 5 V от нерегулируемого источника. Этот вывод находится непосредственно на шине, поэтому всё выше примерно 5.5 V поступает напрямую на ATmega328P.

Одновременное питание от USB и разъёма. Плата справляется с этим благодаря компаратору, который выбирает более высокое напряжение, но батарея в разъёме не заряжается, а на клоне может начать питать плату в обратном направлении из-за неудачной схемы.

Какой ток могут обеспечить выводы

Предел Значение Что это означает
На один вывод Рекомендуется 20 mA, абсолютный максимум 40 mA Один LED допустим. Двигатель — нет. Обмотка реле — нет
Суммарно по всем выводам 200 mA Восемь светодиодов по 20 mA уже исчерпывают весь бюджет
Вывод 5 V при питании от USB ~450 mA после собственного потребления платы Один сервопривод может превысить этот предел
Вывод 3.3 V 50 mA Поступает от регулятора микросхемы USB — предел очень мал

Вывод 3.3 V регулярно вводит в заблуждение. Это не универсальная шина, а удобный вывод с пределом 50 mA. Модуль ESP-01 при попытке передачи сразу вызовет на нём просадку питания.

Проблема объёма памяти 2 KB

У Uno есть 32 KB флеш-памяти для программы и 2 KB SRAM для переменных во время работы. Флеш-память редко становится ограничением. SRAM — постоянно.

Каждый строковый литерал в Serial.print копируется в SRAM при запуске:

Serial.println("Calibration complete, entering drive mode");   // 43 bytes of SRAM, forever

Двадцать таких сообщений занимают 800 байт — 40% всего объёма. Решение — F(), которая оставляет строку во флеш-памяти и считывает её по мере необходимости:

Serial.println(F("Calibration complete, entering drive mode"));  // 0 bytes of SRAM

Массивы — второй потребитель памяти. float занимает 4 байта, поэтому буфер для 200 измерений требует 800 байт, и компилятор не выдаёт никакого предупреждения: он сообщает об использовании флеш-памяти, но ничего полезного о SRAM во время работы.

При нехватке памяти не возникает понятная ошибка. Стек растёт вниз, куча — вверх, и при встрече переменные начинают незаметно повреждать друг друга. Плата ведёт себя непредсказуемо: показания не имеют смысла, цикл пропускает шаги, происходит необъяснимая перезагрузка. Если Uno начинает работать нелогично после добавления функции, прежде всего предполагайте нехватку SRAM.

// Drop this in and watch it while you develop.
int freeRam() {
  extern int __heap_start, *__brkval;
  int v;
  return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}

При объёме свободной памяти менее примерно 200 байт следует ожидать проблем.

Диагностика

Симптом Вероятная причина Исправление
Перезагрузка при запуске двигателей Ток двигателей проходит через плату Отдельное питание двигателей, только общая земля
Ошибка загрузки: «нет синхронизации» Что-то подключено к D0/D1 или выбран неверный порт Отключите всё от выводов последовательного интерфейса
Непредсказуемое поведение после добавления кода Закончилась SRAM Помещайте литералы в F(); проверьте freeRam()
analogWrite ничего не делает Вывод не поддерживает PWM Используйте 3, 5, 6, 9, 10 или 11
Библиотека Servo нарушает PWM на 9/10 Servo перехватывает таймер 1 Используйте другие выводы PWM или подключите сервоприводы к PCA9685
Устройство I²C не обнаружено A4/A5 используются для другого Шина I²C — это исключительно эти два вывода
Регулятор очень горячий Входное напряжение около 12 V Снизьте до 7–9 V
Просадка питания устройства 3.3 V Предел 50 mA на этом выводе Используйте отдельный регулятор 3.3 V
Датчик показывает бессмысленные значения Датчик 3.3 V подключён к логике 5 V Преобразуйте уровень или используйте плату 3.3 V

Uno или что-то другое?

Плата Логика Почему выбрать
Uno 5 V Прощает ошибки, для неё есть документация в любом объёме, а микросхема установлена в панель и её можно заменить
Nano 5 V Та же микросхема, удобна для макетной платы, 8 аналоговых выводов вместо 6
Mega 2560 5 V 54 цифровых, 16 аналоговых, 6 прерываний, 8 KB SRAM — решение при нехватке выводов
ESP32 3.3 V Wi-Fi, Bluetooth, два ядра, значительно выше скорость
Pro Micro 5 V Встроенный USB — может имитировать клавиатуру или мышь

Для роботов стоит отдельно упомянуть Nano: это тот же ATmega328P с тем же кодом, но у него A6 и A7 выведены как дополнительные аналоговые входы. Для 8-канального массива ИК-датчиков отражения это разница между возможностью подключения и её отсутствием, поэтому конструкции роботов, следующих за линией, так часто комплектуются Nano.

Честный итог: ценность Uno в том, что на нём всё работает с первого раза. Каждая библиотека, каждое руководство и каждая схема подключения рассчитаны на него. При обучении это важнее любой характеристики, а когда возможностей становится недостаточно, почти всегда причиной оказывается количество выводов.

Исследуйте граф

Используется в этих сборках

Проекты, учебные пути и симуляторы, в которых используется Arduino Uno.

Сравнение

Альтернативы

Вопросы

Arduino Uno: частые вопросы

Что такое Arduino Uno?

Arduino Uno — простая отладочная плата микроконтроллера на базе микросхемы ATmega328P. Она позволяет короткими программами на C++, которые называются скетчами, считывать данные датчиков и управлять двигателями, светодиодами (LED) и другой электроникой; именно на ней большинство изучает робототехнику.

Для чего Arduino Uno используется в робототехнике?

В робототехнике Uno служит мозгом робота: считывает данные датчиков, выполняет контур управления и приводит двигатели через драйвер, например L298N. Он подходит для роботов, следующих за линией, обходящих препятствия и небольших колёсных платформ с простыми задачами, требующими предсказуемого тайминга реального времени.

Какой микроконтроллер используется в Arduino Uno?

Arduino Uno использует ATmega328P производства Microchip — 8-битный микроконтроллер AVR с тактовой частотой 16 MHz, 32 KB флеш-памяти и 2 KB SRAM. Плата добавляет к этой микросхеме интерфейс USB, регулятор напряжения и ряды выводов.

Arduino программируется на C или C++?

Скетчи Arduino пишутся на C++ поверх упрощённой, удобной для начинающих платформы. Можно использовать и обычный C, поскольку C в значительной степени является подмножеством C++, но стандартные функции и библиотеки Arduino написаны на C++.

Сложно ли изучать код Arduino?

Нет — Arduino — один из самых простых способов начать программировать оборудование. Структура из двух функций setup и loop, огромная экосистема библиотек и тысячи примеров скетчей позволяют новичку мигать светодиодом (LED) или вращать двигатель в течение часа.

Что лучше для робототехники — Arduino или Raspberry Pi?

Они решают разные задачи. Arduino — микроконтроллер, идеальный для управления двигателями и датчиками в реальном времени с предсказуемым таймингом. Raspberry Pi — полноценный компьютер с Linux, который лучше подходит для зрения, сложных вычислений и Wi-Fi. Многие продвинутые роботы используют оба устройства: Pi для мышления, Arduino для действий.

Почему Arduino Uno так широко используется?

Потому что он прощает ошибки и хорошо поддерживается. Выводы 5 V выдерживают ошибки монтажа новичков, почти каждый датчик для хобби-проектов поставляется с примером кода для Uno, а сообщество ответило почти на все возможные вопросы, поэтому вы редко надолго остаётесь без решения.

Можно ли использовать ChatGPT или AI для написания кода Arduino?

Да — AI-ассистенты могут создавать черновики скетчей Arduino и помогать с отладкой, что полезно при обучении. Всегда проверяйте сгенерированный AI-код на реальном оборудовании, прежде чем доверять ему: правдоподобный скетч всё равно может содержать неверные номера выводов, тайминг или логику.

Дополнительные материалы

Источники