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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 1Свет от источника
 2 3Отражение от поверхности
 4 5Попадание на фоторезистор
 6 7Изменение сопротивления
 8 9Изменение напряжения в делителе
1011АЦП контроллера
1213Цифровое значение (0-1023)
1415Анализ в программе
1617Управляющие команды моторам

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1Arduino Uno → Фоторезистор
2
3+5V → Резистор 10кОм → Аналоговый вход A0 → Фоторезистор → GND
4
5Делитель напряжения:
6U_out = U_питания × (R_фото / (R_фото + R_постоянный))
7
8При ярком свете: R_фото мало → U_out мало → АЦП показывает низкие значения
9При слабом свете: R_фото велико → U_out велико → АЦП показывает высокие значения

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

 1АЛГОРИТМ Тест_подключения_датчика():
 2  НАЧАЛО
 3    Настроить аналоговый вход A0
 4    Настроить последовательный порт (9600 бод)
 5    
 6    ПОСТОЯННО:
 7      значение_АЦП = Прочитать_аналоговый_вход(A0)
 8      напряжение = значение_АЦП × 5.0 / 1023.0
 9      
10      Вывести("АЦП: ", значение_АЦП, " Напряжение: ", напряжение, " В")
11      
12      ЕСЛИ значение_АЦП < 200 ТО
13        Вывести(" -> ОЧЕНЬ СВЕТЛО")
14      ИНАЧЕ ЕСЛИ значение_АЦП < 500 ТО
15        Вывести(" -> СВЕТЛО")
16      ИНАЧЕ ЕСЛИ значение_АЦП < 800 ТО
17        Вывести(" -> ТЕМНОВАТО")
18      ИНАЧЕ
19        Вывести(" -> ТЕМНО")
20      КОНЕЦ ЕСЛИ
21      
22      Ждать(500 мс)
23    КОНЕЦ ПОСТОЯННО
24  КОНЕЦ
25КОНЕЦ АЛГОРИТМА

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 1АЛГОРИТМ Калибровка_датчика_света():
 2  поверхности = ["черная", "темно-серая", "серая", "светло-серая", "белая"]
 3  расстояния = [5, 10, 15, 20] // мм от поверхности
 4  
 5  ДЛЯ КАЖДОГО расстояния ИЗ расстояния:
 6    Установить датчик на высоте расстояния
 7    
 8    ДЛЯ КАЖДОЙ поверхности ИЗ поверхности:
 9      Подложить образец поверхности под датчик
10      
11      // Делаем несколько измерений для точности
12      сумма = 0
13      ДЛЯ i = 1 ДО 10:
14        показание = Прочитать_АЦП(A0)
15        сумма = сумма + показание
16        Ждать(100 мс)
17      КОНЕЦ ДЛЯ
18      
19      среднее = сумма / 10
20      Записать(поверхность, расстояние, среднее)
21      Вывести(поверхность, "@", расстояние, "мм:", среднее)
22    КОНЕЦ ДЛЯ
23  КОНЕЦ ДЛЯ
24КОНЕЦ АЛГОРИТМА

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 1АЛГОРИТМ Расчет_порогов():
 2  черная_поверхность = Среднее_значение_для_черной
 3  белая_поверхность = Среднее_значение_для_белой
 4  
 5  // Основной порог - посередине между черным и белым
 6  основной_порог = (черная_поверхность + белая_поверхность) / 2
 7  
 8  // Пороги с гистерезисом для стабильности
 9  порог_включения = основной_порог + 20
