👁️ Оптические датчики в робототехнике

Даем роботам зрение и цветовосприятие

🌈 Свет • 👁️ Зрение • 🎨 Цвета • 🤖 Интеллект
5 класс • Технология • 45 минут

👨‍🏫 Учитель: Ахметов Рустам
🏫 Школа: ГБОУ № 1362
📅 Дата: 2025-06-11
🎯 Цель: Научить роботов “видеть” мир вокруг себя!

🎯 План урока

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

  1. 🔄 Вспомнить основы - что мы знаем о свете и датчиках
  2. ⚗️ Изучить физику света - как работают оптические явления
  3. 🔬 Понять фотоэлементы - от света к электричеству
  4. 🧮 Освоить преобразования - от сигналов к числам
  5. 🎨 Поработать с цветом - RGB и датчики цвета
  6. 🤖 Создать видящего робота - проект “следование по линии”

🎯 К концу урока вы сможете:

  • ⚗️ Объяснить физические принципы работы оптических датчиков
  • 🔬 Использовать датчики света и цвета в проектах
  • 🧮 Понимать преобразование световых сигналов в данные
  • 🤖 Создавать роботов с оптическим зрением

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

Что мы уже знаем о датчиках и свете

❓ Блиц-опрос о датчиках

1. Типы изученных датчиков:

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

2. Основы работы датчиков:

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

🎯 Связь с новой темой: Сегодня изучаем датчики, которые работают со светом!

🌈 Световые явления вокруг нас

🤔 Вопросы о свете:

  • Что происходит со светом, когда он падает на поверхность?
  • Почему мы видим предметы разного цвета?
  • Как наши глаза различают цвета?
  • Может ли машина “видеть” как человек?

🌍 Свет в природе и технике:

  • 🌞 Солнце - главный источник света на Земле
  • 👁️ Глаза - природные оптические датчики
  • 📸 Камера - технический аналог глаза
  • 🚗 Фары и датчики - свет в автомобилях

🧠 Проблемная ситуация: Как научить робота различать день и ночь? Как робот может следовать по цветной линии? Как автомобиль “видит” препятствия?

🤖 Зрение роботов vs зрение человека

👨 Человеческое зрение:

  • 👁️ Глаза - сложная оптическая система
  • 🧠 Мозг - обработка визуальной информации
  • 🌈 Цветовосприятие - различение миллионов оттенков
  • Скорость - мгновенная реакция на изменения

🤖 Робототехническое зрение:

  • 📡 Датчики - простые фотоэлементы
  • 💻 Процессор - числовая обработка сигналов
  • 🎨 Цветоанализ - RGB-модель цветов
  • 🔢 Дискретность - работа с числовыми значениями

⚖️ Сравнение возможностей:

ПараметрЧеловекРобот
Количество цветов~10 млн16.7 млн (24-бит)
Скорость реакции0.1-0.2 с0.001-0.01 с
Работа в темнотеОграниченаС ИК-подсветкой
Точность измеренийСубъективнаяОбъективная
УсталостьЕстьНет

⚗️ Физические основы оптических датчиков

От света к электричеству

🌈 Природа света

📊 Свет как электромагнитная волна:

  • Свет - это электромагнитное излучение
  • Длина волны определяет цвет
  • Видимый спектр: 380-780 нанометров

🎨 Спектр видимого света:

Фиолетовый ← Синий ← Голубой ← Зеленый ← Желтый ← Оранжевый ← Красный
380 нм     450 нм   500 нм    550 нм    580 нм   620 нм      750 нм

⚡ Основные свойства света:

  • Отражение - свет отбрасывается от поверхности
  • Поглощение - свет “проглатывается” материалом
  • Преломление - свет изменяет направление при переходе в другую среду
  • Рассеяние - свет распространяется во все стороны

🔬 Отражение и поглощение света

🪞 Закон отражения: Угол падения = Угол отражения

🎨 Цвет объектов:

  • Белый объект - отражает весь видимый свет
  • Черный объект - поглощает весь видимый свет
  • Красный объект - отражает красный, поглощает остальные цвета
  • Зеленый объект - отражает зеленый, поглощает остальные

📊 Коэффициент отражения:

Коэффициент отражения = Отраженный свет / Падающий свет

