Skip to main content

⚡ DC Моторы и драйвер L298N - Когда IoT получает МУСКУЛЫ!

📋 Паспорт спринта

Параметр ЗНАЧЕНИЕ
Предмет Интернет вещей (элективный курс)
Класс 9 класс
Спринт № 28 из 36 🚀
Тип занятия POWER ELECTRONICS + МЕХАНИКА ⚡🔧
Продолжительность 90 минут ЧИСТОГО АДРЕНАЛИНА
Формат МОТОР-ЛАБОРАТОРИЯ с реальным железом

🎯 Цели спринта (БОЕВЫЕ ЗАДАЧИ!)

ГЛАВНАЯ МИССИЯ:

Превратить слабые цифровые сигналы в МОЩНУЮ МЕХАНИЧЕСКУЮ СИЛУ! Создать IoT системы, которые физически изменяют реальный мир!

КОНКРЕТНЫЕ ДОСТИЖЕНИЯ:

  • Понимают принципы работы DC моторов и их управления
  • Подключают и программируют драйвер L298N
  • Создают MQTT-controlled роботизированные системы
  • Реализуют PWM для точного контроля скорости
  • Управляют направлением вращения реверсом
  • 🆕 Создают feedback systems с энкодерами
  • 🆕 Реализуют PID регулирование для точности
  • 🆕 Строят автономные роботизированные платформы

🔄 Sprint Retrospective (0-3 мин): ПЕРЕХОД К СИЛЕ!

Энергичная проверка:

  • “КТО создал working IoT dashboard? ПОКАЖИТЕ МОЩЬ!”
  • “У кого есть MQTT система, которая мгновенно реагирует?”
  • “Готовы превратить ваши данные в ДВИЖЕНИЕ?”

БОЕВАЯ связка: “Вы научились собирать данные и красиво их показывать. НО! Настоящий IoT ДЕЙСТВУЕТ! Сегодня ваши команды будут ФИЗИЧЕСКИ двигать объекты! WELCOME TO THE POWER SIDE OF IoT!” ⚡💪


🕐 Sprint Timeline (90 минут ЧИСТОЙ ЭНЕРГИИ)

⚡ SPRINT START (3-8 мин): ДЕМО СИЛЫ!

🆕 ЭПИЧЕСКАЯ демонстрация мощи:

  1. Слабый сигнал → МОЩНОЕ движение:

    • На экране: нажатие кнопки в веб-интерфейсе
    • В реальности: МОТОР вращает колесо робота!
    • “3.3V сигнал контролирует 12V мотор!”
  2. MQTT команда → Роботизированная рука:

    • Отправка MQTT: {"action": "grab", "force": 80}
    • Робо-рука ХВАТАЕТ предмет и поднимает!
  3. Мобильное приложение → Танк:

    • Joystick на телефоне → танк едет по столу!
    • “От touch screen до ГУСЕНИЦ!”
  4. 🆕 ДЕМО FEEDBACK:

    • Мотор встречает препятствие → автоматически увеличивает мощность
    • “Умные моторы ЧУВСТВУЮТ сопротивление!”

ВЫЗОВ К КЛАССУ:

  • “КТО хочет управлять роботом ПРЯМО СЕЙЧАС?”
  • “Как вы думаете, сколько силы нужно чтобы поднять этот предмет?”
  • “ГДЕ в реальной жизни такие системы МЕНЯЮТ МИР?”

БОЕВАЯ ЗАДАЧА: “Сенсоры дают нам ИНФОРМАЦИЮ, но моторы дают нам СИЛУ! Сегодня создаем IoT с МУСКУЛАМИ!” 💪

📚 THEORY BLOCK (8-25 мин): НАУКА О СИЛЕ

Микро-блок 1 (8-13 мин): DC Моторы - от электронов к ДВИЖЕНИЮ

 1⚡ DC МОТОР = ПРЕОБРАЗОВАТЕЛЬ ЭНЕРГИИ
 2
 3ФИЗИКА СИЛЫ:
 4🔋 Электрическая энергия → 🌀 Магнитное поле → 💨 Механическое вращение
 5
 6КЛЮЧЕВЫЕ ХАРАКТЕРИСТИКИ:
 7🔧 НАПРЯЖЕНИЕ: 3V, 6V, 12V, 24V (больше = сильнее)
 8⚡ ТОК: 100mA - 10A (ток = крутящий момент)  
 9🌀 СКОРОСТЬ: 100-30000 RPM (обороты в минуту)
