Все периферийные устройства, подключаемые к микроконтроллеру, делятся на две основные категории:
Цифровой актюатор — устройство с двумя четкими состояниями: ВКЛЮЧЕНО и ВЫКЛЮЧЕНО.
Управление осуществляется через цифровой выход Arduino:
| Характеристика | Пассивный зуммер | Активный зуммер |
|---|---|---|
| Управление | Функция tone() | digitalWrite() |
| Частота звука | Любая (31 Гц - 65535 Гц) | Фиксированная (обычно 2-4 кГц) |
| Создание мелодий | Возможно | Невозможно |
| Внешний вид | Нет маркировки сверху | Есть маркировка "+" |
Функция tone(pin, frequency, duration) генерирует прямоугольный сигнал на указанном пине.
| Октава/Нота | C (До) | D (Ре) | E (Ми) | F (Фа) | G (Соль) | A (Ля) | B (Си) |
|---|---|---|---|---|---|---|---|
| 4 октава | 262 Гц | 294 Гц | 330 Гц | 349 Гц | 392 Гц | 440 Гц | 494 Гц |
| 5 октава | 523 Гц | 587 Гц | 659 Гц | 698 Гц | 784 Гц | 880 Гц | 988 Гц |
| Компонент | Количество | Пин подключения |
|---|---|---|
| Arduino Uno/Nano | 1 | - |
| Пассивный зуммер | 1 | D9 (для tone) |
| Светодиод | 1 | D8 |
| Резистор 220 Ом | 1 | Для светодиода |
| Вибромодуль (доп.) | 1 | D10 |
| Соединительные провода | 10-15 | Папа-папа |
| Макетная плата | 1 | 400 или 800 точек |
Цель: При каждом звуковом сигнале светодиод загорается.
Цель: Воспроизвести 5 нот подряд с разными частотами.
Цель: Реализовать сигнал бедствия (··· --- ···) на зуммере.
Цель: Создать синхронизированную систему из трех устройств.
Цель задания: Научиться создавать сложные звуковые последовательности, работать с функциями tone() и noTone(), интегрировать звук с визуальными и тактильными эффектами.
Для управления цифровыми актюаторами используется функция digitalWrite(pin, state), где pin - номер цифрового вывода, state - HIGH (5В) или LOW (0В).
Светодиод имеет низкое сопротивление и может сгореть при подключении напрямую к 5В. Резистор ограничивает ток. Модуль вибромотора уже содержит транзистор и ограничивающие резисторы на плате модуля.
Пин будет находиться в неопределённом состоянии (вход с высоким импедансом). Устройство может работать некорректно или не работать вообще. Всегда настраивайте пины с помощью pinMode() перед использованием.
Активный зуммер имеет встроенный генератор и издаёт звук фиксированной частоты при подаче питания. Пассивный зуммер требует внешнего генератора сигнала (функция tone()) и может воспроизводить разные частоты.
Функция noTone() останавливает генерацию звука на указанном пине. Без неё звук может продолжаться до следующего вызова tone() или перезагрузки.
Совет: Экспериментируйте с длительностями нот и паузами между ними. Попробуйте создать свою собственную мелодию, изменяя частоты в небольших пределах (±20 Гц).
Кнопка — это простейший цифровой датчик, который имеет два состояния:
| Тип кнопки | Описание | Особенности |
|---|---|---|
| Тактовая кнопка | Механическая кнопка с тактильным щелчком | Нужен подтягивающий резистор |
| Сенсорная (тач) кнопка | Реагирует на прикосновение без механического нажатия | Уже содержит электронику, выдает цифровой сигнал |
| Кнопка с фиксацией | Остается в нажатом состоянии до следующего нажатия | Как выключатель |
digitalRead() возвращает LOW (0)digitalRead() возвращает HIGH (1)Прямое подключение мощной нагрузки к пину Arduino аналогично попытке пропустить речной поток через трубочку — происходит разрушение («перегорание») вывода.
| Характеристика | MOSFET (IRF520) | Электромеханическое реле (5V) |
|---|---|---|
| Принцип работы | Электронный ключ. Током между стоком (D) и истоком (S) управляет напряжение на затворе (G). | Механический ключ. Ток через катушку создаёт магнитное поле, которое замыкает контакты. |
| Скорость переключения | Очень высокая (микросекунды). Подходит для ШИМ. | Низкая (10-100 мс). Не для ШИМ. |
| Гальваническая развязка | НЕТ. Управляющая и силовая цепи имеют общую землю (GND). | ЕСТЬ полная. Катушка и контакты электрически не связаны. |
| Тип нагрузки | В основном постоянный ток (DC). | Постоянный (DC) и переменный (AC 220V) ток. |
| Ток управления | ~0 мА (только заряд ёмкости затвора). | Значительный (50-100 мА). Требует отдельного питания для нескольких реле. |
| Главное правило подключения | ОБЯЗАТЕЛЬНА общая земля (GND) между Arduino, модулем MOSFET и блоком питания нагрузки. | Общая земля НЕ нужна, но питание катушки должно быть совместимо с 5V от Arduino. |
| Компонент | Количество | Пин подключения |
|---|---|---|
| Arduino Uno/Nano | 1 | - |
| Модуль MOSFET (IRF520) | 1 | D9 |
| Модуль реле (одноканальный, 5V) | 1 | D10 |
| Сенсорная тач-кнопка | 1 | D2 |
| Пассивный зуммер | 1 | D3 (для ДЗ) |
| Лабораторный БП (15В, 2А) | 1 | Отдельное питание нагрузки |
| Нагрузка: 12V светодиодная лента/5V мотор/помпа | 1 | Через MOSFET или реле |
| Мультиметр | 1 | Для измерений |
| Соединительные провода | 15-20 | Папа-папа, папа-мама |
Цель: Создать систему, где тач-кнопка управляет нагрузкой сначала через реле, а при долгом удержании — через MOSFET с ШИМ.
Схема: Тач-кнопка → Arduino → Реле → 12V светодиодная лента (от ЛБП).
Задача: При каждом касании кнопки состояние ленты инвертируется (вкл/выкл). Добавьте защиту от случайного срабатывания: изменение состояния только если между касаниями прошло более 0.5 секунд.
Схема: Тач-кнопка → Arduino → MOSFET → 5V мини-помпа.
Задача: Реализуйте два режима работы помпы, переключаемые двойным касанием (интервал между касаниями < 300 мс):
1. Режим 1: Короткое касание → помпа включается напрямую на 2 секунды.
2. Режим 2: Короткое касание → помпа плавно включается (ШИМ 0→255 за 2 сек) и так же плавно выключается.
Схема: Arduino → Реле (без нагрузки!).
Задача: Напишите программу, которая заставляет реле щёлкать с разной частотой:
1. Сначала 10 раз с интервалом 1000 мс (1 раз в секунду)
2. Затем 10 раз с интервалом 200 мс
3. Затем 10 раз с интервалом 50 мс
ОБЩАЯ ЗЕМЛЯ (GND) между Arduino, модулем MOSFET и ЛБП!
Цель задания: Научиться интегрировать звуковую индикацию (зуммер) в систему управления нагрузкой через MOSFET или реле.
Добавьте к вашей программе с урока пассивный зуммер на пине 3 для звуковой индикации различных состояний системы.
Выберите ОДНУ из трёх задач для усовершенствования:
Дополнительно: Все звуки должны быть реализованы через функцию tone() с правильными длительностями и паузами между сигналами.
playTone(pin, frequency, duration) для упрощения кодаtone() работает асинхронно - можно воспроизводить звук параллельно с другими действиями
Пины Arduino рассчитаны на максимальный ток 20 мА. Моторы потребляют от 200 мА до 2 А, что в 10-100 раз больше. При превышении тока происходит перегрев и разрушение полупроводниковой структуры вывода микроконтроллера.
Общая земля (GND) — это соединение всех "минусовых" цепей схемы. Для MOSFET она важна, потому что управляющее напряжение на затворе измеряется относительно истока. Без общей земли сигнал от Arduino не будет корректно восприниматься MOSFET.
Реле — механическое устройство. Его контакты физически перемещаются, что занимает время (10-50 мс). Частота ШИМ для моторов обычно 1-20 кГц (период 0.05-1 мс). Реле просто не успевает следовать за такими быстрыми изменениями.
1. При коммутации цепей переменного тока 220В.
2. Когда необходима полная гальваническая развязка (защита Arduino от высокого напряжения).
3. Для коммутации очень высоких напряжений (сотни вольт).
Практически нулевой постоянный ток. MOSFET управляется напряжением, а не током. Кратковременно (наносекунды) потребляется небольшой ток для заряда/разряда ёмкости затвора, но в среднем это доли миллиампера.
Совет для ДЗ: Создайте отдельные функции для каждого типа звукового сигнала (например, playSuccess(), playWarning(), playError()). Это сделает код чище и проще для отладки.
Представьте, что мотор — это автомобиль, который нужно перегнать через реку:
[+] ---- [Q1] ---- A+ ---- [МОТОР] ---- B- ---- [Q4] ---- [-]
| |
[+] ---- [Q2] ---- A- ---- [МОТОР] ---- B+ ---- [Q3] ---- [-]
Нажмите на состояния ниже, чтобы увидеть, как работает H-мост:
Q1 и Q4 открыты
Ток: [+] → Q1 → Мотор(+) → Мотор(-) → Q4 → [-]
Q2 и Q3 открыты
Ток: [+] → Q2 → Мотор(-) → Мотор(+) → Q3 → [-]
Q1 и Q2 открыты (или Q3 и Q4)
Короткое замыкание обмоток мотора
Все ключи выключены
Мотор вращается по инерции
Вместо того чтобы собирать H-мост из отдельных транзисторов, мы используем готовые драйверы:
| Драйвер | Макс. ток | Напряжение | Особенности |
|---|---|---|---|
| L298N | 2А на канал (4А пиковый) | 5-35В | 2 канала, радиатор, стабилизатор 5В |
| L9110S | 0.8А (1.5А пиковый) | 2.5-12В | Маленький, дешевый, 2 канала |
| TB6612FNG | 1.2А (3.2А пиковый) | 2.5-13.5В | Эффективный, мало тепла |
Управление направлением осуществляется комбинацией сигналов IN1 и IN2:
| IN1 | IN2 | ENA | Режим | Действие |
|---|---|---|---|---|
| 1 (HIGH) | 0 (LOW) | PWM (0-255) | ВПЕРЕД | Вращение по часовой стрелке |
| 0 (LOW) | 1 (HIGH) | PWM (0-255) | НАЗАД | Вращение против часовой стрелки |
| 1 (HIGH) | 1 (HIGH) | X | ТОРМОЖЕНИЕ | Быстрая остановка (короткое замыкание) |
| 0 (LOW) | 0 (LOW) | X | СВОБОДНЫЙ ХОД | Вращение по инерции |
| X | X | 0 (LOW) | ОТКЛЮЧЕНО | Мотор выключен (независимо от IN1/IN2) |
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Uno/Nano | 1 | - |
| Драйвер L298N или L9110S | 1 | Для одного мотора достаточно одного канала |
| TT-мотор с редуктором | 1 | 3-6В, с колесом |
| Батарейный отсек 4×AA | 1 | 6В для моторов (ОТДЕЛЬНОЕ ПИТАНИЕ!) |
| Перемычки папа-папа | 10-15 | Для подключения |
| Макетная плата | 1 | Для удобства подключения |
1. Arduino 5V → VCC на L298N (питание логики)
2. Arduino GND → GND на L298N (ОБЯЗАТЕЛЬНО!)
3. Батарейка 6V+ → +12V (VM) на L298N
4. Батарейка 6V- → GND на L298N
5. Arduino D9 (~) → ENA на L298N (ШИМ для скорости)
6. Arduino D8 → IN1 на L298N
7. Arduino D7 → IN2 на L298N
8. OUT1, OUT2 на L298N → Контакты мотора
Задача: Создайте программу, где мотор плавно разгоняется от 0 до 255, затем плавно тормозит до 0, и сразу (без остановки) начинает движение в обратном направлении с таким же профилем скорости.
Задача: Реализуйте программу, где мотор работает 2 секунды на скорости 64, затем 2 секунды на скорости 128, затем 2 секунды на скорости 192, затем 2 секунды на скорости 255 — всё в одном направлении.
Задача: Сравните два вида остановки: свободный ход (коастинг) и торможение (брейкинг).
L298N сильно греется, особенно при больших токах или при использовании торможения:
Для проектов роботов рекомендуются более современные драйверы:
| Драйвер | Преимущества | Для каких проектов |
|---|---|---|
| TB6612FNG | Низкий нагрев, высокая эффективность | Line Follower, небольшие роботы |
| DRV8833 | Маленький размер, низкое напряжение | Мини-роботы, дроны |
| VNH5019 | Мощный (до 30А), защита от перегрева | Тяжелые роботы, автомобили |
Цель задания: Научиться считывать аналоговые значения с потенциометра и использовать их для плавного управления скоростью и направлением вращения мотора.
Потенциометр (10 кОм):
• Левый вывод → GND Arduino
• Средний вывод → A0 Arduino (сигнал)
• Правый вывод → 5V Arduino
Задача: Напишите программу, которая:
map()результат = (значение - отМинимум) × (кМаксимум - кМинимум) / (отМаксимум - отМинимум) + кМинимум Создайте "мертвую зону" в середине диапазона потенциометра, где мотор точно остановлен даже при небольших колебаниях ручки.
Добавьте плавный старт мотора при резком повороте потенциометра. Используйте плавное изменение скорости вместо мгновенного.
Используйте два потенциометра: один для управления скоростью (0-255), второй для выбора направления (вперед/назад) через кнопку или тумблер.
map() для преобразования значенийЧто должно быть в отчете:
constrain() для ограничения скорости в диапазоне -255..255delay(10-50) для стабильности считыванияabs() для получения модуляanalogWrite() для ШИМ-пина скоростиmap() Одиночный MOSFET может только включать/выключать ток в одном направлении. H-мост состоит из 4 ключей, которые могут менять полярность напряжения на моторе, создавая ток в обоих направлениях.
Это создаст короткое замыкание источника питания через эти два ключа. Ток будет ограничен только сопротивлением ключей и проводов, что приведет к их перегреву и возможному выходу из строя.
При свободном ходе все ключи выключены, мотор вращается по инерции. При торможении обмотки мотора замыкаются через ключи, создавая электрическое сопротивление вращению — мотор останавливается быстрее.
Моторы потребляют большой ток (сотни мА - единицы А). Arduino не может обеспечить такой ток через свои пины. Также пульсации тока от моторов могут создавать помехи в работе микроконтроллера.
L298N использует биполярную технологию с большим падением напряжения (≈2В). TB6612FNG использует MOSFET с очень низким сопротивлением в открытом состоянии (≈0.2Ω), поэтому выделяет меньше тепла.
Совет для подготовки к проекту: Начните создавать свою библиотеку функций управления моторами уже сейчас. Это значительно упростит разработку робота Line Follower в будущем.
Сервопривод управляется специальным ШИМ-сигналом с частотой 50 Гц (период 20 мс):
• 0.5 мс импульс → 0° (минимальный угол)
• 1.5 мс импульс → 90° (среднее положение)
• 2.0 мс импульс → 180° (максимальный угол)
• Между 0.5-2.0 мс → пропорциональный угол 0-180°
Угол: 90°
| Параметр | SG90 (угловой) | Серводвигатель (непрерывный) |
|---|---|---|
| Управление | Угол поворота (0-180°) | Скорость и направление |
| Сигнал | Импульс 0.5-2.0 мс → угол | Импульс 1.0-2.0 мс → скорость |
| Диапазон | 0-180° (фиксированный) | Непрерывное вращение 360° |
| Применение | Роборуки, камеры, заслонки, поворотные механизмы | Колеса роботов, конвейеры, перемещение объектов |
| Команда | servo.write(angle) | servo.write(90) - стоп, 0 - назад, 180 - вперед |
Сервопривод SG90 (3 провода):
• Коричневый → GND Arduino
• Красный → 5V Arduino (или внешний 5V)
• Оранжевый/Желтый → Pin 9 Arduino (сигнал)
Внешний БП 5V 2A:
• +5V → Красные провода всех сервоприводов
• GND → Коричневые провода всех сервоприводов + GND Arduino
Arduino:
• Pin 9 → Сигнал сервы 1 (оранжевый)
• Pin 10 → Сигнал сервы 2
• Pin 11 → Сигнал сервы 3
• 5V → НЕ ПОДКЛЮЧАТЬ к сервам!
writeMicroseconds()Цель задания: Научиться преобразовывать аналоговые значения с потенциометра в угол поворота сервопривода с использованием функции map().
Сервопривод:
• Коричневый → GND
• Красный → 5V (рекомендуется внешний источник)
• Оранжевый → Pin 9
Потенциометр:
• Левый вывод → GND
• Средний вывод → A0
• Правый вывод → 5V
Задача: Напишите программу, которая:
map()map() для преобразования значенийСервопривод имеет обратную связь (потенциометр) и контроллер, что позволяет точно позиционировать вал на заданный угол (0-180°). Обычный мотор вращается непрерывно без контроля положения.
ШИМ-сигнал с частотой 50 Гц (период 20 мс), где длительность импульса определяет угол: 0.5 мс = 0°, 1.5 мс = 90°, 2.0 мс = 180°.
При движении и удержании позиции сервопривод потребляет ток до 500-1000 мА. При нагрузке или заедании ток может возрастать до 1.5А, что слишком много для вывода 5V Arduino.
write(angle) принимает угол 0-180°, библиотека сама преобразует его в импульс. writeMicroseconds(pulse) принимает непосредственно длительность импульса в микросекундах (500-2500 мкс), что позволяет более точно управлять сервой.
Нужно физически модифицировать серву: снять ограничители с шестерен и отключить потенциометр. Тогда 1.0 мс будет означать "полный назад", 1.5 мс — "стоп", 2.0 мс — "полный вперед".
Совет: Начните с простого проекта управления одной сервой, затем усложняйте, добавляя больше сервоприводов и датчиков.
analogRead() занимает время (~0.1 мс). Если вызывать её слишком часто в цикле без задержек, это может замедлить выполнение остальной программы.
Большинство аналоговых датчиков работают по принципу изменения сопротивления:
Фоторезистор + резистор 10 кОм:
• 5V → Фоторезистор → A0 → Резистор 10кОм → GND
Формула напряжения на A0:
Vout = 5V × (R2 / (R1 + R2))
где R1 = фоторезистор, R2 = 10 кОм
Перемещайте ползунок, чтобы изменить "влажность":
Интерпретация значений:
0-300: Сухая почва
301-700: Средняя влажность
701-1023: Влажная почва
Калибровка — процесс определения пороговых значений для разных состояний датчика:
| Условие | Значение analogRead() | Выбранный порог | Действие |
|---|---|---|---|
| Полностью сухая почва | 850-1023 | > 700 | Включить полив |
| Средняя влажность | 400-849 | 300-700 | Ничего не делать |
| Очень влажная почва | 0-399 | < 300 | Выключить полив |
| Очень светло (день) | 0-200 | < 200 | Выключить свет |
| Темно (ночь) | 800-1023 | > 800 | Включить свет |
DHT11 — цифровой датчик температуры и влажности, но требует специальной библиотеки:
Схема делителя напряжения:
• 5V → Фоторезистор → A0
• A0 → Резистор 10 кОм → GND
Светодиод для индикации:
• Pin 13 → Резистор 220 Ом → Светодиод(+)
• Светодиод(-) → GND
Оператор && (И) позволяет проверять несколько условий одновременно:
Цель задания: Научиться создавать систему, которая реагирует на изменения окружающей среды, используя аналоговые датчики и логические условия.
analogRead() ниже порога (почва сухая)analogRead() выше порога (темно)map())Функция analogRead() возвращает целое число от 0 до 1023 (10-битное значение), где 0 соответствует 0V, а 1023 соответствует 5V на аналоговом входе Arduino.
Фоторезистор изменяет сопротивление, но Arduino может измерять только напряжение. Резистор создает делитель напряжения, который преобразует изменение сопротивления в изменение напряжения, которое можно измерить.
Калибровка — это процесс определения пороговых значений для разных состояний датчика. Она нужна потому, что каждый датчик немного отличается, а условия окружающей среды (яркость света, тип почвы) влияют на показания.
Функция map(value, fromLow, fromHigh, toLow, toHigh) преобразует значение из одного диапазона в другой. Например, преобразует 0-1023 от датчика в 0-100% для удобного отображения.
Каждое выполнение analogRead() занимает около 0.1 мс. Если вызывать её в цикле без задержек тысячи раз в секунду, это займет значительную часть времени процессора и замедлит выполнение остального кода.
| Протокол | Скорость | Кол-во проводов | Примеры датчиков |
|---|---|---|---|
| UART | 9600-115200 бод | 2 (RX, TX) | GPS модули, Bluetooth |
| I2C | 100-400 кГц | 2 (SDA, SCL) | Акселерометры, дисплеи |
| 1-Wire | 16 кбит/с | 1 (данные + питание) | DS18B20 (температура) |
HC-SR04 — популярный датчик для измерения расстояния от 2 см до 400 см с точностью ±3 мм.
Расстояние (см) = (длительность импульса (мкс) × 0.0343) / 2
или упрощенно:
Расстояние (см) = длительность импульса (мкс) / 58
Скорость звука: 343 м/с = 0.0343 см/мкс
Деление на 2 — потому что звук проходит путь туда и обратно
Функция pulseIn(pin, value, timeout) измеряет длительность импульса на указанном пине:
Полный код с подробными комментариями:
DS18B20 — цифровой датчик температуры с интерфейсом 1-Wire. Точность ±0.5°C в диапазоне -10°C до +85°C.
Для работы с DS18B20 нужны две библиотеки:
Перемещайте ползунок, чтобы изменить "расстояние до объекта":
Пороги срабатывания парктроника:
150+ см: Объект далеко (зеленый)
50-149 см: Объект близко (желтый)
15-49 см: Осторожно! (оранжевый)
0-14 см: Опасность! Включен зуммер (красный)
Цель задания: Научиться создавать полезные устройства с использованием "умных" датчиков, работать с функцией pulseIn() и создавать звуковую индикацию.
tone(pin, frequency, duration)tone() не блокирует выполнение программы (в отличие от delay)Протокол связи — это набор правил, по которым устройства обмениваются данными. Он нужен для того, чтобы устройства "понимали" друг друга: как начинать и заканчивать передачу, как кодировать данные, как проверять их корректность.
HC-SR04 работает по принципу эхолокации: отправляет ультразвуковой импульс, ждет его отражения от объекта и измеряет время между отправкой и приемом эха. Расстояние вычисляется по формуле: расстояние = (время × скорость звука) / 2.
Функция pulseIn(pin, value, timeout) измеряет длительность импульса на указанном пине. С HC-SR04 она измеряет длительность HIGH-импульса на пине ECHO, который соответствует времени прохождения звука до объекта и обратно.
"Умные" датчики имеют цифровой интерфейс, что дает помехоустойчивость, более высокую точность (калибровку делает производитель), возможность подключения нескольких датчиков к одному проводу и использование готовых библиотек.
Резистор 4.7 кОм является подтягивающим резистором (pull-up resistor). Он необходим для корректной работы протокола 1-Wire, так как подтягивает линию данных к высокому уровню, когда ни одно устройство не активно.
Да, можно! К одной шине 1-Wire можно подключить до 127 датчиков DS18B20. Каждый датчик имеет уникальный 64-битный серийный номер, что позволяет обращаться к каждому отдельно. Библиотека DallasTemperature автоматически определяет все подключенные датчики.
Возможные причины и решения:
Проверьте следующее:
Диагностика:
tone(pin, frequency) для включения и noTone(pin) для выключенияtone(8, 1000); delay(1000); noTone(8);Представьте, что мотор — это автомобиль, который нужно перегнать через реку:
[+] ---- [Q1] ---- A+ ---- [МОТОР] ---- B- ---- [Q4] ---- [-]
| |
[+] ---- [Q2] ---- A- ---- [МОТОР] ---- B+ ---- [Q3] ---- [-]
Нажмите на состояния ниже, чтобы увидеть, как работает H-мост:
Q1 и Q4 открыты
Ток: [+] → Q1 → Мотор(+) → Мотор(-) → Q4 → [-]
Q2 и Q3 открыты
Ток: [+] → Q2 → Мотор(-) → Мотор(+) → Q3 → [-]
Q1 и Q2 открыты (или Q3 и Q4)
Короткое замыкание обмоток мотора
Все ключи выключены
Мотор вращается по инерции
Вместо того чтобы собирать H-мост из отдельных транзисторов, мы используем готовые драйверы:
| Драйвер | Макс. ток | Напряжение | Особенности |
|---|---|---|---|
| L298N | 2А на канал (4А пиковый) | 5-35В | 2 канала, радиатор, стабилизатор 5В |
| L9110S | 0.8А (1.5А пиковый) | 2.5-12В | Маленький, дешевый, 2 канала |
| TB6612FNG | 1.2А (3.2А пиковый) | 2.5-13.5В | Эффективный, мало тепла |
Управление направлением осуществляется комбинацией сигналов IN1 и IN2:
| IN1 | IN2 | ENA | Режим | Действие |
|---|---|---|---|---|
| 1 (HIGH) | 0 (LOW) | PWM (0-255) | ВПЕРЕД | Вращение по часовой стрелке |
| 0 (LOW) | 1 (HIGH) | PWM (0-255) | НАЗАД | Вращение против часовой стрелки |
| 1 (HIGH) | 1 (HIGH) | X | ТОРМОЖЕНИЕ | Быстрая остановка (короткое замыкание) |
| 0 (LOW) | 0 (LOW) | X | СВОБОДНЫЙ ХОД | Вращение по инерции |
| X | X | 0 (LOW) | ОТКЛЮЧЕНО | Мотор выключен (независимо от IN1/IN2) |
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Uno/Nano | 1 | - |
| Драйвер L298N или L9110S | 1 | Для одного мотора достаточно одного канала |
| TT-мотор с редуктором | 1 | 3-6В, с колесом |
| Батарейный отсек 4×AA | 1 | 6В для моторов (ОТДЕЛЬНОЕ ПИТАНИЕ!) |
| Перемычки папа-папа | 10-15 | Для подключения |
| Макетная плата | 1 | Для удобства подключения |
1. Arduino 5V → VCC на L298N (питание логики)
2. Arduino GND → GND на L298N (ОБЯЗАТЕЛЬНО!)
3. Батарейка 6V+ → +12V (VM) на L298N
4. Батарейка 6V- → GND на L298N
5. Arduino D9 (~) → ENA на L298N (ШИМ для скорости)
6. Arduino D8 → IN1 на L298N
7. Arduino D7 → IN2 на L298N
8. OUT1, OUT2 на L298N → Контакты мотора
Задача: Создайте программу, где мотор плавно разгоняется от 0 до 255, затем плавно тормозит до 0, и сразу (без остановки) начинает движение в обратном направлении с таким же профилем скорости.
Задача: Реализуйте программу, где мотор работает 2 секунды на скорости 64, затем 2 секунды на скорости 128, затем 2 секунды на скорости 192, затем 2 секунды на скорости 255 — всё в одном направлении.
Задача: Сравните два вида остановки: свободный ход (коастинг) и торможение (брейкинг).
L298N сильно греется, особенно при больших токах или при использовании торможения:
Для проектов роботов рекомендуются более современные драйверы:
| Драйвер | Преимущества | Для каких проектов |
|---|---|---|
| TB6612FNG | Низкий нагрев, высокая эффективность | Line Follower, небольшие роботы |
| DRV8833 | Маленький размер, низкое напряжение | Мини-роботы, дроны |
| VNH5019 | Мощный (до 30А), защита от перегрева | Тяжелые роботы, автомобили |
Цель задания: Научиться считывать аналоговые значения с потенциометра и использовать их для плавного управления скоростью и направлением вращения мотора.
Потенциометр (10 кОм):
• Левый вывод → GND Arduino
• Средний вывод → A0 Arduino (сигнал)
• Правый вывод → 5V Arduino
Задача: Напишите программу, которая:
map()результат = (значение - отМинимум) × (кМаксимум - кМинимум) / (отМаксимум - отМинимум) + кМинимум Создайте "мертвую зону" в середине диапазона потенциометра, где мотор точно остановлен даже при небольших колебаниях ручки.
Добавьте плавный старт мотора при резком повороте потенциометра. Используйте плавное изменение скорости вместо мгновенного.
Используйте два потенциометра: один для управления скоростью (0-255), второй для выбора направления (вперед/назад) через кнопку или тумблер.
map() для преобразования значенийЧто должно быть в отчете:
constrain() для ограничения скорости в диапазоне -255..255delay(10-50) для стабильности считыванияabs() для получения модуляanalogWrite() для ШИМ-пина скоростиmap() Одиночный MOSFET может только включать/выключать ток в одном направлении. H-мост состоит из 4 ключей, которые могут менять полярность напряжения на моторе, создавая ток в обоих направлениях.
Это создаст короткое замыкание источника питания через эти два ключа. Ток будет ограничен только сопротивлением ключей и проводов, что приведет к их перегреву и возможному выходу из строя.
При свободном ходе все ключи выключены, мотор вращается по инерции. При торможении обмотки мотора замыкаются через ключи, создавая электрическое сопротивление вращению — мотор останавливается быстрее.
Моторы потребляют большой ток (сотни мА - единицы А). Arduino не может обеспечить такой ток через свои пины. Также пульсации тока от моторов могут создавать помехи в работе микроконтроллера.
L298N использует биполярную технологию с большим падением напряжения (≈2В). TB6612FNG использует MOSFET с очень низким сопротивлением в открытом состоянии (≈0.2Ω), поэтому выделяет меньше тепла.
Совет для подготовки к проекту: Начните создавать свою библиотеку функций управления моторами уже сейчас. Это значительно упростит разработку робота Line Follower в будущем.