10  порог_выключения = основной_порог - 20
11  
12  Вывести("Основной порог:", основной_порог)
13  Вывести("Порог включения:", порог_включения)
14  Вывести("Порог выключения:", порог_выключения)
15  
16  // Проверка качества разделения
17  разность = белая_поверхность - черная_поверхность
18  контрастность = разность / белая_поверхность × 100
19  
20  ЕСЛИ контрастность > 50 ТО
21    Вывести("Отличная контрастность:", контрастность, "%")
22  ИНАЧЕ ЕСЛИ контрастность > 25 ТО
23    Вывести("Хорошая контрастность:", контрастность, "%")
24  ИНАЧЕ
25    Вывести("ВНИМАНИЕ: Низкая контрастность:", контрастность, "%")
26    Вывести("Рекомендуется улучшить освещение или настройку")
27  КОНЕЦ ЕСЛИ
28КОНЕЦ АЛГОРИТМА

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

 1ФУНКЦИЯ Калиброванное_чтение_света():
 2  сырое_значение = Прочитать_АЦП(A0)
 3  
 4  // Преобразование в проценты отражения
 5  коэффициент_отражения = (сырое_значение - минимум) / (максимум - минимум) × 100
 6  
 7  // Сглаживание показаний
 8  статический фильтр[5] = [0, 0, 0, 0, 0]
 9  статический индекс = 0
10  
11  фильтр[индекс] = коэффициент_отражения
12  индекс = (индекс + 1) % 5
13  
14  сумма = 0
15  ДЛЯ i = 0 ДО 4:
16    сумма += фильтр[i]
17  КОНЕЦ ДЛЯ
18  
19  сглаженное_значение = сумма / 5
20  ВОЗВРАТ сглаженное_значение
21КОНЕЦ ФУНКЦИИ

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

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

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

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

 1АЛГОРИТМ Различение_поверхностей():
 2  КОНСТАНТЫ:
 3    ПОРОГ_ЧЕРНО_БЕЛЫЙ = 400  // Из калибровки
 4    
 5  ПОСТОЯННО:
 6    показание = Прочитать_датчик_света()
 7    
 8    ЕСЛИ показание < ПОРОГ_ЧЕРНО_БЕЛЫЙ ТО
 9      Вывести("Черная поверхность")
10      // Включить красный светодиод
11      Установить_цвет_светодиода(КРАСНЫЙ)
12    ИНАЧЕ
13      Вывести("Белая поверхность")
14      // Включить зеленый светодиод
15      Установить_цвет_светодиода(ЗЕЛЕНЫЙ)
16    КОНЕЦ ЕСЛИ
17    
18    Ждать(200 мс)
19  КОНЕЦ ПОСТОЯННО
20КОНЕЦ АЛГОРИТМА

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

 1АЛГОРИТМ Следование_по_линии_один_датчик():
 2  КОНСТАНТЫ:
 3    ПОРОГ_ЛИНИИ = 400
 4    СКОРОСТЬ_ПРЯМО = 150
 5    СКОРОСТЬ_ПОИСКА = 100
 6    
 7  ПЕРЕМЕННЫЕ:
 8    направление_поиска = ПРАВО
 9    время_на_линии = 0
10    
11  ПОСТОЯННО:
12    показание = Прочитать_датчик_света()
13    
14    ЕСЛИ показание < ПОРОГ_ЛИНИИ ТО
15      // Датчик на линии
16      Двигаться_прямо(СКОРОСТЬ_ПРЯМО)
17      время_на_линии = Получить_время()
18      Вывести("На линии")
19      
20    ИНАЧЕ
21      // Линия потеряна - ищем
22      Поиск_линии()
23    КОНЕЦ ЕСЛИ
24    
25    Ждать(50 мс)
26  КОНЕЦ ПОСТОЯННО
27  
28ФУНКЦИЯ Поиск_линии():
29  время_поиска = Получить_время() - время_на_линии
30  
31  ЕСЛИ время_поиска < 500 ТО
32    // Недавно потеряли линию - ищем в последнем направлении
33    ЕСЛИ направление_поиска = ПРАВО ТО
34      Повернуть_направо(СКОРОСТЬ_ПОИСКА)
35    ИНАЧЕ
36      Повернуть_налево(СКОРОСТЬ_ПОИСКА)
37    КОНЕЦ ЕСЛИ
38  ИНАЧЕ
39    // Долго ищем - меняем направление
40    направление_поиска = ЕСЛИ направление_поиска = ПРАВО ТО ЛЕВО ИНАЧЕ ПРАВО
41    Вывести("Меняю направление поиска")
42  КОНЕЦ ЕСЛИ
43КОНЕЦ ФУНКЦИИ

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

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

 1АЛГОРИТМ Движение_к_свету():
 2  КОНСТАНТЫ:
 3    ПОРОГ_ДОСТИЖЕНИЯ = 800  // Очень яркий свет
 4    СКОРОСТЬ_ПОИСКА = 120
 5    УГОЛ_ПОИСКА = 30  // градусов
 6    
 7  ПЕРЕМЕННЫЕ:
 8    максимальный_свет = 0
 9    лучшее_направление = 0
