💡 Сборка и программирование робота с датчиком света

Практическая работа: создаем видящего робота

🔧 Конструирование • 📊 Калибровка • 💻 Программирование • 🏆 Соревнования
5 класс • Технология • 90 минут

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

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

🚀 Наша световая миссия:

  1. 🔧 Собрать робота - интегрировать датчик света в конструкцию
  2. 📊 Провести калибровку - научить робота понимать свет
  3. 📈 Построить графики - визуализировать зависимости
  4. 💻 Запрограммировать поведение - создать алгоритмы реакции
  5. 🏃 Протестировать в деле - проверить на практических задачах
  6. 🏆 Устроить соревнование - выявить лучшего световода

🎯 Результат работы:

  • Робот, реагирующий на изменения освещенности
  • Откалиброванная система световосприятия
  • Программы для следования по линии и к источнику света

👥 Работаем в парах:

  • 🔧 Инженер-конструктор - сборка и настройка
  • 💻 Программист-аналитик - калибровка и алгоритмы

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

Вспоминаем основы работы с оптическими датчиками

❓ Блиц-проверка знаний

1. Принципы работы датчиков света:

  • Как фоторезистор реагирует на изменение освещенности?
  • Что происходит с сопротивлением при увеличении света?
  • Как аналоговый сигнал преобразуется в цифровое значение?

2. Отражение света от поверхностей:

  • Какая поверхность лучше отражает свет - белая или черная?
  • Почему мы видим объекты разного цвета?
  • Как используется отражение в датчиках линии?

3. Безопасность работы:

  • Какие правила безопасности нужно соблюдать при работе с электроникой?
  • Как правильно подключать датчики к контроллеру?
  • Что делать при обнаружении неисправности?

🎯 Постановка задачи

🤖 Техническое задание: Создать робота с датчиком света, способного:

  • Различать светлые и темные поверхности
  • Следовать по черной линии на белом фоне
  • Реагировать на изменение освещенности
  • Двигаться к источнику света

📋 Критерии успеха:

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

🏆 Уровни достижений:

  • 🥇 Мастер - все задания выполнены отлично, робот работает стабильно
  • 🥈 Эксперт - основные задания выполнены, есть небольшие недочеты
  • 🥉 Практик - базовые функции работают, требуется доработка

🔬 Теоретическая подготовка

💡 Принцип работы системы:

Свет от источника
Отражение от поверхности
Попадание на фоторезистор
Изменение сопротивления
Изменение напряжения в делителе
АЦП контроллера
Цифровое значение (0-1023)
Анализ в программе
Управляющие команды моторам

📊 Ожидаемые значения:

  • Белая поверхность: 700-1000 (высокое отражение)
  • Серая поверхность: 300-700 (среднее отражение)
  • Черная поверхность: 0-300 (низкое отражение)

🔧 Этап 1: Сборка робота с датчиком света

Создаем механическую основу

📋 Компоненты и инструменты

🧰 Необходимые детали:

  • Базовое шасси робота с колесами
  • Контроллер (Arduino или аналог)
  • Датчик света (фоторезистор или готовый модуль)
  • Соединительные провода
  • Резисторы для делителя напряжения (10 кОм)
  • Батарейный блок
  • Крепежные элементы

🔧 Инструменты:

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

⚠️ Правила безопасности:

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

🔨 Пошаговая сборка

Шаг 1: Подготовка базового шасси

  • Использовать собранного ранее робота с колесами
  • Проверить работоспособность моторов
  • Убедиться в надежности крепления всех элементов

Шаг 2: Выбор места для датчика света

  • Для следования по линии: датчик направлен вниз, 5-15 мм от поверхности
  • Для поиска света: датчик направлен вперед или вверх
  • Для общего использования: на поворотной платформе

Шаг 3: Механическое крепление датчика

  • Закрепить датчик в выбранном положении
  • Обеспечить стабильность крепления
  • Исключить попадание постороннего света (если нужно)
  • Проверить, что датчик не мешает движению

Шаг 4: Прокладка проводов

  • Аккуратно проложить провода от датчика к контроллеру
  • Избегать пережатия проводов движущимися частями
  • Зафиксировать провода во избежание обрывов

🔌 Электрическое подключение

📊 Схема подключения фоторезистора:

Arduino Uno → Фоторезистор

+5V → Резистор 10кОм → Аналоговый вход A0 → Фоторезистор → GND

Делитель напряжения:
U_out = U_питания × (R_фото / (R_фото + R_постоянный))