Примеры:
- Свежий снег: ~90%
- Белая бумага: ~80%
- Серая поверхность: ~50%
- Черный асфальт: ~5%

🔬 Практическое применение: Оптические датчики измеряют количество отраженного света для определения свойств поверхности.

⚡ Фотоэлектрический эффект

🏆 Открытие Эйнштейна (Нобелевская премия 1921): При попадании света на металл из него вылетают электроны.

🔬 Механизм фотоэффекта:

  1. Фотон света попадает на электрон в материале
  2. Электрон получает энергию и покидает атом
  3. Возникает электрический ток - поток электронов
  4. Сила тока зависит от интенсивности света

⚡ Математическая модель:

E_фотона = h × f

где:
E_фотона - энергия фотона
h - постоянная Планка
f - частота света

🎯 Применение в датчиках: Изменение освещенности → Изменение тока → Изменение напряжения → Цифровой сигнал

📡 Типы фотоэлементов

1️⃣ Фоторезистор (LDR - Light Dependent Resistor):

Принцип работы:

  • Сопротивление зависит от освещенности
  • Больше света → меньше сопротивление
  • Меньше света → больше сопротивление

Характеристики:

  • Диапазон сопротивления: 1 кОм - 10 МОм
  • Время реакции: 10-100 мс
  • Спектральная чувствительность: похожа на человеческий глаз

2️⃣ Фототранзистор:

Принцип работы:

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

Характеристики:

  • Высокая чувствительность
  • Быстрая реакция: 1-10 мкс
  • Линейная зависимость тока от освещенности

3️⃣ Фотодиод:

Принцип работы:

  • Диод, работающий в режиме фотогенератора
  • Создает ток при освещении
  • Самый быстрый отклик

Характеристики:

  • Время реакции: < 1 мкс
  • Высокая точность
  • Широкий спектральный диапазон

🧪 Демонстрационный эксперимент

🔬 Эксперимент: “Измерение сопротивления фоторезистора”

Оборудование:

  • Фоторезистор
  • Мультиметр
  • Источники света разной яркости
  • Цветные фильтры

Методика:

1. Подключить мультиметр к фоторезистору
2. Измерить сопротивление в темноте
3. Постепенно увеличивать освещенность
4. Записать изменения сопротивления
5. Проверить с разными цветами света

Ожидаемые результаты:

  • В темноте: 1-10 МОм
  • При ярком свете: 1-10 кОм
  • Красный свет: меньшая чувствительность
  • Синий свет: большая чувствительность

🎯 Вывод: Фоторезистор надежно преобразует световые изменения в электрические сигналы, пригодные для измерения контроллером.

🧮 Математические основы преобразования сигналов

От аналога к цифре

📊 Аналого-цифровое преобразование (АЦП)

🔄 Процесс преобразования:

Свет → Фотоэлемент → Аналоговое напряжение → АЦП → Цифровое значение

🧮 Формула преобразования:

Цифровое_значение = (Напряжение_входа / Опорное_напряжение) × (2^Разрядность - 1)

Для 10-битного АЦП с опорным напряжением 5В:
Цифровое_значение = (U_вх / 5В) × 1023

📝 Примеры расчетов:

  • При U_вх = 0В: Значение = 0
  • При U_вх = 2.5В: Значение = 512
  • При U_вх = 5В: Значение = 1023

📏 Разрешающая способность:

Разрешение = Опорное_напряжение / (2^Разрядность)

Для 10-битного АЦП:
Разрешение = 5В / 1024 ≈ 4.9 мВ на единицу

📈 Калибровка датчиков освещенности

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

  • Каждый датчик имеет индивидуальные характеристики
  • Условия освещения различаются
  • Нужно связать цифровые значения с физическими величинами

📊 Метод двухточечной калибровки:

Шаг 1: Измерение крайних точек

Темнота (0 люкс): показание АЦП = значение_мин
Яркий свет (1000 люкс): показание АЦП = значение_макс

Шаг 2: Расчет коэффициентов

k = (люкс_макс - люкс_мин) / (значение_макс - значение_мин)
b = люкс_мин - k × значение_мин

Шаг 3: Формула перевода

Освещенность_люкс = k × Показание_АЦП + b

📝 Практический пример:

Измерения:
- В темноте: АЦП = 50, освещенность = 0 люкс
- На ярком свету: АЦП = 950, освещенность = 1000 люкс

Расчет коэффициентов:
k = (1000 - 0) / (950 - 50) = 1000 / 900 ≈ 1.11
b = 0 - 1.11 × 50 = -55.5

Формула калибровки:
Освещенность = 1.11 × АЦП - 55.5

📊 Работа с шумом и фильтрацией

🌊 Проблема шума в сигнале:

  • Электрические помехи
  • Флуктуации освещения
  • Вибрации датчика
  • Температурные изменения

🔧 Методы фильтрации:

1. Простое усреднение:

АЛГОРИТМ Усреднение_показаний(количество_измерений):
  сумма = 0
  ДЛЯ i = 1 ДО количество_измерений:
    показание = Прочитать_АЦП()
    сумма = сумма + показание
    Ждать(10 мс)
  КОНЕЦ ДЛЯ
  среднее = сумма / количество_измерений
  ВОЗВРАТ среднее
КОНЕЦ АЛГОРИТМА

2. Скользящее среднее:

МАССИВ буфер[размер_буфера]
индекс = 0

ФУНКЦИЯ Скользящее_среднее(новое_значение):
  буфер[индекс] = новое_значение
  индекс = (индекс + 1) % размер_буфера
  
  сумма = 0
  ДЛЯ i = 0 ДО размер_буфера - 1:
    сумма = сумма + буфер[i]
  КОНЕЦ ДЛЯ
  
  ВОЗВРАТ сумма / размер_буфера
КОНЕЦ ФУНКЦИИ

3. Медианная фильтрация:

ФУНКЦИЯ Медианный_фильтр(размер_окна):
  МАССИВ окно[размер_окна]
  
  ДЛЯ i = 0 ДО размер_окна - 1:
    окно[i] = Прочитать_АЦП()
    Ждать(5 мс)
  КОНЕЦ ДЛЯ
  
  Отсортировать(окно)
  ВОЗВРАТ окно[размер_окна / 2]  // Средний элемент
КОНЕЦ ФУНКЦИИ

🎯 Пороговые значения и гистерезис

📊 Проблема дрожания порога: Когда сигнал находится рядом с пороговым значением, результат может быстро переключаться между “светло” и “темно”.

✅ Решение: гистерезис

ПЕРЕМЕННЫЕ:
  порог_включения = 600
  порог_выключения = 400
  текущее_состояние = ТЕМНО

ФУНКЦИЯ Определить_освещенность():
  показание = Прочитать_датчик_с_фильтром()
  
  ЕСЛИ текущее_состояние = ТЕМНО ТО
    ЕСЛИ показание > порог_включения ТО
      текущее_состояние = СВЕТЛО
    КОНЕЦ ЕСЛИ
  ИНАЧЕ  // текущее_состояние = СВЕТЛО
    ЕСЛИ показание < порог_выключения ТО
      текущее_состояние = ТЕМНО
    КОНЕЦ ЕСЛИ
  КОНЕЦ ЕСЛИ
  
  ВОЗВРАТ текущее_состояние
КОНЕЦ ФУНКЦИИ

🎯 Преимущества гистерезиса:

  • Устраняет дрожание
  • Повышает стабильность работы
  • Уменьшает количество ложных срабатываний

🌟 Практическая работа: Датчики света

Измеряем освещенность

🔌 Подключение датчика света

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

Arduino → Фоторезистор + делитель напряжения

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

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

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

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

🧪 Эксперимент: Измерение освещенности в классе

📋 Методика эксперимента:

Задача: Создать карту освещенности класса

Оборудование:

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

Процедура:

ПЛАН ЭКСПЕРИМЕНТА:
1. Разделить класс на сетку 5×5 точек
2. В каждой точке измерить освещенность
3. Записать результаты в таблицу
4. Построить карту освещенности
5. Найти самые светлые и темные места

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

ТочкаX, мY, мПоказание АЦПОсвещенность, люксОсобенности
10.50.5______У окна
21.00.5______Центр
31.50.5______У доски

📈 Анализ результатов

🎯 Вопросы для анализа:

  • Где в классе самое яркое освещение?
  • Как изменяется освещенность от окна к противоположной стене?
  • Влияет ли время дня на показания?
  • Как искусственное освещение влияет на датчик?

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