10💪 МОМЕНТ: 0.1-100 Nm (сила поворота)
11
12ТИПЫ DC МОТОРОВ:
13🎯 BRUSHED (щеточные):
14   ✅ Простые, дешевые ($2-20)
15   ✅ Легко управлять
16   ❌ Износ щеток, искры
17
18🚀 BRUSHLESS (бесщеточные):
19   ✅ Долговечные, эффективные
20   ✅ Высокая точность
21   ❌ Сложное управление, дороже ($20-200)
22
23💥 GEARED MOTORS (редукторные):
24   ✅ Высокий момент, низкая скорость
25   ✅ Идеально для роботов
26   ✅ Самоторможение
27
28🏎️ HIGH-SPEED MOTORS:
29   ✅ Дроны, вентиляторы, шпиндели
30   ❌ Низкий момент

Интерактив: “Кто может ФИЗИЧЕСКИ крутануть этот мотор рукой? Почувствуйте СОПРОТИВЛЕНИЕ!”

Микро-блок 2 (13-18 мин): L298N - МОСТИК СИЛЫ

 1🌉 L298N = H-BRIDGE ДРАЙВЕР
 2
 3ПРОБЛЕМА УПРАВЛЕНИЯ:
 4❌ Arduino GPIO: 3.3V, 20mA (слабо!)
 5❌ Мотор нужен: 6-12V, 2-4A (МОЩНО!)
 6✅ L298N: УСИЛИВАЕТ сигналы в 1000 раз!
 7
 8СХЕМА СИЛЫ:
 9┌─────────────┐    ┌─────────────┐    ┌─────────────┐
10│  Arduino    │───▶│    L298N    │───▶│   DC MOTOR  │
11│  3.3V/20mA  │    │  AMPLIFIER  │    │  12V/2A     │
12└─────────────┘    └─────────────┘    └─────────────┘
13
14H-BRIDGE МАГИЯ:
15    ВПЕРЕД:          НАЗАД:           СТОП:
16  A1=HIGH A2=LOW   A1=LOW A2=HIGH   A1=LOW A2=LOW
17      │                │               │
18      ▼                ▼               ▼
19   МОТОР →          МОТОР ←         МОТОР ■
20
21ПИНЫ L298N:
22🔌 POWER PINS:
23   • VCC = 5V (логика)
24   • VS = 6-12V (моторы) 
25   • GND = общий минус
26
27🎮 CONTROL PINS:
28   • IN1, IN2 = направление мотора A
29   • IN3, IN4 = направление мотора B  
30   • ENA, ENB = включение/PWM
31
32⚡ MOTOR OUTPUTS:
33   • OUT1, OUT2 = мотор A
34   • OUT3, OUT4 = мотор B
35
36🆕 ADVANCED FEATURES:
37   • Current sensing (pin CS)
38   • Thermal protection (автоотключение при перегреве)
39   • Back-EMF diodes (защита от обратного тока)

Микро-блок 3 (18-25 мин): PWM - ТОЧНЫЙ КОНТРОЛЬ СИЛЫ

 1🎛️ PWM = Pulse Width Modulation
 2
 3ПРИНЦИП РАБОТЫ:
 4┌─┐ ┌─┐ ┌─┐     ← 100% мощность (всегда включен)
 5│ │ │ │ │ │
 6└─┘ └─┘ └─┘
 7
 8┌┐ ┌┐ ┌┐ ┌┐     ← 50% мощность (50% времени включен)  
 9││ ││ ││ ││
10└┘ └┘ └┘ └┘
11
12┐┐┐┐┐┐┐┐┐┐     ← 10% мощность (10% времени включен)
13┘┘┘┘┘┘┘┘┘┘
14
15МАТЕМАТИКА PWM:
16Duty Cycle = (On Time / Total Time) × 100%
17Скорость мотора ≈ Duty Cycle × Максимальная скорость
18
19ARDUINO PWM:
20analogWrite(pin, value);
21// value: 0-255 (0% - 100%)
22// Частота: 490Hz or 980Hz
23
24PWM КОНТРОЛЬ МОТОРОВ:
25digitalWrite(IN1, HIGH);    // Направление
26digitalWrite(IN2, LOW);
27analogWrite(ENA, 128);      // 50% скорость
28
29🆕 ADVANCED PWM TECHNIQUES:
30• Soft start (плавный разгон)
31• Speed ramping (постепенное изменение)
32• Current limiting (защита от перегрузки)
33• Back-EMF detection (определение реальной скорости)
34
35ПРИМЕРЫ ПРИМЕНЕНИЯ:
36🚗 Automotive: дворники, стеклоподъемники, кондиционер
37🏠 Home: вентиляторы, пылесосы, стиральные машины  
38🤖 Robotics: колеса, манипуляторы, приводы
39🏭 Industrial: конвейеры, насосы, компрессоры