При ярком свете: R_фото мало → U_out мало → АЦП показывает низкие значения
При слабом свете: R_фото велико → U_out велико → АЦП показывает высокие значения

🔍 Проверка подключения:

АЛГОРИТМ Тест_подключения_датчика():
  НАЧАЛО
    Настроить аналоговый вход A0
    Настроить последовательный порт (9600 бод)
    
    ПОСТОЯННО:
      значение_АЦП = Прочитать_аналоговый_вход(A0)
      напряжение = значение_АЦП × 5.0 / 1023.0
      
      Вывести("АЦП: ", значение_АЦП, " Напряжение: ", напряжение, " В")
      
      ЕСЛИ значение_АЦП < 200 ТО
        Вывести(" -> ОЧЕНЬ СВЕТЛО")
      ИНАЧЕ ЕСЛИ значение_АЦП < 500 ТО
        Вывести(" -> СВЕТЛО")
      ИНАЧЕ ЕСЛИ значение_АЦП < 800 ТО
        Вывести(" -> ТЕМНОВАТО")
      ИНАЧЕ
        Вывести(" -> ТЕМНО")
      КОНЕЦ ЕСЛИ
      
      Ждать(500 мс)
    КОНЕЦ ПОСТОЯННО
  КОНЕЦ
КОНЕЦ АЛГОРИТМА

⚙️ Настройка позиционирования

📐 Оптимальное расположение для следования по линии:

Высота над поверхностью:

  • Слишком близко (< 3 мм): риск касания неровностей
  • Оптимально (5-15 мм): четкое различение, стабильные показания
  • Слишком далеко (> 20 мм): размытые границы, нестабильность

Угол наклона:

  • Вертикально вниз (0°): максимальная чувствительность
  • Небольшой наклон (5-10°): защита от бликов
  • Большой наклон (> 15°): потеря точности

Защита от внешнего света:

  • Экранирование боковых засветок
  • Использование направленного света (если есть)
  • Калибровка в реальных условиях освещения

🧪 Тестирование механической части

📋 Чек-лист проверки сборки:

  • ✅ Датчик надежно закреплен
  • ✅ Провода не пережаты и не оборваны
  • ✅ Контакты не окислены
  • ✅ Питание подается правильно
  • ✅ Показания датчика изменяются при изменении освещения
  • ✅ Конструкция не мешает движению робота
  • ✅ Все соединения проверены мультиметром

🔧 Типичные проблемы и решения:

ПроблемаВозможная причинаРешение
Показания не меняютсяОбрыв проводаПроверить целостность цепи
Значения всегда максимальныеКороткое замыканиеПроверить изоляцию
Нестабильные показанияПлохой контактПропаять соединения
Датчик не реагирует на светНеправильная полярностьПроверить схему подключения

📊 Этап 2: Калибровка датчика света

Научная точность измерений

🎯 Цели калибровки

Зачем нужна калибровка:

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

📋 Задачи калибровки:

  1. Измерить показания в различных условиях освещения
  2. Построить график зависимости показаний от освещенности
  3. Определить пороговые значения
  4. Создать функцию преобразования показаний в физические величины

📏 Методика калибровки

🧪 Оборудование для калибровки:

  • Образцы поверхностей: белая бумага, серый картон, черная бумага
  • Источники света: настольная лампа, фонарик, естественное освещение
  • Люксметр (если есть) для измерения истинной освещенности
  • Линейка для контроля расстояния
  • Рабочий лист для записи данных

📋 Протокол калибровки:

АЛГОРИТМ Калибровка_датчика_света():
  поверхности = ["черная", "темно-серая", "серая", "светло-серая", "белая"]
  расстояния = [5, 10, 15, 20] // мм от поверхности
  
  ДЛЯ КАЖДОГО расстояния ИЗ расстояния:
    Установить датчик на высоте расстояния
    
    ДЛЯ КАЖДОЙ поверхности ИЗ поверхности:
      Подложить образец поверхности под датчик
      
      // Делаем несколько измерений для точности
      сумма = 0
      ДЛЯ i = 1 ДО 10:
        показание = Прочитать_АЦП(A0)
        сумма = сумма + показание
        Ждать(100 мс)
      КОНЕЦ ДЛЯ
      
      среднее = сумма / 10
      Записать(поверхность, расстояние, среднее)
      Вывести(поверхность, "@", расстояние, "мм:", среднее)
    КОНЕЦ ДЛЯ
  КОНЕЦ ДЛЯ
КОНЕЦ АЛГОРИТМА

📊 Таблица результатов калибровки

📋 Рабочий лист для записи данных:

Поверхность5 мм10 мм15 мм20 ммСреднееПримечания
Черная_______________Минимальное отражение
Темно-серая_______________Слабое отражение
Серая_______________Среднее отражение
Светло-серая_______________Хорошее отражение
Белая_______________Максимальное отражение

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

Условие освещенияЧерная поверх.Белая поверх.РазностьКоэфф. контраста
Яркий солнечный свет____________
Комнатное освещение____________
Тусклое освещение____________
Искусственный свет____________

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

📊 График 1: Зависимость показаний от цвета поверхности

Инструкция по построению:
1. Ось X: Тип поверхности (черная, серая, белая)
2. Ось Y: Показания АЦП (0-1023)
3. Нанести точки для каждой поверхности
4. Соединить точки плавной кривой
5. Подписать оси и дать название графику

📈 График 2: Зависимость показаний от расстояния

Инструкция по построению:
1. Ось X: Расстояние до поверхности (мм)
2. Ось Y: Показания АЦП
3. Построить отдельные кривые для черной и белой поверхности
4. Добавить легенду
5. Сделать выводы о влиянии расстояния

📊 График 3: Калибровочная кривая

Цель: Связать показания АЦП с коэффициентом отражения
1. Ось X: Показания АЦП
2. Ось Y: Коэффициент отражения (%)
3. Черная = 5%, Серая = 50%, Белая = 80%
4. Найти уравнение линейной зависимости
5. Использовать для преобразования данных

🧮 Анализ результатов калибровки

🔍 Определение пороговых значений:

АЛГОРИТМ Расчет_порогов():
  черная_поверхность = Среднее_значение_для_черной
  белая_поверхность = Среднее_значение_для_белой
  
  // Основной порог - посередине между черным и белым
  основной_порог = (черная_поверхность + белая_поверхность) / 2
  
  // Пороги с гистерезисом для стабильности
  порог_включения = основной_порог + 20
  порог_выключения = основной_порог - 20
  
  Вывести("Основной порог:", основной_порог)
  Вывести("Порог включения:", порог_включения)
  Вывести("Порог выключения:", порог_выключения)
  
  // Проверка качества разделения
  разность = белая_поверхность - черная_поверхность
  контрастность = разность / белая_поверхность × 100
  
  ЕСЛИ контрастность > 50 ТО
    Вывести("Отличная контрастность:", контрастность, "%")
  ИНАЧЕ ЕСЛИ контрастность > 25 ТО
    Вывести("Хорошая контрастность:", контрастность, "%")
  ИНАЧЕ
    Вывести("ВНИМАНИЕ: Низкая контрастность:", контрастность, "%")
    Вывести("Рекомендуется улучшить освещение или настройку")
  КОНЕЦ ЕСЛИ
КОНЕЦ АЛГОРИТМА

📊 Функция калибровки для программы:

ФУНКЦИЯ Калиброванное_чтение_света():
  сырое_значение = Прочитать_АЦП(A0)
  
  // Преобразование в проценты отражения
  коэффициент_отражения = (сырое_значение - минимум) / (максимум - минимум) × 100
  
  // Сглаживание показаний
  статический фильтр[5] = [0, 0, 0, 0, 0]
  статический индекс = 0
  
  фильтр[индекс] = коэффициент_отражения
  индекс = (индекс + 1) % 5
  
  сумма = 0
  ДЛЯ i = 0 ДО 4:
    сумма += фильтр[i]
  КОНЕЦ ДЛЯ
  
  сглаженное_значение = сумма / 5
  ВОЗВРАТ сглаженное_значение
КОНЕЦ ФУНКЦИИ

💻 Этап 3: Программирование робота

От данных к действиям

🧠 Базовые алгоритмы реакции на свет

📝 Алгоритм 1: Простое различение поверхностей

АЛГОРИТМ Различение_поверхностей():
  КОНСТАНТЫ:
    ПОРОГ_ЧЕРНО_БЕЛЫЙ = 400  // Из калибровки
    
  ПОСТОЯННО:
    показание = Прочитать_датчик_света()
    
    ЕСЛИ показание < ПОРОГ_ЧЕРНО_БЕЛЫЙ ТО
      Вывести("Черная поверхность")
      // Включить красный светодиод
      Установить_цвет_светодиода(КРАСНЫЙ)
    ИНАЧЕ
      Вывести("Белая поверхность")
      // Включить зеленый светодиод
      Установить_цвет_светодиода(ЗЕЛЕНЫЙ)
    КОНЕЦ ЕСЛИ
    
    Ждать(200 мс)
  КОНЕЦ ПОСТОЯННО