График 1: Освещенность vs Расстояние от окна
График 2: Изменение освещенности по времени
График 3: Карта изолиний освещенности класса

🔍 Интересные наблюдения:

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

🤖 Программирование реакции на свет

📝 Базовый алгоритм “Следование за светом”:

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

ФУНКЦИЯ Поиск_источника_света():
  // Поворачиваемся на месте в поисках света
  Установить_скорость_моторов(СКОРОСТЬ_ПОИСКА, -СКОРОСТЬ_ПОИСКА)
  
  максимум_света = 0
  лучшее_направление = 0
  
  ДЛЯ угол = 0 ДО 360 ШАГ 30:
    текущий_свет = Прочитать_датчик_света()
    ЕСЛИ текущий_свет > максимум_света ТО
      максимум_света = текущий_свет
      лучшее_направление = угол
    КОНЕЦ ЕСЛИ
    Ждать(200 мс)
  КОНЕЦ ДЛЯ
  
  // Поворачиваемся к источнику света
  Повернуть_на_угол(лучшее_направление)
КОНЕЦ ФУНКЦИИ

🎯 Усложненные алгоритмы

🧠 Алгоритм с памятью:

ПЕРЕМЕННЫЕ:
  история_освещенности[10]
  индекс_истории = 0

ФУНКЦИЯ Умный_поиск_света():
  // Запоминаем текущую освещенность
  текущий_свет = Прочитать_датчик_света()
  история_освещенности[индекс_истории] = текущий_свет
  индекс_истории = (индекс_истории + 1) % 10
  
  // Анализируем тенденцию
  тенденция = Анализ_тенденции(история_освещенности)
  
  ЕСЛИ тенденция = УВЕЛИЧЕНИЕ ТО
    // Свет становится ярче - продолжаем в том же направлении
    Двигаться_вперед()
  ИНАЧЕ ЕСЛИ тенденция = УМЕНЬШЕНИЕ ТО
    // Свет тускнеет - поворачиваем и ищем новое направление
    Повернуть_на_случайный_угол()
  ИНАЧЕ
    // Стабильный уровень - медленно исследуем область
    Медленное_движение_по_спирали()
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

ФУНКЦИЯ Анализ_тенденции(массив):
  первая_половина = Среднее(массив[0..4])
  вторая_половина = Среднее(массив[5..9])
  
  ЕСЛИ вторая_половина > первая_половина + 20 ТО
    ВОЗВРАТ УВЕЛИЧЕНИЕ
  ИНАЧЕ ЕСЛИ вторая_половина < первая_половина - 20 ТО
    ВОЗВРАТ УМЕНЬШЕНИЕ
  ИНАЧЕ
    ВОЗВРАТ СТАБИЛЬНО
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

🎨 Датчики цвета и RGB-модель

Учим роботов различать цвета

🌈 Основы цветовосприятия

👁️ Как человек видит цвета:

  • В сетчатке глаза есть 3 типа колбочек
  • Каждый тип чувствителен к определенному диапазону:
    • S-колбочки - короткие волны (синий)
    • M-колбочки - средние волны (зеленый)
    • L-колбочки - длинные волны (красный)

🤖 RGB-модель цветов:

  • R (Red) - красный компонент (0-255)
  • G (Green) - зеленый компонент (0-255)
  • B (Blue) - синий компонент (0-255)

🎨 Примеры RGB-кодов:

Красный:    RGB(255, 0, 0)
Зеленый:    RGB(0, 255, 0)
Синий:      RGB(0, 0, 255)
Белый:      RGB(255, 255, 255)
Черный:     RGB(0, 0, 0)
Желтый:     RGB(255, 255, 0)
Фиолетовый: RGB(255, 0, 255)
Голубой:    RGB(0, 255, 255)

🔬 Устройство датчика цвета

📡 Принцип работы RGB-датчика:

Конструкция:

  • 1 белый светодиод (источник света)
  • 1 фотодиод (приемник отраженного света)
  • 3 цветных фильтра (красный, зеленый, синий)
  • Контроллер для управления

🔄 Алгоритм измерения:

1. Включить белый светодиод
2. Осветить объект
3. Измерить отраженный свет через красный фильтр → R
4. Измерить отраженный свет через зеленый фильтр → G
5. Измерить отраженный свет через синий фильтр → B
6. Выключить светодиод
7. Нормализовать значения R, G, B

🧮 Математическая обработка:

// Нормализация к диапазону 0-255
R_норм = (R_измеренное / R_максимальное) × 255
G_норм = (G_измеренное / G_максимальное) × 255  
B_норм = (B_измеренное / B_максимальное) × 255

// Определение доминирующего цвета
максимум = МАХ(R_норм, G_норм, B_норм)

ЕСЛИ максимум = R_норм ТО цвет = "Красный"
ИНАЧЕ ЕСЛИ максимум = G_норм ТО цвет = "Зеленый"
ИНАЧЕ ЕСЛИ максимум = B_норм ТО цвет = "Синий"
КОНЕЦ ЕСЛИ

🧪 Практическая работа с датчиком цвета

📋 Эксперимент: “Создание палитры цветов”

Задача: Создать базу данных цветов для робота

Методика:

АЛГОРИТМ Создание_палитры():
  цвета = ["красный", "зеленый", "синий", "желтый", "белый", "черный"]
  
  ДЛЯ КАЖДОГО цвета ИЗ цвета:
    Вывести("Поднесите", цвет, "объект к датчику")
    Ждать_нажатия_кнопки()
    
    // Делаем несколько измерений для точности
    сумма_R = 0, сумма_G = 0, сумма_B = 0
    
    ДЛЯ i = 1 ДО 10:
      (R, G, B) = Прочитать_RGB_датчик()
      сумма_R = сумма_R + R
      сумма_G = сумма_G + G
      сумма_B = сумма_B + B
      Ждать(100 мс)
    КОНЕЦ ДЛЯ
    
    // Вычисляем средние значения
    эталон[цвет].R = сумма_R / 10
    эталон[цвет].G = сумма_G / 10
    эталон[цвет].B = сумма_B / 10
    
    Вывести(цвет, ": RGB(", эталон[цвет].R, ",", эталон[цвет].G, ",", эталон[цвет].B, ")")
  КОНЕЦ ДЛЯ
КОНЕЦ АЛГОРИТМА

📊 Таблица эталонных цветов:

ЦветRGBОсобенности
Красный_________Высокий R, низкие G и B
Зеленый_________Высокий G, низкие R и B
Синий_________Высокий B, низкие R и G
Желтый_________Высокие R и G, низкий B
Белый_________Все компоненты высокие
Черный_________Все компоненты низкие

🎯 Алгоритм распознавания цветов

🧠 Метод ближайшего соседа:

ФУНКЦИЯ Распознать_цвет(измеренный_R, измеренный_G, измеренный_B):
  минимальное_расстояние = БОЛЬШОЕ_ЧИСЛО
  найденный_цвет = "неизвестный"
  
  ДЛЯ КАЖДОГО эталона ИЗ база_эталонов:
    // Вычисляем евклидово расстояние в RGB-пространстве
    расстояние = КОРЕНЬ(
      (измеренный_R - эталон.R)² + 
      (измеренный_G - эталон.G)² + 
      (измеренный_B - эталон.B)²
    )
    
    ЕСЛИ расстояние < минимальное_расстояние ТО
      минимальное_расстояние = расстояние
      найденный_цвет = эталон.название
    КОНЕЦ ЕСЛИ
  КОНЕЦ ДЛЯ
  
  // Проверяем, достаточно ли близко
  ЕСЛИ минимальное_расстояние < ПОРОГ_СХОЖЕСТИ ТО
    ВОЗВРАТ найденный_цвет
  ИНАЧЕ
    ВОЗВРАТ "неизвестный цвет"
  КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ

🎯 Улучшенный алгоритм с нормализацией:

ФУНКЦИЯ Нормализованное_распознавание(R, G, B):
  // Нормализуем к общей яркости
  яркость = R + G + B
  
  ЕСЛИ яркость > 0 ТО
    R_норм = R / яркость
    G_норм = G / яркость  
    B_норм = B / яркость
  ИНАЧЕ
    ВОЗВРАТ "черный"
  КОНЕЦ ЕСЛИ
  
  // Теперь сравниваем нормализованные значения
  ВОЗВРАТ Распознать_цвет(R_норм, G_норм, B_норм)