10    
11  ПОСТОЯННО:
12    текущий_свет = Прочитать_датчик_света()
13    
14    ЕСЛИ текущий_свет > ПОРОГ_ДОСТИЖЕНИЯ ТО
15      Вывести("Источник света найден!")
16      Остановиться()
17      Мигать_светодиодами(3)
18      Ждать(2000 мс)
19    ИНАЧЕ
20      Поиск_направления_света()
21      Двигаться_к_свету()
22    КОНЕЦ ЕСЛИ
23    
24    Ждать(100 мс)
25  КОНЕЦ ПОСТОЯННО
26  
27ФУНКЦИЯ Поиск_направления_света():
28  максимальный_свет = 0
29  лучшее_направление = 0
30  
31  ДЛЯ угол = 0 ДО 360 ШАГ УГОЛ_ПОИСКА:
32    Повернуть_на_угол(УГОЛ_ПОИСКА)
33    Ждать(200 мс)  // Время стабилизации
34    
35    свет = Прочитать_датчик_света()
36    ЕСЛИ свет > максимальный_свет ТО
37      максимальный_свет = свет
38      лучшее_направление = угол
39    КОНЕЦ ЕСЛИ
40  КОНЕЦ ДЛЯ
41  
42  // Поворачиваемся к самому яркому направлению
43  Повернуть_на_угол(лучшее_направление)
44  Вывести("Лучшее направление:", лучшее_направление, "°, свет:", максимальный_свет)
45КОНЕЦ ФУНКЦИИ
46
47ФУНКЦИЯ Двигаться_к_свету():
48  начальный_свет = Прочитать_датчик_света()
49  Двигаться_вперед(СКОРОСТЬ_ПОИСКА)
50  Ждать(500 мс)
51  
52  новый_свет = Прочитать_датчик_света()
53  
54  ЕСЛИ новый_свет <= начальный_свет ТО
55    // Свет не стал ярче - неправильное направление
56    Вывести("Свет не улучшился, ищу заново")
57    Остановиться()
58    Поиск_направления_света()
59  КОНЕЦ ЕСЛИ
60КОНЕЦ ФУНКЦИИ

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

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

 1АЛГОРИТМ Умный_фотоследователь():
 2  ПЕРЕМЕННЫЕ:
 3    режим = ПОИСК  // ПОИСК, СЛЕДОВАНИЕ, ДОСТИЖЕНИЕ
 4    история_света[10]
 5    индекс_истории = 0
 6    среднее_освещение = 0
 7    
 8  ПОСТОЯННО:
 9    текущий_свет = Прочитать_датчик_света()
