🔌 Подключение мотора к контроллеру

Практическая работа: управление вращением

⚡ Практикум • 💻 Программирование • 📊 Исследования
5 класс • Технология • 90 минут

👨‍🏫 Учитель: Ахметов Рустам
🏫 Школа: ГБОУ № 1362
📅 Дата: 2025-06-11
🎯 Миссия: Научиться управлять движением роботов!

🎯 План практической работы

🔬 Сегодня научимся:

  1. 🔌 Подключать мотор к контроллеру безопасно и правильно
  2. 💻 Программировать управление скоростью и направлением
  3. 📊 Исследовать зависимость скорости от мощности сигнала
  4. 📈 Строить графики экспериментальных данных
  5. 🧮 Анализировать результаты и делать выводы

🧰 Оборудование на пару:

  • Контроллер Arduino/LEGO
  • Электродвигатель постоянного тока
  • Соединительные провода
  • Компьютер с ПО
  • Рабочие листы для записей

⚠️ Техника безопасности:

  • Отключаем питание при подключении проводов
  • Проверяем полярность подключения
  • Не допускаем короткого замыкания

🔄 Повторяем теорию

Актуализация знаний

❓ Быстрая проверка знаний

1. Типы электродвигателей:

  • 🔄 Коллекторный двигатель → _______________
  • 🎯 Сервопривод → _______________
  • 📐 Шаговый двигатель → _______________
  • 🌪️ Бесколлекторный → _______________

2. Принцип работы:

  • На каком физическом явлении основана работа электродвигателя?
  • Как называется вращающаяся часть двигателя?
  • Зачем нужен контроллер?

3. Управление скоростью:

  • Что такое ШИМ?
  • Как связаны напряжение и скорость вращения?

📋 Схема подключения

🔌 Базовое подключение двигателя к Arduino:

1Arduino Uno → Двигатель
2    +5V → Красный провод (+)
3    GND → Черный провод (-)
4    Pin 9 → Управляющий сигнал

⚠️ Важно:

  • Красный провод = положительный полюс
  • Черный провод = отрицательный полюс
  • Никогда не путать полярность!

🔧 Порядок подключения:

  1. Выключить питание контроллера
  2. Подключить провода согласно схеме
  3. Проверить надежность соединений
  4. Включить питание и тестировать

💻 Структура программы управления

📝 Базовый алгоритм:

 1void setup() {
 2  // Настройка пинов
 3  pinMode(9, OUTPUT);  // Пин управления мотором
 4}
 5
 6void loop() {
 7  // Управляющие команды
 8  analogWrite(9, 128);  // 50% мощности
 9  delay(2000);          // 2 секунды
10  
11  analogWrite(9, 0);    // Остановка
12  delay(1000);          // 1 секунда
13}

🧮 Диапазон значений ШИМ:

  • 0 = остановка (0% мощности)
  • 128 = половина мощности (50%)
  • 255 = максимальная мощность (100%)

🔧 Этап 1: Подключение компонентов

Сборка электрической схемы

🛠️ Пошаговое подключение

Шаг 1: Подготовка

  • Убедитесь, что контроллер выключен
  • Разложите компоненты на столе
  • Найдите нужные провода

Шаг 2: Подключение питания

  • Красный провод мотора → pin 5V на Arduino
  • Черный провод мотора → pin GND на Arduino

Шаг 3: Подключение управления

  • Управляющий провод → pin 9 (ШИМ-выход)

Шаг 4: Проверка

  • Все соединения надежны?
  • Полярность правильная?
  • Нет коротких замыканий?

⚡ Проверка электрической цепи

🔬 Тестирование мультиметром (если есть):

  1. Проверка сопротивления:

    • Отключить питание
    • Измерить сопротивление мотора
    • Нормальное значение: 10-50 Ом
  2. Проверка цепи:

    • Проверить целостность проводов
    • Убедиться в отсутствии КЗ
  3. Контроль напряжения:

    • Включить питание
    • Измерить напряжение на моторе
    • Должно быть близко к 5В

📋 Результаты измерений:

Параметр Измеренное значение Норма
Сопротивление мотора ___ Ом 10-50 Ом
Напряжение питания ___ В ~5 В
Целостность проводов ✓/❌

🎯 Первое тестирование

💻 Простейшая программа проверки:

 1void setup() {
 2  pinMode(9, OUTPUT);
 3  Serial.begin(9600);
 4  Serial.println("Тест мотора начат");
 5}
 6
 7void loop() {
 8  Serial.println("Мотор включен");
 9  analogWrite(9, 100);  // Слабое вращение
10  delay(3000);
11  
12  Serial.println("Мотор выключен");
13  analogWrite(9, 0);
14  delay(2000);
15}