КОНЕЦ ФУНКЦИИ

🤖 Программирование реакций на цвета

🎮 Алгоритм “Робот-сортировщик”:

АЛГОРИТМ Сортировка_по_цветам():
  ПОСТОЯННО:
    цвет = Определить_цвет_объекта()
    
    ВЫБОР цвет:
      СЛУЧАЙ "красный":
        Вывести("Красный объект - поворачиваю налево")
        Повернуть_налево()
        Проехать_вперед(30)
        
      СЛУЧАЙ "зеленый":
        Вывести("Зеленый объект - двигаюсь прямо")
        Проехать_вперед(50)
        
      СЛУЧАЙ "синий":
        Вывести("Синий объект - поворачиваю направо")
        Повернуть_направо()
        Проехать_вперед(30)
        
      СЛУЧАЙ "черный":
        Вывести("Черная линия - остановка")
        Остановиться()
        Ждать(2000 мс)
        
      ПО_УМОЛЧАНИЮ:
        Вывести("Неизвестный цвет - случайное движение")
        Случайное_движение()
    КОНЕЦ_ВЫБОРА
    
    Ждать(500 мс)
  КОНЕЦ ПОСТОЯННО
КОНЕЦ АЛГОРИТМА

🤖 Мини-проект: “Робот, следующий по линии”

Применяем оптические датчики на практике

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

📋 Техническое задание: Создать робота, который автономно движется вдоль черной линии на белом фоне, используя оптические датчики.

🎯 Требования:

  • ✅ Устойчивое следование по прямой линии
  • ✅ Прохождение плавных поворотов
  • ✅ Возвращение на линию при отклонении
  • ✅ Остановка при достижении цветной метки

🏗️ Конфигурация датчиков:

Вариант А: Один датчик (простой):

  • 1 датчик света в центре робота
  • Алгоритм поиска линии при потере

Вариант Б: Два датчика (стандартный):

  • 2 датчика света по краям линии
  • Дифференциальное управление

Вариант В: Три датчика (продвинутый):

  • 3 датчика: левый, центральный, правый
  • Точное позиционирование на линии

📊 Анализ задачи и алгоритм

🔍 Принцип работы:

  • Черная линия поглощает свет → низкие показания датчика
  • Белая поверхность отражает свет → высокие показания датчика
  • Граница линии дает промежуточные значения

📈 Характерные показания:

Белая поверхность: 800-1000 (АЦП)
Граница линии:     400-600   (АЦП)
Черная линия:      0-200     (АЦП)

🧠 Базовый алгоритм (два датчика):

АЛГОРИТМ Следование_по_линии():
  КОНСТАНТЫ:
    ПОРОГ_ЛИНИИ = 400
    СКОРОСТЬ_БАЗОВАЯ = 150
    СКОРОСТЬ_ПОВОРОТА = 100
  
  ПОСТОЯННО:
    левый_датчик = Прочитать_датчик(ЛЕВЫЙ)
    правый_датчик = Прочитать_датчик(ПРАВЫЙ)
    
    левый_на_линии = (левый_датчик < ПОРОГ_ЛИНИИ)
    правый_на_линии = (правый_датчик < ПОРОГ_ЛИНИИ)
    
    ЕСЛИ левый_на_линии И правый_на_линии ТО
      // Оба датчика на линии - едем прямо
      Установить_скорости(СКОРОСТЬ_БАЗОВАЯ, СКОРОСТЬ_БАЗОВАЯ)
      
    ИНАЧЕ ЕСЛИ левый_на_линии И НЕ правый_на_линии ТО
      // Линия ушла влево - поворачиваем налево
      Установить_скорости(СКОРОСТЬ_ПОВОРОТА, СКОРОСТЬ_БАЗОВАЯ)
      
    ИНАЧЕ ЕСЛИ НЕ левый_на_линии И правый_на_линии ТО
      // Линия ушла вправо - поворачиваем направо
      Установить_скорости(СКОРОСТЬ_БАЗОВАЯ, СКОРОСТЬ_ПОВОРОТА)
      
    ИНАЧЕ
      // Линия потеряна - поиск
      Поиск_линии()
    КОНЕЦ ЕСЛИ
    
    Ждать(50 мс)
  КОНЕЦ ПОСТОЯННО