☕ NO BREAK: STRAIGHT TO ACTION!

🛠️ ПРАКТИЧЕСКИЙ БЛОК (25-75 мин): MOTOR POWER LAB

Этап 1: Базовое подключение и первый запуск (25-35 мин)

🆕 ЖЕЛЕЗНАЯ SETUP по группам - MAXIMUM POWER:

🔵 ГРУППА “ROBOT TANK BUILDERS”:

 1🏗️ HARDWARE SETUP:
 2• Arduino Uno/ESP32
 3• L298N Motor Driver Shield  
 4• 2x DC Geared Motors (6V, 200 RPM)
 5• Robot chassis with wheels
 6• 7.4V Li-Po battery pack
 7• Ultrasonic sensor HC-SR04
 8
 9ПОДКЛЮЧЕНИЕ СИЛЫ:
10L298N → Arduino:
11├── IN1 → Pin 7   (Левый мотор направление)
12├── IN2 → Pin 6   (Левый мотор направление)  
13├── IN3 → Pin 5   (Правый мотор направление)
14├── IN4 → Pin 4   (Правый мотор направление)
15├── ENA → Pin 9   (Левый мотор PWM)
16├── ENB → Pin 10  (Правый мотор PWM)
17└── VCC → 5V, VS → 7.4V, GND → GND
18
19ПЕРВЫЙ КОД СИЛЫ:
20void setup() {
21  // Motor pins as outputs
22  for(int pin = 4; pin <= 10; pin++) {
23    pinMode(pin, OUTPUT);
24  }
25}
26
27void moveForward(int speed) {
28  digitalWrite(7, HIGH); digitalWrite(6, LOW);  // Левый вперед
29  digitalWrite(5, HIGH); digitalWrite(4, LOW);  // Правый вперед
30  analogWrite(9, speed);   // Скорость левого
31  analogWrite(10, speed);  // Скорость правого
32}
33
34ПЕРВАЯ БОЕВАЯ ЗАДАЧА:
35✓ Танк едет вперед 2 секунды
36✓ Поворачивает налево 1 секунду  
37✓ Едет назад 2 секунды
38✓ Останавливается

🔴 ГРУППА “ROBOTIC ARM CONTROLLERS”:

 1🦾 HARDWARE SETUP:
 2• Arduino Mega (больше PWM пинов!)
 3• 2x L298N (4 мотора = 4 степени свободы)
 4• 4x DC Servo-style motors
 5• Mechanical arm kit
 6• 12V power supply (МОЩНОСТЬ!)
 7• Potentiometer для manual control
 8
 9ПОДКЛЮЧЕНИЕ МАНИПУЛЯТОРА:
10Мотор 1 (Base rotation):     IN1→22, IN2→23, ENA→2
11Мотор 2 (Shoulder):          IN1→24, IN2→25, ENA→3  
12Мотор 3 (Elbow):             IN1→26, IN2→27, ENA→4
13Мотор 4 (Gripper):           IN1→28, IN2→29, ENA→5
14
15struct ArmPosition {
16  int base, shoulder, elbow, gripper;
17};
18
19void moveToPosition(ArmPosition pos) {
20  setMotor(1, pos.base);      // Поворот основания
21  delay(500);
22  setMotor(2, pos.shoulder);  // Плечо вверх/вниз
23  delay(500);  
24  setMotor(3, pos.elbow);     // Локоть сгиб
25  delay(500);
26  setMotor(4, pos.gripper);   // Захват открыть/закрыть
27}
28
29ПЕРВАЯ БОЕВАЯ ЗАДАЧА:
30✓ "Home position" - все моторы в ноль
31✓ Поднять "объект" с позиции A
32✓ Переместить в позицию B  
33✓ Аккуратно опустить
34✓ Вернуться в home position

🟢 ГРУППА “SMART CONVEYOR SYSTEMS”:

 1🏭 HARDWARE SETUP:
 2• ESP32 (WiFi + больше мощности)
 3• L298N + DC motor with encoder
 4• Conveyor belt mechanism
 5• IR sensors for object detection
 6• Servo for sorting mechanism  
 7• OLED display for status
 8
 9ПОДКЛЮЧЕНИЕ КОНВЕЙЕРА:
10Main Motor: IN1→16, IN2→17, ENA→18 (PWM)
11Encoder: Pin A→19, Pin B→21 (interrupts)
12IR Sensors: входной→22, выходной→23
13Sorting Servo: Signal→25
14
15volatile long encoderCount = 0;
16float beltSpeed = 0; // см/сек
17
18void IRAM_ATTR encoderISR() {
19  encoderCount++;
20  // Расчет скорости в real-time
21}
22
23void setBeltSpeed(float targetSpeed) {
24  int pwmValue = map(targetSpeed, 0, 50, 0, 255); // 0-50 см/сек
25  analogWrite(18, pwmValue);
26}
27
28ПЕРВАЯ БОЕВАЯ ЗАДАЧА:
29✓ Конвейер начинает движение при detect объекта
30✓ Поддерживает постоянную скорость 10 см/сек
31✓ Останавливается если объект застрял
32✓ Сортирует объекты по размеру (servo)
33✓ Показывает статистику на OLED

🟡 ГРУППА “DRONE MOTOR CONTROLLERS”:

 1🚁 HARDWARE SETUP:
 2 Arduino Nano (компактность!)
 3 4x ESC (Electronic Speed Controllers) 30A
 4 4x Brushless motors (2200KV)  
 5 4x Propellers (осторожно - ОСТРЫЕ!)
 6 LiPo 3S battery (11.1V)
 7 IMU sensor (MPU6050)
 8
 9⚠️ БЕЗОПАСНОСТЬ: Пропеллеры СНЯТЫ во время программирования!
10
11ПОДКЛЮЧЕНИЕ КВАДРОКОПТЕРА:
12ESC1 (Front Left):  Pin 3
13ESC2 (Front Right): Pin 5  
14ESC3 (Rear Left):   Pin 6
15ESC4 (Rear Right):  Pin 9
16IMU: SDAA4, SCLA5
17
18#include <Servo.h>  // ESC используют servo-сигналы
19Servo motor1, motor2, motor3, motor4;
20
21void armMotors() {
22  // Калибровка ESC (обязательно!)
23  for(int i = 0; i < 4; i++) {
24    motors[i].writeMicroseconds(1000); // Минимум
25  }
26  delay(2000);
27}
28
29void setThrottle(int m1, int m2, int m3, int m4) {
30  motor1.writeMicroseconds(map(m1, 0, 100, 1000, 2000));
31  motor2.writeMicroseconds(map(m2, 0, 100, 1000, 2000));
32  motor3.writeMicroseconds(map(m3, 0, 100, 1000, 2000));
33  motor4.writeMicroseconds(map(m4, 0, 100, 1000, 2000));
34}
35
36ПЕРВАЯ БОЕВАЯ ЗАДАЧА (БЕЗ ПРОПЕЛЛЕРОВ!):
37 Калибровка всех 4 ESC
38 Синхронное изменение скорости всех моторов
39 Differential thrust (разная тяга для поворота)
40 Emergency stop по команде
41 IMU feedback для стабилизации

Этап 2: MQTT интеграция - REMOTE POWER CONTROL (35-50 мин)

