Что такое Arduino Uno
Arduino Uno — это отладочная плата на микроконтроллере ATmega328P: маленький компьютер, который выполняет одну программу (скетч) и умеет читать датчики и управлять устройствами — светодиодами, моторами, реле, дисплеями.
На плате:
- ATmega328P — сам микроконтроллер: 8 бит, 16 МГц, 2 КБ RAM, 32 КБ Flash, 1 КБ EEPROM.
- 14 цифровых пинов (0–13), из которых 6 могут ШИМ (обозначены ~).
- 6 аналоговых входов A0–A5 — измеряют напряжение 0–5 В.
- USB-B — для прошивки и связи с компьютером.
- Стабилизатор — от 7–12 В через barrel-разъём до 5 В.
- Пины питания 5V, 3.3V, GND — для периферии.
Скетч: setup и loop
Программа для Arduino называется скетчем и имеет две обязательные функции:
void setup() {
// выполняется один раз при включении
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
Serial.println("Старт!");
}
void loop() {
// крутится бесконечно
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
setup — для инициализации: режимы пинов, запуск Serial, настройка периферии. loop — основной цикл: читаем датчики, мигаем, управляем — и всё заново.
Это не настоящая ОС: нет планировщика, delay блокирует всё. Пока идёт delay(500) — процессор ничего не делает. Для параллельной работы используют millis() — безблокировочное время.
Первый скетч: мигание встроенным светодиодом
Это «Hello, world» Arduino — светодиод на пине 13 (он же LED_BUILTIN):
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // включили
delay(1000); // ждём секунду
digitalWrite(LED_BUILTIN, LOW); // выключили
delay(1000);
}
pinMode(pin, режим) настраивает пин: OUTPUT — управляем, INPUT — читаем, INPUT_PULLUP — читаем с подтяжкой к питанию (для кнопок).
Загрузка скетча
В Arduino IDE: выберите плату «Arduino Uno», порт (/dev/ttyUSB0 или COM3), нажмите стрелку «Загрузить». Компилятор превратит ваш код в hex и зальёт во флеш через встроенный bootloader — программатор не нужен.
После загрузки плата перезагрузится и начнёт выполнять setup → loop навсегда, пока не выключите или не зальёте новый скетч.
Serial-монитор: отладка и вывод
Serial — UART-порт через USB к компьютеру. Скорость 9600 — стандарт:
Serial.begin(9600);
Serial.print("текст ");
Serial.println("со строкой"); // + перевод строки
Serial.println(analogRead(A0)); // показать датчик
В IDE — Инструменты → Монитор порта. Это главный способ видеть, что происходит внутри: значения датчиков, точки выполнения, ошибки.
Работа с пинами: читаем кнопку
const int BTN = 2;
void setup() {
pinMode(BTN, INPUT_PULLUP); // подтяжка к 5V — кнопка замыкает на GND
Serial.begin(9600);
}
void loop() {
if (digitalRead(BTN) == LOW) { // нажата (LOW из-за подтяжки!)
Serial.println("Нажата!");
delay(300); // антидребезг
}
}
Обратите внимание: с INPUT_PULLUP нажатая кнопка читается как LOW — логика инвертирована. Это удобно — не нужен внешний резистор.
Аналоговый вход: читаем датчик
void setup() { Serial.begin(9600); }
void loop() {
int raw = analogRead(A0); // 0..1023 для 10-битного АЦП
float volts = raw * 5.0 / 1023.0; // перевод в вольты
Serial.println(volts);
delay(500);
}
millis() вместо delay — без блокировок
delay — враг реальной работы: он стопорит всё. millis() возвращает миллисекунды с запуска и позволяет делать несколько дел параллельно:
uint32_t ledTimer = 0, sensorTimer = 0;
void loop() {
uint32_t now = millis();
if (now - ledTimer >= 500) { // мигание каждые 500 мс
ledTimer = now;
digitalWrite(13, !digitalRead(13));
}
if (now - sensorTimer >= 2000) { // датчик каждые 2 с
sensorTimer = now;
readAndSend();
}
}
Типичные ошибки новичка
delayвезде — невозможно реагировать на кнопку во время сна.INPUT_PULLUPчитают наоборот — LOW значит нажата.- Нет резистора на светодиод — сгорит пин или диод; 220–330 Ом.
- Забыли
pinMode— пин по умолчанию вход,digitalWriteне работает как ожидается. - Serial.begin забыли — в мониторе тишина.
- Подключают мотор напрямую к пину — 20 мА максимум на пин; мотору нужен драйвер.
Итог
Arduino Uno — идеальная стартовая плата: простая схема setup/loop, пины для датчиков и исполнителей, Serial для отладки. Начните с мигания, добавьте кнопку, потом датчик — и через день будете собирать собственный гаджет. Главный переход для роста — с delay на millis-паттерн.
Полный первый проект: светофор
Соедините три светодиода через резисторы 220 Ом к пинам 8, 9, 10 (красный, жёлтый, зелёный) и запрограммируйте классический цикл:
const int RED = 8, YELLOW = 9, GREEN = 10;
void setup() {
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
}
void loop() {
digitalWrite(RED, HIGH); delay(3000); // стой
digitalWrite(YELLOW, HIGH); delay(1000); // внимание
digitalWrite(RED, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, HIGH); delay(3000); // иди
digitalWrite(YELLOW, HIGH); delay(1000); // приготовься
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, LOW);
}
Команды Serial, которые вы будете использовать постоянно
Serial.begin(9600); // в setup — скорость монитора порта
Serial.print("x="); // без перевода строки
Serial.println(x); // с переводом строки
Serial.printf("t=%.1f\n", t); // форматированная (ESP32; на AVR — sprintf)
Serial.read(); // один байт из порта
Serial.available(); // сколько байт пришло
Монитор порта в IDE (лупа справа вверху) — ваша консоль: смотрите отладочные сообщения и шлёте команды устройству.
Что купить для старта
Минимальный набор за 1000–2000 ₽:
- Arduino Uno или клон Nano — сама плата.
- Макетная плата (breadboard) + перемычки — для сборки без пайки.
- Светодиоды, резисторы 220 Ом/10 кОм, кнопки.
- Потенциометр, фоторезистор — для аналогового ввода.
- USB-кабель (обычно в комплекте).
Дальше по мере надобности: сервопривод, дисплей, датчики температуры и расстояния.
Следующие шаги
После светофора и Serial — аналоговый ввод (analogRead потенциометра), ШИМ (analogWrite для плавной яркости), кнопка с антидребезгом, миллисекундные таймеры без delay. Эти базовые навыки — фундамент для любого проекта: от домашней метеостанции до управляемого робота.