КОНЕЦ АЛГОРИТМА

⚙️ Улучшенный ПИД-алгоритм

🎯 Проблемы простого алгоритма:

  • Рывки при переключениях
  • Медленная реакция на изменения
  • Неточное позиционирование

✅ Решение: ПИД-регулятор

ПЕРЕМЕННЫЕ:
  Kp = 0.8  // Пропорциональный коэффициент
  Ki = 0.1  // Интегральный коэффициент  
  Kd = 0.2  // Дифференциальный коэффициент
  
  предыдущая_ошибка = 0
  интеграл_ошибки = 0

ФУНКЦИЯ ПИД_управление():
  левый = Прочитать_датчик(ЛЕВЫЙ)
  правый = Прочитать_датчик(ПРАВЫЙ)
  
  // Вычисляем ошибку позиции
  ошибка = левый - правый
  
  // Пропорциональная составляющая
  P = ошибка
  
  // Интегральная составляющая (накопленная ошибка)
  интеграл_ошибки = интеграл_ошибки + ошибка
  I = интеграл_ошибки
  
  // Дифференциальная составляющая (скорость изменения ошибки)
  D = ошибка - предыдущая_ошибка
  предыдущая_ошибка = ошибка
  
  // Вычисляем управляющее воздействие
  управление = Kp × P + Ki × I + Kd × D
  
  // Применяем к моторам
  скорость_левого = БАЗОВАЯ_СКОРОСТЬ - управление
  скорость_правого = БАЗОВАЯ_СКОРОСТЬ + управление
  
  // Ограничиваем скорости
  скорость_левого = Ограничить(скорость_левого, 0, 255)
  скорость_правого = Ограничить(скорость_правого, 0, 255)
  
  Установить_скорости(скорость_левого, скорость_правого)
КОНЕЦ ФУНКЦИИ

🏗️ Сборка и настройка

🔧 Монтаж датчиков:

Позиционирование:

  • Высота над поверхностью: 5-15 мм
  • Расстояние между датчиками: ширина линии × 1.5
  • Угол наклона: 0° (вертикально вниз)

Калибровка:

АЛГОРИТМ Калибровка_датчиков():
  Вывести("Калибровка датчиков следования по линии")
  
  // Калибровка белой поверхности
  Вывести("Поставьте робота на белую поверхность и нажмите кнопку")
  Ждать_кнопки()
  
  сумма_левый_белый = 0, сумма_правый_белый = 0
  ДЛЯ i = 1 ДО 50:
    сумма_левый_белый += Прочитать_датчик(ЛЕВЫЙ)
    сумма_правый_белый += Прочитать_датчик(ПРАВЫЙ)
    Ждать(20 мс)
  КОНЕЦ ДЛЯ
  
  левый_белый = сумма_левый_белый / 50
  правый_белый = сумма_правый_белый / 50
  
  // Калибровка черной линии
  Вывести("Поставьте робота на черную линию и нажмите кнопку")
  Ждать_кнопки()
  
  сумма_левый_черный = 0, сумма_правый_черный = 0
  ДЛЯ i = 1 ДО 50:
    сумма_левый_черный += Прочитать_датчик(ЛЕВЫЙ)
    сумма_правый_черный += Прочитать_датчик(ПРАВЫЙ)
    Ждать(20 мс)
  КОНЕЦ ДЛЯ
  
  левый_черный = сумма_левый_черный / 50
  правый_черный = сумма_правый_черный / 50
  
  // Вычисляем пороги
  ПОРОГ_ЛЕВЫЙ = (левый_белый + левый_черный) / 2
  ПОРОГ_ПРАВЫЙ = (правый_белый + правый_черный) / 2
  
  Вывести("Калибровка завершена:")
  Вывести("Левый порог:", ПОРОГ_ЛЕВЫЙ)
  Вывести("Правый порог:", ПОРОГ_ПРАВЫЙ)
КОНЕЦ АЛГОРИТМА

🏁 Тестирование и оптимизация

📋 Тестовые треки:

Трек 1: Простая прямая

  • Длина: 2 метра
  • Ширина линии: 2 см
  • Без поворотов