🆕 Превращаем моторы в IoT СИЛУ:

  1// Универсальный MQTT Motor Controller Template
  2#include <WiFi.h>
  3#include <PubSubClient.h>
  4#include <ArduinoJson.h>
  5
  6WiFiClient espClient;
  7PubSubClient client(espClient);
  8
  9// Motor control structure
 10struct MotorCommand {
 11  int motorId;
 12  int speed;      // 0-255 (PWM)
 13  int direction;  // 1=forward, -1=reverse, 0=stop
 14  int duration;   // milliseconds, 0=continuous
 15};
 16
 17void setup() {
 18  setupWiFi();
 19  client.setServer("your-mqtt-broker", 1883);
 20  client.setCallback(onMqttMessage);
 21  
 22  // Subscribe to motor commands
 23  client.subscribe("motors/+/command");     // motors/1/command, motors/2/command
 24  client.subscribe("robots/+/move");        // robots/tank1/move
 25  client.subscribe("automation/conveyor/control");
 26  client.subscribe("emergency/stop");       // EMERGENCY STOP!
 27}
 28
 29void onMqttMessage(char* topic, byte* payload, unsigned int length) {
 30  String message = String((char*)payload, length);
 31  StaticJsonDocument<200> doc;
 32  deserializeJson(doc, message);
 33  
 34  // EMERGENCY STOP - приоритет #1!
 35  if (String(topic) == "emergency/stop") {
 36    emergencyStop();
 37    return;
 38  }
 39  
 40  // Individual motor control
 41  if (String(topic).startsWith("motors/")) {
 42    int motorId = extractMotorId(topic);
 43    MotorCommand cmd = {
 44      motorId,
 45      doc["speed"],
 46      doc["direction"], 
 47      doc["duration"]
 48    };
 49    executeMotorCommand(cmd);
 50  }
 51  
 52  // High-level robot commands  
 53  if (String(topic).startsWith("robots/")) {
 54    String action = doc["action"];
 55    if (action == "forward") moveForward(doc["speed"]);
 56    else if (action == "turn") turnRobot(doc["angle"], doc["speed"]);
 57    else if (action == "grab") robotGrab(doc["force"]);
 58  }
 59}
 60
 61void executeMotorCommand(MotorCommand cmd) {
 62  // Safety checks
 63  if (cmd.speed > 255) cmd.speed = 255;
 64  if (cmd.speed < 0) cmd.speed = 0;
 65  
 66  // Set direction
 67  if (cmd.direction > 0) {
 68    digitalWrite(IN1_pins[cmd.motorId], HIGH);
 69    digitalWrite(IN2_pins[cmd.motorId], LOW);
 70  } else if (cmd.direction < 0) {
 71    digitalWrite(IN1_pins[cmd.motorId], LOW);
 72    digitalWrite(IN2_pins[cmd.motorId], HIGH);
 73  } else {
 74    digitalWrite(IN1_pins[cmd.motorId], LOW);
 75    digitalWrite(IN2_pins[cmd.motorId], LOW);
 76  }
 77  
 78  // Set speed
 79  analogWrite(ENA_pins[cmd.motorId], cmd.speed);
 80  
 81  // Auto-stop after duration
 82  if (cmd.duration > 0) {
 83    delay(cmd.duration);
 84    analogWrite(ENA_pins[cmd.motorId], 0);
 85  }
 86  
 87  // Publish status back
 88  publishMotorStatus(cmd.motorId);
 89}
 90
 91// 🆕 Advanced: Closed-loop control with feedback
 92void maintainSpeed(int targetRPM) {
 93  static unsigned long lastTime = 0;
 94  static long lastPosition = 0;
 95  
 96  unsigned long now = millis();
 97  if (now - lastTime >= 100) { // Every 100ms
 98    
 99    // Calculate actual RPM from encoder
100    long currentPosition = encoderCount;
101    float actualRPM = (currentPosition - lastPosition) * 600.0 / encoderPPR;
102    
103    // Simple PI controller
104    float error = targetRPM - actualRPM;
105    static float integral = 0;
106    integral += error * 0.1; // dt = 0.1 seconds
107    
108    float output = Kp * error + Ki * integral;
109    
110    // Update PWM
111    currentPWM += output;
112    currentPWM = constrain(currentPWM, 0, 255);
113    analogWrite(ENA, currentPWM);
114    
115    // Publish telemetry
116    publishTelemetry(targetRPM, actualRPM, currentPWM);
117    
118    lastTime = now;
119    lastPosition = currentPosition;
120  }
121}

🆕 MQTT Topics архитектура для моторов:

 1🏗️ MOTOR CONTROL TOPICS:
 2
 3COMMAND TOPICS (input):
 4motors/1/command          - {"speed": 200, "direction": 1, "duration": 5000}
 5motors/2/command          - Individual motor control
 6robots/tank1/move         - {"action": "forward", "speed": 150, "duration": 3000}
 7robots/arm1/position      - {"joint1": 90, "joint2": 45, "joint3": -30}
 8automation/conveyor/speed - {"target_speed": 25, "acceleration": 5}
 9emergency/stop            - "" (any message = STOP ALL!)
10
11STATUS TOPICS (output):
12motors/1/status           - {"speed": 198, "current": 1.2, "temperature": 45}
13motors/1/telemetry        - {"rpm": 1500, "efficiency": 87, "voltage": 11.8}
14robots/tank1/position     - {"x": 1.5, "y": 2.3, "heading": 45}
15robots/arm1/joints        - {"j1": 89.5, "j2": 44.8, "j3": -29.2}
16system/power              - {"voltage": 11.6, "current": 3.4, "remaining": 78}
17
18ALERT TOPICS:
19alerts/overcurrent        - {"motor": 2, "current": 4.8, "limit": 4.0}
20alerts/overheating        - {"motor": 1, "temp": 85, "limit": 80}
21alerts/stall_detected     - {"motor": 3, "expected_rpm": 1000, "actual": 0}

