🦾 Манипуляторы • 🔧 Захваты • 📱 Сервоприводы • 🔄 Интеграция
7 класс • Технология • 45 минут
mw285748 • 15.06.2025
💡 Научимся:
🤖 Результат: Робот с рабочими “руками” и инструментами!
Промышленные роботы:
Бытовые роботы:
Исследовательские роботы:
Математика многофункциональности:
\[F_{total} = F_{base} + \sum_{i=1}^{n} F_{mechanism_i}\]Базовый робот:
+ Дополнительные механизмы:
Степени свободы:
Конструкция:
Базовый манипулятор:
┌─────────────┐
│ Звено 3 │ ← Рабочий инструмент
└─────┬───────┘
│ Сустав 2
┌─────▼───────┐
│ Звено 2 │
└─────┬───────┘
│ Сустав 1
┌─────▼───────┐
│ Звено 1 │ ← Основание
└─────────────┘
Программирование:
def move_arm(joint1_angle, joint2_angle, joint3_angle):
servo1.write(joint1_angle)
delay(500) # Ждем завершения движения
servo2.write(joint2_angle)
delay(500)
servo3.write(joint3_angle)
delay(500)
Типы захватов:
Клешневый захват:
def gripper_control(action):
if action == "open":
gripper_servo.write(180) # Открыть
elif action == "close":
gripper_servo.write(0) # Закрыть
elif action == "half":
gripper_servo.write(90) # Полуоткрыт
Вакуумный захват:
def vacuum_control(state):
if state == "on":
vacuum_pump.start()
vacuum_valve.open()
else:
vacuum_pump.stop()
vacuum_valve.close()
Магнитный захват:
def magnetic_gripper(state):
if state == "attract":
electromagnet.power_on()
else:
electromagnet.power_off()
Инструменты по типу задач:
Обработка материалов:
Измерения:
Транспортировка:
Пример программы дрели:
def drill_operation(depth_mm):
drill_motor.start() # Включить дрель
delay(1000) # Разгон
for step in range(depth_mm):
lift_servo.write(current_position - 1) # Опускаем на 1мм
delay(100) # Медленное погружение
drill_motor.stop() # Выключить дрель
lift_servo.write(0) # Поднять в исходное положение
Стандартное подключение:
Сервопривод:
┌─────────────┐
│ Красный │ ← +5V (питание)
│ Коричневый│ ← GND (земля)
│ Оранжевый │ ← Сигнал (PWM)
└─────────────┘
Инициализация в программе:
// Arduino код
#include <Servo.h>
Servo arm_base; // Основание манипулятора
Servo arm_shoulder; // Плечо
Servo arm_elbow; // Локоть
Servo gripper; // Захват
void setup() {
arm_base.attach(9); // Подключить к пину 9
arm_shoulder.attach(10);
arm_elbow.attach(11);
gripper.attach(12);
// Установить начальные позиции
arm_base.write(90); // Центральное положение
arm_shoulder.write(45);
arm_elbow.write(135);
gripper.write(0); // Закрытый захват
}
Проблема: Сервоприводы и моторы потребляют много энергии
Решение: Использование драйверов моторов
# Пример с драйвером L298N
def motor_control(motor_pin1, motor_pin2, speed, direction):
if direction == "forward":
digital_write(motor_pin1, HIGH)
digital_write(motor_pin2, LOW)
else:
digital_write(motor_pin1, LOW)
digital_write(motor_pin2, HIGH)
analog_write(enable_pin, speed) # PWM скорость 0-255
Расчет потребляемого тока:
\[I_{total} = I_{base} + \sum I_{servos} + \sum I_{motors}\]Правило: Всегда проверяйте, что источник питания обеспечивает достаточный ток!
Последовательное выполнение:
def pick_and_place_sequence():
# Шаг 1: Подъехать к объекту
robot.move_to_position(target_x, target_y)
# Шаг 2: Позиционировать манипулятор
arm.move_to_position(pick_position)
# Шаг 3: Захватить объект
gripper.close()
delay(1000)
# Шаг 4: Поднять объект
arm.move_to_position(lift_position)
# Шаг 5: Переместиться к месту назначения
robot.move_to_position(drop_x, drop_y)
# Шаг 6: Опустить и отпустить
arm.move_to_position(drop_position)
gripper.open()
Параллельное выполнение:
def efficient_movement():
# Начинаем движение базы и манипулятора одновременно
robot.start_movement_to(target_x, target_y)
arm.start_movement_to(prepare_position)
# Ждем завершения обоих движений
while robot.is_moving() or arm.is_moving():
delay(10)
# Финальная операция
gripper.close()
🤏 Проект 1: “Робот-грузчик”
🦾 Проект 2: “Робот-манипулятор”
📦 Проект 3: “Робот-сортировщик”
🏗️ Проект 4: “Робот-строитель”
Этап 1: Проектирование (10 мин)
• Выбор типа механизма
• Планирование конструкции
• Распределение ролей
Этап 2: Сборка механизма (20 мин)
• Конструирование дополнительного механизма
• Интеграция с базовым роботом
• Проверка механической части
Этап 3: Подключение (5 мин)
• Подключение сервоприводов
• Проверка соединений
• Тест базовых движений
Этап 4: Программирование (20 мин)
• Написание функций управления
• Интеграция в основную программу
• Отладка координации
Этап 5: Тестирование (5 мин)
• Финальные испытания
• Оптимизация работы
# Функция управления захватом
def gripper_control(action):
if action == "open":
gripper_servo.write(180)
print("Захват открыт")
elif action == "close":
gripper_servo.write(30)
print("Захват закрыт")
elif action == "half":
gripper_servo.write(105)
print("Захват полуоткрыт")
delay(1000) # Время на выполнение движения
# Алгоритм захвата объекта
def pick_object():
gripper_control("open") # Открыть захват
robot.forward(10) # Подъехать к объекту
gripper_control("close") # Захватить
robot.backward(10) # Отъехать с объектом
# Алгоритм освобождения объекта
def drop_object():
gripper_control("open") # Отпустить объект
robot.backward(5) # Отъехать
gripper_control("close") # Закрыть захват
# Класс для управления манипулятором
class RobotArm:
def __init__(self):
self.base_servo = Servo(pin=9)
self.shoulder_servo = Servo(pin=10)
self.elbow_servo = Servo(pin=11)
self.gripper_servo = Servo(pin=12)
# Текущие углы
self.base_angle = 90
self.shoulder_angle = 45
self.elbow_angle = 135
self.gripper_angle = 0
def move_to_position(self, base, shoulder, elbow):
# Плавное движение к целевой позиции
steps = 20
# Вычисляем шаги для каждого сустава
base_step = (base - self.base_angle) / steps
shoulder_step = (shoulder - self.shoulder_angle) / steps
elbow_step = (elbow - self.elbow_angle) / steps
# Выполняем движение пошагово
for i in range(steps):
self.base_angle += base_step
self.shoulder_angle += shoulder_step
self.elbow_angle += elbow_step
self.base_servo.write(self.base_angle)
self.shoulder_servo.write(self.shoulder_angle)
self.elbow_servo.write(self.elbow_angle)
delay(50) # Плавность движения
def grab_object_at(self, x, y, z):
# Обратная кинематика (упрощенная)
base_angle = math.atan2(y, x) * 180 / math.pi
distance = math.sqrt(x*x + y*y)
# Расчет углов для достижения точки (x,y,z)
shoulder_angle = calculate_shoulder_angle(distance, z)
elbow_angle = calculate_elbow_angle(distance, z)
# Движение к объекту
self.move_to_position(base_angle, shoulder_angle, elbow_angle)
# Захват
self.gripper_servo.write(30) # Закрыть захват
delay(1000)
# Использование
arm = RobotArm()
arm.grab_object_at(20, 15, 10) # Захватить объект в точке (20,15,10)
План презентации (3 минуты на команду):
❓ Вопросы для обсуждения:
📊 Оценочная матрица (20 баллов):
| Критерий | Максимум | Описание |
|---|---|---|
| Конструкция | 5 | Функциональность, надежность, интеграция |
| Программирование | 5 | Корректность, интеграция, оптимальность |
| Работа механизма | 5 | Точность, надежность, скорость |
| Защита проекта | 5 | Демонстрация, понимание, ответы |
🎯 Перевод в оценки:
Проблема 1: Сервопривод дергается
# ❌ Неправильно - слишком быстрое изменение
servo.write(0)
servo.write(180)
# ✅ Правильно - плавное движение
for angle in range(0, 181, 5):
servo.write(angle)
delay(50)
Проблема 2: Недостаток питания
# ✅ Проверка перед активацией мощных механизмов
if battery_voltage() > 7.0:
heavy_motor.start()
else:
print("Низкое напряжение батареи!")
Проблема 3: Блокировка программы
# ❌ Блокирующий код
def move_arm():
servo.write(90)
delay(2000) # Программа "зависает" на 2 секунды
# ✅ Неблокирующий код
def move_arm_smooth():
target_time = current_time() + 2000
while current_time() < target_time:
check_sensors() # Можем делать другие дела
delay(10)
1. Что я сегодня узнал/научился делать?
2. Какие затруднения у меня возникли?
3. Как я могу применить полученные навыки в будущем?
Самооценка работы (1-5): ___
Описать улучшения созданного механизма:
Проанализируйте свой проект и предложите:
📋 Структура отчета:
Найти аналоги в реальном мире:
Для каждого примера описать:
✅ Научились:
🧠 Поняли:
“Функциональный робот = Правильная механика + Умное программирование + Точная координация”
🚀 Следующий шаг: Создание автономных роботов с машинным зрением и искусственным интеллектом
💡 Теперь ваши роботы умеют работать руками!