КОНЕЦ АЛГОРИТМА

📝 Алгоритм 2: Следование по линии (один датчик)

АЛГОРИТМ Следование_по_линии_один_датчик():
  КОНСТАНТЫ:
    ПОРОГ_ЛИНИИ = 400
    СКОРОСТЬ_ПРЯМО = 150
    СКОРОСТЬ_ПОИСКА = 100
    
  ПЕРЕМЕННЫЕ:
    направление_поиска = ПРАВО
    время_на_линии = 0
    
  ПОСТОЯННО:
    показание = Прочитать_датчик_света()
    
    ЕСЛИ показание < ПОРОГ_ЛИНИИ ТО
      // Датчик на линии
      Двигаться_прямо(СКОРОСТЬ_ПРЯМО)
      время_на_линии = Получить_время()
      Вывести("На линии")
      
    ИНАЧЕ
      // Линия потеряна - ищем
      Поиск_линии()
    КОНЕЦ ЕСЛИ
    
    Ждать(50 мс)
  КОНЕЦ ПОСТОЯННО
  
ФУНКЦИЯ Поиск_линии():
  время_поиска = Получить_время() - время_на_линии
  
  ЕСЛИ время_поиска < 500 ТО
    // Недавно потеряли линию - ищем в последнем направлении
    ЕСЛИ направление_поиска = ПРАВО ТО
      Повернуть_направо(СКОРОСТЬ_ПОИСКА)
    ИНАЧЕ
      Повернуть_налево(СКОРОСТЬ_ПОИСКА)
    КОНЕЦ ЕСЛИ
  ИНАЧЕ
    // Долго ищем - меняем направление
    направление_поиска = ЕСЛИ направление_поиска = ПРАВО ТО ЛЕВО ИНАЧЕ ПРАВО
    Вывести("Меняю направление поиска")
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

🎯 Улучшенные алгоритмы

📝 Алгоритм 3: Следование к источнику света

АЛГОРИТМ Движение_к_свету():
  КОНСТАНТЫ:
    ПОРОГ_ДОСТИЖЕНИЯ = 800  // Очень яркий свет
    СКОРОСТЬ_ПОИСКА = 120
    УГОЛ_ПОИСКА = 30  // градусов
    
  ПЕРЕМЕННЫЕ:
    максимальный_свет = 0
    лучшее_направление = 0
    
  ПОСТОЯННО:
    текущий_свет = Прочитать_датчик_света()
    
    ЕСЛИ текущий_свет > ПОРОГ_ДОСТИЖЕНИЯ ТО
      Вывести("Источник света найден!")
      Остановиться()
      Мигать_светодиодами(3)
      Ждать(2000 мс)
    ИНАЧЕ
      Поиск_направления_света()
      Двигаться_к_свету()
    КОНЕЦ ЕСЛИ
    
    Ждать(100 мс)
  КОНЕЦ ПОСТОЯННО
  
ФУНКЦИЯ Поиск_направления_света():
  максимальный_свет = 0
  лучшее_направление = 0
  
  ДЛЯ угол = 0 ДО 360 ШАГ УГОЛ_ПОИСКА:
    Повернуть_на_угол(УГОЛ_ПОИСКА)
    Ждать(200 мс)  // Время стабилизации
    
    свет = Прочитать_датчик_света()
    ЕСЛИ свет > максимальный_свет ТО
      максимальный_свет = свет
      лучшее_направление = угол
    КОНЕЦ ЕСЛИ
  КОНЕЦ ДЛЯ
  
  // Поворачиваемся к самому яркому направлению
  Повернуть_на_угол(лучшее_направление)
  Вывести("Лучшее направление:", лучшее_направление, "°, свет:", максимальный_свет)
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Двигаться_к_свету():
  начальный_свет = Прочитать_датчик_света()
  Двигаться_вперед(СКОРОСТЬ_ПОИСКА)
  Ждать(500 мс)
  
  новый_свет = Прочитать_датчик_света()
  
  ЕСЛИ новый_свет <= начальный_свет ТО
    // Свет не стал ярче - неправильное направление
    Вывести("Свет не улучшился, ищу заново")
    Остановиться()
    Поиск_направления_света()
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

🎮 Алгоритм с адаптивным поведением

📝 Алгоритм 4: Умный робот-фотоследователь