Этап 3: Advanced Control - PRECISION & FEEDBACK (50-65 мин)

🆕 Системы обратной связи и точного управления:

ГРУППА TANK - Навигация и препятствия:

 1// Autonomous Tank with Obstacle Avoidance
 2#include <NewPing.h>
 3
 4NewPing sonar(TRIGGER_PIN, ECHO_PIN, 200); // 200cm max distance
 5
 6void autonomousMode() {
 7  int distance = sonar.ping_cm();
 8  
 9  if (distance > 30) {
10    moveForward(200);           // Full speed ahead!
11    publishStatus("moving_forward", distance);
12  } 
13  else if (distance > 15) {
14    moveForward(100);           // Slow down approaching obstacle
15    publishStatus("approaching_obstacle", distance);
16  }
17  else {
18    stopMotors();               // Stop!
19    delay(500);
20    
21    // Look left and right
22    int leftDistance = scanDirection(-90);
23    int rightDistance = scanDirection(90);
24    
25    if (leftDistance > rightDistance) {
26      turnLeft(90);             // Turn towards more space
27      publishStatus("turning_left", leftDistance);
28    } else {
29      turnRight(90);
30      publishStatus("turning_right", rightDistance);
31    }
32  }
33}
34
35// 🆕 Advanced: Path planning with waypoints
36struct Waypoint {
37  float x, y;
38  int speed;
39};
40
41Waypoint mission[] = {
42  {0, 0, 200},      // Start
43  {2, 0, 200},      // Forward 2 meters
44  {2, 2, 150},      // Turn and go 2 meters
45  {0, 2, 150},      // Return path
46  {0, 0, 100}       // Home
47};
48
49void executeMission() {
50  for (int i = 0; i < 5; i++) {
51    navigateToWaypoint(mission[i]);
52    publishMissionProgress(i, 5);
53  }
54}

ГРУППА ARM - Inverse Kinematics:

 1// Robotic Arm with Inverse Kinematics
 2struct Point3D {
 3  float x, y, z;
 4};
 5
 6struct JointAngles {
 7  float base, shoulder, elbow, wrist;
 8};
 9
10JointAngles inverseKinematics(Point3D target) {
11  // Simplified 4-DOF inverse kinematics
12  float r = sqrt(target.x * target.x + target.y * target.y);
13  float baseAngle = atan2(target.y, target.x) * 180 / PI;
14  
15  // Arm lengths (измеренные на реальном железе)
16  float L1 = 15.0; // Shoulder length (cm)
17  float L2 = 12.0; // Forearm length (cm)
18  
19  float shoulderAngle = calculateShoulderAngle(r, target.z, L1, L2);
20  float elbowAngle = calculateElbowAngle(r, target.z, L1, L2);
21  
22  return {baseAngle, shoulderAngle, elbowAngle, 0}; // Wrist parallel to ground
23}
24
25void moveToPoint(float x, float y, float z) {
26  JointAngles angles = inverseKinematics({x, y, z});
27  
28  // Smooth motion planning
29  JointAngles current = getCurrentAngles();
30  
31  for (int step = 0; step <= 100; step++) {
32    float t = step / 100.0; // 0 to 1
33    
34    JointAngles intermediate = {
35      lerp(current.base, angles.base, t),
36      lerp(current.shoulder, angles.shoulder, t),
37      lerp(current.elbow, angles.elbow, t),
38      lerp(current.wrist, angles.wrist, t)
39    };
40    
41    setJointAngles(intermediate);
42    delay(20); // 50 FPS smooth motion
43    
44    publishArmPosition(intermediate);
45  }
46}
47
48// 🆕 Pick and place automation
49void pickAndPlace(Point3D pickup, Point3D dropoff) {
50  moveToPoint(pickup.x, pickup.y, pickup.z + 5); // Approach
51  moveToPoint(pickup.x, pickup.y, pickup.z);     // Contact
52  closeGripper(80);                               // Grab
53  moveToPoint(pickup.x, pickup.y, pickup.z + 5); // Lift
54  
55  moveToPoint(dropoff.x, dropoff.y, dropoff.z + 5); // Transport
56  moveToPoint(dropoff.x, dropoff.y, dropoff.z);     // Lower
57  openGripper();                                     // Release
58  moveToPoint(dropoff.x, dropoff.y, dropoff.z + 5); // Clear
59  
60  moveToHomePosition();
61}