📝 Наблюдения:

  • Мотор вращается? ✓/❌
  • Направление вращения: по часовой/против часовой
  • Есть ли посторонние звуки? ✓/❌
  • Нагревается ли мотор? ✓/❌

💻 Этап 2: Программирование управления

Создание программы управления

🎮 Программа с разными скоростями

📝 Расширенная программа:

 1void setup() {
 2  pinMode(9, OUTPUT);
 3  Serial.begin(9600);
 4  Serial.println("Программа управления скоростью");
 5}
 6
 7void loop() {
 8  // Последовательность скоростей
 9  testSpeed(64);   // 25%
10  testSpeed(128);  // 50%
11  testSpeed(192);  // 75%
12  testSpeed(255);  // 100%
13  
14  // Остановка
15  analogWrite(9, 0);
16  delay(2000);
17}
18
19void testSpeed(int speed) {
20  Serial.print("Скорость: ");
21  Serial.print(speed * 100 / 255);
22  Serial.println("%");
23  
24  analogWrite(9, speed);
25  delay(3000);
26}

🔄 Управление направлением вращения

⚙️ Для реверсивного управления нужен драйвер L298N:

 1// Пины управления направлением
 2#define MOTOR_PIN1 7
 3#define MOTOR_PIN2 8
 4#define MOTOR_SPEED 9
 5
 6void setup() {
 7  pinMode(MOTOR_PIN1, OUTPUT);
 8  pinMode(MOTOR_PIN2, OUTPUT);
 9  pinMode(MOTOR_SPEED, OUTPUT);
10}
11
12void motorForward(int speed) {
13  digitalWrite(MOTOR_PIN1, HIGH);
14  digitalWrite(MOTOR_PIN2, LOW);
15  analogWrite(MOTOR_SPEED, speed);
16}
17
18void motorBackward(int speed) {
19  digitalWrite(MOTOR_PIN1, LOW);
20  digitalWrite(MOTOR_PIN2, HIGH);
21  analogWrite(MOTOR_SPEED, speed);
22}
23
24void motorStop() {
25  digitalWrite(MOTOR_PIN1, LOW);
26  digitalWrite(MOTOR_PIN2, LOW);
27  analogWrite(MOTOR_SPEED, 0);
28}

🎯 Интерактивное управление

📱 Управление через последовательный порт:

 1void setup() {
 2  pinMode(9, OUTPUT);
 3  Serial.begin(9600);
 4  Serial.println("Введите команду:");
 5  Serial.println("0-9: скорость (0=стоп, 9=максимум)");
 6}
 7
 8void loop() {
 9  if (Serial.available()) {
10    char command = Serial.read();
11    
12    if (command >= '0' && command <= '9') {
13      int speed = (command - '0') * 28;  // 0-252
14      analogWrite(9, speed);
15      
16      Serial.print("Установлена скорость: ");
17      Serial.print(speed * 100 / 255);
18      Serial.println("%");
19    }
20  }
21}

🎮 Команды управления:

  • 0 → остановка
  • 1 → 11% мощности
  • 5 → 55% мощности
  • 9 → 100% мощности

📊 Измерение скорости вращения

🔄 Подсчет оборотов с помощью меток:

 1// Переменные для измерения
 2unsigned long startTime;
 3int revolutionCount = 0;
 4bool measurementActive = false;
 5
 6void setup() {
 7  pinMode(9, OUTPUT);
 8  Serial.begin(9600);
 9  Serial.println("Измерение скорости начато");
10}
11
12void measureSpeed(int motorPower) {
13  Serial.print("Тест при мощности ");
14  Serial.print(motorPower);
15  Serial.println("/255");
16  
17  analogWrite(9, motorPower);
18  delay(1000);  // Время на разгон
19  
20  Serial.println("Считайте обороты в течение 30 секунд");
21  startTime = millis();
22  
23  while (millis() - startTime < 30000) {
24    // Ждем 30 секунд для подсчета
25    delay(100);
26  }
27  
28  analogWrite(9, 0);  // Остановка
29  
30  Serial.println("Введите количество оборотов:");
31  // Ждем ввода от пользователя
32}

📊 Этап 3: Экспериментальное исследование

Зависимость скорости от мощности

🔬 Методика эксперимента

🎯 Цель: Установить зависимость между мощностью ШИМ-сигнала и скоростью вращения мотора.

📋 План эксперимента:

  1. Установить мощность 20% (51/255)
  2. Подождать стабилизации (3 сек)
  3. Подсчитать обороты за 30 секунд
  4. Записать результат
  5. Повторить для 40%, 60%, 80%, 100%

