🧠 Логика • 💻 Программирование • 🔗 Комбинации • 🤖 Умное поведение
5 класс • Технология • 45 минут
👨🏫 Учитель: Ахметов Рустам
🏫 Школа: ГБОУ № 1362
📅 Дата: 2025-06-11
🎯 Цель: Научиться создавать умных роботов с логическим мышлением!
🧠 Наша логическая миссия:
🎯 К концу урока вы сможете:
💭 Что мы знаем об одном датчике нажатия:
📊 Состояния датчика:
НАЖАТ (TRUE, 1) - контакты замкнутыНЕ НАЖАТ (FALSE, 0) - контакты разомкнуты💻 Простая программа:
ЕСЛИ датчик НАЖАТ ТО
Остановиться и повернуть
ИНАЧЕ
Двигаться вперед
КОНЕЦ ЕСЛИ
🎯 Результат: Робот обходит препятствия при касании
🤖 Ситуация: У робота два датчика нажатия - слева и справа
❓ Вопросы для размышления:
🧠 Проблема: Как научить робота понимать все эти ситуации и правильно реагировать?
💡 Решение: Изучить логические операции и комбинации состояний!
🚗 Аналогия с автомобилем:
🤖 Преимущества двух датчиков:
🎮 Примеры применения:
🔢 Математический подход:
При n датчиках возможно 2^n различных комбинаций состояний.
Для 2 датчиков: 2^2 = 4 комбинации.
📋 Полная таблица состояний:
| № | Левый датчик | Правый датчик | Описание ситуации |
|---|---|---|---|
| 1 | НЕ НАЖАТ (0) | НЕ НАЖАТ (0) | Свободный путь |
| 2 | НЕ НАЖАТ (0) | НАЖАТ (1) | Препятствие справа |
| 3 | НАЖАТ (1) | НЕ НАЖАТ (0) | Препятствие слева |
| 4 | НАЖАТ (1) | НАЖАТ (1) | Препятствие прямо |
🎯 Вывод: Каждая комбинация требует своей реакции робота!
💻 Алгоритм разумного поведения:
Ситуация 1: Оба датчика НЕ нажаты (0, 0)
Действие: Двигаться вперед с нормальной скоростью
Логика: Путь свободен, можно ехать
Ситуация 2: Левый НЕ нажат, правый нажат (0, 1)
Действие: Повернуть налево
Логика: Препятствие справа, объезжаем слева
Ситуация 3: Левый нажат, правый НЕ нажат (1, 0)
Действие: Повернуть направо
Логика: Препятствие слева, объезжаем справа
Ситуация 4: Оба датчика нажаты (1, 1)
Действие: Остановиться, отъехать назад, развернуться
Логика: Тупик или большое препятствие, нужно отступить
📈 Частота возникновения ситуаций:
🟢 Наиболее частые (80% времени):
🟡 Средние по частоте (15% времени):
🔴 Редкие (5% времени):
🎯 Практический вывод: Программа должна быстро обрабатывать простые случаи и тщательно - сложные.
📊 Для понимания масштабирования:
Три датчика: левый, центральный, правый
Количество комбинаций: 2^3 = 8
| Левый | Центр | Правый | Ситуация |
|---|---|---|---|
| 0 | 0 | 0 | Свободный путь |
| 0 | 0 | 1 | Препятствие справа |
| 0 | 1 | 0 | Препятствие прямо |
| 0 | 1 | 1 | Препятствие прямо и справа |
| 1 | 0 | 0 | Препятствие слева |
| 1 | 0 | 1 | Препятствия по бокам |
| 1 | 1 | 0 | Препятствие прямо и слева |
| 1 | 1 | 1 | Препятствия везде (тупик) |
🎯 Вывод: Чем больше датчиков, тем умнее может быть робот, но тем сложнее программа!
📖 Определения:
🔗 Операция И (AND, конъюнкция):
ИСТИНА только когда ВСЕ условия истинныИ, AND, &&, ∧🔀 Операция ИЛИ (OR, дизъюнкция):
ИСТИНА когда ЛЮБОЕ условие истинноИЛИ, OR, ||, ∨🚫 Операция НЕ (NOT, отрицание):
ИСТИНА на ЛОЖЬ и наоборотНЕ, NOT, !, ¬⚡ Операция И (AND):
| A | B | A И B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
🎯 Простыми словами: “И то, И другое”
⚡ Операция ИЛИ (OR):
| A | B | A ИЛИ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
🎯 Простыми словами: “ИЛИ то, ИЛИ другое, ИЛИ оба”
⚡ Операция НЕ (NOT):
| A | НЕ A |
|---|---|
| 0 | 1 |
| 1 | 0 |
🎯 Простыми словами: “Наоборот”
💻 Примеры логических выражений:
Пример 1: Движение только при свободном пути
ЕСЛИ (НЕ левый_датчик) И (НЕ правый_датчик) ТО
Двигаться_вперед()
КОНЕЦ ЕСЛИ
Пример 2: Остановка при любом препятствии
ЕСЛИ левый_датчик ИЛИ правый_датчик ТО
Остановиться()
КОНЕЦ ЕСЛИ
Пример 3: Поворот налево только при препятствии справа
ЕСЛИ (НЕ левый_датчик) И правый_датчик ТО
Повернуть_налево()
КОНЕЦ ЕСЛИ
Пример 4: Разворот при препятствии прямо
ЕСЛИ левый_датчик И правый_датчик ТО
Развернуться_на_180_градусов()
КОНЕЦ ЕСЛИ
🧠 Сложные условия для умного поведения:
Пример 1: Интеллектуальный поворот
ЕСЛИ (левый_датчик И НЕ правый_датчик) ТО
Повернуть_направо()
ИНАЧЕ ЕСЛИ (НЕ левый_датчик И правый_датчик) ТО
Повернуть_налево()
ИНАЧЕ ЕСЛИ (левый_датчик И правый_датчик) ТО
Отъехать_назад_и_развернуться()
ИНАЧЕ
Двигаться_вперед()
КОНЕЦ ЕСЛИ
Пример 2: Адаптивная скорость
ЕСЛИ (НЕ левый_датчик) И (НЕ правый_датчик) ТО
скорость = 255 // Максимальная скорость
ИНАЧЕ ЕСЛИ левый_датчик ИЛИ правый_датчик ТО
скорость = 100 // Медленная скорость при препятствиях
КОНЕЦ ЕСЛИ
Пример 3: Подсчет типов столкновений
ЕСЛИ левый_датчик И правый_датчик ТО
счетчик_лобовых_столкновений = счетчик_лобовых_столкновений + 1
ИНАЧЕ ЕСЛИ левый_датчик ИЛИ правый_датчик ТО
счетчик_боковых_столкновений = счетчик_боковых_столкновений + 1
КОНЕЦ ЕСЛИ
📐 Законы логики для упрощения программ:
Закон поглощения:
A И (A ИЛИ B) = AA ИЛИ (A И B) = AЗакон де Моргана:
НЕ(A И B) = (НЕ A) ИЛИ (НЕ B)НЕ(A ИЛИ B) = (НЕ A) И (НЕ B)💻 Практический пример оптимизации:
Было (сложно):
ЕСЛИ НЕ(левый_датчик И правый_датчик) ТО
Двигаться_вперед()
КОНЕЦ ЕСЛИ
Стало (проще):
ЕСЛИ (НЕ левый_датчик) ИЛИ (НЕ правый_датчик) ТО
Двигаться_вперед()
КОНЕЦ ЕСЛИ
📊 Схема подключения к Arduino:
Arduino Uno → Левый датчик
Digital Pin 2 → Сигнальный контакт левого датчика
GND → Общий провод левого датчика
+5V → Питание через резистор 10кОм
Arduino Uno → Правый датчик
Digital Pin 3 → Сигнальный контакт правого датчика
GND → Общий провод правого датчика
+5V → Питание через резистор 10кОм
🔍 Проверка подключения:
Алгоритм "Тест двух датчиков":
НАЧАЛО
Инициализировать пин 2 как вход с подтяжкой
Инициализировать пин 3 как вход с подтяжкой
ПОСТОЯННО:
левый = Прочитать_пин(2)
правый = Прочитать_пин(3)
Вывести "Левый:", левый, " Правый:", правый
Ждать 500 мс
КОНЕЦ ПОСТОЯННО
КОНЕЦ
📋 Задача: Робот начинает движение только при нажатии ОБОИХ датчиков одновременно.
💻 Алгоритм:
ПРОГРАММА "Старт по двум датчикам"
ПЕРЕМЕННЫЕ:
пин_левый_датчик = 2
пин_правый_датчик = 3
пин_мотор_левый = 9
пин_мотор_правый = 10
НАЧАЛО
Инициализировать все пины
Вывести "Нажмите ОБА датчика для старта"
ПОСТОЯННО:
левый_нажат = Прочитать_датчик(пин_левый_датчик)
правый_нажат = Прочитать_датчик(пин_правый_датчик)
ЕСЛИ левый_нажат И правый_нажат ТО
Вывести "Старт! Оба датчика нажаты"
Двигаться_вперед()
ИНАЧЕ
Вывести "Ожидание... Нажмите оба датчика"
Остановиться()
КОНЕЦ ЕСЛИ
Ждать 100 мс
КОНЕЦ ПОСТОЯННО
КОНЕЦ
ФУНКЦИЯ Двигаться_вперед():
Установить_мощность_мотора(пин_мотор_левый, 200)
Установить_мощность_мотора(пин_мотор_правый, 200)
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Остановиться():
Установить_мощность_мотора(пин_мотор_левый, 0)
Установить_мощность_мотора(пин_мотор_правый, 0)
КОНЕЦ ФУНКЦИИ
🎯 Применение: Система безопасности, требующая подтверждения двумя операторами.
📋 Задача: Робот останавливается при нажатии ЛЮБОГО из датчиков.
💻 Алгоритм:
ПРОГРАММА "Аварийная остановка"
НАЧАЛО
Инициализировать все пины
Вывести "Робот движется. Нажмите любой датчик для остановки"
ПОСТОЯННО:
левый_нажат = Прочитать_датчик(пин_левый_датчик)
правый_нажат = Прочитать_датчик(пин_правый_датчик)
ЕСЛИ левый_нажат ИЛИ правый_нажат ТО
Вывести "СТОП! Датчик сработал"
Аварийная_остановка()
Ждать_отпускания_всех_датчиков()
ИНАЧЕ
Двигаться_вперед()
КОНЕЦ ЕСЛИ
Ждать 50 мс
КОНЕЦ ПОСТОЯННО
КОНЕЦ
ФУНКЦИЯ Аварийная_остановка():
Остановиться()
Включить_звуковой_сигнал()
Ждать 1000 мс
Выключить_звуковой_сигнал()
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Ждать_отпускания_всех_датчиков():
ПОКА Прочитать_датчик(пин_левый_датчик) ИЛИ Прочитать_датчик(пин_правый_датчик):
Вывести "Отпустите все датчики для продолжения"
Ждать 200 мс
КОНЕЦ ПОКА
Вывести "Датчики отпущены. Продолжаем движение"
КОНЕЦ ФУНКЦИИ
🎯 Применение: Системы аварийной остановки, кнопки экстренного торможения.
📋 Задача: Интеллектуальная навигация с разными реакциями на каждую комбинацию датчиков.
💻 Полный алгоритм умного робота:
ПРОГРАММА "Интеллектуальный навигатор"
ПЕРЕМЕННЫЕ:
счетчик_столкновений = 0
время_последнего_столкновения = 0
НАЧАЛО
Инициализировать все пины
Вывести "Умный робот готов к работе"
ПОСТОЯННО:
левый = Прочитать_датчик(пин_левый_датчик)
правый = Прочитать_датчик(пин_правый_датчик)
// Анализ всех возможных комбинаций
ЕСЛИ (НЕ левый) И (НЕ правый) ТО
// Свободный путь
Действие_свободный_путь()
ИНАЧЕ ЕСЛИ (НЕ левый) И правый ТО
// Препятствие справа
Действие_препятствие_справа()
ИНАЧЕ ЕСЛИ левый И (НЕ правый) ТО
// Препятствие слева
Действие_препятствие_слева()
ИНАЧЕ ЕСЛИ левый И правый ТО
// Препятствие прямо (тупик)
Действие_тупик()
КОНЕЦ ЕСЛИ
Ждать 100 мс
КОНЕЦ ПОСТОЯННО
КОНЕЦ
ФУНКЦИЯ Действие_свободный_путь():
Вывести "Путь свободен"
Установить_скорость(200) // Быстро
Двигаться_вперед()
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Действие_препятствие_справа():
Вывести "Препятствие справа - поворот налево"
Остановиться()
Ждать 300 мс
Повернуть_налево()
Ждать 600 мс
Зарегистрировать_столкновение()
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Действие_препятствие_слева():
Вывести "Препятствие слева - поворот направо"
Остановиться()
Ждать 300 мс
Повернуть_направо()
Ждать 600 мс
Зарегистрировать_столкновение()
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Действие_тупик():
Вывести "Тупик! Разворот на 180 градусов"
Остановиться()
Ждать 500 мс
Отъехать_назад()
Ждать 1000 мс
Развернуться_на_180()
Ждать 1500 мс
счетчик_столкновений = счетчик_столкновений + 2 // Двойной штраф за тупик
КОНЕЦ ФУНКЦИИ
ФУНКЦИЯ Зарегистрировать_столкновение():
счетчик_столкновений = счетчик_столкновений + 1
время_последнего_столкновения = Получить_время()
Вывести "Всего столкновений:", счетчик_столкновений
КОНЕЦ ФУНКЦИИ
🏗️ Задача: Создать робота, который может проходить лабиринт, используя два датчика нажатия.
🧠 Стратегии навигации:
Стратегия 1: “Правая рука”
Алгоритм "Всегда держись правой стены":
ЕСЛИ (НЕ левый) И (НЕ правый) ТО
// Пытаемся повернуть направо
Повернуть_направо()
Ждать 300 мс
ЕСЛИ датчики_свободны() ТО
Двигаться_вперед()
ИНАЧЕ
Повернуть_налево() // Возвращаемся
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
Стратегия 2: “Случайный выбор”
Алгоритм "Случайная навигация при тупике":
ЕСЛИ левый И правый ТО
случайное_направление = Генерировать_случайное(1, 3)
ВЫБОР случайное_направление:
СЛУЧАЙ 1: Повернуть_налево()
СЛУЧАЙ 2: Повернуть_направо()
СЛУЧАЙ 3: Развернуться_на_180()
КОНЕЦ ВЫБОРА
КОНЕЦ ЕСЛИ
Стратегия 3: “Память пути”
Алгоритм "Запоминание неудачных поворотов":
МАССИВ плохие_повороты[100]
индекс_плохих = 0
ФУНКЦИЯ Выбор_направления():
ЕСЛИ текущая_позиция НЕ В плохие_повороты ТО
направление = Стандартный_алгоритм()
ИНАЧЕ
направление = Альтернативный_алгоритм()
КОНЕЦ ЕСЛИ
ЕСЛИ привело_к_тупику ТО
плохие_повороты[индекс_плохих] = текущая_позиция
индекс_плохих = индекс_плохих + 1
КОНЕЦ ЕСЛИ
КОНЕЦ ФУНКЦИИ
1. Таблица истинности для трех переменных Составьте полную таблицу истинности для трех логических переменных A, B, C с операциями:
a) A И B И C:
| A | B | C | A И B И C |
|---|---|---|---|
| 0 | 0 | 0 | ___ |
| 0 | 0 | 1 | ___ |
| 0 | 1 | 0 | ___ |
| 0 | 1 | 1 | ___ |
| 1 | 0 | 0 | ___ |
| 1 | 0 | 1 | ___ |
| 1 | 1 | 0 | ___ |
| 1 | 1 | 1 | ___ |
b) A ИЛИ B ИЛИ C:
| A | B | C | A ИЛИ B ИЛИ C |
|---|---|---|---|
| 0 | 0 | 0 | ___ |
| 0 | 0 | 1 | ___ |
| … | … | … | … |
2. Алгоритм для робота с тремя датчиками Придумайте и запишите в виде псевдокода алгоритм для робота с тремя датчиками нажатия: левый, центральный, правый.
Требования к алгоритму:
🧮 Для математиков: Исследуйте законы булевой алгебры:
Приведите примеры применения этих законов в программировании роботов.
💻 Для программистов: Изучите дополнительные логические операции:
Придумайте применение этих операций для управления роботами.
🎮 Для творческих: Спроектируйте игрового робота с множественными датчиками:
Опишите алгоритм игры и логику проверки правильности ввода.
📚 Для изучения:
💻 Симуляторы:
🎥 Видеоматериалы:
🧮 Математические навыки:
💻 Программистские навыки:
🤖 Робототехнические навыки:
🎯 Ключевые выводы урока:
“Логические операции - это язык, на котором разговаривают умные устройства”
“Чем больше датчиков, тем умнее робот, но тем сложнее логика”
“Правильная логика превращает простые датчики в интеллектуальную систему”
🔮 Перспективы развития:
🎯 Покажите карточку, соответствующую вашему пониманию:
🟢 Зеленая карточка - “Понял все логические операции и могу применять их в программах”
🟡 Желтая карточка - “В основном понял, но есть вопросы по сложным комбинациям”
🔴 Красная карточка - “Нужна дополнительная помощь с логическими операциями”
💭 Поделитесь:
🔮 Следующий урок: “Датчики расстояния - глаза робота”
🎯 Готовимся изучать:
🧠 ВЫ ОВЛАДЕЛИ ЛОГИЧЕСКИМ МЫШЛЕНИЕМ РОБОТОВ!
Теперь ваши роботы могут принимать умные решения!