Компонент · Контроллер
Arduino Uno
Arduino Uno — распространённая отладочная плата для изучения робототехники: логика 5V, простое программирование и устойчивость к ошибкам. Когда её выбирать.
Что это такое
Arduino Uno — компактная отладочная плата на базе 8-битного микроконтроллера ATmega328P производства Microchip. Она выводит выводы микросхемы на подписанные разъёмы, добавляет порт USB для программирования и питания и берёт на себя сложные части — регулятор напряжения, кварцевый резонатор, схему сброса, — чтобы вы могли сосредоточиться на коде и монтаже. Для огромного числа начинающих разработчиков робототехники Uno становится первым способом запустить двигатель или включить датчик.
Его долговечная привлекательность не в вычислительной мощности — по современным меркам он медленный и испытывает нехватку памяти. В этом и заключается прощение ошибок. Выводы 5 V выдерживают ошибки монтажа новичков, сообщество ответило почти на все возможные вопросы, а почти каждый датчик и драйвер для хобби-проектов поставляется с примером кода, рассчитанным на Uno.
Как это работает
Вы пишете скетч — программу на 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.
- ПроектМашинка-робот под управлением смартфона: Bluetooth или Wi-Fi
- ПроектРобот на ROS 2 находит маркер и подъезжает к нему
- ПроектРобот обхода препятствий: датчик, сканирование и поворот
- ПроектРобот, следующий по линии: от симулятора к реальной трассе
- ПроектРобот, удерживающий равновесие, на MPU6050 и ПИД-регуляторе (PID)
- ПроектРоботизированная рука 4-DOF на PCA9685: сервоприводы и кинематика
- ПроектСоберите Micromouse для прохождения лабиринта
- ПроектСоберите графоплоттер с двумя точными осями на шаговых двигателях
- ПроектСоберите мини-робота сумо: сцепление, клин и датчики края
- ПроектСоберите робота для захвата и переноса с проверкой
- ПроектСоберите робота для лабиринта из ленты с памятью LSRB
- ПроектСоберите робота для покрытия помещения
- ПроектСоберите робота-ровера для путевых точек GPS
- Учебный путьОсновы электроники роботов: дорожная карта обучения
Сравнение
Альтернативы
Вопросы
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-код на реальном оборудовании, прежде чем доверять ему: правдоподобный скетч всё равно может содержать неверные номера выводов, тайминг или логику.
Дополнительные материалы