АЛГОРИТМ Умный_фотоследователь():
  ПЕРЕМЕННЫЕ:
    режим = ПОИСК  // ПОИСК, СЛЕДОВАНИЕ, ДОСТИЖЕНИЕ
    история_света[10]
    индекс_истории = 0
    среднее_освещение = 0
    
  ПОСТОЯННО:
    текущий_свет = Прочитать_датчик_света()
    Обновить_историю(текущий_свет)
    
    ВЫБОР режим:
      СЛУЧАЙ ПОИСК:
        Режим_поиска()
        
      СЛУЧАЙ СЛЕДОВАНИЕ:
        Режим_следования()
        
      СЛУЧАЙ ДОСТИЖЕНИЕ:
        Режим_достижения()
    КОНЕЦ ВЫБОРА
    
    Анализ_тенденций()
    Ждать(100 мс)
  КОНЕЦ ПОСТОЯННО
  
ФУНКЦИЯ Обновить_историю(новое_значение):
  история_света[индекс_истории] = новое_значение
  индекс_истории = (индекс_истории + 1) % 10
  
  сумма = 0
  ДЛЯ i = 0 ДО 9:
    сумма += история_света[i]
  КОНЕЦ ДЛЯ
  среднее_освещение = сумма / 10
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Анализ_тенденций():
  первая_половина = Среднее(история_света[0..4])
  вторая_половина = Среднее(история_света[5..9])
  тенденция = вторая_половина - первая_половина
  
  ЕСЛИ тенденция > 20 ТО
    Вывести("Свет усиливается - продолжаю в том же направлении")
    ЕСЛИ режим = ПОИСК ТО режим = СЛЕДОВАНИЕ КОНЕЦ ЕСЛИ
    
  ИНАЧЕ ЕСЛИ тенденция < -20 ТО
    Вывести("Свет ослабевает - меняю стратегию")
    режим = ПОИСК
    
  ИНАЧЕ
    Вывести("Стабильное освещение")
    ЕСЛИ среднее_освещение > 700 ТО
      режим = ДОСТИЖЕНИЕ
    КОНЕЦ ЕСЛИ
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Режим_поиска():
  // Спиральное движение для поиска источника
  Двигаться_по_спирали()
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Режим_следования():
  // Прямое движение к усиливающемуся свету
  Двигаться_вперед(200)
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Режим_достижения():
  // Точное позиционирование у источника
  Остановиться()
  Сигнал_достижения()
КОНЕЦ ФУНКЦИИ

🔧 Отладка и оптимизация

🛠️ Отладочная версия программы:

ПРОГРАММА Отладка_датчика_света():
  ПЕРЕМЕННАЯ режим_отладки = ИСТИНА
  
  ФУНКЦИЯ Отладочный_вывод():
    ЕСЛИ режим_отладки ТО
      свет = Прочитать_датчик_света()
      напряжение = свет × 5.0 / 1023.0
      
      Вывести("=== ОТЛАДКА ===")
      Вывести("АЦП:", свет)
      Вывести("Напряжение:", напряжение, "В")
      
      ЕСЛИ свет < 200 ТО
        состояние = "ОЧЕНЬ СВЕТЛО"
      ИНАЧЕ ЕСЛИ свет < 400 ТО
        состояние = "СВЕТЛО"
      ИНАЧЕ ЕСЛИ свет < 600 ТО
        состояние = "СРЕДНЕ"
      ИНАЧЕ ЕСЛИ свет < 800 ТО
        состояние = "ТЕМНО"
      ИНАЧЕ
        состояние = "ОЧЕНЬ ТЕМНО"
      КОНЕЦ ЕСЛИ
      
      Вывести("Состояние:", состояние)
      Вывести("Время:", Получить_время_мс(), "мс")
      Вывести("===============")
    КОНЕЦ ЕСЛИ
  КОНЕЦ ФУНКЦИИ
КОНЕЦ ПРОГРАММЫ

🏃 Этап 4: Тестирование роботов

Проверка в боевых условиях

🏗️ Подготовка тестового полигона

📐 Полигон для следования по линии:

Трасса уровня “Новичок”:

Характеристики:
- Длина: 2 метра
- Ширина линии: 20 мм
- Материал: черная изолента на белой бумаге
- Повороты: только плавные радиусом > 30 см
- Препятствия: отсутствуют

Трасса уровня “Опытный”:

Характеристики:
- Длина: 3 метра
- Ширина линии: 15 мм
- Повороты: радиус 20-30 см
- Особенности: S-образные изгибы
- Цветовые метки: красные круги для остановки

Трасса уровня “Эксперт”:

Характеристики:
- Длина: 4 метра
- Ширина линии: 10 мм
- Острые углы: 90° повороты
- Препятствия: разрывы линии 2-3 см
- Развилки: T-образные пересечения