⏱️ Инструкция по измерению:

  • Сделайте яркую метку на валу мотора
  • Запустите секундомер на 30 секунд
  • Считайте полные обороты метки
  • Запишите результат в таблицу

📋 Таблица экспериментальных данных

Мощность ШИМ Мощность, % Обороты за 30с Скорость, об/мин Примечания
1 51 20% ___ ___
2 102 40% ___ ___
3 153 60% ___ ___
4 204 80% ___ ___
5 255 100% ___ ___

🧮 Расчет скорости в об/мин:

\[n = \frac{\text{обороты за 30с} \times 60}{30} = \text{обороты за 30с} \times 2\]

📝 Пример расчета: Если за 30 секунд мотор сделал 45 оборотов:

\[n = 45 \times 2 = 90 \text{ об/мин}\]

📈 Построение графика зависимости

📊 График n = f(P)

Координатные оси:

  • X (горизонтальная): Мощность, % (0-100%)
  • Y (вертикальная): Скорость, об/мин

🎯 Порядок построения:

  1. Выберите масштаб осей
  2. Отметьте экспериментальные точки
  3. Проведите линию тренда
  4. Подпишите оси и единицы измерения

📐 Пример масштаба:

  • По X: 1 клетка = 10% мощности
  • По Y: 1 клетка = 10 об/мин

🧮 Математический анализ

📈 Определение типа зависимости:

Если зависимость линейная:

\(n = k \cdot P + b\)

где:

  • n - скорость (об/мин)
  • P - мощность (%)
  • k - коэффициент наклона
  • b - начальное значение

🔢 Расчет коэффициента наклона:

\[k = \frac{n_2 - n_1}{P_2 - P_1}\]

📝 Пример: При P₁ = 20%, n₁ = 30 об/мин При P₂ = 100%, n₂ = 150 об/мин

\[k = \frac{150 - 30}{100 - 20} = \frac{120}{80} = 1.5 \text{ об/мин на %}\]

🎯 Физический смысл: При увеличении мощности на 1% скорость увеличивается на 1.5 об/мин

📊 Дополнительные измерения

⚡ Измерение тока потребления (если есть амперметр):

Мощность, % Ток, мА Расчетная мощность, мВт
20% ___ ___
40% ___ ___
60% ___ ___
80% ___ ___
100% ___ ___

🧮 Расчет мощности:

\[P = U \times I = 5\text{В} \times I\text{(А)}\]

🎯 Цель: Понять, как растет энергопотребление с увеличением нагрузки

📈 Анализ результатов

Выводы и интерпретация данных

🔍 Анализ полученных данных

📊 Характер зависимости:

Из графика видно, что зависимость скорости от мощности:

  • ⬜ Линейная
  • ⬜ Нелинейная
  • ⬜ Пороговая (есть минимальная мощность запуска)

🧮 Уравнение зависимости:

\[n = \_\_\_ \cdot P + \_\_\_\]

📐 Коэффициент корреляции: Насколько точно точки ложатся на прямую линию?

  • Высокая корреляция (R² > 0.9)
  • Средняя корреляция (0.7 < R² < 0.9)
  • Низкая корреляция (R² < 0.7)

⚡ Особенности работы мотора

🔋 Пороговые эффекты:

Минимальная мощность запуска:

  • При какой мощности мотор начинает вращаться? ____%
  • Почему мотор не запускается при очень низкой мощности?

📈 Линейность в рабочем диапазоне:

  • В каком диапазоне мощности зависимость наиболее линейная?
  • От ___% до ___%

🔥 Максимальная нагрузка:

  • При максимальной мощности мотор работает стабильно?
  • Есть ли признаки перегрева?

🎯 Практические выводы

🤖 Применение в робототехнике:

1. Точное управление скоростью:

  • Для скорости 50 об/мин нужна мощность ____%
  • Для поворота на месте используем ___% мощности

2. Энергосбережение:

  • При половинной скорости экономия энергии составляет ___%
  • Оптимальная мощность для длительной работы: ___%

3. Программирование движения:

1// Медленное движение
2analogWrite(motorPin, 80);  // ~30% мощности
3
4// Нормальное движение  
5analogWrite(motorPin, 150); // ~60% мощности
6
7// Быстрое движение
8analogWrite(motorPin, 255); // 100% мощности

📊 Сравнительный анализ

👥 Сравнение результатов разных команд:

Команда Коэффициент k Мин. мощность запуска Макс. скорость
1 ___ ___% ___ об/мин
2 ___ ___% ___ об/мин
3 ___ ___% ___ об/мин
4 ___ ___% ___ об/мин
Среднее ___ ___% ___ об/мин