10    Обновить_историю(текущий_свет)
11    
12    ВЫБОР режим:
13      СЛУЧАЙ ПОИСК:
14        Режим_поиска()
15        
16      СЛУЧАЙ СЛЕДОВАНИЕ:
17        Режим_следования()
18        
19      СЛУЧАЙ ДОСТИЖЕНИЕ:
20        Режим_достижения()
21    КОНЕЦ ВЫБОРА
22    
23    Анализ_тенденций()
24    Ждать(100 мс)
25  КОНЕЦ ПОСТОЯННО
26  
27ФУНКЦИЯ Обновить_историю(новое_значение):
28  история_света[индекс_истории] = новое_значение
29  индекс_истории = (индекс_истории + 1) % 10
30  
31  сумма = 0
32  ДЛЯ i = 0 ДО 9:
33    сумма += история_света[i]
34  КОНЕЦ ДЛЯ
35  среднее_освещение = сумма / 10
36КОНЕЦ ФУНКЦИИ
37
38ФУНКЦИЯ Анализ_тенденций():
39  первая_половина = Среднее(история_света[0..4])
40  вторая_половина = Среднее(история_света[5..9])
41  тенденция = вторая_половина - первая_половина
42  
43  ЕСЛИ тенденция > 20 ТО
44    Вывести("Свет усиливается - продолжаю в том же направлении")
45    ЕСЛИ режим = ПОИСК ТО режим = СЛЕДОВАНИЕ КОНЕЦ ЕСЛИ
46    
47  ИНАЧЕ ЕСЛИ тенденция < -20 ТО
48    Вывести("Свет ослабевает - меняю стратегию")
49    режим = ПОИСК
50    
51  ИНАЧЕ
52    Вывести("Стабильное освещение")
53    ЕСЛИ среднее_освещение > 700 ТО
54      режим = ДОСТИЖЕНИЕ
55    КОНЕЦ ЕСЛИ
56  КОНЕЦ ЕСЛИ
57КОНЕЦ ФУНКЦИИ
58
59ФУНКЦИЯ Режим_поиска():
60  // Спиральное движение для поиска источника
61  Двигаться_по_спирали()
62КОНЕЦ ФУНКЦИИ
63
64ФУНКЦИЯ Режим_следования():
65  // Прямое движение к усиливающемуся свету
66  Двигаться_вперед(200)
67КОНЕЦ ФУНКЦИИ
68
69ФУНКЦИЯ Режим_достижения():
70  // Точное позиционирование у источника
71  Остановиться()
72  Сигнал_достижения()
73КОНЕЦ ФУНКЦИИ

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

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

 1ПРОГРАММА Отладка_датчика_света():
 2  ПЕРЕМЕННАЯ режим_отладки = ИСТИНА
 3  
 4  ФУНКЦИЯ Отладочный_вывод():
 5    ЕСЛИ режим_отладки ТО
 6      свет = Прочитать_датчик_света()
 7      напряжение = свет × 5.0 / 1023.0
 8      
 9      Вывести("=== ОТЛАДКА ===")
10      Вывести("АЦП:", свет)
11      Вывести("Напряжение:", напряжение, "В")
12      
13      ЕСЛИ свет < 200 ТО
14        состояние = "ОЧЕНЬ СВЕТЛО"
15      ИНАЧЕ ЕСЛИ свет < 400 ТО
16        состояние = "СВЕТЛО"
17      ИНАЧЕ ЕСЛИ свет < 600 ТО
18        состояние = "СРЕДНЕ"
19      ИНАЧЕ ЕСЛИ свет < 800 ТО
20        состояние = "ТЕМНО"
21      ИНАЧЕ
22        состояние = "ОЧЕНЬ ТЕМНО"
23      КОНЕЦ ЕСЛИ
24      
25      Вывести("Состояние:", состояние)
26      Вывести("Время:", Получить_время_мс(), "мс")
27      Вывести("===============")
28    КОНЕЦ ЕСЛИ
29  КОНЕЦ ФУНКЦИИ
30КОНЕЦ ПРОГРАММЫ

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

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

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

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

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

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

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

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

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

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

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

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

 1ПРОЦЕДУРА Тест_калибровки():
 2  образцы = ["черная бумага", "серый картон", "белая бумага"]
 3  
 4  ДЛЯ КАЖДОГО образца ИЗ образцы:
 5    Поднести образец к датчику
 6    показание = Прочитать_датчик()
 7    ожидаемое = Получить_эталонное_значение(образец)
 8    
 9    погрешность = АБС(показание - ожидаемое) / ожидаемое × 100