🧪 Тестовые задания

🎯 Задание 1: Калибровочный тест

ПРОЦЕДУРА Тест_калибровки():
  образцы = ["черная бумага", "серый картон", "белая бумага"]
  
  ДЛЯ КАЖДОГО образца ИЗ образцы:
    Поднести образец к датчику
    показание = Прочитать_датчик()
    ожидаемое = Получить_эталонное_значение(образец)
    
    погрешность = АБС(показание - ожидаемое) / ожидаемое × 100
    
    Вывести(образец, ": ", показание, " (ожидаемое:", ожидаемое, ")")
    Вывести("Погрешность:", погрешность, "%")
    
    ЕСЛИ погрешность < 10 ТО
      Вывести("✅ ОТЛИЧНО")
    ИНАЧЕ ЕСЛИ погрешность < 20 ТО
      Вывести("✅ ХОРОШО")
    ИНАЧЕ
      Вывести("❌ ТРЕБУЕТ ДОРАБОТКИ")
    КОНЕЦ ЕСЛИ
  КОНЕЦ ДЛЯ
КОНЕЦ ПРОЦЕДУРЫ

🎯 Задание 2: Тест стабильности

ПРОЦЕДУРА Тест_стабильности():
  Вывести("Тест стабильности показаний (30 секунд)")
  
  массив измерения[60]  // 2 измерения в секунду
  
  ДЛЯ i = 0 ДО 59:
    измерения[i] = Прочитать_датчик()
    Ждать(500 мс)
  КОНЕЦ ДЛЯ
  
  среднее = Вычислить_среднее(измерения)
  стандартное_отклонение = Вычислить_СКО(измерения, среднее)
  
  Вывести("Среднее значение:", среднее)
  Вывести("Стандартное отклонение:", стандартное_отклонение)
  
  стабильность = (1 - стандартное_отклонение / среднее) × 100
  Вывести("Стабильность:", стабильность, "%")
КОНЕЦ ПРОЦЕДУРЫ

🎯 Задание 3: Тест следования по линии

ПРОЦЕДУРА Тест_следования_по_линии():
  контрольные_точки = 5
  пройденные_точки = 0
  время_старта = Получить_время()
  
  Запустить_программу_следования()
  
  ДЛЯ точка = 1 ДО контрольные_точки:
    Ждать_достижения_контрольной_точки(точка)
    
    ЕСЛИ Робот_на_правильном_пути() ТО
      пройденные_точки++
      Вывести("Контрольная точка", точка, "пройдена ✅")
    ИНАЧЕ
      Вывести("Робот сбился с пути на точке", точка, "❌")
      ВЫХОД ИЗ ЦИКЛА
    КОНЕЦ ЕСЛИ
  КОНЕЦ ДЛЯ
  
  время_финиша = Получить_время()
  общее_время = время_финиша - время_старта
  
  успешность = пройденные_точки / контрольные_точки × 100
  
  Вывести("Результат теста:")
  Вывести("Пройдено точек:", пройденные_точки, "/", контрольные_точки)
  Вывести("Время:", общее_время, "секунд")
  Вывести("Успешность:", успешность, "%")
КОНЕЦ ПРОЦЕДУРЫ

📊 Система оценки тестов

🏆 Критерии оценивания:

ПараметрОтлично (5)Хорошо (4)Удовл. (3)Неудовл. (2)
КалибровкаПогрешность < 5%< 10%< 20%≥ 20%
Стабильность> 95%> 90%> 80%< 80%
Следование100% точек80% точек60% точек< 60% точек
Время прохождения< 30 с< 45 с< 60 с≥ 60 с

🧮 Формула итоговой оценки:

Итоговый_балл = (Калибровка × 0.25) + 
                (Стабильность × 0.25) + 
                (Следование × 0.3) + 
                (Скорость × 0.2)

Где каждый компонент оценивается от 2 до 5 баллов.

🔧 Типичные проблемы и решения

❌ Проблема 1: Робот не различает черную и белую поверхность

Причины:

  • Недостаточная освещенность
  • Неправильная калибровка
  • Слишком большое расстояние до поверхности

Решения:

1. Улучшить освещение рабочей зоны
2. Пересделать калибровку в текущих условиях
3. Приблизить датчик к поверхности (5-10 мм)
4. Проверить контрастность материалов

❌ Проблема 2: Нестабильные показания датчика

Причины:

  • Влияние внешнего освещения
  • Электрические помехи
  • Механические вибрации

Решения:

1. Экранировать датчик от боковой засветки
2. Добавить программную фильтрацию
3. Улучшить механическое крепление
4. Использовать экранированные провода