Этап 4: SYSTEM INTEGRATION - Координация всех роботов (65-70 мин)

🆕 “ROBOTIC FACTORY” - все группы работают вместе:

 1🏭 MEGA-СИСТЕМА КООРДИНАЦИИ:
 2
 3СЦЕНАРИЙ 1: "AUTOMATED ASSEMBLY LINE"
 4┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
 5 CONVEYOR    │───▶│ ROBOT ARM   │───▶│ DRONE       │───▶│ TANK        
 6 подает           собирает         транспорт        доставляет  
 7 детали           изделие          по воздуху       клиенту     
 8└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
 9
10MQTT CHOREOGRAPHY:
111. Conveyor: "factory/parts/available"  part detected
122. RobotArm: receives signal  "factory/arm/picking" 
133. RobotArm: assembly complete  "factory/product/ready"
144. Drone: pickup product  "factory/transport/airborne"
155. Tank: ground delivery  "factory/delivery/complete"
16
17EMERGENCY PROTOCOLS:
18 Any robot can trigger "factory/emergency/stop"
19 All systems halt within 100ms
20 Status reports every second during operation
21 Automatic recovery after fault cleared

🎯 ROBOT WARFARE DEMO (70-83 mин): ДЕМО СИЛЫ!

🆕 Формат: “Battle of the Bots - IoT Robot Championship!”

  • Время на группу: 3 минуты боевого демо + 30 секунд вопросы
  • LIVE CHALLENGES: Real-time tasks с препятствиями

BATTLE CHALLENGES:

🔵 TANK BATTALION - Навигационный вызов:

1MISSION: "Search and Rescue"
2✓ Танк должен найти "выживших" (цветные объекты)
3✓ Автономная навигация через лабиринт препятствий
4✓ MQTT отчеты о найденных объектах
5✓ Return to base с координатами спасения
6✓ BONUS: Multiple tanks coordination

🔴 ROBO ARM BRIGADE - Точность и скорость:

1MISSION: "Assembly Challenge"  
2✓ Собрать tower из 5 blocks за минимальное время
3✓ Blocks разного размера и веса
4✓ No dropping = precision bonus
5✓ MQTT live telemetry во время сборки
6✓ BONUS: Two arms working together

🟢 CONVEYOR COMMAND - Логистика:

1MISSION: "Smart Sorting"
2 Sort objects по размеру/цвету на 3 different outputs
3 Maintain constant throughput (items/minute)
4 MQTT analytics: efficiency, errors, speed
5 Handle "jam" situations gracefully
6 BONUS: Integration с другими роботами

🟡 DRONE SQUADRON - Воздушное мастерство:

1MISSION: "Aerial Precision" (БЕЗ ПОЛЕТА!)
2✓ Точное управление тягой 4 моторов
3✓ Симуляция stabilization с IMU feedback  
4✓ MQTT flight controller commands
5✓ Emergency landing protocols
6✓ BONUS: Swarm coordination algorithms

🔍 POWER ANALYSIS (83-87 мин): Инженерная оценка

🆕 Технический разбор МОЩНОСТИ:

 1⚡ POWER CONSUMPTION ANALYSIS:
 2
 3ИЗМЕРЕНИЯ:
 4• Voltage под нагрузкой
 5• Current draw при разных speeds
 6• Efficiency calculations (mechanical power / electrical power)
 7• Thermal analysis (нагрев моторов и драйверов)
 8
 9REAL-WORLD CONSTRAINTS:
10• Battery life calculations
11• Heat dissipation requirements  
12• Safety margins и fault tolerance
13• Scalability для production
14
15OPTIMIZATION OPPORTUNITIES:
16• PWM frequency tuning
17• Motor selection optimization
18• Feedback loop improvements
19• Energy recovery systems

🔄 SPRINT RETRO (87-90 мин): МОЩНЫЕ ВЫВОДЫ

🆕 Power Engineering рефлексия:

  1. Что было сложнее - software или hardware integration?
  2. Какой мотор оказался самым “характерным”?
  3. 🆕 Как изменилось понимание robotics после hands-on?
  4. 🆕 Где вы видите применение таких систем в real life?