10    
11    Вывести(образец, ": ", показание, " (ожидаемое:", ожидаемое, ")")
12    Вывести("Погрешность:", погрешность, "%")
13    
14    ЕСЛИ погрешность < 10 ТО
15      Вывести("✅ ОТЛИЧНО")
16    ИНАЧЕ ЕСЛИ погрешность < 20 ТО
17      Вывести("✅ ХОРОШО")
18    ИНАЧЕ
19      Вывести("❌ ТРЕБУЕТ ДОРАБОТКИ")
20    КОНЕЦ ЕСЛИ
21  КОНЕЦ ДЛЯ
22КОНЕЦ ПРОЦЕДУРЫ

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

 1ПРОЦЕДУРА Тест_стабильности():
 2  Вывести("Тест стабильности показаний (30 секунд)")
 3  
 4  массив измерения[60]  // 2 измерения в секунду
 5  
 6  ДЛЯ i = 0 ДО 59:
 7    измерения[i] = Прочитать_датчик()
 8    Ждать(500 мс)
 9  КОНЕЦ ДЛЯ
10  
11  среднее = Вычислить_среднее(измерения)
12  стандартное_отклонение = Вычислить_СКО(измерения, среднее)
13  
14  Вывести("Среднее значение:", среднее)
15  Вывести("Стандартное отклонение:", стандартное_отклонение)
16  
17  стабильность = (1 - стандартное_отклонение / среднее) × 100
18  Вывести("Стабильность:", стабильность, "%")
19КОНЕЦ ПРОЦЕДУРЫ

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

 1ПРОЦЕДУРА Тест_следования_по_линии():
 2  контрольные_точки = 5
 3  пройденные_точки = 0
 4  время_старта = Получить_время()
 5  
 6  Запустить_программу_следования()
 7  
 8  ДЛЯ точка = 1 ДО контрольные_точки:
 9    Ждать_достижения_контрольной_точки(точка)
10    
11    ЕСЛИ Робот_на_правильном_пути() ТО
12      пройденные_точки++
13      Вывести("Контрольная точка", точка, "пройдена ✅")
14    ИНАЧЕ
15      Вывести("Робот сбился с пути на точке", точка, "❌")
16      ВЫХОД ИЗ ЦИКЛА
17    КОНЕЦ ЕСЛИ
18  КОНЕЦ ДЛЯ
19  
20  время_финиша = Получить_время()
21  общее_время = время_финиша - время_старта
22  
23  успешность = пройденные_точки / контрольные_точки × 100
24  
25  Вывести("Результат теста:")
26  Вывести("Пройдено точек:", пройденные_точки, "/", контрольные_точки)
27  Вывести("Время:", общее_время, "секунд")
28  Вывести("Успешность:", успешность, "%")
29КОНЕЦ ПРОЦЕДУРЫ

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

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

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

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

1Итоговый_балл = (Калибровка × 0.25) + 
2                (Стабильность × 0.25) + 
3                (Следование × 0.3) + 
4                (Скорость × 0.2)
5
6Где каждый компонент оценивается от 2 до 5 баллов.

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

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

Причины:

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

Решения:

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

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

Причины:

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

Решения:

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

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

Причины:

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

Решения:

11. Снизить скорость на поворотах
22. Улучшить алгоритм предсказания поворотов
33. Увеличить частоту чтения датчика
44. Добавить алгоритм поиска потерянной линии

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

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

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

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

Правила:

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

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

Правила:

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

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

Правила:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1Характеристики:
2- Низкая скорость, высокая точность
3- Много времени на калибровку
4- Сложные алгоритмы стабилизации
5- Минимум ошибок
6
7Результат: высокие баллы за технику, средние за скорость

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

1Характеристики:
2- Максимальная скорость движения
3- Простые, быстрые алгоритмы
4- Агрессивное прохождение поворотов
5- Риск потери линии
6
7Результат: высокие баллы за скорость, риск штрафов

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

1Характеристики:
2- Средняя скорость с адаптацией
3- Качественная калибровка
4- Алгоритмы самокоррекции
5- Стабильные результаты
6
7Результат: стабильно высокие баллы по всем критериям

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

📝 Задания:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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