❌ Проблема 3: Робот теряет линию на поворотах

Причины:

  • Слишком высокая скорость
  • Инерция робота
  • Недостаточная частота опроса датчика

Решения:

1. Снизить скорость на поворотах
2. Улучшить алгоритм предсказания поворотов
3. Увеличить частоту чтения датчика
4. Добавить алгоритм поиска потерянной линии

🏆 Этап 5: Мини-соревнование роботов

Битва световых следопытов

🎮 Виды соревнований

🥇 Соревнование 1: “Скоростной линеслед”

Правила:

  • Трасса: стандартная линия 3 метра
  • Цель: пройти трассу за минимальное время
  • Штрафы: +5 секунд за каждый съезд с линии
  • Дисквалификация: при потере линии на время > 10 секунд

🥈 Соревнование 2: “Точный навигатор”

Правила:

  • Трасса: сложная с поворотами и препятствиями
  • Цель: пройти максимальное количество контрольных точек
  • Оценка: количество пройденных точек × коэффициент сложности
  • Бонус: +20% за прохождение без остановок

🥉 Соревнование 3: “Охотник за светом”

Правила:

  • Поле: затемненная область 2×2 метра
  • Источники света: 3 лампы разной яркости в углах
  • Цель: найти и достигнуть самого яркого источника
  • Время: максимум 2 минуты

📊 Система судейства

👨‍⚖️ Критерии оценки:

ФУНКЦИЯ Оценка_выступления():
  базовые_баллы = ЕСЛИ финиш_достигнут ТО 100 ИНАЧЕ 0
  
  // Бонусы за скорость
  бонус_скорости = МАХ(0, (60 - время_секунды) × 2)
  
  // Штрафы за ошибки
  штраф_съезды = количество_съездов × 10
  штраф_остановки = количество_остановок × 5
  
  // Бонусы за технику
  бонус_плавность = ЕСЛИ плавное_движение ТО 20 ИНАЧЕ 0
  бонус_стабильность = ЕСЛИ без_колебаний ТО 15 ИНАЧЕ 0
  
  итоговый_балл = базовые_баллы + бонус_скорости + бонус_плавность + 
                  бонус_стабильность - штраф_съезды - штраф_остановки
  
  ВОЗВРАТ МАХ(0, итоговый_балл)  // Не может быть отрицательным
КОНЕЦ ФУНКЦИИ

📋 Протокол соревнования:

КомандаВремя, сСъездыОстановкиБазовыеБонусыШтрафыИтого
1_____________________
2_____________________
3_____________________
4_____________________

🏅 Церемония награждения

🏆 Главные номинации:

  • 🥇 “Чемпион скорости” - лучшее время прохождения
  • 🥈 “Мастер точности” - минимум ошибок
  • 🥉 “Технический гений” - лучший алгоритм
  • 🎯 “Стабильный профи” - лучшая повторяемость

🌟 Специальные номинации:

  • 🔧 “Инновационное решение” - оригинальная конструкция
  • 🤝 “Командная работа” - лучшее взаимодействие в паре
  • 🧠 “Аналитический подход” - качество калибровки
  • 🎨 “Креативность” - необычное программное решение

📸 Документирование достижений:

  • Фото победителей с роботами
  • Видеозапись лучших заездов
  • Интервью с командами-лидерами
  • Анализ успешных стратегий

📈 Анализ соревновательных стратегий

🧠 Стратегия “Осторожный профессионал”:

Характеристики:
- Низкая скорость, высокая точность
- Много времени на калибровку
- Сложные алгоритмы стабилизации
- Минимум ошибок

Результат: высокие баллы за технику, средние за скорость

⚡ Стратегия “Скоростной ас”:

Характеристики:
- Максимальная скорость движения
- Простые, быстрые алгоритмы
- Агрессивное прохождение поворотов
- Риск потери линии

Результат: высокие баллы за скорость, риск штрафов

⚖️ Стратегия “Сбалансированный подход”:

Характеристики:
- Средняя скорость с адаптацией
- Качественная калибровка
- Алгоритмы самокоррекции
- Стабильные результаты

Результат: стабильно высокие баллы по всем критериям

🎯 Развитие соревнований

📈 Усложнения для будущих турниров:

Уровень 2: Переменные условия

  • Изменяющееся освещение во время заезда
  • Линии разной ширины на одной трассе
  • Цветные участки линии

Уровень 3: Многозадачность

  • Сбор объектов во время движения
  • Избегание динамических препятствий
  • Взаимодействие с другими роботами

