Перейти к основному содержимому

Ввод-вывод

Ввод и вывод в робототехнике

Коротко

Ввод - это получение данных программой. Вывод - это результат работы программы: сообщение, сигнал, движение мотора, изменение яркости или другое действие.

Зачем это нужно

Программа без ввода и вывода почти не связана с внешним миром. Она может считать значения внутри себя, но робот должен получать данные от датчиков и управлять устройствами. Кнопка сообщает, что человек нажал старт. Датчик расстояния сообщает, что впереди препятствие. Программа обрабатывает эти данные и выводит результат: включает моторы, зажигает светодиод, печатает число в монитор порта или показывает сообщение на дисплее.

Если перепутать ввод и вывод, отладка становится мучительной. Например, ученик ожидает, что print() изменит поведение мотора, хотя это только вывод текста. Или пытается управлять светодиодом через пин, который настроен как вход. Разделение ролей помогает быстро понять, что именно проверять.

Главная идея

Программа работает как переход между входными данными и выходным действием.

ввод -> обработка -> вывод

Сигналы ввода и вывода

В формальной блок-схеме ввод и вывод обозначают параллелограммом, а обработку данных — прямоугольником.

Блок-схема ввода, обработки и вывода

Ввод не обязан приходить от клавиатуры. В робототехнике ввод чаще дают датчики: кнопка, потенциометр, датчик линии, датчик расстояния, камера, энкодер. Вывод тоже не ограничивается экраном. Для робота выводом может быть движение, звук, свет или передача данных на другое устройство.

Что такое данные

Данные - это значения, с которыми работает программа: число, строка, состояние 0/1, массив измерений или пакет от датчика.

Ввод от пользователя и ввод от датчика

В обычной программе пользователь может ввести строку с клавиатуры:

name = input("Введите имя: ")
print(name)

Последовательность работы этой программы можно представить так:

Блок-схема ввода имени и вывода результата

В роботе похожую роль выполняет датчик или кнопка:

считать кнопку
считать расстояние
считать уровень освещенности

Разница в источнике данных. Клавиатура передает текст, датчик передает электрический сигнал или число. Но для алгоритма обе ситуации похожи: программа получила значение и должна решить, что с ним делать.

ИсточникЧто поступает в программуПример использования
Клавиатурастрокаввести скорость в учебной задаче
Кнопка0 или 1запуск или остановка робота
Датчик расстояниячислоостановиться перед препятствием
Датчик линиисостояние поверхностикорректировать направление
Энкодеримпульсы или счетчикизмерять пройденный путь

Вывод: не только текст

В Python вывод часто показывают через print():

distance = 25
print(distance)

Это удобно для обучения и отладки. Но у робота есть другие виды вывода:

  • включить светодиод;
  • изменить скорость мотора;
  • повернуть сервопривод;
  • подать звук;
  • отправить телеметрию на компьютер;
  • показать значение на дисплее.

В Arduino-мире текстовый вывод часто идет через последовательный порт, а физический вывод - через пины и исполнительные устройства. Например, digitalWrite() устанавливает цифровой выход в состояние HIGH или LOW.

Что такое отладочный вывод

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

Пример: расстояние превращается в действие

Показание датчика становится выходным действием

Пусть робот измеряет расстояние до препятствия. Алгоритм может быть таким:

получить расстояние от датчика
вывести расстояние в монитор порта
если расстояние маленькое, остановить моторы
если расстояние большое, ехать вперед

На блок-схеме видно, что после двух операций ввода-вывода появляется проверка условия и две возможные команды моторам.

Блок-схема преобразования расстояния в действие

Здесь есть два вывода. Первый вывод нужен человеку: число появляется в мониторе порта. Второй вывод нужен роботу: моторы получают команду.

Один и тот же ввод может использоваться несколькими способами. Показание датчика можно напечатать, сохранить в памяти, сравнить с порогом и превратить в команду мотору.

Ошибки ввода-вывода

У начинающих часто встречаются похожие проблемы.

ОшибкаКак проявляетсяЧто проверить
Читаем не тот входкнопка "не работает"номер пина и подключение
Вывод настроен как входсветодиод не горитрежим пина
Выводим текст вместо командыробот ничего не делаеткуда отправлен результат
Не выводим отладкунепонятно, что видит программадобавить временный вывод значения
Используем сырые данные без проверкиробот дергаетсядиапазон, шум, порог

Хорошая привычка: сначала вывести значение датчика для человека, потом использовать его для управления роботом. Так легче увидеть, проблема в датчике, программе или исполнительном устройстве.

Что запомнить про ввод-вывод

Ввод и вывод связывают программу с внешним миром.

ВопросОтвет
Откуда пришли данные?ввод
Что программа с ними сделала?обработка
Куда ушел результат?вывод
Можно ли вывести одно значение в разные места?да
Нужно ли проверять данные датчиков?да

Если робот не реагирует, полезно пройти цепочку: датчик дает значение, программа его видит, условие срабатывает, команда уходит на правильный выход.

Практика

Задание 1

Разделите элементы на ввод и вывод.

ЭлементВвод или вывод?
Кнопка
Светодиод
Датчик расстояния
Мотор
Монитор порта

Задание 2

Составьте алгоритм для робота:

прочитать кнопку
если кнопка нажата, включить светодиод
иначе выключить светодиод

Отметьте, где ввод, где обработка, где вывод.

Задание 3

Придумайте два вывода для одного показания датчика расстояния: один для человека, второй для робота.

Проверьте себя

  • Чем ввод отличается от вывода?
  • Почему print() полезен при отладке?
  • Может ли мотор быть устройством вывода?
  • Почему датчик расстояния не является устройством вывода?
  • Что проверить, если программа не видит кнопку?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Ввод - получение данных программой.
  • Вывод - передача результата наружу: человеку, устройству или другой программе.
  • Датчик - устройство, которое измеряет состояние внешнего мира.
  • Исполнительное устройство - устройство, которое выполняет команду программы.
  • Монитор порта - окно для обмена текстовыми данными с платой через последовательный порт.
  • Отладка - поиск и исправление ошибок в программе или подключении.
  • Порог - значение, с которым сравнивают измерение для выбора действия.

Связанные темы

Источники