❓ Причины различий:

  • Разные моторы (разброс характеристик)
  • Точность измерений
  • Состояние контактов
  • Температура окружающей среды

🎯 Какие результаты считать правильными? Средние значения наиболее достоверны при условии правильных измерений

🔬 Источники погрешностей

📏 Погрешности измерений:

1. Случайные погрешности:

  • Неточность подсчета оборотов (±1-2 оборота)
  • Влияние времени реакции человека
  • Нестабильность напряжения питания

2. Систематические погрешности:

  • Трение в подшипниках мотора
  • Сопротивление проводов
  • Погрешность измерительных приборов

🧮 Расчет погрешности:

\[\delta = \frac{\text{разброс значений}}{\text{среднее значение}} \times 100\%\]

📝 Пример: Если измерения: 28, 30, 32 оборота за 30с Среднее: 30, разброс: ±2 Погрешность: δ = 2/30 × 100% = 6.7%

🎯 Дополнительные задания

Расширение функциональности

🔄 Задание 1: Реверсивное управление

📋 Цель: Добавить возможность вращения в обе стороны

🔌 Схема подключения с драйвером L298N:

1Arduino → L298N → Мотор
2Pin 7 → IN1
3Pin 8 → IN2  
4Pin 9 → ENA (скорость)
55V → VCC
6GND → GND

💻 Программа управления:

 1void setup() {
 2  pinMode(7, OUTPUT);  // Направление 1
 3  pinMode(8, OUTPUT);  // Направление 2
 4  pinMode(9, OUTPUT);  // Скорость
 5  Serial.begin(9600);
 6}
 7
 8void loop() {
 9  // Вперед
10  motorForward(150);
11  delay(3000);
12  
13  // Стоп
14  motorStop();
15  delay(1000);
16  
17  // Назад
18  motorBackward(150);
19  delay(3000);
20  
21  // Стоп
22  motorStop();
23  delay(1000);
24}
25
26void motorForward(int speed) {
27  digitalWrite(7, HIGH);
28  digitalWrite(8, LOW);
29  analogWrite(9, speed);
30}
31
32void motorBackward(int speed) {
33  digitalWrite(7, LOW);
34  digitalWrite(8, HIGH);
35  analogWrite(9, speed);
36}
37
38void motorStop() {
39  digitalWrite(7, LOW);
40  digitalWrite(8, LOW);
41  analogWrite(9, 0);
42}

📊 Задание 2: Исследование инерции

🎯 Цель: Измерить время остановки мотора после отключения питания

⏱️ Методика:

  1. Разогнать мотор до максимальной скорости
  2. Резко отключить питание
  3. Измерить время до полной остановки
  4. Повторить для разных начальных скоростей

📋 Таблица результатов:

Начальная мощность, % Время остановки, с Количество оборотов по инерции
40% ___ ___
60% ___ ___
80% ___ ___
100% ___ ___

🧮 Анализ:

  • Как время остановки зависит от начальной скорости?
  • Сколько энергии запасается во вращающемся роторе?

🤖 Задание 3: Программа “Робот-автомобиль”

🚗 Цель: Имитировать движение автомобиля с разными режимами

💻 Алгоритм программы:

 1void setup() {
 2  pinMode(9, OUTPUT);
 3  Serial.begin(9600);
 4  Serial.println("Режимы движения автомобиля:");
 5  Serial.println("1 - Парковка");
 6  Serial.println("2 - Город"); 
 7  Serial.println("3 - Трасса");
 8}
 9
10void loop() {
11  if (Serial.available()) {
12    char mode = Serial.read();
13    
14    switch(mode) {
15      case '1':
16        parkingMode();
17        break;
18      case '2':
19        cityMode();
20        break;
21      case '3':
22        highwayMode();
23        break;
24    }
25  }
26}
27
28void parkingMode() {
29  Serial.println("Режим парковки - медленное движение");
30  analogWrite(9, 80);   // ~30% мощности
31}
32
33void cityMode() {
34  Serial.println("Городской режим - средняя скорость");
35  analogWrite(9, 150);  // ~60% мощности
36}
37
38void highwayMode() {
39  Serial.println("Трасса - высокая скорость");
40  analogWrite(9, 220);  // ~85% мощности
41}

📱 Задание 4: Беспроводное управление

📡 Цель: Управление мотором с помощью Bluetooth

📱 Приложение на смартфоне отправляет команды:

  • F - вперед
  • B - назад
  • L - лево
  • R - право
  • S - стоп
  • 0-9 - скорость