Трек 2: Плавные повороты

  • S-образная траектория
  • Радиус поворотов: 30-50 см
  • Постепенное изменение направления

Трек 3: Острые углы

  • Повороты 90°
  • Т-образные развилки
  • Требует алгоритма поиска линии

🎯 Критерии оценки:

  • Скорость прохождения - время на тестовом треке
  • Точность следования - количество съездов с линии
  • Стабильность - повторяемость результатов
  • Адаптивность - работа на разных треках

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

КомандаТрек 1, сТрек 2, сТрек 3, сСъездыИтого баллов
1_______________
2_______________
3_______________

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

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

1. Исследование оптических датчиков в быту Подготовьте мини-доклад (5-7 минут) о применении оптических датчиков в повседневной жизни:

📝 План доклада:

  • Где встречаются оптические датчики в вашем доме?
  • Как работают автоматические двери в магазинах?
  • Зачем нужны датчики света в смартфонах?
  • Как работают сканеры штрих-кодов?
  • Применение в автомобилях (датчики дождя, света)

🎯 Требования:

  • Минимум 3 примера с объяснением принципа работы
  • Фотографии или схемы устройств
  • Объяснение преимуществ оптических датчиков

2. Проект робота с оптическими датчиками Продумайте идею робота, использующего датчики света или цвета:

🤖 Описание проекта:

  • Назначение робота (что он делает?)
  • Какие оптические датчики использует?
  • Алгоритм работы (блок-схема)
  • Где может применяться?

📝 Примеры идей:

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

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

🔬 Для исследователей: Проведите эксперимент по влиянию различных факторов на работу оптических датчиков:

📊 Исследуемые факторы:

  • Влияние цвета освещения (лампа накаливания vs светодиод vs солнце)
  • Влияние расстояния до объекта (1-10 см)
  • Влияние угла падения света (0°-60°)
  • Влияние материала поверхности (бумага, пластик, металл)

Постройте графики зависимостей и сделайте выводы.

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

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

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

Реализуйте один из алгоритмов в виде подробного псевдокода.

🎨 Для творческих: Спроектируйте инновационное применение оптических датчиков:

🚀 Идеи для проектов:

  • Умная теплица с автоматическим освещением
  • Система помощи слабовидящим людям
  • Интерактивная световая инсталляция
  • Робот для творческих мастерских

Создайте презентацию проекта с техническими деталями.

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

📚 Для изучения:

  • Основы оптики и фотоники
  • Цифровая обработка изображений
  • Компьютерное зрение
  • Автоматическое управление

💻 Симуляторы и инструменты:

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

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

  • “Как работают цифровые камеры”
  • “Оптические датчики в автомобилях”
  • “Технологии компьютерного зрения”
  • “Роботы с искусственным зрением”

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

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

⚗️ Физические знания:

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

🧮 Математические навыки:

  • ✅ Освоили аналого-цифровое преобразование
  • ✅ Научились калибровать оптические датчики
  • ✅ Изучили методы фильтрации шумов
  • ✅ Поняли RGB-модель и обработку цветов

🤖 Практические умения:

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

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

🎯 Ключевые выводы урока:

“Оптические датчики - это глаза роботов в мире света и цвета”

“Правильная калибровка важнее дорогого датчика”

“Комбинация простых датчиков создает сложные возможности”

🔮 Будущее оптических технологий:

  • 3D-сканирование и лидары для автономных автомобилей
  • Компьютерное зрение с нейронными сетями
  • Дополненная реальность через оптические системы
  • Квантовые датчики света сверхвысокой чувствительности

👁️ Рефлексия “Глаз робота”

🎯 Оцените свое понимание различных аспектов:

⚗️ Физические принципы работы датчиков: ⭐⭐⭐⭐⭐ 🧮 Математические преобразования сигналов: ⭐⭐⭐⭐⭐ 🔧 Практические навыки подключения: ⭐⭐⭐⭐⭐ 🎨 Работа с цветом и RGB-моделью: ⭐⭐⭐⭐⭐ 🤖 Программирование алгоритмов: ⭐⭐⭐⭐⭐

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

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

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

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

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

👁️ ВЫ ДАЛИ РОБОТАМ ЗРЕНИЕ!
Теперь роботы могут видеть свет, различать цвета и следовать по путям!