🔧 Конструирование • 💻 Программирование • 🤖 Тестирование
5 класс • Технология • 90 минут
👨🏫 Учитель: Ахметов Рустам
🏫 Школа: ГБОУ № 1362
📅 Дата: 2025-06-11
🎯 Миссия: Создать робота, который чувствует препятствия!
🚀 Наша миссия сегодня:
🎯 Результат урока:
👥 Работаем в парах:
1. Классификация датчиков:
2. Принципы работы:
3. Применение в роботах:
🤖 Ситуация: Робот едет по комнате и врезается в стену.
❓ Проблемные вопросы:
🧠 Варианты решений:
🎯 Сегодня изучаем: Датчик нажатия как самый простой и надежный способ обнаружения контакта с препятствием.
👨 Как работает осязание у человека:
🔬 Физиология:
🤖 Как работает датчик нажатия:
⚡ Технология:
🔄 Сравнение:
🔧 Основные компоненты:
1. Механическая часть:
2. Электрическая часть:
3. Принцип работы:
🔬 Механическое воздействие:
Сила нажатия → Деформация пружины → Замыкание контактов → Электрический сигнал
⚡ Электрическая цепь:
Схема подключения:
Контроллер → Резистор → Датчик → Земля
↓
Вход АЦП
📊 Логические состояния:
🧮 Математическое представление:
ЕСЛИ напряжение > 2.5В ТО
состояние = "НЕ_НАЖАТ" (TRUE)
ИНАЧЕ
состояние = "НАЖАТ" (FALSE)
КОНЕЦ ЕСЛИ
🔘 Кнопочные датчики:
🌊 Преимущества:
⚠️ Недостатки:
⚡ Электрические параметры:
🔧 Механические параметры:
📐 Конструктивные особенности:
🧰 Необходимые детали:
🔧 Инструменты:
⚠️ Техника безопасности:
Шаг 1: Подготовка базового робота
Шаг 2: Выбор места для датчика
Рекомендация: Устанавливаем датчик спереди как “бампер”
Шаг 3: Механическое крепление
📊 Схема подключения к Arduino:
Arduino Uno → Датчик нажатия
Digital Pin 2 → Один контакт датчика
GND → Резистор 10кОм → Другой контакт датчика
+5V → Резистор 10кОм (подтяжка к питанию)
🎯 Альтернативная схема (с внутренней подтяжкой):
Arduino Uno → Датчик нажатия
Digital Pin 2 → Один контакт датчика
GND → Другой контакт датчика
(используем внутренний pull-up резистор)
🔍 Проверка подключения:
💻 Простая программа проверки:
Алгоритм "Тест датчика нажатия":
НАЧАЛО
Инициализировать пин датчика как вход
Включить внутреннюю подтяжку
Инициализировать последовательный порт
ПОСТОЯННО:
состояние = Прочитать_пин_датчика()
ЕСЛИ состояние = LOW ТО
Вывести "Датчик НАЖАТ"
Ждать 100 мс
ИНАЧЕ
Вывести "Датчик НЕ нажат"
Ждать 100 мс
КОНЕЦ ЕСЛИ
КОНЕЦ ПОСТОЯННО
КОНЕЦ
🔍 Ожидаемые результаты:
🎚️ Механическая настройка:
💻 Программная настройка:
🛠️ Алгоритм подавления дребезга:
ФУНКЦИЯ Прочитать_датчик_без_дребезга():
текущее_состояние = Прочитать_пин()
ЕСЛИ текущее_состояние ≠ предыдущее_состояние ТО
время_изменения = Текущее_время()
КОНЕЦ ЕСЛИ
ЕСЛИ (Текущее_время() - время_изменения) > 50 мс ТО
стабильное_состояние = текущее_состояние
КОНЕЦ ЕСЛИ
предыдущее_состояние = текущее_состояние
ВОЗВРАТ стабильное_состояние
КОНЕЦ ФУНКЦИИ
🎯 Техническое задание: Робот должен:
📊 Блок-схема базового алгоритма:
⭕ НАЧАЛО
↓
📦 Инициализация
↓
🔄 ЦИКЛ (бесконечный)
↓
🔷 Датчик нажат?
↙ ↘
ДА НЕТ
↓ ↓
📦 Реакция 📦 Движение
на касание вперед
↓ ↓
↑←←←←←←←←←↑
💻 Псевдокод базового алгоритма:
ПРОГРАММА "Робот-избегатель препятствий"
ПЕРЕМЕННЫЕ:
пин_датчика = 2
пин_мотор_левый = 9
пин_мотор_правый = 10
скорость = 150
НАЧАЛО
Инициализировать пины
Включить подтяжку для датчика
ПОСТОЯННО:
состояние_датчика = Прочитать_датчик()
ЕСЛИ состояние_датчика = НАЖАТ ТО
Выполнить_реакцию_на_препятствие()
ИНАЧЕ
Двигаться_вперед()
КОНЕЦ ЕСЛИ
Ждать 50 мс // Небольшая задержка
КОНЕЦ ПОСТОЯННО
КОНЕЦ
ФУНКЦИЯ Двигаться_вперед():
Установить мощность левого мотора = скорость
Установить мощность правого мотора = скорость
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Выполнить_реакцию_на_препятствие():
// Остановиться
Остановить_все_моторы()
Ждать 500 мс
// Отъехать назад
Двигаться_назад()
Ждать 1000 мс
// Повернуть направо
Поворот_направо()
Ждать 800 мс
// Остановиться
Остановить_все_моторы()
Ждать 200 мс
КОНЕЦ ФУНКЦИИ
🤖 Алгоритм “Умный обход”:
ФУНКЦИЯ Умная_реакция_на_препятствие():
// Остановиться и оценить ситуацию
Остановить_все_моторы()
Ждать 300 мс
// Попробовать объехать справа
Поворот_направо()
Ждать 500 мс
Двигаться_вперед()
Ждать 800 мс
// Если снова препятствие - пробуем слева
ЕСЛИ Датчик_нажат() ТО
Двигаться_назад()
Ждать 1000 мс
Поворот_налево()
Ждать 1000 мс // Больший поворот
Двигаться_вперед()
Ждать 800 мс
КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ
📊 Алгоритм со счетчиком столкновений:
ПЕРЕМЕННАЯ счетчик_столкновений = 0
ФУНКЦИЯ Реакция_с_подсчетом():
счетчик_столкновений = счетчик_столкновений + 1
Вывести "Столкновение номер: ", счетчик_столкновений
// Изменяем стратегию в зависимости от количества столкновений
ЕСЛИ счетчик_столкновений ≤ 3 ТО
Простой_поворот_направо()
ИНАЧЕ ЕСЛИ счетчик_столкновений ≤ 6 ТО
Поворот_на_180_градусов()
ИНАЧЕ
Случайное_движение()
счетчик_столкновений = 0 // Сброс счетчика
КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ
⏰ Использование времени для принятия решений:
ПЕРЕМЕННАЯ время_последнего_столкновения = 0
ФУНКЦИЯ Временная_логика():
текущее_время = Получить_время_мс()
ЕСЛИ Датчик_нажат() ТО
// Если столкновения слишком частые - изменить стратегию
ЕСЛИ (текущее_время - время_последнего_столкновения) < 2000 ТО
Агрессивный_маневр() // Резкий поворот и быстрое движение
ИНАЧЕ
Осторожный_маневр() // Медленный поворот и плавное движение
КОНЕЦ ЕСЛИ
время_последнего_столкновения = текущее_время
КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ
🎲 Случайное поведение для разнообразия:
ФУНКЦИЯ Случайная_реакция():
случайное_число = Генерировать_случайное(1, 4)
ВЫБОР случайное_число:
СЛУЧАЙ 1:
Поворот_налево()
Ждать 500 мс
СЛУЧАЙ 2:
Поворот_направо()
Ждать 500 мс
СЛУЧАЙ 3:
Поворот_на_180_градусов()
СЛУЧАЙ 4:
// "Танец" - серия движений
Поворот_налево()
Ждать 200 мс
Поворот_направо()
Ждать 200 мс
Двигаться_назад()
Ждать 500 мс
КОНЕЦ ВЫБОРА
КОНЕЦ ФУНКЦИИ
🛠️ Методика отладки программы:
1. Пошаговое тестирование:
// Добавить вывод отладочной информации
ФУНКЦИЯ Отладочная_версия():
ЕСЛИ Датчик_нажат() ТО
Вывести "DEBUG: Датчик сработал"
Вывести "DEBUG: Начинаю маневр"
Выполнить_маневр()
Вывести "DEBUG: Маневр завершен"
ИНАЧЕ
Вывести "DEBUG: Движение вперед"
Двигаться_вперед()
КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ
2. Проверка граничных условий:
3. Тестирование в разных условиях:
🏗️ Конструкция трассы:
Простая трасса для начинающих:
Сложная трасса для продвинутых:
📏 Параметры препятствий:
📋 Протокол испытаний:
Тест 1: Базовая функциональность
ПРОЦЕДУРА Тест_базовой_функциональности():
1. Поставить робота перед препятствием (30 см)
2. Запустить программу
3. Наблюдать реакцию на приближение к препятствию
4. Записать результат: срабатывает/не срабатывает
КРИТЕРИИ УСПЕХА:
- Робот останавливается при касании
- Выполняет маневр обхода
- Продолжает движение после маневра
КОНЕЦ ПРОЦЕДУРЫ
Тест 2: Множественные препятствия
ПРОЦЕДУРА Тест_множественных_препятствий():
1. Расставить 5 препятствий на трассе
2. Запустить робота от старта
3. Измерить время прохождения трассы
4. Подсчитать количество успешных обходов
КРИТЕРИИ ОЦЕНКИ:
- Время прохождения: < 2 минут
- Успешные обходы: > 80%
- Без застреваний в углах
КОНЕЦ ПРОЦЕДУРЫ
| Тест | Команда | Время, с | Столкновения | Успешные обходы | Застревания | Оценка |
|---|---|---|---|---|---|---|
| Базовый | 1 | ___ | ___ | ___/5 | ___ | ___/10 |
| Базовый | 2 | ___ | ___ | ___/5 | ___ | ___/10 |
| Базовый | 3 | ___ | ___ | ___/5 | ___ | ___/10 |
| Сложный | 1 | ___ | ___ | ___/10 | ___ | ___/10 |
| Сложный | 2 | ___ | ___ | ___/10 | ___ | ___/10 |
| Сложный | 3 | ___ | ___ | ___/10 | ___ | ___/10 |
🧮 Формула итоговой оценки:
Итоговая_оценка = (Успешные_обходы / Общее_количество) × 5 +
(60 / Время_в_секундах) × 3 -
(Застревания × 1)
Максимум: 10 баллов
Минимум: 0 баллов
🥇 Соревнование 1: “Быстрый обход”
🥈 Соревнование 2: “Точный навигатор”
🥉 Соревнование 3: “Выносливость”
📈 Факторы успешности:
⚙️ Механические факторы:
💻 Программные факторы:
🎯 Рекомендации по улучшению:
ЕСЛИ много_столкновений ТО
Рекомендация: "Улучшить алгоритм обхода"
ИНАЧЕ ЕСЛИ медленное_прохождение ТО
Рекомендация: "Увеличить скорость движения"
ИНАЧЕ ЕСЛИ частые_застревания ТО
Рекомендация: "Добавить логику выхода из тупиков"
ИНАЧЕ
Рекомендация: "Отличная работа! Попробуйте сложную трассу"
КОНЕЦ ЕСЛИ
🏆 Номинации:
📊 Общий зачет:
Место = (0.4 × Скорость_балл) +
(0.3 × Точность_балл) +
(0.2 × Креативность_балл) +
(0.1 × Конструкция_балл)
1. Анализ и улучшение робота Проанализируйте работу вашего робота и предложите улучшения:
📝 Отчет должен содержать:
2. Многодатчиковая система Подумайте, как можно использовать несколько датчиков одновременно:
🤖 Концепция робота с комбинированными датчиками:
Выберите одну комбинацию и опишите:
🔬 Для исследователей: Изучите реальные применения датчиков касания:
Подготовьте презентацию об одном из применений (5-7 слайдов).
💻 Для программистов: Изучите дополнительные возможности программирования:
Реализуйте одну из техник в виде псевдокода с объяснениями.
🛠️ Для конструкторов: Спроектируйте улучшенную систему обнаружения препятствий:
Нарисуйте чертежи и объясните принцип работы.
📚 Для изучения:
💻 Симуляторы:
🎥 Видеоматериалы:
🔧 Конструкторские навыки:
💻 Программистские навыки:
🧠 Аналитические навыки:
🎯 Ключевые выводы:
“Датчики превращают ‘слепого’ робота в чувствительное устройство”
“Простые сенсоры + умная программа = сложное поведение”
“Тестирование и отладка - половина успеха в робототехнике”
🔮 Перспективы развития:
🎯 Оцените свою работу по критериям:
🔧 Качество сборки (1-5 баллов):
💻 Программирование (1-5 баллов):
🏃 Результаты тестирования (1-5 баллов):
👥 Работа в команде (1-5 баллов):
🔮 Следующий урок: “Ультразвуковые датчики - глаза робота”
🎯 Готовимся изучать:
🤚 ВЫ СОЗДАЛИ ЧУВСТВИТЕЛЬНОГО РОБОТА!
Теперь ваш робот может “чувствовать” мир вокруг себя!