Уровень 4: Интеллектуальные вызовы

  • Обучение на ходу
  • Адаптация к новым трассам
  • Принятие решений в неопределенности

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

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

1. Эскиз улучшенной конструкции Разработайте проект улучшенной конструкции робота с датчиком света:

📐 Технические требования:

  • Схема размещения датчика(ов) света
  • Система защиты от внешних засветок
  • Дополнительные элементы для повышения точности
  • Обоснование конструктивных решений

🎨 Содержание эскиза:

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

2. Применение датчиков света в бытовых роботах Предложите 3 идеи использования датчиков света в домашних роботах:

🏠 Примеры направлений:

  • Робот-пылесос с навигацией по освещению
  • Система автоматического полива с контролем освещенности
  • Робот-помощник для пожилых людей с реакцией на свет
  • Система умного дома с световыми датчиками

📝 Для каждой идеи опишите:

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

🎯 Дополнительные задания (по выбору)

🔬 Для исследователей: Проведите расширенное исследование работы датчика света:

📊 Исследуемые параметры:

  • Влияние температуры на показания датчика
  • Зависимость от угла падения света
  • Сравнение разных типов источников света
  • Влияние цвета поверхности на отражение

📈 Методика исследования:

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

💻 Для программистов: Разработайте продвинутые алгоритмы для робота с датчиком света:

🧠 Темы для изучения:

  • Адаптивные пороги (самонастройка)
  • Прогнозирование траектории движения
  • Машинное обучение для оптимизации
  • Нечеткая логика в управлении

📝 Задания:

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

🛠️ Для инженеров: Спроектируйте систему из нескольких датчиков света:

⚙️ Конфигурации для изучения:

  • Линейка из 3-5 датчиков для точного следования
  • Круговое расположение для поиска света
  • Стереоскопическая система для определения расстояния
  • Спектральные датчики для анализа цвета

📐 Техническое задание:

  • Схема размещения датчиков
  • Алгоритмы обработки множественных сигналов
  • Методы калибровки системы
  • Анализ точности и надежности

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

📚 Для изучения теории:

  • Основы фотометрии и колориметрии
  • Цифровая обработка сигналов
  • Теория автоматического управления
  • Машинное зрение в робототехнике

💻 Программное обеспечение:

  • Симуляторы датчиков и роботов
  • Программы для анализа данных
  • Графические редакторы для схем
  • Среды разработки для микроконтроллеров

🎥 Видеоматериалы:

  • “Как работают автономные автомобили”
  • “Датчики в промышленной автоматизации”
  • “Соревнования роботов мирового уровня”
  • “Современные методы машинного зрения”

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

🏆 Наши световые достижения

🔧 Инженерные навыки:

  • ✅ Собрали и настроили робота с оптическим датчиком
  • ✅ Освоили принципы интеграции датчиков в конструкцию
  • ✅ Научились решать проблемы помех и нестабильности
  • ✅ Поняли важность механической точности

📊 Научные навыки:

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

💻 Программистские навыки:

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

🌟 Главные открытия

🎯 Ключевые выводы практикума:

“Качественная калибровка - основа точной работы любого датчика”

“Простой датчик + умный алгоритм = сложное поведение”

“Тестирование в реальных условиях выявляет скрытые проблемы”

🔮 Перспективы развития:

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

💡 Рефлексия “Луч света”

🎯 Оцените свой прогресс:

🔧 Сборка и настройка (1-10): ___

  • Насколько уверенно вы собираете роботов с датчиками?

📊 Калибровка и анализ (1-10): ___

  • Можете ли вы точно откалибровать датчик и проанализировать данные?

💻 Программирование (1-10): ___

  • Комфортно ли создаете алгоритмы для обработки сенсорных данных?

🏆 Соревновательный дух (1-10): ___

  • Насколько успешно ваш робот справился с испытаниями?

💭 Поделитесь впечатлениями:

  • Какой момент практикума был самым интересным?
  • Какая проблема оказалась самой сложной для решения?
  • Что нового вы узнали о роботах и датчиках?
  • Где вы планируете применить полученные навыки?

🔮 Следующий урок: “Ультразвуковые датчики расстояния”

🎯 Готовимся к новым технологиям:

  • Принципы эхолокации и сонара
  • Бесконтактное измерение расстояний
  • Создание систем избегания препятствий
  • 3D-картирование пространства

💡 ВЫ СОЗДАЛИ РОБОТА-СВЕТОДЕТЕКТОРА!
Теперь ваши роботы могут видеть разницу между светом и тенью, следовать по линиям и находить источники света!