💻 Программа обработки команд:

 1void loop() {
 2  if (bluetooth.available()) {
 3    char command = bluetooth.read();
 4    
 5    switch(command) {
 6      case 'F':
 7        motorForward(currentSpeed);
 8        break;
 9      case 'B':
10        motorBackward(currentSpeed);
11        break;
12      case 'S':
13        motorStop();
14        break;
15      case '0'...'9':
16        currentSpeed = (command - '0') * 25;
17        break;
18    }
19  }
20}

🏠 Домашнее задание

📋 Обязательные задания

1. Схема подключения двух моторов Нарисуйте схему подключения двух моторов к одному контроллеру Arduino для управления двухколесным роботом:

1Мотор А (левое колесо):
2- Пины управления: ___
3- Пин скорости: ___
4
5Мотор Б (правое колесо):  
6- Пины управления: ___
7- Пин скорости: ___

2. Программа дифференциального управления Напишите псевдокод программы, которая заставит робота:

  • Ехать прямо 3 секунды
  • Повернуть налево (правый мотор быстрее левого)
  • Ехать прямо 2 секунды
  • Остановиться

3. Анализ эксперимента Ответьте на вопрос: “Как можно использовать информацию о зависимости скорости от мощности при конструировании робота?” (минимум 5 применений)

🎯 Дополнительные задания

🔬 Для исследователей: Проведите дома эксперимент с игрушечной машинкой на радиоуправлении:

  • Измерьте время разгона до максимальной скорости
  • Определите дальность действия пульта
  • Оцените время работы от батареек

💻 Для программистов: Изучите документацию по библиотеке Servo.h и напишите программу управления сервоприводом с плавным изменением угла поворота.

🧮 Для математиков: Постройте математическую модель зависимости времени разгона мотора от приложенного напряжения. Учтите инерцию ротора и сопротивление.

🌐 Полезные ресурсы

📚 Обучающие материалы:

  • Справочник по Arduino IDE
  • Видеоуроки по подключению моторов
  • Форумы по робототехнике

🛠️ Симуляторы:

  • Tinkercad Circuits (онлайн)
  • Fritzing (схемы подключения)
  • Arduino IDE (среда программирования)

📱 Мобильные приложения:

  • Bluetooth Terminal
  • Arduino Bluetooth Control
  • Robotics Calculator

🎉 Подведение итогов практикума

🏆 Что мы освоили сегодня

🔌 Технические навыки:

  • ✅ Правильное подключение мотора к контроллеру
  • ✅ Программирование управления скоростью
  • ✅ Создание программ с различными алгоритмами
  • ✅ Безопасная работа с электронными компонентами

🔬 Исследовательские навыки:

  • ✅ Планирование и проведение эксперимента
  • ✅ Точные измерения скорости вращения
  • ✅ Построение графиков зависимостей
  • ✅ Анализ экспериментальных данных

🧮 Математические навыки:

  • ✅ Работа с пропорциональными зависимостями
  • ✅ Расчет коэффициентов наклона прямых
  • ✅ Оценка погрешностей измерений
  • ✅ Применение формул в практических задачах

🎯 Ключевые выводы

📈 Главная закономерность: Скорость вращения электродвигателя пропорциональна мощности управляющего ШИМ-сигнала в рабочем диапазоне.

🧮 Математическая модель: \[n = k \cdot P + n_0\]

где n₀ - минимальная мощность запуска

🤖 Практическое применение:

  • Точное управление скоростью роботов
  • Программирование сложных траекторий движения
  • Оптимизация энергопотребления
  • Защита моторов от перегрузки

🚀 Связь с будущими проектами

🔮 Что будем изучать дальше:

  • Датчики - глаза и уши робота
  • Сложные алгоритмы движения
  • Обратная связь и автоматическое управление
  • Искусственный интеллект в робототехнике

🎯 Как сегодняшние знания пригодятся:

  • Управление колесами робота-исследователя
  • Создание роботов-помощников
  • Программирование беспилотных устройств
  • Участие в соревнованиях по робототехнике

📞 Техническая поддержка

👨‍🏫 Учитель: Ахметов Рустам
📧 Email: [email protected]
💬 Classroom: gse1362.classroom.ru
⏰ Консультации: ПН, СР 15:00-16:00, каб. 205

🔧 Помощь с проектами:

  • Подбор компонентов
  • Отладка программ
  • Консультации по схемам
  • Подготовка к соревнованиям

🎯 Следующий урок: “Датчики - органы чувств робота”

⚡ ПРОДОЛЖАЕМ СОЗДАВАТЬ УМНЫХ РОБОТОВ!
Увидимся на следующем практикуме!