Курс Arduino с нуля · Большие проекты
Урок 31. Свой проект: от идеи до готового устройства
Финал курса. Без готовой схемы — вместо неё метод: шесть шагов от идеи на бумажке до прибора в корпусе, каркас программы, сквозной пример и восемь идей из деталей набора.
Что понадобится
- Плата Uno из набора
- Кабель USB
- Макетная плата
- Детали под вашу идею — из набора
- Бумага и карандаш для схемы
Все детали есть в обучающем наборе, по которому идёт курс.
Это последний урок курса — и он не похож на остальные. Здесь не будет готовой схемы и программы, которую нужно повторить. Вместо этого — самый важный навык: как самому пройти путь от «а вот бы сделать…» до работающего прибора. Все тридцать уроков готовили вас именно к этому.
Из чего состоит любой прибор
Присмотритесь к любому устройству вокруг — от чайника до лифта. Внутри всегда одна и та же троица: датчики чувствуют, программа думает, а прибор действует. Придумывая своё устройство, соберите его как фразу: «когда прибор чувствует…, он решает… и делает…». Если фраза сложилась — треть работы позади.
Шесть шагов от идеи до прибора
- Идея. Одной фразой и для кого-то конкретного: «ночник для брата», «сторож для холодильника», «копилка, которая радуется монетам».
- Сценарий. На бумаге, по шагам: что прибор делает в покое, что — при событии, что — если событие затянулось. Вспомните сейф: ввод, открытие, блокировка — мы сначала нарисовали его состояния, а уже потом писали код.
- Детали и выводы. Выпишите детали из набора и сразу — кто какой вывод занимает. Этот список спасал нас в уроках 28–30, спасёт и вас.
- Сборка по узлам. Никогда не собирайте всё сразу. Один узел — одна проверка: подключили датчик — напечатали его числа в монитор порта; подключили зуммер — пискнули. Так делал каждый наш проект в «Шаге 1».
- Программа кусочками. По три-пять строк с прошивкой после каждого куска. Тридцать уроков мы писали код только так — это не учебный приём, это и есть нормальный способ.
- Испытания и корпус. Подберите пороги по своим числам, помучайте прибор нечестными нажатиями, посадите в коробку — и устраивайте премьеру.
Пример: проходим путь целиком
Покажем метод на настоящей задаче. Идея: сторож для холодильника — пищать, если дверцу забыли закрыть. Сценарий: внутри холодильника при открытой дверце горит лампочка; если светло дольше двадцати секунд — напоминать звуком каждые две секунды; стало темно — замолчать. Детали: фоторезистор с резистором 10 кОм (схема из урока 15, вход A0) и зуммер (схема из урока 19, вывод 12). Два узла, оба уже собирали — вот и вся схема. Программа:
// Урок 31. Пример: сторож холодильника — пищит, если дверцу забыли.
const int LIGHT_PIN = A0; // фоторезистор с резистором 10 кОм, как в уроке 15
const int BUZZER_PIN = 12; // зуммер, как в уроке 19
const int LIGHT_LEVEL = 300; // порог «внутри горит свет» — подберите свой!
const unsigned long LIMIT = 20000; // сколько миллисекунд можно держать дверцу
unsigned long openedAt = 0; // когда мы заметили свет
bool wasLight = false;
void setup() {
Serial.begin(9600); // монитор порта поможет подобрать порог
}
void loop() {
int light = analogRead(LIGHT_PIN);
Serial.println(light); // закрытый и открытый холодильник дают разные числа
bool isLight = (light > LIGHT_LEVEL);
if (isLight && !wasLight) {
openedAt = millis(); // свет только что зажёгся — засекаем время
}
wasLight = isLight;
if (isLight && millis() - openedAt > LIMIT) {
tone(BUZZER_PIN, 2000, 200); // дверца открыта слишком долго!
delay(1800); // напоминаем раз в две секунды
}
delay(100);
}
Испытания: положите датчик в холодильник, откройте монитор порта и посмотрите числа при закрытой и открытой дверце — своё пороговое число впишите вместо нашего. Если у вашего делителя числа от света не растут, а падают — просто переверните знак сравнения. Заметьте: в программе нет ни одной новой команды, только уроки 11, 15 и 19.
Каркас, с которого можно начинать
Почти любой прибор начинается с одного и того же скелета «собрать — решить — показать» — мы назвали его ещё в уроке 18. Вот он, готовый к прошивке:
// Урок 31. Каркас любого устройства: собрать — решить — показать.
// Это не заготовка «на потом» — он уже работает: зажигает встроенный
// светодиод, когда число со входа A0 больше порога.
const int SENSOR_PIN = A0; // сюда встанет ваш датчик
const int OUT_PIN = 13; // а сюда — ваше действие
const int LEVEL = 500; // порог: подберите свой по монитору порта
void setup() {
Serial.begin(9600); // монитор порта — глаза отладчика
pinMode(OUT_PIN, OUTPUT);
// Здесь же — подготовка каждой вашей детали: pinMode, lcd.begin и т.д.
}
void loop() {
// 1. Собрать данные: опросить датчики и кнопки.
int value = analogRead(SENSOR_PIN);
// 2. Решить: сравнить с порогом, обновить состояние.
bool needAction = (value > LEVEL);
// 3. Показать: свет, звук, экран или движение.
digitalWrite(OUT_PIN, needAction);
Serial.println(value); // всегда печатайте, что видит прибор
delay(50);
}
Начните свой проект с него: подставьте свой датчик, своё действие — и наращивайте по кусочку. Строку с печатью в монитор не удаляйте до самого конца: это глаза, которыми вы видите, что на самом деле происходит внутри.
Правила, которые спасут
- Не верьте догадкам — печатайте числа. Монитор порта показывает, что прибор видит на самом деле (урок 12).
- Пороги всегда свои. Числа из чужих программ не работают: освещение, датчики и руки у всех разные (урок 15).
- Ищите неисправность половинками. Не работает целое — проверьте узлы по отдельности: датчик отдельно, действие отдельно. Виновник найдётся за пару делений.
- Кнопка дребезжит, деталь имеет полярность, канавка разрывает столбики. Три источника «мистики», закрывающие большинство загадок (уроки 4, 10, 11).
- delay блокирует, millis — нет. Ждать можно, если ждать — вся работа; иначе стройте на часах (уроки 21 и 24).
- Сложность — это состояния. Если прибор ведёт себя по-разному в разных режимах, нарисуйте состояния и переходы, как у шлагбаума и сейфа (уроки 24 и 29).
Идеи для первого проекта
- Копилка с фанфарами — датчик вибрации ловит монету, зуммер играет туш, а экран считает вклады (уроки 16, 19, 26).
- Дверной звонок с секретным стуком — вибрация считает удары: три удара — мелодия для своих (уроки 16, 19).
- Умная теплица на подоконнике — DHT11 следит за жарой и сухостью, экран показывает, зуммер зовёт полить (уроки 26–28).
- Шторка от солнца — фоторезистор чувствует солнце, сервопривод поворачивает картонную шторку (уроки 15, 22).
- Вентилятор по жаре — DHT11 плюс мотор через транзистор: жарко — включился, остыло — затих (уроки 23, 27).
- Гоночный светофор — три светодиода и кнопка: обратный отсчёт, случайная задержка и старт, фальстарт караулим как в уроке 21 (уроки 7, 21).
- Охрана ящика стола — фоторезистор в тёмном ящике: открыли — сирена, а выключить может только секретный код (уроки 15, 29).
- Магнитный турникет для игрушек — датчик Холла и сервопривод-шлагбаум: машинка с магнитиком проезжает сама (уроки 17, 24).
Что вы теперь умеете
- читать и рисовать схемы, собирать их на макетке без пайки — с урока 4;
- управлять светом, цветом и яркостью — блок «Управляем светом»;
- слушать кнопки без дребезга и считать время без остановки — блок «Кнопки»;
- читать датчики и принимать решения с порогами и гистерезисом — блок «Датчики»;
- играть звуки и мелодии — блок «Звук»; двигать вещи — блок «Движение»;
- показывать цифры и текст на индикаторе и экране — блок «Индикаторы и экраны»;
- собирать из всего этого настоящие устройства — метеостанция, сейф, игра;
- и главное — доводить свою идею до работающего прибора по шести шагам.
Курс окончен — тридцать один урок, десятки схем и программ, и всё это на деталях одного набора. Дальше — ваши собственные приборы. Возвращайтесь к урокам как к справочнику, подглядывайте в «Базу знаний» на этом сайте, показывайте свои устройства близким — и собирайте следующее. У вас теперь есть для этого всё.
Частые вопросы
С чего начать свой первый проект на Arduino?
С одной фразы: что прибор делает и для кого. Потом сценарий по шагам на бумаге, список деталей и выводов, сборка по узлам с проверкой каждого и программа кусочками. Первый проект берите из двух узлов — датчик плюс действие, как сторож холодильника из урока.
Как выбрать детали для своей идеи?
Разложите идею на три части: что прибор чувствует, что решает и что делает. Под каждую часть в наборе есть деталь: кнопки, фоторезистор, DHT11, датчики наклона и Холла — чувствуют; светодиоды, зуммер, сервопривод, мотор и экран — действуют. Карта с номерами уроков есть в тексте.
Что делать, если собранное устройство не работает?
Не проверяйте всё сразу — делите пополам. Отключите лишнее и проверьте узлы по одному диагностическими скетчами: датчик печатает числа в монитор порта, зуммер пищит, экран пишет слово. Виновник находится за пару таких делений.
Можно ли собирать свои устройства без пайки?
Да. Весь курс собран на макетной плате: детали и провода просто вставляются в отверстия и переставляются сколько угодно раз. Пайка понадобится, только когда захотите сделать прибор насовсем.
Где брать справку по командам после курса?
Возвращайтесь к урокам как к справочнику — в конце каждого есть список того, что он объясняет. Подробные статьи по деталям и командам собраны в «Базе знаний» на этом сайте, а все программы курса открываются и работают в Trema IDE.