📝 Sprint Backlog (СИЛОВОЕ задание)

🆕 Основное задание: “Industrial Automation Proposal”

Сценарий: Завод заказал автоматизацию производственной линии. Спроектируйте robotic solution на базе DC моторов.

Требования:

 1🏭 AUTOMATION ENGINEERING SPEC:
 2
 31. PROCESS ANALYSIS:
 4   • Что автоматизируем? (сборка, упаковка, сортировка)
 5   • Current manual process breakdown
 6   • Bottlenecks и improvement opportunities
 7   • ROI calculations (экономия времени/денег)
 8
 92. ROBOTIC SYSTEM DESIGN:
10   • Motor specifications (power, speed, torque requirements)
11   • Control system architecture  
12   • Sensor integration для feedback
13   • Safety systems и emergency stops
14
153. IMPLEMENTATION PLAN:
16   • Phase-by-phase deployment
17   • Training requirements для operators
18   • Maintenance schedule и spare parts
19   • Testing и validation protocols
20
214. 🆕 FUTURE SCALING:
22   • How to add more robots
23   • Integration с ERP systems
24   • AI/ML opportunities для optimization
25   • Industry 4.0 readiness
26
27DELIVERABLE: Engineering proposal + cost analysis + timeline

🆕 Бонус-задания:

🔧 Mechanical Engineer Track: Спроектировать custom mechanical системы для specific applications. CAD models, stress analysis, gear ratio calculations.

⚡ Power Electronics Track:
Создать advanced motor controller с current sensing, thermal protection, regenerative braking.

🤖 Robotics Engineer Track: Implement advanced control algorithms: PID tuning, trajectory planning, collision detection.

🏭 Automation Specialist Track: Design complete factory automation system с multiple coordinated robots и central SCADA control.


📊 Sprint Metrics (Система оценивания СИЛЫ)

🆕 Power Engineering критерии:

Критерий МОЩНО! (5) Сильно (4) Работает (3)
Motor Control Precise speed/direction control + feedback Good basic motor control Motors spin when commanded
Hardware Integration Rock-solid connections + proper power mgmt Stable connections, minor issues Basic working setup
MQTT Robotics Real-time robot control + telemetry Good remote control capabilities Basic MQTT commands work
System Reliability Handles faults gracefully + safety features Generally reliable operation Works under ideal conditions
🆕 Engineering Thinking Considers real-world constraints + scaling Good understanding of challenges Basic technical implementation
🆕 Innovation Level Novel mechanical/control solutions Creative improvements on standard approach Standard textbook implementation

🆕 POWER BADGES:

  • Motor Master - за excellent motor control mastery
  • 🔧 Hardware Wizard - за robust mechanical integration
  • 🤖 Robotics Engineer - за advanced robotic behaviors
  • 🏭 Automation Expert - за industrial-thinking approach
  • 🛡️ Safety Champion - за comprehensive safety features
  • 📡 IoT Integrator - за seamless MQTT robotics control
  • 💪 POWER BADGE - за outstanding mechanical power systems

🎒 Sprint Resources (АРСЕНАЛ СИЛЫ)

МОЩНОЕ железо:

  • Motors: DC geared motors (6V, 12V), brushless motors, servo motors
  • Drivers: L298N modules, motor shield, ESCs для brushless
  • Power: LiPo batteries, power supplies (5V, 12V), current meters
  • Mechanical: Robot chassis, wheels, gears, belts, робо-рука kit

🆕 БЕЗОПАСНОСТЬ - ПРИОРИТЕТ #1:

  • Eye protection - safety glasses обязательно
  • Power safety - fuses, circuit breakers, emergency stops
  • Mechanical safety - no loose clothing, secure propellers
  • Emergency protocols - first aid kit, emergency contacts

🚀 ЭНЕРГИЯ СПРИНТА ЗАШКАЛИВАЕТ!

  1. REAL MECHANICAL POWER - от milliwatts к WATTS!
  2. INDUSTRIAL MINDSET - engineering thinking для real world
  3. SAFETY CONSCIOUSNESS - responsible power handling
  4. SYSTEM INTEGRATION - motors + sensors + MQTT + brains
  5. HANDS-ON MASTERY - real hardware, real problems, real solutions
  6. INNOVATION DRIVE - creative mechanical solutions

СЛЕДУЮЩИЙ УРОВЕНЬ: Servo и Stepper моторы! ТОЧНОСТЬ meets СИЛА! 🎯⚡