Проекты Arduino для начинающих: 25 идей от мигалки до метеостанции
Вопрос «что можно сделать на Arduino?» интернет обычно закрывает списками без кода: красивые названия, ни схемы, ни строчки. Здесь наоборот: таблица из десяти проектов с деталями и временем сборки, три проекта разобраны с рабочими скетчами и ещё пятнадцать идей списком. Первый проект собирается за 15 минут после прочтения: в симуляторе не нужны ни детали, ни пайка, ни даже плата.
Все скетчи из статьи исполняются тем же движком, что и симулятор сайта: компиляция каждого проверена, код запускается без правок. Когда виртуальная схема станет тесной, тем же порядком собирайте на живой Uno. Детали перечислены в таблице, а правила сборки без пайки разобраны в гайде по макетной плате.
Отдельные разделы ниже отвечают на вопросы, которые обычно остаются без ответа: что делать, когда проект не заработал, почему порядок сборки важнее сложности схемы, как выбрать проект под себя и как проверить, что первый десяток действительно собран правильно.
Скважность, частота и яркость светодиода — крутите ползунки и смотрите на осциллограмму.
Подгружаем интерактив…
Таблица проектов: уровень, детали, время
Уровни честные. «Старт» это тот, кто вчера впервые открыл IDE. «Легко» это один датчик и полчаса. «Средне» это два-три модуля и внимательность к таймингам. Время указано по опыту сборки с нуля на макетке; в симуляторе всё это быстрее в два-три раза, потому что детали не искать и не втыкать. Если сомневаетесь в составе корзины, гайд по стартовому набору Arduino разложит, что должно лежать в коробке и за что платить не стоит.
| Уровень | Проект | Детали | Время |
|---|---|---|---|
| Старт | Мигалка на бортовом светодиоде | Только плата и USB-кабель | 10 мин |
| Старт | Светофор на 3 светодиодах | 3 светодиода, 3 резистора 220 Ом, макетка | 40 мин |
| Старт | Кнопка-выключатель LED | Кнопка, светодиод, резисторы | 30 мин |
| Легко | Ночная лампа с фоторезистором | Фоторезистор, резистор 10 кОм, светодиод | 1 час |
| Легко | Диммер на потенциометре | Потенциометр 10 кОм, светодиод | 40 мин |
| Легко | Мелодия на пьезоизлучателе | Зуммер | 30 мин |
| Средне | Термостат с DHT11 и LCD | DHT11, LCD 16x2 I2C, светодиод или реле | 2 часа |
| Средне | Световая шкала из 8 LED | 8 светодиодов или шкала, резисторы | 2 часа |
| Средне | Игра «Кто быстрее» на реакцию | 2 кнопки, светодиод, зуммер | 2 часа |
| Продвинуто | Парктроник с зуммером | HC-SR04, зуммер | 2 часа |
Проект 1: ночная лампа с фоторезистором
Классика первого датчика: фоторезистор делит напряжение с резистором 10 кОм, АЦП читает уровень освещённости с аналогового входа, и когда темнеет, светодиод загорается. Порог 300 подбирается ползунком в симуляторе: двигайте его и смотрите в Serial, при каком значении лампа переключается. В железе схема та же, что у потенциометра: фоторезистор в макетку, резистор 10 кОм вторым плечом делителя.
void setup() { pinMode(9, OUTPUT); Serial.begin(9600);} void loop() { int svet = analogRead(A0); // 0–1023: чем темнее, тем меньше if (svet < 300) { digitalWrite(9, HIGH); Serial.println("Темно, лампа горит"); } else { digitalWrite(9, LOW); Serial.println("Светло"); } delay(200);}Две доработки, когда заработает. Первая: заменить digitalWrite на analogWrite и наращивать яркость по мере темноты, для этого пригодится урок про ШИМ и яркость. Вторая: два порога вместо одного, чтобы лампа не мигала в пограничной зоне на закате, включение при 250 и выключение при 350.
Проект 2: термостат с DHT11 и LCD
Практичный проект для теплицы или инкубатора: на экране температура с десятыми долями градуса, ниже порога включается «обогрев» (в учебной схеме это светодиод, в реальной реле). Датчик опрашивается раз в две секунды по требованию даташита, isnan обрабатывает случай, когда сенсор не ответил. Подключение самого датчика разобрано в уроке про DHT11, а приём с двумя порогами вместо одного, чтобы реле не щёлкало каждые полминуты, разобран в уроке про термостат с гистерезисом.
#include <DHT.h>#include <LiquidCrystal_I2C.h> DHT dht(2, DHT11);LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { dht.begin(); lcd.init(); lcd.backlight(); pinMode(8, OUTPUT); Serial.begin(9600);} void loop() { float t = dht.readTemperature(); if (isnan(t)) { Serial.println("Датчик не отвечает"); delay(2000); return; } lcd.clear(); lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(t, 1); lcd.write(223); // символ градуса lcd.print("C"); lcd.setCursor(0, 1); if (t < 22.0) { digitalWrite(8, HIGH); lcd.print("Nagrev: VKL"); } else { digitalWrite(8, LOW); lcd.print("Nagrev: OFF"); } delay(2000);}Проект 3: светофор на 3 светодиодах
Первый проект с несколькими выходами сразу: красный, жёлтый, зелёный на пинах 12, 11, 10. На нём отлично видно цену delay(): пока скетч спит две секунды, он не читает ни кнопки, ни датчики — и когда захочется добавить пешеходную кнопку, придётся осваивать millis(). Цикл как на настоящем перекрёстке: две секунды красный, секунда жёлтый, две секунды зелёный.
void setup() { pinMode(12, OUTPUT); // красный pinMode(11, OUTPUT); // жёлтый pinMode(10, OUTPUT); // зелёный Serial.begin(9600);} void loop() { digitalWrite(12, HIGH); Serial.println("СТОЙ"); delay(2000); digitalWrite(12, LOW); digitalWrite(11, HIGH); delay(1000); digitalWrite(11, LOW); digitalWrite(10, HIGH); Serial.println("ИДИ"); delay(2000); digitalWrite(10, LOW);}Тупик: проект, который не заработал
Первый настоящий тупик мы прошли на светофоре. Три светодиода, три резистора, скетч из двадцати строк, и ничего не горит. Мы переписали код, переставили провода, поменяли местами резисторы и в какой-то момент решили, что плата неисправна, потому что нагрузка на все три вывода была очевидно ниже предела.
Оказалось, что один из проводов воткнут не в тот ряд макетки: в макетке по пять гнёзд на ряд, и при невнимательности провод уходит в соседний ряд, который ничего не соединяет. Проверка заняла две минуты: мы прозвонили мультиметром цепь от вывода до светодиода и нашли разрыв. С тех пор у нас правило для любой схемы: сначала проверяем питание и землю, потом прозваниваем один канал целиком, и только потом трогаем код. Почти все «неработающие проекты» в учебной практике это ошибка в железе, а не в логике.
Личный опыт: как мы проверяли проекты
Порядок, который мы выработали и который рекомендуем: сначала проект собирается в симуляторе, где видно состояние каждого вывода в Serial, потом переносится на макетку по одной цепи за раз, и только после этого проверяется в железе целиком. Самая частая ошибка при переносе это разница между «пин включён» и «пин подключён к детали»: в симуляторе деталь появляется сама, а на макетке её надо ещё физически воткнуть, и это два разных действия.
Второе наблюдение: почти все «не работает» случаи с датчиками объяснялись не кодом, а тем, что в Serial шли красивые, но бессмысленные числа. Пока датчик не отвечает, а делитель напряжения собран неверно, АЦП честно показывает 0 или 1023, и скетч с этими числами работает, не падая. Поэтому мы проверяем показания эталоном: фоторезистор сравниваем с тем, что видно в окне, температуру с обычным термометром. Цифра, которая не сходится с реальностью, это сигнал о том, что схема собрана неверно, даже если код запустился без ошибок.
Авторская позиция: какой проект взять первым
Мы советуем начинать с мигалки, и не потому, что это интересно, а потому, что это единственный проект, где успех не зависит ни от одного внешнего условия. Дальше мы идём по числу деталей: сначала три светодиода и кнопка, потом фоторезистор с потенциометром, и только потом датчики с шиной и дисплеем. Каждый следующий проект должен использовать то, что вы уже умеете, плюс одну новую деталь, иначе при первой же ошибке вы не поймёте, где искать причину.
И отдельное предупреждение про WS2812. Гирлянда выглядит эффектно и кажется идеальным первым проектом, но это ловушка: там сразу и шина данных, и таймер, и требования к питанию, и библиотека. Новичок, не разобравшийся с обычным светодиодом, получает чёрный экран и не понимает, где ошибка. Если хочется именно эффектов, сначала сделайте бегущий огонь на обычных светодиодах через сдвиговый регистр, а ленту оставьте на второй-третий проект, когда питание и библиотеки уже знакомы.
Ещё 15 идей: от кубика до поливалки
- Электронный кубик: кнопка бросает значения 1–6 на светодиодной шкале или LCD
- Гирлянда WS2812: радуга, огонь и «полёт кометы» на FastLED, эффекты разобраны в наших уроках
- Поливалка: датчик влажности почвы и реле с помпой, включать только на сухом пороге
- Будильник с RTC DS3231: время на LCD, зуммер срабатывает в заданную минуту
- Мышеловка-отпугиватель: HC-SR04 ловит приближение, зуммер и вспышка светодиода
- Охранная линия: лазерная указка светит на фоторезистор, луч прервался, сирена
- Серво-шлагбаум: кнопка поднимает стрелку на 90 градусов, зуммер пикает при проезде
- Вольтметр 0–5 В на аналоговом входе: делитель из двух резисторов и вывод в Serial
- Счётчик посетителей: HC-SR04 у дверного проёма считает проходы на LCD
- Метеостанция с рекордами: DHT22 и LCD, минимум и максимум температуры за сеанс
- ИК-управляемая лампа: пульт от телевизора включает светодиоды по своим кнопкам
- Бегущий огонь на сдвиговом регистре 74HC595: восемь светодиодов на трёх пинах
- Светофор с пешеходной кнопкой: прерывание attachInterrupt меняет фазу не дожидаясь delay
- Часы на OLED с RTC: крупное время и дата из модуля DS3231
- Термометр-брелок DS18B20: температура на OLED с конверсией раз в 750 мс