Вы находитесь на странице: 1из 192

ББК 32.973.

2-018
УДК 004.3
В75

Воронин И., Воронина В.


В75 Программирование для детей. От основ к созданию роботов. — СПб.: Питер,
2018. — 192 с.: ил.
ISBN 978-5-4461-0555-7
Нашу жизнь невозможно представить без разнообразных цифровых устройств.
Ноутбуки, планшеты, мобильники и другие гаджеты доступны детям буквально
с рождения. «Разум» внедряется в привычные вещи — пылесосы, стиральные ма-
шины, холодильники, автомобили. Как не потеряться в этом мире? Как управлять
умными вещами? Вероника и Игорь Воронины просто и увлекательно рассказывают
о программировании, роботах, передаче зашифрованных посланий и многом дру-
гом. Хочешь научиться основам программирования и создать собственного робота,
который будет выполнять твои команды? Теперь всё в твоих руках. Изобретателем
может стать каждый! Книга выпущена при поддержке фонда «Сколково» и Меж-
дународной гимназии инновационного центра «Сколково».

6+ (Для детей старше 6 лет. В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
ББК 32.973.2-018
УДК 004.3

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без
письменного разрешения владельцев авторских прав.

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

ISBN 978-5-4461-0555-7 © ООО Издательство «Питер», 2018


© Серия «Вы и ваш ребенок», 2018
Предисловие
Мы живем в удивительное время. Еще совсем не- ся с дошкольного возраста и уже в начальных
давно фантасты писали о далеком будущем, где классах дети создают свои маленькие проекты
изображали необыкновенный мир, наполненный и участвуют в больших конкурсах. Работы детей
диковинной техникой и машинами с практиче- гимназии, участвующих в престижных всерос-
ски человеческим интеллектом. А сейчас обычные сийских и международных робототехнических
школьники имеют возможность создать такой состязаниях и выполняющих там сложные ин-
мир на занятиях по робототехнике. женерные задачи, привлекают внимание не
Робототехника является одной из самых пер- только крупных вузов нашей страны, но и пред-
спективных областей. Внедрение робототехники приятий, работающих в современных высокотех-
в школьный образовательный процесс даст де- нологичных отраслях. Техническое творчество
тям возможность познакомиться с современной развивает у детей интерес к технике, форми-
техникой, научиться моделировать, конструиро- рует мотивацию к учебе и выбору профессии.
вать и познавать окружающий мир будущего. Ро- И поэтому очень важно, чтобы каждый школь-
бототехника повышает интерес к компьютерным ник имел возможность раскрыть свои таланты
­наукам. Благодаря прикладным задачам учени- и подготовиться к дальнейшей жизни в быстро-
кам становятся понятны различные системы счис- развивающейся и конкурентоспособной среде
ления и булева алгебра, алгоритмы и принципы высоких технологий.
программирования. И даже если ребенок еще не
начал изучать в школе физику, то робототехни- Алексей Викторович Сёмочкин,
ка откроет ему мир электроники и схемотехники. заведующий кафедрой технологии и дизайна,
В Международной гимназии инновационно- учитель робототехники,
го центра «Сколково» робототехника изучает- Международная гимназия Сколково

International
Книга
gymnasium выпущена при поддержке
International
gymnasium

фонда «Сколково» и Международной гимназии


инновационного центра «Сколково»
Международная гимназия инновационного центра «Сколково» учреждена 26 января 2015 г.
Образовательная программа гимназии сочетает в себе программу ФГОС и программ
Международного бакалавриата. Архитектурно-планировочные и дизайн-решения нового
здания, расположенного в самом сердце иннограда Сколково, обеспечивают вариативность
форм обучения, психологический комфорт и свободу общения. Гимназия развивает
совместные образовательные программы с резидентами Сколково и Сколковским
институтом науки и технологий.
Эпизод первый.
Как роботы стали роботами

Э то мы с вами будем обсуждать в первом эпизоде. Вы узнаете про принцип хранимой


программы и обратную связь, вместе мы рассмотрим разнообразие контроллеров для
роботов и еще многое-многое другое…
Раньше в детских журналах часто устра-
ивали конкурсы рисунков о том, как дети
представляют себе будущее.
Они рисовали города, где по крышам вы-
соких домов протекают реки, всюду снуют ле-
тательные аппараты и, самое главное, всю
тяжелую и нудную работу за людей выпол-
няют роботы.
И вот будущее наступило...
Почти два десятка лет прошло с начала
2000 года, а роботы вокруг нас стали обы-
денным явлением. Никого не удивляет то, что
по квартире ползает робот-пылесос, что авто-
мобилем управляет система круиз-контроля,
а самолетом — автопилот, что пищу готовят
робот-хлебопечка и робот-мультиварка.
Но что вообще такое робот? Какие робо- здать робота самому? Давайте подумаем
ты бывают? Как ими управляют и как со- об этом вместе...

¤¤ Так что же такое робот?


¤¤ В какой момент наши добрые помощники: пылесос, автомобиль, кофевар-
ка — так поумнели, что превратились из обычных механических устройств
в наших интеллектуальных друзей?
4
¤¤ Чем отличается робот от неробота?
1.1. Робот или нет?
Вы, конечно, хотя бы раз играли игруш-
ками с дистанционным управлением.
Возьмем, к примеру, обычную радио­
управляемую машинку — это точно не робот:
она ездит вперед-назад и поворачивает, толь-
ко если повернуть в нужную сторону рычажок
на пульте.
Хотя команды и поступают машинке по
радиоканалу, но никаких логических опера-
ций она с ними не проводит. А вот, к при-
меру, квадрокоптер уже может считаться
полноценным роботом, хотя и управляется
с пульта или планшета по радиоканалу, как
и машинка.
Как вы думаете, почему?
Наверное, потому что на борту квадро-
коптера стоит чип-микропроцессор, и в нем,
по заранее разработанной и загруженной
в запоминающее устройство программе,
идет анализ полученных команд и ведут-
ся расчеты. Робот сам решает, как изменить
скорость вращения моторов, сам задает па-
раметры движения с учетом порывов ветра до другой, причем так хитро, что умудряет-
или препятствий. ся пройти по каждому кусочку пола не более
А пылесос? Когда он становится роботом? чем два-три раза. Как это он делает? Отку-
Обычный пылесос будет просто шуметь, стоя да робот-пылесос берет координаты, чтобы
на одном месте, если его никто не потянет запомнить свой путь? Ведь он не ­оснащен
за шланг. GPS-навигатором, он просто отсчитыва-
Но робот-пылесос не нуждается в пону- ет шаги и запоминает направление.
кании — он сам переползает от одной стены
5
Дело в том, что и в коптере, и в робо-
те-пылесосе есть датчики обратной свя-
зи — их называют энкодеры. В пылесосе они
установлены на колесах.
При вращении колеса центральный про-
цессор получает данные об угле поворота
и выстраивает траекторию движения, учи-
тывая препятствия в помещении. А дальше
робот ползет по рассчитанным координа-
там, словно мысленно закрашивая свой путь.
Дойдя до препятствия и развернувшись, он
прокладывает маршрут по еще «не закра-
шенному» пути. И так будет повторяться до
тех пор, пока робот не «закрасит» своим сле-
дом все свободное пространство либо пока
не кончится заряд аккумуляторов.
Чтобы он не завис, жалобно пописки-
вая в середине комнаты, не в силах доехать
до пункта заряда, грамотные разработчи-
ки заложили в него еще одну программу,
которая постоянно с некоторой периодич-
ностью (­например раз в минуту) опрашива-
ет контроллер заряда батареи. И как только
заряд снижается до критической величи-
ны, вы­полнение программы по уборке сразу
­завершается и контроллер отправляет пы-
лесос на базовую станцию — «подкрепить-
ся» энергией.

Робот действует по программе.


6
Программа — ​это понятный для робота код, написанный на
одном из специальных языков, например, на языке Си или
Питон. Чтобы научиться программировать, используют бо-
лее простые языки программирования, например КуМир,
с которым вы познакомитесь в этой книге, или Scratch.

Чтобы робот начал работать по програм- загруженная в него программа хранит-


ме, программу в него нужно загрузить. Спо- ся в постоянном запоминающем устрой-
собы загрузки бывают разные: например, при стве: ПЗУ. Как только подается питание,
помощи программатора1 или по радиокана- процессор сразу же отправляет весь про-
лу. Загрузка программы в устройство еще на- граммный код из ПЗУ в опе­ративную па-
зывается прошивкой2. Когда робот выключен, мять и запускает выполнение программы
в бесконечном цикле, пока не произойдет
выход по прерыванию.
Соответственно, роботом называется
такое устройство, которое мы можем за-
программировать на выполнение опреде-
ленных действий.
Например, обычный пылесос «Цик­
лон» — еще не робот, а пылесос-таб­
летка — уже точно робот, потому что
перемещается по программе, учитыва-
ет обратную связь от датчиков и вы-
полняет другие запрограммированные
действия.
И, например, старый автомобиль
1
Программатор — устройство, предназначенное для «Волга ГАЗ-21» — точно не робот. Зато
записи информации в постоянную память. роботом можно считать современный ав-
2
Эти программы могут меняться, поэтому вре- томобиль Google, на котором установ-
мя от времени возникает необходимость пере-
прошивать (обновлять) память компьютерных лен бортовой вычислительный комплекс
устройств. и ­система активного круиз-контроля.
7
Такой автомобиль может не только под- реагировать на неожиданное препятствие,
держивать постоянную скорость на трассе, например, на котенка, выскочившего на до-
но и сохранять правильное расстояние до рогу. Это, безусловно, робот.
впереди идущей машины и автоматически

1.2. Для чего роботу контроллер?


Так чем же отличаются роботы от про- Самый главный элемент контроллера, как
стых механических или даже радиоуправ- и любого процессора, — э​ то арифметико-логи-
ляемых игрушек? ческое устройство, выполняющее арифмети-
Подводя итог всему сказанному, мож- ческие и логические операции с двоичными
но сделать такой вывод: раз роботы ум- числами (о таких числах мы поговорим чуть
ные, значит, способны думать. То есть даже позже, когда станем рассматривать коман-
в игрушечных роботах должно быть устрой- ды, которые понимают роботы).
ство, которое может думать и каким-то На всех планшетах, телефонах и других
образом общаться с нами. гаджетах встроены контроллеры. Разные из-
Такое устройство, которое используется готовители разрабатывают разные по функ-
для управления, в электронике и вычисли- циональности и стоимости контрол­леры. Чем
тельной технике получило название «конт­ же они отличаются?
роллер». Это хитрая микросхема, внутри Например, некоторые, как Arduino Nano,
которой находится самый настоящий ком- очень невелики по размеру.
пьютер. В нем есть все, что необходимо для
самостоятельной работы:

¤¤ процессор;
¤¤ оперативная и постоянная память;
¤¤ порты ввода/вывода;
¤¤ таймеры
¤¤ и многое другое.
8
Другие имеют бóльшую мощность и мо-
гут выполнять значительно больше операций.
Третьи имеют большую рабочую часто-
ту (скорость выполнения операций), но за
это приходится расплачиваться количеством
источников питания такого контроллера.
А вот контроллер SmartCar на базе про-
цессора XBee вообще позволяет организо-
вать управление не одним роботом, а целой
группой, в которой каждый робот общает-
ся со своим соседом. Как мы уже выяснили,
самая главная часть любого контроллера —​
микропроцессор. Микропроцессоры могут
отличаться друг от друга по виду корпу-
са, количеству ножек и функциональных
возможностей.
Один и тот же процессор может быть за-
ключен в корпус, который нужно при­паивать
к плате (SMD-корпус), а может просто встав-
ляться в специальный разъем на плате
(DIP-корпус). Процессор способен выполнять
различные задачи — н​ апример, управлять ос-
вещением у вас в комнате: по хлопку в ладо-
ши включать свет, а по свистку выключать;
или сам, в автоматическом режиме насыпать
корм и наполнять поилку вашему четверо-
ногому другу.

9
Подведем итог

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

1.1. Этого робота зовут:


Этот робот умеет:
Робот понимает команды:

1.2. Закончите предложение: «Робот действует ».
1.3. Верно ли, что радиоуправляемые игрушки — это настоящие роботы?
 ДА  НЕТ
1.4. М
 ожно ли считать роботом радиоуправляемый квадрокоптер с защитой
от падения, учитывающий наличие ветра и препятствий.
 ДА  НЕТ
1.5. Д
 атчики, устанавливаемые на колеса для сбора информации о движении
робота, называются
1.6. Какое устройство управляет всеми действиями робота?

10
1.7. Отметьте устройства, которые могут считаться роботами:

Рассмотрите свой телефон, запишите его лефона. Рассчитайте ориентировочную сто-


модель и определите, на базе какого ми- имость одного мегагерца рабочей частоты,
кропроцессора он разработан, используя по- посчитав отношение цены к рабочей часто-
исковые системы интернета. Выясните, на те процессора (разделите цену на частоту
базе каких микропроцессоров разработа- процессора).
ны телефоны ваших родителей и ближай- Проанализируйте полученную информа-
ших друзей. цию: сделайте вывод, насколько отличается
Найдите в интернете, сколько стоит на цена у телефонов с одинаковыми рабочими
момент исследования каждая модель те- характеристиками.

11
Эпизод второй.
Они такие разные

В этом эпизоде мы разберемся в разнообразии современных роботов, попробуем систе-


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

Итак, в какой же момент обычное управ- ¤¤ Стационарные роботы на фундаменте —​


ляемое устройство становится роботом? Мы такие обычно используются в промыш-
с вами решили, что роботом игрушка стано- ленности, на линиях сборки и сварки
вится, когда она способна запомнить и по- кузовных деталей автомобилей.
вторить набор предлагаемых ей действий.
Но что мы себе представляем, ­когда слы-
¤¤ Мобильные роботы — ​они могут пере-
мещаться, как робот-пылесос, всюду
шим слово «робот»? Как могут выглядеть и выполнять работу везде, куда суме-
устройства, которые мы отнесем к роботам? ют добраться.
Как в зависимости от внешнего вида будут
В свою очередь, мобильных роботов мож-
­отличаться их функциональные возможности? но классифицировать по способу передви-
Пожалуй, для начала имеет смысл раз- жения: существуют колесные, гусеничные,
делить всех роботов на две большие группы. шагающие, плавающие и летающие роботы.

2.1. Промышленные роботы


Это, как правило, мощные роботы-манипу- куда достанет рука. На конвейере их ставят
ляторы, установленные на неподвижный в ряд сразу по несколько штук, и каждый вы-
фундамент и способные выполнять полняет несколько операций, таких как свар-
действия в ограниченном радиусе — ка, резка, диагностика.
12
Для разработки промышленных ро-
ботов нужны знания в области механики
(в ­в узах такие дисциплины называются
«Сопротивление материалов» и «Теория ма-
шин и механизмов»), а еще в области си-
ловой электрики, поскольку в движение их
приводит пневматический или гидравли-
ческий привод.

2.2. Медицинские роботы


Уже с 2001 года медицинские роботы
используются в настоящих хирургических
операциях.
Такие роботы действуют при помощи ма-
нипуляторов через систему дистанционного
слежения и позволяют не касаться т­ каней па-
циента лишний раз во время операции, что-
бы не травмировать больной орган.
Также к разряду медицинских роботов
можно отнести и экзоскелеты, которые помо-
гают ходить людям с болезнями опорно-дви-
гательного аппарата.
Роботизированные протезы рук позво-
ляют брать предметы и совершать многие
другие действия. Уже сейчас такие элек-
тронные мышцы управляются с помощью
датчиков, которые получают сигналы от
мышц человеческого тела. Наука, занима-
ющаяся ­подобными проблемами, называ-
ется бионика.
13
2.3. Подводные роботы
Используются в морском деле для про-
ведения аварийно-спасательных работ или
различных исследований на дне моря.
С подобными роботами есть одна про-
блема: ими нельзя управлять дистанционно,
по радиоканалу. Как известно, радиоволны
очень плохо распространяются в водной сре-
де, поэтому таких автономных роботов на-
до очень тщательно программировать, чтоб
они смогли выполнить поставленную задачу
и вернуться на базу самостоятельно.

2.4. Сельскохозяйственные роботы


Такие роботы могут быть особенно полез-
ны в нашей стране. Поскольку в России мно-
го земли и мало людей на один квад­ратный
километр, то выращивать вкусные и полез-
ные овощи на больших площадях куда про-
ще с автоматическими помощниками.
Преимущество робота перед человеком
в том, что он никогда не устает и способен
работать хоть круглые сутки — пока не кон-
чится заряд в батареях. Сельскохозяйствен-
ные роботы могут с большой аккуратностью
распылять и удобрять почву прямо под
корнями растений, экономя при этом и не заставляя людей дышать вредными
ресурсы, оберегая сами растения испарениями.
14
2.5. Военные роботы
Используются в военных действиях. сейчас это самое финансируемое направле-
Мы не будем уделять таким роботам мно- ние робототехники.
го внимания, хотя, к большому сожалению,

2.6. Строительные роботы


Для строительства жилых домов в ми- ползался, когда на первый слой наносит-
ре уже вовсю используется метод 3D-печа- ся второй. Консистенция такого материала
ти. Однако если изготовить на 3D-принтере напоминает зубную пасту. После его высы-
пластмассовую поделку не составит труда, хания дом должен получиться устойчивым
то для строительства больших объектов, та- к внешним воздействиям — ветру, солнцу,
ких как здание, необходимо решить массу дождю, снегу, а еще хорошо защищать от
технических, технологических и инженер- жары и холода.
ных проблем. Сейчас такие материалы придумываются
Особенно важно создать подходящий и защищаются патентами. Так что скоро нас,
строительный материал: он должен быть возможно, ждет бум строительства домов по
пластичным, чтобы легко формировался при технологии 3D-прототипирования.
монтаже, и быстросохнущим, чтобы не рас-

2.7. Космические роботы


Первым космическим роботом можно счи-
тать «Луноход-1», отправленный на Луну еще
во времена СССР, в далеком 1970 году.
Сейчас широко известна работа на Марсе
робота Curiosity, что означает «любознатель-
ность». При отправке и высадке его на
Марс пришлось решать очень ­много
технических и инженерных проблем,
15
с которыми ученые справились блестяще.
Была разработана специальная платформа
на реактивных двигателях, которая, подле-
тев к поверхности Марса, как бы «зависла»
над ней, и марсоход очень аккуратно сам
­спустился на лебедке.
Также на комету Чурюмова-Герасимен-
ко высадился межпланетный агрегат — ​то-
же полноценный робот, который проводит
исследования поверхности в точки высад-
ки, берет пробы грунта и анализирует их на
месте, передавая данные на Землю в циф-
ровом виде.

2.8. Сервисные роботы


Сервисные роботы помогают нам в быту В школе роботы телеприсутствия могут
и в разных повседневных делах. помочь ребятам, которые болеют и не ходят
Как раз к сервисным роботам мож- на занятия, пообщаться с друзьями, вирту-
но отнести робот-пылесос, который чистит ально побродить на переменке по коридо-
пол в доме в отсутствие хозяев. Сервисные рам, получить задания на дом.
­роботы телеприсутствия1 работают на вы- Существуют и роботы-музыканты. Они не
ставках, фестивалях или в других местах выступают под фонограмму, как это делают
большого скопления людей — они помога- многие поп-исполнители, а действительно
ют сориен­тироваться, подсказывают, куда извлекают звуки из инструментов — стучат
сейчас стоит сходить, и отвечают на вопро- по барабанам, дергают струны гитар и на-
сы посетителей. жимают клавиши. Такое шоу роботов ездит
по миру, бывает и в России и всегда пользу-
ется огромной популярностью.
Робот телеприсутствия — это управ-
1

ляемая платформа с камерой и микро-


фоном (примеч. ред.).
16
Еще один проект, который можно отне-
сти к сервисным роботам, — это обучающий-
ся робот-колобок. Он полезен не только как
забавная игрушка, но и как средство обуче-
ния, которое помогает ребенку знакомиться
с окружающей средой. Задавая вопросы, ро-
бот запоминает ответы и может с каждым ра-
зом вести беседы на все более сложные темы.
Пожалуй, самый известный из шагающих
сервисных роботов — японский Асимо. Такие
роботы уже используются в некоторых кафе
в качестве официантов.
Еще один известный робот создан компа-
нией Boston Dynamics — это шагающий мул.
Компания продала свою разработку Google
за несколько миллиардов долларов. И те-
перь шагающий четырехногий друг помогает
людям переносить тяжести по пересеченной
местности. Такой носильщик не устает даже
после перехода в 70 км, достаточно только
подзарядить батарейки.
К сервисным роботам можно отнести
и систему круиз-контроля в автомобилях.
Причем, если раньше такие системы толь-
ко сохраняли заданную скорость при дви-
жении по трассе, то сейчас они способны
определять расстояние до идущего впереди
средств. Представьте: колонну автомобилей
автомобиля и поддерживать скорость, зада-
ведет человек, сидящий в первой машине,
ваемую лидером в колонне. а остальные водители могут занимать-
И следующим этапом развития такой ся своими делами: пить кофе, прове-
технологии закономерно становится воз- рять почту, слушать музыку, читать
можность управлять группой транспортных книгу или вообще отдыхать.
17
Такое решение было разработано ком­ Конечно, для разработки таких систем
панией Volvo, испытано на ее треках и сей- нужны знания по механике, электрике, гид­
час у же запускается в коммерческ ую равлике, электронике, программированию и
эксплуатацию. Называется эта система протоколам связи. Один человек не может
SARTRE — по фамилии французского фило- знать все это досконально, поэтому над реше-
софа Сартра. нием задач такой сложности трудятся боль-
шие коллективы.

Подведем итог
2.1. Д ля работы на конвейере автомо- но использовать роботов (выберите
бильного предприятия оптималь- один ответ):

 шагающих;  мобильных;
 стационарных;  телеприсутствия.
18
2.2. Д ля работы под водой оптимально Объясните свой выбор.
­использовать роботов (выберите один 2.3. Первым космическим роботом можно
ответ): считать (выберите один ответ):
 управляемых по программе  Луноход-1;
(автономных);  Венера-1;
 управляемых дистанционно
 Юпитер-1;
по Wi-Fi;
 управляемых дистанционно  Пионер-10;
через Bluetooth;  Марс-1.
 управляемых дистанционно
с помощью USB.

Эпизод третий. Смартфон


в руки, и поехали! Роботы
и принцип хранимой
программы

А вы знаете, как превратить ваш любимый гаджет в устройство управления роботом?


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

Давайте обсудим, чем отличается ма- Внутри такая платформа устроена просто:
шинка-робот от обычной радиоуправляемой четыре колеса с моторами управляются кон-
игрушки. Возьмем любую роботизирован- троллером, под платой с контроллером
ную платформу, собранную из специального расположен источник питания.
робоконструктора.
19
Первый способ управления подобной
платформой — вручную. Для этого на лю-
бой гаджет с операционной системой Android
(смартфон, планшет, телефон) нужно устано-
вить специальную программу 4joy1.
Устройство управления свяжется с платфор-
мой по протоколу Bluetooth. В этом режиме ею
можно управлять, как обычной радиоуправля-
емой машинкой — с помощью стрелок пульта.
Нажимаем стрелку вперед — машинка
едет вперед, назад — машинка едет назад.
Поэкспериментировав с выполнением ба-
зовых команд, поворотами и остановками,
можно задуматься, чем же это устройство
отличается от обычной радиоуправляемой
игрушки? Кажется, ничего принципиально
нового... А вот и нет!
Мы знаем, чем робот отличается от не-
робота: робот работает по программе, кото-
рую может хранить в своей памяти. Так что
попробуем научить и нашу умную машинку
Запустите
запоминать те команды, которые мы пода-
программу
ем с помощью смартфона.
Чтобы сохранить команды в памяти, на-
жмите на кнопку запоминания програм-
мы. Затем, управляя стрелками, добейтесь,
чтобы платформа проехала по хорошо по-
нятной траектории, например, по квадрату.
Повторное нажатие кнопки А остановит за-
пись команд.
1
Программу управления 4joy — Remote Joystick можно
бесплатно загрузить из Google Play Market.
20
Теперь, если нажать кнопку Старт, роботи-
зированная платформа будет повторять вве-
денные с пульта управления команды столько
раз, сколько вы нажмете кнопку Старт.
Таким образом, мы на практике прове-
рили самый главный принцип робототехни-
ки — принцип хранимой программы, основное
отличие робота от игрушки.
И хотя, на первый взгляд, наши действия
очень мало отличались от работы с обычной
радиоуправляемой игрушкой, именно воз-
Резюме: даже с помощью обычного
можность запомнить и воспроизвести в даль-
смартфона мы можем научиться
нейшем набор произвольно заданных команд
управлять роботом.
и превращают скромную игрушечную машин-
ку в настоящего робота.

Подведем итог

Если у вас есть любой робот, проведите ¤¤ Установите связь между устрой-
ряд экспериментов, подтверждающих прин- ством управления и роботизированной
цип хранимой программы. платформой.
Например, для умной машинки типа ро-
ботоплатформы SmartCar, вам понадобится ¤¤ Проведя несколько эксперименталь-
телефон с операционной системой Android, ных заездов, сохраните в памяти кон-
на котором установлена программа 4joy — троллера программу прохождения
Remote Joystick. траектории в виде квадрата.

21
¤¤ Подумайте, почему длина пути при ¤¤ Попробуйте добиться того, чтобы плат-
непосредственных нажатиях на стрел- форма запомнила алгоритм проезда
ку управления и при выполнении про- по несложному лабиринту. Запишите
граммы различаются. этот алгоритм и нарисуйте схему пути.

Если же у вас есть игрушечный робот, ред, два шага назад и разворот. Проверьте,
проверьте, может ли он запоминать подан- запомнил ли робот программу и сможет ли
ные ему команды. Например, такому робо- повторить ее нужное вам количество раз.
ту команды подаются нажатиями стрелок Если ваша игрушка сможет запомнить те
на рюкзачке. команды, которые вы ей передали, и повто-
Задайте своей игрушке несложную про- рить их, вам повезло быть хозяином настоя-
грамму, например: сделать два шага впе- щего, хоть и не очень сложного робота.

22
Эпизод четвертый.
Правила
устанавливаете вы!
Поговорим про алгоритмы

В этом эпизоде вы узнаете, что общего между былинами про богатырей, приготовле-
нием оладушек, сказочным «Сезам, откройся» и робототехникой. Понятия, которые мы
здесь рассмотрим, являются базовыми для кибернетики, информатики, математики и, ко-
нечно, для робототехники. А кроме сказок, мы поговорим еще о программировании на низ-
ком и высоком уровнях.

Как же добиться, чтобы роботы выполня- должны быть представлены команды, чтобы
ли именно те команды, которые мы счита- их поняли роботы?
ем нужными? Как вы думаете, в какой форме

4.1. А
 лгоритм — он понятен
и вроде бы прост
Очень вероятно, что понятия, о которых автоматическими устройствами, ни о со-
мы расскажем в этом эпизоде, знакомы вам ставлении программ для роботов. Все эти
еще с начальной школы, но... понятия — базовые для кибернетики и робо-
Не имея представления о вещах, описан- тотехники. Так что повторить их лишний раз
ных ниже, нельзя говорить ни об управлении не помешает.

23
Итак, когда мы обсуждали, чем же робот мы составляем набор команд, понятных не
отличается от простого механического устрой- только роботу, но и человеку, можно сказать,
ства, мы пришли к выводу, что робот может что мы составляем алгоритм. Таким образом,
действовать по программе. программу образует алгоритм, записанный
А что же такое программа? Фактически на языке, который понимает робот.
мы задаем роботу набор команд, которые он И раз уж мы говорим о серьезных нау-
будет выполнять в точности, не внося ника- ках — кибернетике и робототехнике, то бу-
ких изменений, не придумывая никаких но- дем использовать определения — серьезные
вых шагов. объяснения, разъясняющие смысл объекта
Именно такой набор команд на языке, по- или процесса. Определение алгоритма мож-
нятном роботу, и будет программой. А если но сформулировать так.

Алгоритм - это описание последователь-


ности действий, строгое исполнение ко-
торых приводит к решению поставленной
задачи за конечное число шагов.

4.2. Исполнитель алгоритма


Раз мы говорим об исполнении алгорит- Вот такой исполнитель и называется
мов, у нас обязательно должен быть и объ- формальным исполнителем. Он не раз­
ект, который их исполняет. Этот объект не мышляет о правильности алгоритма, а дей-
должен обдумывать содержание алгоритма, ствует формально: что ему указали, то
не должен капризничать и выбирать, что он и делает.
будет делать, а что не будет, не должен спра- Что важно для исполнителя алгоритма?
шивать, что он получит за работу.
Ну просто робот какой-то!

24
Исполнитель алгоритма - это некоторая
техническая, биологическая или биотехно-
логическая система, способная выполнить
действия, предписываемые алгоритмом.
Это Среда, в которой действует исполни- для нашего исполнителя (мы можем сколь
тель: все-таки роботы для работы под во- угодно ­долго кричать машинке-роботу, что-
дой и в жерле вулкана должны обладать бы она ехала вперед, но она не сдвинется
раз­ными качествами. И система команд с ­места, пока не получит команду на понят-
исполнителя — тот самый язык, понятный ном ей языке).

Система команд исполнителя - это


­набор команд, которые может выполнить
­конкретный исполнитель.

4.3. С
 проси у логики совет
при составлении блок-схемы
Конечно, мы можем расписать все коман- Алгоритм изображают в виде так назы-
ды на обычном русском языке. Но вдруг вы ваемой блок-схемы с помощью специальных
придумаете очень удачную команду, а кто-то значков — блоков, каждый из которых озна-
ее просто не поймет, или при записи алго- чает то или иное действие.
ритма вы просто сделаете орфографическую Вдобавок алгоритмы могут иметь самую
ошибку. Гораздо удобнее может оказаться разную структуру.
просто нарисовать алгоритм! Уж тут оши-
биться куда сложнее!
25
Изображение Шаг алгоритма Блок-схема — графиче-
ское представление алгорит-
Начало или конец ма в виде набора геометриче-
ских ­фигур, в которых записаны
шаги алгоритма.
Ввод или вывод

Выбор из двух
вариантов

Выполнение
действия

4.4. У
 пор присев — раз, упор лежа —
два... Линейный алгоритм
Например, для робота-пешехода мы Начало
с ­помощью блок-схем можем составить ал-
горитм, показанный на рисунке ниже. Как
видим, все команды здесь выстроились как Подойти
к переходу
по линейке. И структура такого алгоритма
­называется линейной.
Дождаться
зеленого света

Линейный алгоритм — описание


Перейти
­действий, которые выполняются улицу
­однократно в заданном порядке.

Конец
26
4.5. Если полить тротуары, то вырастают
зонты... Условный алгоритм
Но не так уж часто мы ходим по ли- де, раз­ветвляется на несколько: «Направо
нейке. Как правило, перед нами на ка- пойдешь — богатым ­будешь, налево пой-
ждому ­ш агу возникает выбор: подошли дешь — славу найдешь!» По какой идти —
к перекрестку, а там горит красный или по правой или левой?
желтый свет — что делать? Дверь закрыта Вот и для нашего исполнителя мы долж-
— что делать? Или дорога перед нами, как ны описать, в каком случае выбрать один
перед бога­тырем в древнерусской леген- путь, а в каком — другой.

Начало

ДА Направо НЕТ
пойдешь

Богатым будешь Славу найдешь

Конец

Такая алгоритмическая структура назы-


вается условным, или разветвляющимся,
алгоритмом.

Условный алгоритм — алгоритм,


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

27
4.6. П
 овторяюсь, повторяюсь,
все по кругу я хожу…
Циклический алгоритм
Если же в алгоритме можно выделить Например, представьте, что вы остались
последовательность действий, которая вы- дома одни и решили пообедать. Составим
полняется несколько раз, то такой алгоритм алгоритм приготовления вкусных оладушек:
принято называть циклическим.

Подготовить тесто

Разогреть сковороду

Смазать маслом сковороду

Зачерпнуть ложкой тесто

Вылить на сковороду

Немного подождать

Перевернуть оладушек

Снять оладушек со сковороды


НЕТ ДА
Конец Еще тесто есть?

28
Подготовив тесто и разогрев сковороду, мы зачер-
Начало
пываем тесто ложкой, выливаем его на раскаленную
сковороду, затем, немного подождав, переворачиваем
и повторяем тот же самый набор действий, пока ­тесто Разогреть сковороду
не закончится.
Мы с вами вывели циклический алгоритм из вет- Добавить масло
вления (условного алгоритма). То, что у нас получи-
лось, называется циклом с условием. Аккуратно расколоть яйцо
Если же нам захочется не оладушек, а чего-то дру-
гого, мы можем составить, например, алгоритм приго- Вылить яйцо на сковороду
товления яичницы. Как видите, это линейный алгоритм
приготовления яичницы из одного яйца. Но разве
так наешься? Давайте-ка увеличим количество яиц Немного подождать
и, ­соответственно, изменим алгоритм.
Алгоритм приобретает следующий вид: Снять сковороду с огня

Конец
Начало
Наш линейный алгоритм превратился
Разогреть сковороду в циклический, где количество повторений опре-
деляется количеством яиц, которое мы хотим
Добавить масло съесть на обед. Как видите, мы легко можем
превратить яичницу из четырех яиц в ­яичницу
из десяти яиц — достаточно только
Аккуратно расколоть яйцо указать: повторить выбранные дей-
Повторить
4 раза ствия десять раз.
Вылить яйцо на сковороду Такой цикл получил название
цикла с параметром, где параметр —
Немного подождать количество повторений. И теперь мы можем
сформулировать, какой алгоритм будет назы-
ваться циклическим — алгоритм, в кото-
Снять сковороду с огня
ром присутствует повторение действий.

Конец 29
4.7. Программирование на низком
и высоком уровнях

Итак, мы рассмотрели самые главные роботу выполнять заданные команды дви-


алгоритмы, на основе которых строится жения, какие моторы и в какую сторону бу-
программное управление любыми техни- дут вращаться.
ческими устройствами. Раньше мы с ва- Например, программа может иметь та-
ми решили, что механическое устройство кой вид:
становится роботом, когда его можно за-
программировать. Значит, из рассмотрен- void Vench::BPressLeft()
ных алгоритмов мы должны составлять {
программы на языке, понятном нашему SbrosDatKas();
роботу-исполнителю. if(fl_play)return;
Программы отличаются друг от друга по if(fl_rec){
определенным признакам: например, могут b_tim_comm=GetTime();
быть разного уровня. }
Мы уже говорили, что «мозг» робота — if (shiftPress==0)
это контроллер, в котором установлен чип SendCommLeft1();
(его еще называют большой интегральной else SendCommExtrLeft1();
PressLf=1;
схемой), прошитый программным кодом.
}
­Робот будет действовать согласно алгорит-
мам, зашифрованным этим кодом, — имен- А набор команд, которые мы отдадим ро-
но так, как запланировали разработчики боту в общем виде, — например, проехать че-
робота. То есть та программа, которая «за- тыре шага вперед, повернуть налево и подать
шита» в контроллере — это программа низ- звуковой и световой сигнал — это будет уже
кого уровня. Такая программа указывает, как программа высокого уровня.

30
Программа такого вида относится к про- Если для программ низкого уровня код
граммам высокого уровня: пишется и отлаживается непосредственно
на языке исполнения, то для программ вы-
сокого уровня необходим еще интерфейс —
способ связи человека с машиной. Это могут
быть разные кнопочки, поля для ввода па-
раметров, чекбоксы.

То есть когда мы программируем робо- быстрой стирки, то можно сказать, что через
та с помощью пульта управления — мы за- интерфейс программы стиральной машины
даем ему программу высокого уровня. И эта мы задали скрипт быстрой стирки. А про-
программа высокого уровня может ожидать грамма низкого уровня в контроллере на-
на входе набор команд (другими словами, шей стиральной машины, согласно нашему
скрипт действий), которые робот должен выбору, стала использовать ту часть своего
выполнить. кода, которая наливает меньше воды, чем
Например, если мы положили рубашку в обычном режиме, отжимает чуть быстрее,
в стиральную машину и выбрали программу в общем, экономит ресурсы.

31
В стиральных машинах, как вы знаете, бывают разные
режимы работы: «быстрый», «бережный», «льняные тка-
ни», «обычный». Использование каждого режима запуска-
ет отдельный скрипт для контроллера.
Как же так происходит, робот понимает слова человека
и выполняет их с высокой точностью? Подобный случай
впервые был описан в сказке «Али-Баба и сорок разбой-
ников». Али-Баба сказал: «Сезам откройся», и дверь в пе-
щеру отворилась. Пожалуй, это и был первый робот.

Подведем итог
4.1. Соедините линиями пары облаков, содержащие термин и его расшифровку.

Алгоритм, составлен- Описание последователь-


Алгоритм
ный из команд, которые ности действий, строгое испол-
входят в систему команд нение которых приводит к решению
Набор команд, исполнителя поставленной задачи
которые может за конечное число шагов
выполнить конкретный Программа
исполнитель
Система команд Абстрактная или
исполнителя реальная система, спо-
собная выполнить дей-
Исполнитель Среда
ствия, предписываемые
исполнителя
Обстановка, в которой алгоритмом
функционирует исполнитель
32
4.2. Исполнитель «Умная машинка» развозит грузы по шоссе, на котором места раз-
грузки помечены столбиками с числами. Склад с грузом находится в месте, обо-
значенном столбиком 0 (исходная точка отправления «Умной машинки»).

Исполнитель понимает команды:


1 — вперед 3 («Умная машинка» перемещается вперед на три отметки);
2 — назад 2 («Умная машинка» перемещается назад на две отметки).
«Умная машинка» может перемещаться только между складами, помеченными стол-
биками от 0 до 5.
Составьте для исполнителя «Умная машинка» программы, с помощью которых груз
­будет доставлен поочередно на склады, обозначенные столбиками 1, 2, 3, 4, 5.
а) Например: программа, переводящая исполнителя из точки 0 в точку 1:

33
b) Программа, переводящая исполнителя из точки 0 в точку 2:

4.3. Система команд исполнителя «Умная машинка» расширилась, и команды испол-


нителя теперь имеют вид: Вперед N и Назад M, где N и M — некоторые параметры.
a) Находясь на складе, обозначенном столбиком 5, исполнитель «Умная машинка»
приступил к выполнению следующей программы:
Вперед 5 Вперед 5 Вперед 5 Назад 3 Вперед 8 Назад 7 Вперед 2
Запишите арифметическое выражение для перемещений исполнителя.

Запишите номер склада, на котором окажется исполнитель «Умная машинка» после


­выполнения этой программы.

b) И
 сполнитель «Умная машинка» оказался на складе, обозначенном числом 12,
выполнив программу:
Вперед 5 Вперед 3 Вперед 2 Назад 4 Вперед 3 Назад 1 Вперед 2
Запишите уравнение для определения номера столбика, отмечающего исходную пози-
цию исполнителя перед выполнением этой программы.

34
Эпизод пятый.
Шаг за шагом по программе

И так, краткое резюме по предыдущим эпизодам: устройство становится роботом


тогда, когда оно может запомнить цепочку команд и повторить ее в нужный мо-
мент. Но как вы думаете, как должны быть представлены команды, чтобы их смог по-
нять и повторить робот? Ведь сколько ни кричи игрушке: «Вперед!» она не двинется с ме-
ста, если изначально не запрограммирована понимать определенные голосовые команды.

Мы с вами уже выяснили что даже про-


стые машинки, на первый взгляд мало от-
личающиеся от радиоуправляемых моделей,
являются роботизированными платформами,
если находящийся внутри них контроллер
может запомнить и повторить набор команд,
посланных с устройства управления.
Однако в любом роботе, кроме контрол-
лера, должен быть еще механизм обратной
связи. Это значит, что алгоритмы работы
должны меняться в зависимости от внеш-
них условий: например, если впереди по-
явилось препятствие, или если изменилось
освещение. Для того чтобы робот реагировал
на внешние условия, необходимы ­датчики,
которые будут отправлять контроллеру ин- Датчик на нижней стороне платформы
формацию о том, что происходит вокруг.
Подробно о датчиках будем говорить поз-
же, а сейчас взглянем на «животик» плат-
формы SmartCar:
35
На нижней стороне платформы располо- Пластины с командами для «Умной ма-
жен датчик света, позволяющий считывать шинки» выглядят вот так:
информацию, которую контроллер получает,
когда машинка проезжает по плоской поверх-
ности, например, по листу бумаги, картону,
пластине. Таким образом, роботом можно
управлять не только с пульта, но и просто
разложив на полу плоские пластины, на ко-
торые нанесены ­команды. Датчик прочита-
ет их, расшифрует и выполнит поставленную
задачу.
Пластины могут цепляться друг за друга,
как кусочки пазла, формируя цепочку ­команд
(алгоритм), получаемую контроллером.
Давайте разберем, как же робот ­будет Пунктир — это границы датчика, снизу ле-
воспринимать информацию, которую мы жит команда-пазл. Через одну линзу источ-
предлагаем ему в подобном виде. ­Если рас- ник-диод светит инфракрасным светом на
смотреть внимательно корпус датчика на поверхность. Луч отражается от поверхно-
­рисунке в начале эпизода, то мы увидим две сти и попадает на вторую линзу, которая
линзы. Схематично этот датчик можно изо- фокусирует луч на приемник — датчик све-
бразить так: та. Если луч попадает на яркую отражаю-

Источник
ИК-диод

Приемник
Инфракрасный луч света
Датчик света

Линзы

Отражающая
36 поверхность
пазла
щую поверхность, то он хорошо отражается, Только отверстия нужно вырезать длинные,
а если попадает на прорезь, то рассеивается чтобы датчик точно не ошибся. Если отвер-
и не отражается. Таким образом при помощи стие есть — сигнал идет, отверстия нет — не
луча можно формировать команды управле- идет. И закодировать команды, получается,
ния. Только вот в каком виде их нужно за- совсем несложно: отверстие есть — едини-
дать, чтобы контроллер все понял? ца, нет — ноль. Контроллер понимает только
Давайте рассуждать логически: какими цифры 1 и 0, то есть в нашем случае ариф-
командами управляется платформа SmartCar? метико-логическое устройство контроллера
Команды вперед, назад, вправо, влево мож- работает с арифметикой, которая называ-
но назвать основными (конечно, есть еще ко- ется двоичной.
манды, изменяющие длину пути, и другие, Давайте внимательно рассмотрим коман-
но базовых всего четыре). Изобразить такие ды-пазлы, которые очень удобно сцеплять
команды просто: обозначим их стрелками, друг с другом — держатся прочно!
и все дела! А стрелки можно нарисовать на Пластинки с командами представляют
контрастном фоне или вообще вырезать на собой кусочки яркой, блестящей пластмассы
блестящей поверхности: куда стрелка направ-
лена, путь робот и едет.
Но вот засада! Мы-то с вами прекрасно Для
человека
понимаем, что куда стрелка показывает, ­туда
и надо ехать, а вот как это объяснить ­роботу?
Для
Что же понимает машина? машины
В предыдущем эпизоде мы говорили,
что команды, записанные на программном Вперед Назад
языке, переводятся в машинные коды, по- Конец
нятные контроллеру. Как же нам перевести пазла
наши команды-стрелки в код, который пой-
мет робот-машинка?
Давайте поступим так: если датчик уме- Начало
ет отличать свет от темноты, поверхность пазла
Вправо Влево
от пустоты, то можно просто прорезать
­отверстия рядом со стрелкой и таким об-
разом закодировать направление движения.
37
с длинными прорезями, а точки показывают, Но как все-таки код передается контрол-
что на этом месте прорези нет — так удобней леру? Давайте внимательно рассмотрим
считать нолики. У каждого кусочка есть на- схему, представленную ниже: «Коды направ-
чало и конец. Стрелкой показано направле- ления движения по программе». Когда мы
ние, в котором поедет робоплатформа, когда выкладываем дорожку из пластинок и запус­
считает команду. Каждый кусочек разде- каем машинку для считывания информации,
лен на две зоны: в одной команда обозначе- то она исследует своим оптическим датчиком
на стрелкой, чтобы было понятно человеку, каждый кусочек пазла, будто очень внима-
в другой — зашифрована машинным кодом тельный следопыт. При этом каждую прорезь
в виде длинных прорезей, чтобы было по- машинка воспринимает как импульс, и кон-
нятно роботу. троллер этот импульс преобразует в едини-
Пластинки собираются в цепочку друг за цу. А ровную поверхность, когда импульса
другом, и так получается программа управ- нет, — как нолик (на наших пластинках в этом
ления. Проезжая над цепочкой, машинка месте пустое пространство, отмеченное ма-
считывает значения кодов движения, зашиф- ленькой точкой).
рованные в командах. Например, програм-
Когда машинка наезжает на первую пла-
ма для движения платформы может иметь
стинку, то первый полученный импульс пре-
­такой вид:
образует в единицу и сразу ожидает вторую
единицу. После двух обнаруженных единиц
происходит синхронизация (именно поэ-
тому начало у всех программных частей
пазла одинаковое — две прорези). Далее
контроллер ожидает информацию о сле-
дующих четырех двоичных цифрах. Если
машинка проезжает над прорезью, то в кон-
троллер поступает импульс, который тот
воспринимает как единицу. Если машинка
проезжает над сплошным участком, то им-
пульс не поступает, что контроллер воспри-
нимает как ноль.

38
На схеме зелеными цифрами показаны места, где должно быть отверстие или пустое
­место. Красным цветом показано, как эти данные преобразуются в нули и единицы.
На представленном рисунке команды движения можно представить в виде следующе-
го двоичного кода:
НАЗАД 1, 1, 1, 1, 1, 0 Вот таким нехитрым способом и работает магия, с по­
ВЛЕВО 1, 1, 0, 1, 1, 0 мощью которой контроллер считывает команды с пласти-
ВПРАВО 1, 1, 1, 0, 1, 0 нок, и ­ спользуя датчик света.
ВПЕРЕД 1, 1, 0, 0, 1, 0
До этого момента мы Среднее время обо- Такая стрелка ука- При ис по ль з ов а-
не обращали внима- значено стрел- зывает, что время нии стрелки с выпу-
ния на форму стре- кой с прямой левой движения по данной клой стороной время
лок. На самом деле стороной. команде будет мень- движения — больше
время движения по ше среднего. среднего.
командам стре-
лок разных форм
отличается.
39
На рисунке пред-
ставлены все встре-
чающиеся в наборе
пластинки. Из них
можно составлять
различные програм-
мы движения наше- цикл
го робота. старт макс. средн. мин.

цикл
стоп

звук

свет

40
Подведем итог
5.1. Расставьте параметры, соответствующие командам исполнителя «Умная машин-
ка» (на какое расстояние перемещается робот по заданной команде). Запишите эти
­команды в машинных кодах.

макс. средн. мин.

Вперед Назад

Вперед Назад

Вперед Назад

Двоичный код команды Двоичный код команды

41
5.2. Составьте программу езды по сложной траектории, начертите эту траекторию
и ­запишите программу в машинных кодах.

Набор команд

Двоичный код
команд

Траектория
движения

5.3. З апишите программу вращения робоплатформы на одном ­месте


с подачей звукового или светового сигнала на каждом румбе.
Запишите эту программу в машинных кодах.

Эпизод шестой. Т-с-с…


Подробнее о кодах

З наете, что такое код? В этом эпизоде вы узнаете, как перевести понятные человеку
команды в коды, которые понимают роботы. Мы будем говорить о машинном языке
роботов, узнаем, как можно представить информацию в закодированном виде, на­учимся
переводить обычные слова в секретные коды.
Итак, чтобы роботы понимали команды, их необходимо закодировать. Мы уже узна-
ли, что можно закодировать команды двоичным кодом — в виде ноликов и единиц,
такой код называют еще машинным. А есть ли другие способы? Как их приме-
42 нять, и ­вообще: как переводить понятные нам команды в закодированный вид?
6.1. Какие бывают коды
Люди разговаривают на человеческом вертикали, так и по горизонтали. В то же вре-
языке — русском, английском, немецком... мя места они занимают значительно мень-
и программы тоже пишутся на языке, по- ше. Прочитать их можно и без спе­циального
нятном людям. Но процессоры внутри кон- оборудования — например, используя каме-
троллеров не понимают человеческого языка, ру телефона. QR-код — это один из вариан-
они действуют согласно своей внутренней тов двумерного штрихкода.
логике. Одно из основных преимуществ QR-кодов —
Представить же в закодированном ви- простота распознавания зашифрованной в них
де можно любую информацию. Наверняка информации. Практически любое современ-
вы обращали внимание на черные полоски ное устройство способно выполнить роль
на запакованных товарах — штрихкод. Счи- де­шифратора, а значит, такие коды можно
тывая информацию специальным сканером, использовать буквально повсюду. Чтобы на-
продавец узнает и отправляет в компью- учиться читать секретную информацию, до-
тер цену товара, его наименование и много статочно скачать специальную программу
других сведений. Информация закодирова- для чтения QR-кодов.
на в виде полосок различной толщины, рас- Попробуйте установить на свой смарт-
положенных в ряд: фон такую программу (например, бесплатный
Двумерные штрихкоды более сложны QR Scanner) и расшифруйте информацию, за-
и для кодирования, и для распознавания, так шифрованную в следующих QR-кодах.
как информация в них зашифрована как по

43
6.2. П
 ереводчики с планеты Шелезяка.
Перевод десятичных чисел
в двоичную систему
Итак, роботы (а следовательно, и компью- То есть мы представили заданное число
теры) понимают только собственный язык — в виде суммы произведений его цифр на ос-
язык машинных кодов. Наиболее удобным нование в степени, которая соответствует
оказалось двоичное кодирование: то есть месту цифры в числе. Такая система счисле-
в системе счисления, используемой для управ- ния называется позиционной — «вес» цифры
ления роботом, всего две цифры — 0 и 1. Но в числе определяется ее местом, «позицией»
с их помощью можно записать любое, да- в этом числе.
же самое большое число, так же, как мы это Теперь перенесемся на фантастическую
обычно делаем с помощью всего десяти цифр. планету, где живут роботы.
Но выглядят числа в двоичной системе счис-
ления по-другому: они со­стоят из одних нулей
и единиц и отличаются от десятичных чисел
количеством разрядов (то есть цифр в числе).
Как же соотнести понятные нам числа
в десятичной системе с числами, которые
понимают роботы? Сначала проанализиру-
ем, как же строятся привычные нам числа.
Например, если у нас есть десятичное число
523, его можно представить так:

523 =
500 + 20 + 3 =
5 × 100 + 20 × 10 + 3 × 1 =
5 × 102 + 3 × 101 + 3 × 100

44
На барахолке планеты Шелезяка Старый мов — все по одной штуке. С помощью такого
Робот при торговле с людьми вместо элек- набора гирь Старый Робот ловко взвешивал
тронных весов пользовался экзотичными: любую порцию смазки, не превышающую
с двумя чашками и гирями. Гири были не- 250 граммов.
обычными: 1, 2, 4, 8, 16, 32, 64 и 128 грам-

Подумайте, какую максимальную порцию смазки, пользуясь своим набором


гирь, мог взвесить Старый Робот?

А какие следующие гири придется взять Старому Роботу, если он захочет


­взвесить еще больше смазки?
1 2 4 8 16 32 64 128

Попробуем уравновесить порцию машинно-


го масла в 75 г, пользуясь теми гирями, ко-
торые имеются у Старого Робота (как вы пом-
ните, все гири только в одном экземпляре,
и начинать нужно с максимального груза):

Выберем гирьки:

128 64 32 16 8 4 2 1
75
Так как Робот был очень старый и частично неисправный, он не мог сразу пере-
водить человеческие числа в машинные коды. Поэтому после взвешивания он
внимательно рассматривал и считал выставленные гири: там, где гиря была, он
ставил единичку, где гири не было, ставил ноль).

128 64 32 16 8 4 2 1
75
0 1 0 0 1 0 1 1
45
Теперь, если выписать все единички и нолики из второй строки, мы полу-
чим: 01001011. Естественно, ноль, стоящий на первом месте, можно отбросить,
и наше число будет иметь вид: 1001011.
Так Старый Робот переводил десятичные числа в двоичные коды, которые по-
нимают роботы.
Кстати, обратите внимание: гири, которые использовал Робот, можно предста-
вить как 2 (основание системы счисления), возведенное в степень, значение
­которой равно номеру места, занимаемого цифрой в числе (число 1 — всегда
­нулевая степень).

1 2 4 8 16 32 64 128
20 21 22 23 24 25 26 27
Когда же требовалось перевести значения машинных кодов в десятичную
­систему, Старый Робот поступал так же, как мы, когда расписывали десятич-
ное число 523: брал число и каждую цифру умножал на значение гири, около
­которой стоит эта цифра. Например, Робот взял двоичное число 10011:

128 64 32 16 8 4 2 1
24 23 22 21 20
1 0 0 1 1
100112 =
1 × 24 +0 × 23 + 0 × 22 + 1 × 21 + 1 × 20 =
1 × 16 + 0 × 8 + 0 × 4 + 1 × 2 + 1 × 1 =
16 + 0 + 0 + 2 + 1 = 16 + 2 + 1 = 1910

46
6.3. А
 как можно еще? Перевод
десятичных чисел в различные
системы счисления
Все не так уж сложно, правда? Но пере- десятичное число и делим его на два, остат-
вести число таким способом в какую-то дру- ки от деления (которые могут равняться 0
гую систему, например в троичную, уже не или 1) собираются в обратной последова-
получится. тельности, и из них строится двоичное число.
Рассмотрим еще один способ перевода Возьмем, например, десятичное число 11:
чисел из десятичной системы в двоичную, делим его на два — результат 5, остаток 1;
который мог бы применять робот, умеющий результат продолжаем делить на 2, получая
делить столбиком. Это метод деления: ­берем поочередно остаток 1 или 0.

результат

Затем все остатки выписываем в обрат- что мы можем сказать, что получили четрех-
ном порядке, начиная с последней единицы. битовое число. А двоичное число 1010 0101
Получается, что десятичное число 1110 в дво- будет уже восьмибитовое, потому что со­стоит
ичном виде имеет вид: 10112. из восьми двоичных цифр.
Мы получили четырехразрядное число — Соответственно, однобитовым будет та-
число, состоящее из четырех двоичных цифр. кое двоичное число, которое прини­
В компьютерной технике принято называть мает значение только 0 или 1. Теперь,
каждый разряд двоичного числа битом. Так если в разговоре о робото­технике
47
кто-то упомянет однобитовый канал, вы может ­передаваться только одно одноби-
поймете, что это такой канал, по которому товое число.

Обратите внимание: команды на пластинках у нас кодируются шестибитовыми


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

6.4. Шестнадцатеричный код


Зачастую использовать двоичный код будет соответствовать шестнадцатеричное
бывает неудобно — уж очень длинные чис- число 10.
ла получаются, легко можно ошибить- Перевести десятичное число в шестнадца-
ся, вводя последовательности ноликов теричную систему можно так же, как и дво-
и нулей. ­Тогда программисты использу- ичное — методом деления с остатком. Только
ют шест­надцатеричный код — в основа- делить мы будем не на 2, а на 16.
нии этой системы счисления лежит уже Десятичное число делим на 16, аккурат-
чи­с ло 16. но записывая остатки. Затем эти остатки за-
То есть у нас уже не десять, как в деся- писываем в обратной последовательности,
тичной, и не два, как в двоичной, а целых переводя их в шестнадцатеричные однораз-
шестнадцать базовых чисел. После однораз- рядные числа — и вуаля! — получилось шест-
рядного числа 9 идет одноразрядное число надцатеричное число 1F4.
А, затем одноразрядное число В, и так далее Точно такой же способ можно применить
до числа F, и только десятичному числу 16 для перевода чисел в любую систему.

результат

48
X10 X16 X2 X10 X16 X2
0 0 0 8 8 1000
1 1 0001 9 9 1001
2 2 0010 10 A 1010
3 3 0011 11 B 1011
4 4 0100 12 C 1100
5 5 0101 13 D 1101
6 6 0110 14 E 1110
7 7 0111 15 F 1111
Таблица соответствия чисел в различных системах счисления: десятичной, шест­
надцатеричной и двоичной.

Подведем итог
6.1. Установите на смартфон программу чтения QR-кодов и расшифруйте информацию
на упаковке любого товара.
Прочитайте информацию, зашифрованную в следующих QR-кодах:

49
6.2. Соберите из гирь, которые использует Старый Робот, следующие порции смазки
(зачеркивая нужные квадратики).

128 г 64 г 32 г 16 г 8г 4г 2г 1г
75 г

15 г
201 г
129 г

6.3. Переведите в двоичный код следующие десятичные числа:

Десятичный код Двоичный код Десятичный код Двоичный код


77 18
62 44
14 10

6.4. Переведите в десятичный код следующие двоичные числа:

Десятичный код Двоичный код Десятичный код Двоичный код


111 1000 0001
1001 1001 0001
10 1001 1001
1111 1100 0011
1 0001 1111 1111
50
Эпизод седьмой.
Что понимает машина?

Р оботы выполняют самые замысловатые действия, подчиняясь воле человека — есте-


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

7. 1. Компиляторы, интерпретаторы,
процедурные языки
программирования
Программы пишутся на языках програм- в Arduino, то для вас не составит большо-
мирования. Языков программирования су- го труда понять программы, написанные на
ществует великое множество. ­Некоторые языке Си.
появляются, достигают своего расцвета по- Преимуществом Arduino перед други-
пулярности и потихоньку уходят в забвение. ми платформами является то, что для нее
Например, при программировании робо- написано огромное количество библиотек 2
тов класса Arduino1 используется язык, очень и готовых программ с примерами, и все они
похожий на язык Си. Если вы знакомы с язы- выложены в открытый доступ в сети интернет.
ком Си, то вам будет легко понять команды, Готовые разработки выкладываются
которые используются в Arduino. И наобо- в общее хранилище, которое называется ре-
рот, если вы научитесь писать программы позиторий. Один из самых самых крупных ре-
1
 rduino — платформа, ориентированная на непро-
A 2
 иблиотека — набор дополнительных команд,
Б
фессиональных пользователей. Представляет собой ­который позволяет записывать программу
набор готовых плат и позволяет создавать и про- в упрощенном формате.
граммировать роботов буквально «из коробки».
51
позиториев — github.com. В будущем, если вы Языки-интерпретаторы — это Basic, Ку-
научитесь писать такие программы, которые Мир, Java, Питон. Причем языки Java и Питон,
могут быть полезны другим людям, и захо- вдобавок к основным своим преимуществам,
тите, чтобы про вас узнали, вы сами сможе- еще и платформонезависмые. Это значит, что
те выкладывать туда своих трудов. код будет одинаково работать в любой опе-
Мы с вами разобрали способ выполне- рационной системе: MacOS, Linux, Windows,
ния программы с использованием компиля- Android...
тора. Языки-компиляторы — это Си, Паскаль Также бывают не алгоритмические, а про-
и другие. Но существует и альтернатива — цедурные языки, такие как Pl и SQL, которые
язык-интерпретатор. Когда программист используются не для управления техникой,
выбирает, на каком языке ему писать про- а для обработки больших объемов данных,
грамму, он не всегда задумывается, как она для анализа поведения разных машин.
будет исполняться, но для работы со встра- Несмотря на то что языков программи-
иваемой микроэлектроникой это быва- рования так много, самое главное для раз-
ет важно. работчика — предложить алгоритм, который
52
будет исполнять робот, реализуя поставлен- учиться со среды программирования, в ко-
ную задачу. Поэтому вполне можно начать торой команды задаются русскими словами.

7.2. Режим отладки


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

После того как вы сохранили про- дит понятный человеку текст программы
грамму в виде файла, ее нужно прове- в машинные коды, которые понимает кон-
рить на синтаксические ошибки — для троллер, и создает исполняемый файл.
этого запускается специальная програм- Ура — победа! Теперь мы загружаем это
ма-транслятор. Если транслятор обнару- в контроллер, подаем питание и радостно
жит ошибки, то покажет, где они находятся. смот­рим, как замигал светодиод, а на-
После того как программист исправит ша машинка поехала.
ошибки, программа-компилятор перево- Или, увы, не поехала...
53
Если контроллер ведет себя не так, как вы го ­века, когда в реле
от него ожидали, то, скорее всего, програм- «Марк-1», одного из
ма написана правильно с точки зрения син- первых компьюте-
таксиса, но с точки зрения логики действий ров в Гарварде, за-
что-то не так... Не присвоено нужное значение бра лось какое-то
какой-то переменной, или перепутан плюс насекомое. На во-
с минусом, или еще что-то. Вариантов, к со- прос нача льс тва,
жалению, много. Наступает самый увлека- чем это занимают-
тельный этап разработки программ — поиск ся программисты, они дружно ответили, что
логических ошибок. Это называется отлад- удаляют жучков, чтобы восстановить работо-
ка или по-английски — Debug, поиск жучков способность компьютера. Так и прижилось —
(программных ошибок). с тех пор багами (жучками) стали называть
Такой интересный термин возник на за- ошибки, которые не дают правильно рабо-
ре программирования, в середине прошло- тать программе.

Эпизод восьмой.
КуМир — все, что нужно

В этом эпизоде мы познакомимся с языком программирования КуМир и вместе с ис-


полнителем-роботом пройдем квест, разбирая все более сложные задачи. А затем,
­составив на этом же языке программу, заставим роботизированные платформы ездить
по нашим указаниям.
Скачать дистрибутив среды программиро- https://www.niisi.ru/kumir. Программа являет-
вания КуМир можно на сайте разработчиков ся свободно распространяемой1.

1
Мы будем рассматривать версию не ниже 2.1.0, вари-
ант КуМир для старшеклассников.
54
После загрузки среды КуМир на экра- две ­основные зоны: рабочую область (вверху)
не можно увидеть окно, которое разбито на и область ввода-вывода (внизу — 2).

В рабочей области располагается програм-


ма, с которой в данный момент работает систе-
ма КуМир. При этом рабочая область делится
на две части: область редактирования текста
программы (1) и область построчных сообще-
ний — поля редактора (3): там при подготовке
программы выводятся сообщения об ошибках,
найденных в каждой строке, а когда програм-
ма выполняется, показываются сведения о зна-
чениях величин в соответствующих строках.
При запуске КуМира справа открывается
окно справки (4), а под ним рабочая обста-
новка исполнителя Робот (5).
55
Поскольку в среде КуМир может исполь- команда выглядит как: Использовать Робот
зоваться несколько разных исполнителей, (пункт меню Вставка).
нужного исполнителя необходимо активи- Для исполнителя Робот можно загрузить
зировать командой «использовать». Мы бу- готовую обстановку или создать новую, поль-
дем работать с исполнителем Робот, поэтому зуясь командами пункта меню Робот.

Робот передвигается по клеткам поля об- вниз, влево или вправо. Также робот уме-
становки и закрашивает клетки. Если на поле ет исполнять команду закрасить. По этой
есть стены, через них Робот пройти не мо- команде закрашивается клетка, в кото-
жет, но может проверить, есть ли рядом с ним рой робот находится в момент получения
стена, и обойти ее. В Систему Команд Испол- команды.
нителя Робот входят четыре команды пере- Запустить на выполнение созданную про-
мещения: вверх, вниз, влево, вправо. грамму можно командами пункта меню Вы-
При выполнении любой из этих команд полнение либо соответствующими кнопками
Робот перемещается на одну клетку вверх, на панели кнопок.

56
Команда Выполнить непрерывно начина- Чтобы самостоятельно познакомиться
ет непрерывное выполнение программы без с основами программирования, в системе Ку-
остановок между шагами. Мир есть так называемые практикумы, где
Команда Шаг выполняет один шаг про- правильность составленных алгоритмов про-
граммы (исполняет одну команду алгоритма) веряется автоматически.
и ­переходит в режим паузы. Для выполнения При первой загрузке практикума либо
следующей команды необходимо дать следу- при первой автоматической проверке разра-
ющую команду Шаг. Такой пошаговый р­ ежим ботанной вами программы появится предло-
удобен для отладки программы, ­когда нуж- жение создать электронную рабочую тетрадь,
но найти ошибку. в которой будут сохраняться написанные ва-
ми программы и результаты автоматическо-
го тестирования каждой.

Во время работы модуль поддержки прак- храняет информацию о результатах тестиро-


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

Система команд КуМир (пункт меню — Вставка):

58
8.1 Линейный алгоритм
Синтаксис языка КуМир требует, чтобы
при написании программы были явно указа-
ны ее начало и конец (ключевые слова — нач,
кон), а вся программа располагалась между
этими «программными скобками».
Готовую программу нужно протестировать.
В случае прохождения всех тестов в рабочей
тетради напротив решаемой задачи отмеча-
ется и сохраняется оценка.
На рисунке изображена обстановка, в ко-
торой исполнителя Робот необходимо приве-
сти из точки А на Базу — в точку Б, обойдя
стену и закрасив клетки, отмеченные смай-
ликами. Расставив команды вправо, вниз,
закрасить, влево, в количествах, соответ-
ствующих количеству клеток, мы получим
заветную оценку 10, напротив решаемой
задачи.
Внимательно рассмотрев задания разде-
лов Знакомство и Линейные алгоритмы прак-
тикума, мы увидим, что в программах для
их решения реализуются те самые линейные
алгоритмы, про которые говорили в четвер-
том эпизоде — все команды выполняются од-
нократно, в заданном порядке.

59
8.2 Цикл n раз
Конечно, алгоритм обхода стены, кото- Вспомним такую алгоритмическую струк-
рый мы рассмотрели в предыдущем при- туру, как цикл с параметром: жестко опреде-
мере, составить очень просто (и он успешно ленное количество повторений одних и тех
­пройдет тестирование в разделе «Линейные же действий.
алгоритмы»): достаточно быть внимательным У нас все время повторяются два дей-
при подсчете клеток и команд. Но наверняка ствия: «вправо, закрасить» — вот и вставим
нам стоит оптимизировать наше творчество — их в цикл. В КуМире такой алгоритм носит
по крайней мере, составленные алгоритмы название «Цикл n раз».
­будут заметно короче. У любого цикла есть начало (ключевое
На первый взгляд, никаких проблем, про- слово — нц) и конец (ключевое слово — кц),
стейший алгоритм будет иметь вид: между которыми располагается тело цик-
ла — набор тех действий, которые будут
­повторяться. Конкретно для этого вида цик-
ла оговаривается количество повторений.
В нашем случае действия «вправо, закра-
сить» будут повторяться шесть раз, посколь-
ку нам необходимо закрасить ­всего шесть
клеток.

Однако если клеток будет не шесть,


а шестнадцать, программу придется сде-
лать значительно длиннее. А если клеток
окажется в десять раз больше? Это что же,
нам придется писать 1600 команд?

60
И программа сразу ста-
новится в шесть раз короче
предыдущей и приобретает
элегантный вид:

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


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

8.3 Ветвления
А теперь рассмотрим такую задачу: Робот должен закрашивать поле сверху
или снизу и возвращаться на прежнее ме-
сто, но он не должен разрушаться, если вдруг
в одном из тестов сверху или снизу окажет-
ся стена.
Как должен поступить исполнитель? Сна-
чала проверить, есть ли сверху стена. Если ее
там нет, то сбегать наверх, закрасить клет-
ку и вернуться назад. Если же сверху сте-
на есть, то нужно проверить, есть ли стена
­снизу. Е­ сли нет, спуститься на клетку вниз,
закрасить ее и вернуться назад.

61
И программа будет иметь следующий вид:

Обратите внимание на слова: если… то… Иногда для построения полного ветвле-
все — это ключевые слова, и ни одно из них ния используется еще одно ключевое сло-
нельзя забыть. В противном случае от­ладчик во — иначе.
выдаст синтаксическую ошибку и откажется
запускать программу на выполнение.

8.4. Циклы с условием


Но может сложиться ситуация, когда мы не не кончится. В ­КуМире для т­ акой алгоритми-
знаем, сколько раз необходимо повторить ческой структуры есть специальный тип цик-
действия. Например, исполнитель дол- ла: «цикл пока». Как и «цикл n раз», «цикл
жен идти по коридору, пока коридор пока» имеет начало и конец цикла, только
62
после ключевого слова пока прописывается условие, которое необходимо проверять. ­Пример
такой программы вы видите на картинке:

Размер поля неизвестен, и робот дол- ма будет одинаково работать, независимо


жен шагать, пока справа нет стены. То есть от того, состоит коридор из трех клеток или
­если проверка показывает, что справа ниче- из тридцати.
го нет, значит, можно сделать шаг — и робот Потренируйтесь с выполнением упражне-
будет повторять эти действия, пока спра- ний практикума на различные алгоритмиче-
ва не окажется препятствие. Такая програм- ские структуры.

8.5. У
 правление платформой SmartCar
на языке КуМир
Рассмотрим пульт управления роботи- платформа SmartCar при управлении с пуль-
зированной платформой, обратив внимание та, она может запомнить и повто-
на то, что все действия, которые выполняет рить уже без участия человека.
63
Для этого нажимаем кнопку Запись Если выбрать
и составляем последовательность команд. циклический ре-
По ­команде кнопки Поехали машинка повто- жим (поставив га-
рит все эти команды. лочку в чекбоксе
команды Цикл),
выполненный один
раз набор команд
будет повторяться
постоянно.
Теперь проверим, возможно ли программ-
ное управление такой платформой. По ко-
манде «Показать программу» в текстовом
редакторе откроется файл, содержащий про-
грамму на языке КуМир.

Однако создавать, сохранять и рассма- Поэкспериментируйте, управляя роботи-


тривать команды гораздо удобнее непосред- зированной платформой сначала непосред-
ственно из среды программирования КуМир. ственно с пульта управления, затем задавая
Попробуйте с ее помощью составить програм- команды программным способом, и, нако-
му для управления платформой, показанную нец, управляя по программе сразу нескольки-
на предыдущем рисунке. В среде КуМир она ми платформами.
будет иметь вид:
Создайте несколько несложных про-
грамм и выполните их в реальных условиях.
При выполнении команд необходимо обра-
тить внимание на отличия между реальным
и виртуальным роботом, которые объясняют
не совсем полное совпадение результатов.
Возможно, стоит провести калиб­
ровку энкодеров для более точной
64 настройки поворота1. 1
См. раздел «Шпаргалки».
Подведем итог

Теоретические задачи для исполнителя


8.1. Исполнитель «Умная машинка» может развозить грузы на плоскости. Для удобства
расчетов плоскость размечена на клетки.
Система команд Исполнителя:
1 — вперед («Умная машинка» перемещается вперед на одну клетку вверх);
2 — назад («Умная машинка» перемещается назад на одну клетку вниз);
3 — вправо («Умная машинка» перемещается назад на одну клетку вправо);
4 — влево («Умная машинка» перемещается назад на одну клетку влево).
8.2. Исполнитель выполнил следующую программу:
вправо влево
вниз вверх Укажите наименьшее возможное число команд, кото-
вправо вверх рое необходимо для того, чтобы исполнитель вернулся
вверх влево в ту же клетку, из которой начал движение.

Практическая работа с оборудованием

С оставьте программы для исполнителя Робот в системе КуМир, затем попробуйте


­реализовать их с помощью платформы SmartCar.
Обратите внимание, что перед выполне- ремещался на расстояние, соответствующее
нием практических заданий реального ис- ­одной клетке. Затем нужна калибровка по-
полнителя, как правило, всегда необходимо ворота, чтобы по команде Направо машинка
подстраивать. Например, для платформы поворачивалась на угол, максимально при-
SmartCar необходимо откалибровать энко- ближенный к 90° (или 45°). Для других
деры платформы таким образом, чтобы по роботов подстройка будет иной.
команде Вперед реальный исполнитель пе-
65
8.3. Реализация линейного алгоритма. Возможные обстановки:

алг Drill-01
. дано | Робот на поле. Расстояние до Базы
| известно.
. надо | В отмеченных точках выполнить
| команду Бип
| и привести SmartCar на Базу.
| На базе выполнить команды
Бип и Свет нач
.
кон

8.4. Реализация циклического алгоритма (N раз).


Оценивается длина кода программы
УМКИ

алг Drill-02
. дано | Робот на поле. Точки на известном расстоянии
| от начала движения робота
. надо | В отмеченных точках выполнить команду Бип
| и привести SmartCar на Базу.
| На базе выполнить команды Бип и Свет
| Используйте цикл «N раз». Возможные обстановки:
нач
...
кон

66
Возможные обстановки: Возможные обстановки:

Эпизод девятый.
Электроника
в робототехнике

И так, мы с вами выяснили, что самая главная часть любого робота — это контроллер.
Но как же он устроен? И при чем тут наука физика?

Представим, что мы стали совсем-­совсем


маленькими, даже меньше фиксиков, и по-
пробуем разобраться, что происходит с элек-
трическими сигналами в контроллере.
Для этого нам необходимо познакомиться
с ­наукой электроникой.
67
9.1. Энергия повсюду, энергия везде…
Источники энергии
Вы, конечно, знаете, зачем нужна энергия А на атомных электростанциях турби-
и что без электричества нам бы пришлось ну вращает пар, который образуется, когда
очень плохо. Чтобы освещать наше жили- ядерная реакция нагревает воду.
ще, чтобы работали телевизор, компьютер,
стиральная машина, микроволновка и все
ваши сотовые телефоны и планшеты, необ-
ходим источник электрической энергии. Что-
бы электричество пришло в каждый дом,
строятся огромные электростанции, которые
вырабатывают энергию самыми разными
способами: например, на гидроэлектростан-
циях вода вращает турбину, и ток, который
генерирует эта турбина, идет по проводам
к нам.
Атомный реактор Нововоронежской
атомной электростанции

Также можно получить энергию при вра-


щении турбины ветром:

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

Если энергично вращать ручку генерато-


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

9.2. Электрическая цепь и электронные


компоненты
Мы выяснили, что от электростанции
электричество поступает на заводы, в горо-
да и к нам в квартиры. Но если нам нужно
запитать совсем маленькое устройство типа
фонарика или сотового телефона энергию
можно запасти в аккумуляторе или батарее.
Нам для экспериментов достаточно не-
скольких батареек.
69
Для каждого электронного компонента су- От источника энергии ток течет по про-
ществует свой собственный значок. По сути, водам и заставляет лампочку и светодиод
это тоже кодирование, только теперь мы бу- светиться, мотор — вращаться, генератор зву-
дем заменять специальными символами изо- ка — издавать звуковые сигналы. Но все это
бражения электронных устройств: батареек, происходит в том случае, если электрическая
лампочек, выключателей и прочих компонен- цепь замкнута. Если электрическую цепь ра-
тов, из которых собирают электрические цепи. зорвать, источники света погаснут, мотор пе-
Для источника питания, например, при- рестанет работать. Для того чтобы разрывать
нято использовать такой значок: электрическую цепь в нужный момент, исполь-
зуются выключатели.

9.3. Такие разные выключатели


Давайте чуть внимательнее взглянем чателя — в положении ON цепь замкнута,
на выключатели, которые можно исполь- в положение OFF — разомк­нута, и держать
зовать в нашей работе. Бывают выклю- ничего не надо; бывают герконы — магни-
чатели в виде кнопки: пока держишь ее тоуправляемые п
­ ереключатели: если прило-
нажатой, цепь замкнута, отпустил — цепь жить к ним магнит, цепь замыкается, если
вновь разомкнута; бывают в виде переклю- убрать — разрывается.

Для каждого элемента также существует свое специальное обозначение.

Кнопка

Переключатель

Геркон (герметизированный
контакт)
70
Для того чтобы увидеть работу элек- ­ агрузкой может стать мотор, лампочка,
Н
трического тока, нам необходима на­грузка. светодиод.

Электромотор

Лампочка

Светодиод

С мотором все понятно: подключаем его


к источнику питания, вал начинает вра-
щаться. На вал можно насадить пропеллер
или колесо, тогда при подаче питания наше
устройство будет их крутить.
С лампой тоже особых проблем нет. Чтобы
она работала в электрической цепи, ее нуж-
но вставить в элемент крепления. Электри-
ческая лампа может выглядеть как угодно,
но на схеме она всегда отображается пере-
черкнутым крест-накрест кружком.
Зачастую вместо лампы удобно исполь-
зовать светодиод — электронный полу-
проводниковый прибор, который начинает
светиться при прохождении через него элек-
трического тока.
71
9.4. Как устроен светодиод
Светодиод излучает свет, когда ток про- выводом. Затем всю конструкцию помещают
текает от анода (+) к катоду (–). Длинный в пластиковый корпус.
вывод светодиода — это анод, короткий — Сначала светодиоды выпускались толь-
катод. Когда электроны пересекают барьер ко красного и зеленого цветов, затем приду-
между анодом и катодом, они испускают мали, как изготавливать желтые, но только
фотон, который и производит свет. Светоди- когда японец Судзи Накамура изобрел синий
од обязательно нужно подключать к источ- светодиод, стало возможно добиться любо-
нику питания с соблюдением полярности. го цвета свечения.
­Если ошибетесь (соедините минус светодиода Используя электронный конструктор, собе-
с плюсом источника питания) то светодиод рем простейшую электрическую схему — на-
светиться не будет и вообще может сгореть. пример, смоделируем работу электрического
Внутри светодиода находится полупрово- фонарика. Для этого нам нужны лампочка,
дниковый кристалл, который и излучает свет. батарейка и выключатель: когда выключа-
Кристалл помещают на металлическое осно- тель замыкают, лампочка начинает светиться.
вание — катод. С помощью соединительно- Все эти компоненты подключаются последо-
го проводка кристалл соединяют с анодным вательно друг за другом в электрическую
цепь. Попробуйте составить самостоятель-
Пластиковая линза но принципиальную схему фонарика, а за-
Проводник тем собрать ее из электронного конструктора.
Как вы понимаете, схема будет самая
простая: источник питания, источник света,
Кристалл выключатель:

Катод (–) Анод (+)

72
Теперь измените схему, использовав
­вместо рычажкового переключателя кнопку.
Подумайте, как изменяется работа со-
бранной схемы при использовании различных
переключателей.
Затем попробуйте изменить схему, доба-
вив к лампочке электрический мотор.
Проанализируйте изменение работы
устройства. Как изменилась яркость свече-
ния лампочки? Подумайте, почему наблю-
дается такой эффект.

9.5. П
 ревратим электрическую энергию
в движение
Как вы уже поняли, в качестве нагрузки ка не достигнет горизонтального положе-
в электрической цепи может использовать- ния. Чтобы движение продолжилось, нужно
ся не только источник света или звука, но добавить еще хотя бы одну рамку и пере-
и устройство, без которого никак не обой- ключить направление тока в рамке в нуж-
тись в робототехнике — электрический мо- ный момент.
тор. Нам ведь необходимо, чтобы наш робот
умел двигаться.
Электромотор — устройство, преобра-
зующее электрическую энергию в механи-
ческую. Принцип работы его достаточно
простой: если в магнитном поле вертикаль-
но расположить проволочную рамку и про-
пустить по ней ток, рамка проворачивается
и по инерции двигается какое-то время, по-

73
Современный двигатель постоянного тока щаться в обратную строну — против часовой
устроен по подобному принципу: при подклю- стрелки.
чении электрического тока начинается вра- Скорость вращения мотора зависит от на-
щение вала двигателя. пряжения источника питания: например, при
Мотор в электронных схемах обозначает- подключении двух батареек по 1,5 вольта мо-
ся следующим символом: тор с пропеллером будет просто вращаться,
а при подключении четырех батареек может
взлететь под потолок.

При подключении мотора необходимо


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

9.6 Техника безопасности


При практической работе с электронными компонентами необхо-
димо соблюдать правила безопасности, от которых зависит сохран-
ность оборудования и ваше здоровье.
В электрической цепи к источнику питания обязательно должна
подключаться нагрузка, например, лампочка, светодиод или гене-
ратор электрических сигналов.
Ни в коем случае нельзя замыкать накоротко контакты бата-
рейки — может произойти короткое замыкание, которое спо-
собно привести к пожару!!!
74
Также ни в коем случае нельзя подключать собран-
ные схемы к электрическим сетям в доме, так как на-
пряжение там слишком высокое, элементы конструктора
на него не рассчитаны.
Когда будете собирать схемы, пользуясь электрон-
ным конструктором для начинающих, нажимайте паль-
цем на металлические кнопки, а не на середину детали,
потому что некоторые хрупкие компоненты могут сло-
маться (например, в составе геркона есть стеклянная
трубочка).
Когда работаете с пропеллером, нельзя наклонять-
ся над ним, ловить его руками и пытаться остановить
движение мотора!

9.7. Азбука Морзе


Попробуем теперь придумать примене- применяли сигнальные флажки, а на же-
ние для тех схем, которые мы уже научи- лезной дороге — семафор. В темноте и при
лись собирать. Мы собирали схему фонарика, плохой видимости визуальные сигналы
используя лампочку, источник питания бесполезны. Американец Сэмюэл Морзе
и рычажковый переключатель. Если мы придумал первый приемник телеграфных
используем кнопку, то цепь будет замкну- сообщений, который состоял из двух элек-
та, пока мы держим кнопку нажатой. Такое тромагнитов и пера для записи на бумаж-
устройство удобно для того, чтобы подавать ной ленте точек и тире. Морзе придумал
световые или звуковые сигналы. Чтобы пе- специальный код для передачи сигналов
редать звуковой сигнал, можно вместо лам- на расстоянии. Он тоже решил использо-
почки подключить генератор звука. вать два разных сигнала, как в двоичном
Немного истории: первым средством зву- коде, только один сигнал был коротким —
ковой связи был телеграф. До него связь точка, а другой длинным — тире. Мор-
была визуальной: например, индейцы по- зе п
­ ридумал, как, комбинируя точки
давали сигналы с помощью дыма, на флоте и тире, зашифровать все буквы.
75
Самый известный сигнал, который зна- для передачи звуковых и световых сигналов
ют все моряки, — это сигнал бедствия SOS: на расстоянии с помощью набора электрон-
три точки, три тире, три точки. Если кто-то ного конструктора.
по радио получал такой сигнал, то он знал, Попробуйте спроектировать аппарат
что где-то рядом терпят бедствие и нужно (внесите изменения в схему фонарика), ко-
срочно спешить на помощь торый сможет передавать не только све-
Если вы посмотрите старый мультфильм товые, но и звуковые сигналы, кодируя их
о развитии связи «Алло! Вас слышу!», то азбукой Морзе. Обратите внимание, что све-
­узнаете, что Морзе первый свой аппарат со- тодиод и генератор звука будут работать
бирал из чего придется: из медных дверных только при соблюдении правильной поляр-
пластинок и простых карандашей. Мы не бу- ности (+ на светодиоде должен подключать-
дем, конечно, использовать что попало для ся к + элемента питания).
нашей работы, а попробуем создать аппарат

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

Используя кодовую таблицу азбуки Морзе, попробуйте подать


сигнал бедствия, а потом зашифровать несколько букв и передать
сообщение товарищам.

9.8. Сигнальная интегральная


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

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

Попробуйте изменить схему, заменив ры-


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

Схему можно изменить, дополнив све-


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

78
Эпизод десятый. Логика.
Ничего случайного
У вас наверняка назрел закономерный вопрос: ну, научились мы собирать фонарики,
запус­кать пропеллер, завывать как сирена, а причем же здесь роботы и контрол­леры?
Вот тут-то и возникает очень интересная проблема: как же все-таки устроена и как
работает основа контролера — микропроцессор?

Это сейчас процессор такой маленький, Мы уже упоминали, что основная часть
что даже в керамическом корпусе по размеру контроллера — устройство, которое выполняет
сравним с гречневым зернышком, а ведь он арифметические и логические операции. Так
состоит из огромного количества электрон-
что же это за логические операции? ­Чтобы
ных компонентов.
разобраться, нам стоит для начала погово-
А раньше вычислительные машины, вы-
рить об очень интересной науке — логике...
полнявшие те же операции, занимали от-
дельное здание, но они так же состояли из Много лет назад древнегреческий уче-
отдельных электронных компонентов. ный Аристотель заложил основы логики как
Так какие же дейс твия выполняет ­философской науки о правильном мышлении.
контроллер?

79
Законы логики действуют во все време-
на, для всех народов, для всех профессий.
Об этом можно говорить очень подробно, но
нас пока будет интересовать только раздел,
относящийся к суждениям.
Суждение — форма мышления, в которой
утверждается или отрицается что-то о пред-
метах, их свойствах или отношениях. Суждение
выражается в форме повествовательного пред-
ложения. Суждения могут быть как истинны-
ми, так и ложными. Например: «Луна — спутник Казалось бы, какое отношение может
Земли» — истинное суждение, а «Птицы имеют иметь Древняя Греция к робототехнике? Да-
четыре лапы» — ложное. Попробуйте привести вайте углубимся в историю.
свои примеры истинных и ложных суждений. В девятнадцатом веке английский мате-
С суждениями можно проводить различ- матик Джордж Буль на основе классической
ные операции, для нас самой важной будет логики разработал абсолютно новый раздел
инверсия или отрицание. Отрицание строит- математики — математическую (формальную)
ся путем добавления к суждению частицы не; логику, без которой невозможно было бы про-
неверно, что — и тогда истинное суждение ектирование вычислительных машин, а зна-
становится ложным, а ложное — истинным. чит, и разработка процессоров и построение
Например, суждение «Большую часть роботов.
поверхности планеты Земля занимает во- Джордж Буль не стал задумываться, дей-
да» является истинным. Но если применить ствительно ли Земля имеет форму шара,
операцию инверсии, получится ложное вы- а решил, что раз любое суждение, незави-
сказывание: «Неверно, что большую часть по- симо от его содержания, всегда либо истин-
верхности планеты Земля занимает вода». но, либо ложно, его можно обозначить любой
И наоборот: высказывание «Все лето в Рос- буквой (например, а, b, c и так далее) и этой
сии лежат сугробы» — ложное, а высказыва- букве присвоить значение. Если утвержде-
ние «Неверно, что все лето в России лежат ние истинное, то присваивается значение 1,
сугробы» — истинное. если ложное — 0. К суждениям такого вида
Попробуйте сами поэкспериментировать уже можно применять логические операции.
с построением суждений и отрицаний Итак, логическая алгебра получила назва-
к ним. ние алгебры Буля.
80
10.1. Н
 е белый, не пушистый, а черный
и ершистый. Операция НЕ (инверсия)
Давайте теперь попробуем применить
операцию отрицания к истинному суждению, A Ā
которое имеет значение 1 — суждение сразу
же примет значение 0. Суждение обозначим 0 1
буквой А, операция отрицания обозначается
чертой сверху. Полученный результат приня- 1 0
то называть «Таблицей истинности». Таблица истинности
Подумайте, как это удобно: суждением А
можно считать, например, утверждение «Есть
сигнал» или «Ток идет» и, если значение
А = 1, то ток в цепи есть, а если А = 0, ток
отсутствует. Для устройства, которое пере-
ворачивает сигнал, придумали специаль-
ную схему.

10.2. Сложные суждения.


Пан ИЛИ пропал.
Операция ИЛИ (дизъюнкция)
Теперь пришло время поговорить о слож- Рассмотрим логическую операцию, ко-
ных суждениях, которые состоят из несколь- торая по-научному называется дизъюнк-
ких простых. Сложные суждения образуются ция, а мы будем называть ее операция ИЛИ.
из простых с помощью так называемых ло- В этом случае два простых суждения (обозна-
гических связок: «и», «или», «неверно, что…», чим их, например, А, B) связываются сою­зом
«если… то…». Подобные конструкции для нас ИЛИ. Обозначается операция ИЛИ знач-
привычны и часто встречаются в обыден- ком V, а чтобы было проще понять,
ной речи. рас­смотрим такой пример.
81
Пусть сложное суждение звучит так: «Вам шоколадку» — ложь (в принципе, мороже-
вкусно, если вы съели шоколадку ИЛИ моро- ное — это и без шоколадки неплохо). Резуль-
женое». Как видим, сложное суждение состо- тат также будет истинным. Если «вы съели
ит из двух простых: «Вы съели мороженое», мороженое» — ложь, а «вы съели шоколад-
«Вы съели шоколадку». ку» — истина, результат снова получится
Рассмотрим таблицу истинности для это- истинным (шоколадка есть, мороженого нет —
го сложного суждения. все равно вкусно). А вот если оба суждения
ложные, то утверждение «вам вкусно» тоже
выйдет ложным.
A B A˅B
Принципиальная схема устройства, рабо-
0 0 0 тающего по схеме ИЛИ, имеет вид:
1 0 1
0 1 1
1 1 1

Итак, вам вкусно, если истинно сужде-


ние, что вы съели шоколадку и что вы съели Таким образом, операция ИЛИ будет
мороженое. За один раз шоколадку и моро- истинной, если хотя бы одно из значений
женое — здорово! Вариант с одним ложным ­переменных равно 1. И только если оба зна-
высказыванием тоже проходит. Допустим, чения равны 0, результат примет значение
«вы съели мороженое» — истина, а «вы ­съели «ложь».

10.3. Сложные суждения.


Лед и пламень. Операция И
Рассмотрим следующую логическую два простых суждения связываются между
операцию, которая по-научному назы- собой союзом И. Обозначается конъюнкция
вается конъюнкцией. В этом случае символом & или ˄.
82
Таблица истинности в этом случае имеет вид:

A B F=A&B
0 0 0
1 0 0
0 1 0
1 1 1

В качестве примера рассмотрим выска- Если хотя бы одно высказывание лож-


зывание: «Вы получите отличную оценку, ес- но, результат уже не будет таким замеча-
ли предъявите домашнее задание И будете тельным — домашнее задание вы сделали,
­активно работать на уроке». но на уроке не работали — о пятерке речи
Итак, высказывание, что вы предъявили нет. ­Если же вы прекрасно работали на уро-
домашнее задание, истинно; высказывание, ке, но тетради с домашним заданием у вас
что на уроке вы работали замечатель- нет, то результат аналогичный. А уж ­если
но — истинно; заслуженная пятерка — у вас оба суждения ложные, про пятерку и ду-
в кармане. мать нечего.

Устройство операции И описывается следующей схемой:

Резюме: когда А и В принимают значение, равное единице, одновременно,


на выходе будет единица, если же хотя бы одно из значений переменных равно
нулю, на выходе будет ноль.
83
10.4. Сборка логических схем
Вот мы и рассмотрели работу маленьких Операция И истинна, когда истинны оба
кусочков сложной схемы процессора. Из этих входящих в нее высказывания. Сформули-
базовых логических элементов можно постро- руем логическое выказывание: лампа горит,
ить и более хитроумные устройства, но пока когда нажата кнопка и переключатель нахо-
давайте займемся практикой. дится в рабочем положении. Начертите и со-
Попробуем, используя имеющиеся эле- берите электронную схему, которая позволит
менты: источник питания, источник света (или гореть лампе, когда все переключатели пе-
звука), пропеллер с мотором, кнопку и выклю- реведены в рабочее положение.
чатель, — проиллюстрировать работу логиче-
ских элементов. 2. Измените схему, выбрав другую на-
грузку, светодиод, мотор или генератор
Логическое И звукового сигнала. Пусть звучит сигнал
Обсудим, каким образом можно собрать и крутится пропеллер, если одновре-
устройство, выполняющее функции логиче- менно нажата кнопка И переключатель
ского умножения. поставлен в режим ON.

1. Для начала берем самую простую схе- 3. А что произойдет, если поставить
му электрического фонарика и добавим не два, а три выключателя, доба-
в нее еще один выключатель. То есть вив, например, геркон? Сформулируй-
нам нужны лампочка, источник питания, те операцию конъюнкции для трех
кнопка и рычажковый переключатель. элементов.

Наверняка у вас все получилось, но если вдруг возникли затруднения, загляните


в «Шпаргалки» — готовые схемы показаны там.

84
Логическое ИЛИ Логическое НЕ
Операция ИЛИ (дизъюнкция) истинна Операция НЕ превращает истинное вы-
(лампа загорается, звучит сигнал или на- сказывание в ложное, а ложное в истинное —
чинает крутиться пропеллер), если нажата «переворачивает», инвертирует значение
кнопка ИЛИ замкнут переключатель. высказывания.
Измените собранные вами схемы таким Вот над этой схемой, возможно, придет-
образом, чтобы устройство выполняло функ- ся поразмыслить. Нам нужны только лампоч-
ции дизъюнктора: работало, когда нажат ка, источник питания и выключатель: когда
хотя бы один из выключателей. Также проа- выключатель находится в положении ON —
нализируйте возможности подключения трех лампа не должна гореть, когда выключатель
выключателей одновременно. находится в положении OFF — лампа долж-
на гореть.

10.5. Ф
 изические основы электроники.
Лирическое отступление
Проведем с помощью конструктора экспери- словами, происходит преобразование электри-
мент, иллюстрирующий закон физики, без по- ческой энергии в тепловую энергию и энергию
нимания которого невозможно использование света.
электронных компонентов в робототех­нике, —
закон Ома.
Вспомним самую первую схему, с которой
мы начали знакомство с электроникой: бата-
рейка и лампочка.
Замкнем выключатель — лампочка засвети-
лась. По цепи протекает электрический ток, со-
вершая работу — нагревая спираль лампочки,
вследствие чего та начинает светиться. Другими

85
Рассмотрим еще один электронный ком- Если изменить схему, добавив в цепь ре-
понент — резистор. Он обладает таким свой- зистор (мы в наших экспериментах добавля-
ством как сопротивление, и необходим тогда, ли вместо резистора мотор), лампочка станет
когда мы опасаемся, что отдельные устрой- светиться более тускло.
ства цепи могут сгореть.

Когда мы добавляем резистор или мо- Показания амперметра подтверждают из-


тор, в цепи увеличивается сопротивление менения силы тока.
и уменьшается сила тока. Наши визуальные Это и есть иллюстрация самого главного
наблюдения можно проверить с помощью закона электроники — закона Ома, который
измерительных приборов: добавим в цепь связывает силу тока, напряжение и сопротив-
прибор, замеряющий силу тока — амперметр, ление цепи. Если обозначим силу тока бук-
и проведем снова оба опыта: с резистором вой I, напряжение — U, сопротивление — R,
в цепи и без резистора: то эти величины можно связать математиче-
скими формулами, как это сделал Георг Ом.

А ЗАКОН ОМА
I = U / R
U = I R
R = U / I

86
Эпизод одиннадцатый.
Датчики — органы чувств
робота

Е сли вас спросить, каким образом человек получает информацию, вы, естественно, от-
ветите, что с помощью органов чувств. Всякий раз, когда мы хотим понять, что про-
исходит вокруг нас, нам приходится обрабатывать данные, которые наш мозг получает
от внешних раздражителей через органы чувств: глаза, уши, нос, кожу и т. д.
Моделируем ситуации:
¤¤ Вы идете по дороге и видите яму: что нужно сделать? Сначала остановиться, ­затем
обойти ее.
¤¤ Друг издали окликает вас: оглянувшись на звук, вы приветливо машете рукой, ­затем
меняете направление и подходите к нему.
¤¤ Погожим весенним днем вам становится жарко, вы расстегиваете куртку и идете
нараспашку, радуясь теплому весеннему ветерку.

Человеческий мозг реагирует на внеш- робот реагирует с помощью специальных


ние раздражители. А вот как на окружающую устройств — датчиков. Например, если изме-
среду сможет отреагировать механическое нился уровень освещенности, датчик света
устройство? Ведь у робота нет ни глаз, посылает сигнал на контроллер, если плат-
ни ушей, ни кожи. Давайте подумаем. форма коснулась препятствия, контроллер
Самое главное устройство робота — ми- получает сигнал от датчика касания, ­если
кроконтроллер — просто-напросто работа- стало теплее или холоднее, это зафикси-
ет с сигналами: получает и отправляет их, рует датчик температуры. Вот эти самые
изменяя величину напряжения на выводах сигналы и обрабатывает процессор
процессора. А вот на внешнее воздействие контроллера.
87
11.1. Какие бывают датчики
Естественно, датчики по-разному устро- оборудования менее надежной из-за допол-
ены и имеют разную стоимость, поэтому на нительных разъемов, но улучшает мобиль-
робота устанавливают только те, которые ное управление.
нужны для выполнения его функций — вряд Например, на платформах SmartCar УМКИ
ли роботу на конвейере автомобильно- в полной комплектации установлены: датчик
го завода необходимы те же датчики, ­освещенности, датчик температуры, датчик
что и ­р оботу-исследователю на других атмосферного давления, датчик влажности,
планетах. датчик задымленности, датчик касания. Все
Датчики могут подключаться отдель- они встроенные и размещаются на плате
но, а могут быть уже встроенными на плате контроллера.
контроллера, и тогда наша задача — только А вот к плате с контроллером Arduino
подготовить для них программный код. Стои- датчики необходимо подключать по от-
мость оборудования очень зависит от количе- дельности — например, датчик Холла, опре-
ства имеющихся датчиков и, соответственно, деляющий наличие магнитного поля, или
от необходимости физически подключать их датчик расстояния. В этом случае датчи-
к платформе. Подключение внешних дат- ки под­к лючаются с помощью специальных
чиков обходится недешево и делает работу разъемов.

11.2. Цифровые и аналоговые сигналы


Контакты на ножках микрочипа контрол- В свою очередь, датчики, которые приоб-
лера могут быть аналоговые или цифро- ретаются отдельно и присоединяются к пла-
вые. На аналоговых ножках сигнал может те, тоже бывают либо аналоговые, ­либо
быть от нуля до какой-то предельной ве­ цифровые.
личины — такой сигнал меняется посте-
пенно. На ­цифровых контактах существуют
всего два варианта: сигнал либо есть, ли-
бо его нет. Иначе говоря, либо 0, либо 1
(что очень ­у добно при двоичном
кодировании).
88
Датчик с аналоговым выходом подает на А вот если датчик цифровой, то он на
контакт контроллера сигнал в виде измене- контакт контроллера дает информацию сра-
ния напряжения или сопротивления. И вы, зу в байтах — например, какое расстояние до
проектируя работу робота, должны сами препятствия.
предусмотреть в программе обработку полу- Иногда бывает удобно так, иногда
ченной величины и по формулам ­пересчитать ­по-другому, все зависит от поставленной
полученные результаты, например, опреде- задачи.
лив силу падающего света или температуру.

11.3. Как работает датчик


Давайте для примера проанализируем том, примет ответ и выполнит следую-
ситуацию, когда робот замеряет температуру. щие действия:
Для этого в программе управления роботом
обязательно должны быть команды, которые ¤¤ совершит разбор принятой программы;
задействуют работу датчиков. ¤¤ вычленит нужный байт со значением
температуры;
Например, рассмотрим по шагам, что про-
исходит, когда в программе SmartCar мы
¤¤ пересчитает по формуле, которую ис-
пользовали программисты, значение
нажимаем кнопку замера температуры на из закодированного в машинных ко-
пульте управления роботом. дах в конечное — десятичное;

¤¤ При нажатии одной из кнопок формиру- ¤¤ отобразит рассчитанное значение


на экране.
ется и отправляется в порт устройства
пакет данных.
¤¤ После того как робот получит команду
и замерит температуру, контроллер
сформирует пакет ответа и отправит его
в сеть, на координатор.
¤¤ Координатор с е ти, вс тав ленный
в USB-порт компьютера, на котором за-
пущена программа управления робо-
89
Датчик температуры производит замеры температуры наглядно, а не в виде бегущих
каждые 10 секунд. На экране в строке режи- цифр, то нужно нажать на кнопку «График
ма каждые десять секунд появляется новая температуры». В открывшемся окне строит-
надпись с результатом измерения, и так бу- ся график, в котором по оси Y указывается
дет происходить до тех пор, пока кнопка ак- значение температуры в градусах Цельсия,
тивна. Если же мы хотим увидеть изменения по оси X — время в часах и минутах.

Аналогичным образом работают датчики, По встроенной программе контроллер


подключаемые отдельно, например датчик опрашивает состояние датчика.
расстояния, который может использоваться
на платформе Arduino.

90
Затем получает результат
и обрабатывает его.

И, наконец, отправляет ин-


формацию с показанием
датчика обратно в сеть на
координатор.

То есть нам вовсе не нужно бегать вершать указанные ему действия на протяже-
к устройству и вручную нажимать кнопку нии всего времени работы программы — лишь
снятия показаний датчика. Робот будет со- бы хватило энергии.

Эпизод двенадцатый.
Датчики своими руками

В этом эпизоде мы разберемся, как все-таки устроены и действуют датчики,


и с ­помощью электронных компонентов сами, своими руками, спроектируем и собе-
рем несколько датчиков.

Мы уже обсудили в самых общих чертах, на практических примерах разобрать-


что делает контроллер, теперь наша з­ адача — ся, как действуют датчики и как они
устроены. 91
Вы наверняка уже поняли, что мы опять более серьезный вариант робототехниче-
будем говорить о науке электронике. В пре- ского конструктора. Он не требует работы
дыдущих эпизодах мы изучали электронный с паяльником, все детали монтируются на
конструктор, рассчитанный на детей младше- специальной макетной плате, но электрон-
го возраста, где все компоненты подключа- ные компоненты используются уже самые
лись на кнопках. Пришло время рассмотреть настоящие.

Схема соединений Схема соединений


вертикальных линий горизонтальных линий
+ -

+ -
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
AB C DE

AB C DE
F GH I J

F GH I J
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
29
30

9
8
7
6
5
4
3
2
1
+ -

+ -
Макетная плата — это поле с боль-
шим количеством отверстий, в ко-
торые вставляются электронные
компоненты.

92
Отверстия между синей и красной го- уровня. В качестве первого опыта подклю-
ризонтальными линиями соединены друг чим светодиод. Как вы помните, нам необхо-
с другом по горизонтали. Отверстия средней дим источник питания, дающий напряжение
части макетной платы связаны между собой 6 вольт, и светодиод.
вертикально.
Синяя и красная горизонтальные линии
служат магистралями для подключения пи-
тания: на красную подается плюс, а на си-
нюю — минус.
Компоненты в схеме удобнее всего соеди-
нять с помощью специальных проволочных
перемычек, но можно и просто отрезать и за-
чистить концы провода.
Начнем со схемы, которую мы уже пробо-
вали собирать из конструктора начального

12.1. Одинокий светодиод


Как вы помните, подключать светодиод при подключении светодиода к источни-
необходимо таким образом, чтобы ток проте- ку питания необходимо использовать рези-
кал от анода к катоду — от плюса к минусу. стор. В электронном конструкторе начального
Обязательное требование техники без-
опасности: «Сборку любого устройства не-
обходимо начинать при отк люченном
электропитании»!
Вы, конечно, отлично помните схему под-
ключения светодиода и можете сами ее на-
чертить. Но при сборке с помощью этого
электронного конструктора нам обязатель-
но потребуется ограничивать силу тока, ко- + –
торый протекает через светодиод. Для этого
93
уровня резистор уже был припаян к светоди- В макетную плату устанавливаем анод
оду, образуя единую конструкцию с кнопками светодиода в отверстие у красной линии. Как
крепления, но мы-то работаем с настоящими вы помните, отверстия для установки элек-
электронными компонентами, поэтому теперь тронных компонентов соединены перпенди-
наша схема ­будет иметь следующий вид: кулярно красным и синим линиям макетной
платы (на иллюстрации они отмечены зеле-
ным цветом).
D1 Катод (короткий вывод) светодиода
и один из выводов резистора устанавли-
ваем в отверстия, расположенные на одной
6v

вертикальной линии, на этой же линии уста-


R1 навливаем второй вывод резистора и вывод
проволочной перемычки. Второй же вывод
проволочной перемычки устанавливаем в от-
верстие рядом с синей линией.
Резистор не имеет полярности. Подклю- Если все компоненты установлены пра-
чать к светодиоду его можно любым выво- вильно, то при подаче электропитания све-
дом. Для нашей схемы нам нужен резистор тодиод начнет излучать свет:
номиналом 360 Ом, а вообще различные ре-
зисторы имеют различное сопротивление.
Номинал резистора можно определить по
цветовой маркировке или измерить с помо-
щью специального прибора — тестера.
От величины сопротивления резистора бу-
дет зависеть яркость свечения светодиода.
Чем больше величина сопротивления, тем
меньше яркость светодиода, и чем меньше
сопротивление, тем больше яркость. Но бес-
конечно уменьшать величину сопротивления
нельзя. Это приведет к нарушению ра-
ботоспособности светодиода, то есть Теперь попробуем подключить не один,
он просто сгорит. а линейку светодиодов.
94
12.2. К
 огда мои друзья со мной...
Подключение нескольких светодиодов
Дополним нашу схему еще двумя парами схему кнопкой, которой можно будет включать
светодиод-резистор. Схема приобретет сле- и выключать один из светодиодов.
дующий вид: Вы помните, как кнопка изображалась на
принципиальной схеме. А на самом деле она
может выглядеть, например, вот так:
D1 D2 D3
6v

R1 R2 R3

Сборка очень проста: повторяем нашу кон-


Конечно, преобразовать нашу схему очень
струкцию три раза, сдвигая ее на несколь-
легко — достаточно вставить кнопку вместо
ко клеток-отверстий. Результат будет иметь
одного из проводов, соединяющих резистор
следующий вид:
с отрицательной шиной:

D1 D2 D3
6v

R1 R2 R3

Кажется, все хорошо, но даже в самых пер-


вых экспериментах с электроникой мы добав-
кнопка
ляли управляющие элементы, позволяющие
в нужный момент включить или выключить
нашу конструкцию. Поэтому дополним нашу 95
А вот каким образом преобразовать схе-
му, чтобы одной кнопкой включались и вы-
D1 D2 D3
ключались сразу все светодиоды? Подумайте,
как изменится конструкция сборки, и дочер-

6v
тите измененную схему.
R1 R2 R3

Подведем итог

Н а чертеже макетной платы разместите элементы схемы, в которой одна кнопка


управляет всеми светодиодами (электронные компоненты можно изобразить в про-
извольном виде).
+ -

+ -
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
AB C DE

AB C DE

Научившись обра-
щаться с макетной пла-
той, можно попробовать
F GH I J

F GH I J

собрать несложный дат-


чик — устройство, кото-
рое каким-то образом
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
29
30

9
8
7
6
5
4
3
2
1

реагирует на изменение
+ -

+ -

внешних условий.
96
12.3. Да будет свет! Датчик света
Датчик света — устройство, включающее знаком и имеет три вывода: эмиттер, базу
или выключающее различные исполнитель- и коллектор.
ные механизмы в зависимости от освещен- Работа датчика света основана на свой-
ности окружающей среды. стве фоторезистора изменять величину сво-
Кроме компонентов электронного кон- его сопротивления в зависимости от степени
структора, которые мы уже использовали, освещенности. При отсутствии освещения
нам потребуются два новых: фоторезистор величина сопротивления фоторезистора со-
и транзистор. ставляет 10 кОм. А при освещении ярким
Фоторезистор — полупроводниковый при- солнечным светом или обычной лампочкой
бор, электрическое сопротивление которого сопротивление фоторезистора уменьшается
меняется в зависимости от интенсивности в 10-20 раз. Чтобы управлять током в элек-
падающего на него света. Чем интенсивней трической цепи при работе датчика, нам не-
свет, тем больше создается свободных носи- обходим транзистор.
телей зарядов и тем меньше становится со-
противление элемента. R1
R3

6v

D1

Q1
BC547
R2
Транзистор — радиоэлектронный ком-
понент из полупроводникового материала,
обычно с тремя выводами, позволяющий
с помощью входного сигнала управлять током Рассмотрим, как транзистор управляет
в электрической цепи. Обычно используется работой датчика света. Фоторезистор R1 —
для усиления, генерации и преобразования это непосредственный датчик света, рези-
электрических сигналов. На электрической стор R2 устанавливает режим работы
схеме обозначается следующим условным транзистора. Исполнительная часть
97
в­ ыполнена на транзисторе Q1. Сопротивление R3
резисторов R2 и R3 — 1 кОм. R1

При отсутствии освещения сопротивле-


ние фоторезистора увеличивается до 10кОм.

6v
При этом напряжение на средней точке меж- D1

ду фоторезистором и резистором не способно


открыть («включить») транзистор, то есть по
Q1
этой ветви цепи электрический ток не про- BC547
текает и светодиод не светится. R2

При наличии дневного или комнатно-


го освещения сопротивление фоторезисто-
ра составляет примерно 1 кОм. Напряжение,
которое создается на средней точке между Q1. Через транзистор начинает протекать
фоторезистором R1 и резистором R2 спо- электри­ческий ток, и светодиод начинает
собно открыть («включить») транзистор светиться.

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

Р ассмотрим по шагам, как собрать дат-


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

98
Соединяем перемычкой эмиттер тран-
зистора (правая ножка) с минусом батареи
(­синяя линия).

Заканчиваем сборку схемы соединением


перемычкой средней точки между фоторе-
зистором и резистором и базы транзистора.
К коллектору транзистора (левая нож-
ка) подключаем светодиод и резистор R3.
Не забываем о соблюдении полярности све-
тодиода: катод светодиода (короткая нож-
ка) подключаем к коллектору транзистора,
а анод — к резистору R3.

Подключаем питание

При наличии освещения светодиод на ма-


кетной плате должен сразу начать светить-
ся. Если закрыть фоторезистор рукой или
Затем устанавливаем фоторезистор и ре- другим предметом так, чтобы исклю-
зистор R2 и перемычкой соединяем резистор чить попадание света, то свето­диод
R2 с минусом батареи. погаснет. 99
После того как мы проверили работо- открывание транзистора. Чтобы настроить
способность собранного устройства, уста- порог срабатывания, заменим резистор R2
новим необходимый порог срабатывания резистором с сопротивлением 360 Ом. И мы
датчика, то есть настроим его так, чтобы увидим, что светодиод гаснет уже при даже
свет отключался при определенном уровне слабой освещенности.
освещенности. Таким образом, подобрав величину со-
Как мы говорили, резистор R2 определяет противления R2, мы можем настроить наш
режим работы транзистора Q1. Соответствен- датчик на требуемый нам порог выключе-
но, от величины сопротивления R2 зависит ния светодиода.

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

Качественная оценка освещенности,


Номинал резистора
при которой гаснет светодиод

R2=360 Ом

R2>360 Ом

R2<360 Ом

100
12.4. О
 чень трудно оставаться детям
в темной комнате (датчик темноты)
Итак, датчик света мы собрали и настро- Порядок сборки этого датчика практически
или, но, наверное, более полезным в быту не отличается от порядка сборки датчика све-
оказался бы датчик темноты. Например, он та. Но при включении может оказаться, что
может автоматически включать освещение, светодиод не реагирует на наступление тем-
когда темнеет на улице. ноты. Порог включения датчика нужно на-
Датчик темноты отличается от датчика строить подбором резистора R1. Запишите
света инверсным1 (обратным) порядком ра- наблюдаемые результаты.
боты. То есть когда на датчик попадает свет,
R2 R3
светодиод не горит, если датчик затемнить —
светодиод включается.
Для этого на схеме, собранной для дат-

6v
D1
чика света, необходимо поменять местами
подключение фоторезистора и резистора,
отвечающего за режим работы транзистора. Q1
BC547
Для датчика темноты нам потребуются ре- R1
зисторы R1 — 33 кОм и R3 — 1 кОм.

Номинал Качественная оценка освещенности,


резистора при которой срабатывает светодиод
R1=

R1=

R1=

1
Мы уже употребляли термин «инверсия», когда го-
ворили про операцию НЕ в логике. Мы инвертировали,
«переворачивали» значение переменной. 101
Как вы помните, с конструктором начального уровня мы проводили эксперименты, ими-
тируя различные звуки. Попробуем, используя наш конструктор, самим собрать подобное
устройство, подающее звуковые сигналы.

12.5. В
 ой пронзительной сирены.
Генератор сигналов звуковой частоты
Генератор сигналов звуковой частоты — Чтобы не строить сложные схемы из ди-
это генератор сигналов, слышимых челове- одов и транзисторов, можно просто восполь-
ческим ухом. зоваться готовым устройством в DIP-корпусе.
Ниже приведена схема генератора, со­ Нумерация выводов микросхемы начи-
здающего сигнал с частотой примерно 1 кГц. нается от так называемого ключа. Ключ —
Фоторезистор позволяет менять частоту это расположенная на корпусе микросхемы
сигнала в зависимости от освещенности. Чем точка, от которой и отсчитываются выводы.
выше частота сигнала, тем более тонкий звук Еще нам потребуются электронные
мы слышим. Например, львиный рык имеет устройства — конденсаторы, способные на-
значительно более низкую частоту, нежели капливать электрический заряд. В зависи-
писк летучей мыши. мости от способа изготовления конденсаторы
Генератор собран на микросхеме NE555 могут быть полярными и неполярными.
(мы использовали микросхемы в преды-
дущих эпизодах, когда подавали звуковые
сигналы). Эта микросхема — интегральный
таймер с восемью ножками, внутри которого
скрываются транзисторы, диоды и резисто-
ры — то есть в маленьком корпусе собрана
очень сложная схема из множества транзи-
сторов и диодов.

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

Алгоритм сборки генератора

С борку генератора удобнее начинать с установки микросхемы. Она устанавливает-


ся в центральную часть макетной платы. Мы соединяем выводы микросхемы с мину-
сом и плюсом батареи. Рассматривая схему датчика, мы видим, что вывод микросхемы
1 ­соединяется с минусом батареи, выводы 4 и 8 соединяются с плюсом батареи.
Затем с помощью перемычки соединя- Проверим работу схемы. При включении
ем между собой ножки 2 и 6. К этим ножкам питания устройство начинает генерировать
подключаем конденсатор С2. Конденсатор С1 колебания звуковой частоты, и в динамике
подключаем к ножке 5. мы услышим писк.
Устанавливаем резистор R1, фоторези- При изменении освещенности будет из-
стор R2, конденсатор C3. меняться величина сопротивления фоторези-

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

Эпизод тринадцатый.
Протокол связи —
настоящее и будущее

Н аверняка каждый из вас слышал слова Wi-Fi и Bluetooth. Даже с машинками SmartCar мы
устанавливали связь по Bluetooth. Но знаете ли вы, что эти слова означают? Вдоба-
вок роботизированные платформы можно связать друг с другом не только по Bluetooth,
но и иначе. А каким именно способом? Какие способы обмена информацией между устрой-
ствами существуют? Давайте обсудим подробнее.

13.1 Протокол — способ общения роботов


Мы, люди, так или иначе общаемся между собой. Как это происходит? Например, вы хоти-
те передать другу информацию о месте и времени встречи. Вы можете написать ему
сообщение по электронной почте, послать смс, оставить записку, ну и, конечно, по-
звонить по телефону или договориться при личной встрече. При этом вы подаете
104
сигнал, а ваш друг его принимает. Чтобы он ровой сигнал, поступающий с компьютера,
понял ваши слова (распознал сигнал), жела- преобразуется и посредством радиоволн пе-
тельно, чтобы вы говорили на одном языке. редается на другое устройство.
Роботы тоже обмениваются информаци-
ей и между собой, и с человеком, то есть об-
щаются. Язык общения роботов — это и есть
протокол связи.
Допустим, вы хотите, чтобы уехавший
в другой угол комнаты робот пискнул или
подмигнул диодом. Для этого вы должны со
своего компьютера подать роботу нужную ко-
манду, а он должен понять ее и отреагиро-
вать. Чтобы команда была понята правильно,
источник сигнала (ваш компьютер) и прием-
ник сигнала (робот в углу) должны общать-
ся по одному протоколу.
Допустим, вам необходимо передать робо-
ту команду зажечь свет: в программе управ- В это время робот ожидает команды. При
ления роботом вы нажимаете кнопку Свет. приеме сигнала адаптер преобразует его
При этом программа понимает, что ей на- в цифровую форму, понятную компьютеру,
до сформировать определенный пакет дан- и робот, в соответствии с переданной ему
ных и отправить его в порт1 на устройство. программой, выполняет указанное действие.
Какие устройства есть у вашего ноутбука Причем, если робот укомплектован
или планшета? Это, скорее всего, адапте- Bluetooth-модулем, то он никак не отреаги-
ры Bluetooth, Wi-Fi или присоединенный по рует на вашу команду, отправленную по Wi-Fi.
USB-порту ZigBee-модуль. В адаптере циф- Точно так же, если вы своего щенка приучали
1
Порты ввода-вывода являются основным сред- к команде «сидеть», произнося ее по-русски,
ством связи микроконтроллеров с окружающим то он ничего не поймет, если вы будете отда-
миром. Через эти порты микроконтроллер получа- вать ее на английском или немецком языке.
ет сигналы (аналоговые или цифровые) от внешних
устройств; управляет или обменивается данными Каждый протокол имеет несколько
с внешними устройствами; сигнализирует о проде- уровней. Уровни разделяются на низ-
ланной работе и т. д. кие, средние и высокие. Самый вы-
105
сокий — уровень приложений. А вместе все Протокол Wi-Fi гораздо более произ-
уровни составляют стек протокола. Так, от- водительный, он позволяет обмениваться
данную щенку команду «сидеть» можно раз- данными с большей скоростью. Его можно
делить на низкий, физический уровень — это использовать, например, между планшетом
колебания воздуха, и высокий, логический — и ноутбуком, но для этого протокола необ-
это сама команда, по которой щенок должен ходима точка доступа. Связь может осущест-
именно сесть, а не лечь или подать голос. вляться через центральную точку доступа,
относительно которой все устройства нахо-
А если отдать команду: «Дружок, сидеть!», дятся в зоне прямой видимости, или через
то появится и средний уровень — сетевой, промежуточные точки доступа — роутеры.
на котором мы адресуем команду конкрет-
Недостатком этих протоколов является то,
ному щенку.
что они очень много потребляют энергии, да-
Низкий физический уровень — это колеба- же когда ничего не делают.
ния электромагнитного поля. В России для
Третий протокол, который мы рассмо-
протоколов ZigBee, Bluetooth и Wi-Fi сигнал
трим, — ZigBee, отличается тем, что был из-
передается на частоте 2,4 гГц. Для этих про-
начально задуман как протокол для малого
токолов физический уровень одинаков.
энергопотребления, например, для небольших
Различия возникают на сетевом уров- устройств с автономными источниками пита-
не, когда устройства идентифицируются по ния — батарейками.
MAC-адресам, уникальным опознавательным Основная це ль
номерам. Этот уровень нужен, чтобы адресо- этого протокола —
вать команду либо всем устройствам в се- позволять устрой-
ти, либо какому-то конкретному устройству. ствам, разбросанным
Чем же различаются протоколы ZigBee, с лу чайным обра-
Bluetooth и Wi-Fi? Почему нельзя пользо- зом, самостоятель-
ваться каким-то одним? но ­о рганизоваться
Исторически сложилось так, что каждый в сеть и поддержи-
протокол создавался под конкретные нуж- вать ее как мож-
ды. Bluetooth предназначен, чтобы связывать но дольше, собирая
друг с другом устройства на коротком рассто- и передавая на цен-
янии (до 10 м) — например, два мобильных тральную точку дан-
телефона при передаче файлов либо ные об исследуемой
беспроводные наушники и планшет. территории напри-
106
мер, о температуре или освещенности. Это
нужно для осуществления так называемого
экологического мониторинга. Большее вре-
мя жизни для устройств в сети ZigBee до-
стигается за счет того, что пока ничего не
происходит, каждое устройство в сети спит
и практически не потребляет энергию.
Таких устройств в сети, называемых мота-
ми, может быть очень много, они небольшие Но такая «живучесть» сети, основанной на
по размерам, из-за чего их иногда называют протоколе связи ZigBee, накладывает и неко-
пылинками (есть даже такой термин Smart торые весьма существенные ограничения. Так,
Dust — умная пыль). например, алгоритмы для маршрутизации
потоков данных в сети нужно разрабатывать
с учетом того, что некоторые узлы-моты могут
спать или даже полностью выпадать из сети.
Протокол ZigBee был выбран в качестве
базового для связи в роботах типа SmartCar
УМКИ. На каждой умной машинке установ-
лен модуль связи Xbee, который позволяет по
протоколу ZigBee связывать множество ма-
шинок в единую сеть.
Дальность действия этого модуля может
Они могут объединяться в так называе-
составлять один километр. Например, если
мую MESH-структуру (меш-структуру), в ко-
40 тысяч машинок SmartCar расставить на
торой каждый мот общается не со старшим
поверхности земли через один километр, то
в группе, а с равноценным участником, нахо-
последняя машинка окажется на расстоя-
дящимся в зоне прямой видимости. И пакет
нии одного километра от первой, потому что
данных внутри такой MESH-сети переходит от
мота к моту, распространяясь лавинообразно. длину окружности Земли по периметру мож-
но считать равной 40 тысячам километров.
Это бывает очень удобно. Если у какого-то И тогда с единого пульта управления мож-
мота заканчивается энергия в батарейках но заставить мигать диодами или издавать
и он выпадает из сети, то поток информа- звуковые сигналы все устройства сразу, по
ции, который шел через него, не прерывается, очереди или в любом порядке — доста-
а продолжает перетекать по другим узлам. точно построить нужный алгоритм.
107
Подведем итог

13.1. Предположите, каким образом передача информации может осуществляться в будущем.

13.2. Соедините название каждого протокола с его описанием.

Протокол Bluetooth  Протокол малого энергопотребления, позволяющий организовать


 
роевое управление устройствами сети.
Протокол Wi-Fi  Протокол, позволяющий с большой скоростью обмениваться дан-
 
ными между несколькими устройствами, но обязательно исполь-
зующий для этого точку доступа.
Протокол ZigBee  Протокол, позволяющий связывать друг с другом несколько
 
устройств на коротком (порядка нескольких метров) расстоянии.

13.3. Используя устройства связи, имеющиеся в вашем распоряжении, проведите сравнительный


­анализ способов связи по различным протоколам:
Характеристика Wi-Fi Bluetooth ZigBee
Расстояние, покрываемое сетью
Скорость передачи информации
Частота
Количество устройств, охватываемое
сетью
Потребляемая мощность

Взаимодействие устройств сети,


управляемой данным протоколом
108
Эпизод четырнадцатый.
MAC-адрес не дом
и не улица…

С помощью протокола можно отправить информацию на разные устройства в сети.


А как определить, какому именно устройству отправить информацию, если устройств
в сети много? Как отличить одно от другого?

Для того чтобы устройства, изготовлен- Всего в модели ISO семь уровней: физи-
ные разными разработчиками, в рамках од- ческий, канальный, сетевой, транспортный,
ного протокола всегда могли связаться друг сеансовый, уровень представления и при-
с другом и понимать отправляемые команды, кладной. Мы рассмотрим только первые три.
необходимо разработать единый стандарт.
Когда вы со своего мобильного телефона На первом, физическом уровне данные пе-
подключаетесь к точке Wi-Fi, то совершено редаются в виде электрических сигналов, то
не задумываетесь, кто произвел этот кон- есть информация кодируется с помощью из-
кретный роутер. Чтобы решить проблему со- менения силы тока в проводнике.
вмещения и стыковок различных элементов На втором, канальном уровне микро-
сетей, разработчики договорились о единых схемы сетевой карты преобразуют эти дан-
стандартах, прописанных в модели взаимо- ные в цифровой поток, который уже можно
действия открытых систем (ISO). анализировать.
В модели ISO все функции сети разде- Представьте себе сеть из нескольких
лены на уровни таким образом, что вы- устройств, которые подключены проводом
шележащие уровни используют услуги по к одному компьютеру. Этот компьютер посы-
переносу информации, предоставляемые ни- лает пакет данных, например, устройству 007.
жележащими уровнями. Такая структура по- В нашем случае 007 — это некий адрес-иден-
зволяет модифицировать и даже заменять тификатор. Отправитель помечает, что этот
любой уровень, не затрагивая остальные. пакет предназначен для устройства 007,
Кроме того, деление на уровни дает возмож- а само устройство 007, получив пакет,
ность упростить реализацию каждого из них. начинает его обрабатывать. При этом
109
пакеты данных для других устройств игно- лером стандарта. Первые три знака адреса
рируются. Так обеспечивается адресная до- определяют производителя.
ставка данных. Мы говорили о том, что для MAC-адрес можно посмотреть на упаковке
связи и идентификации устройства в сети ис- сетевой карты или наклейке. Например, у но-
пользуется MAC-адрес — уникальный, серий- утбуков или маршрутизаторов (точек доступа
ный номер, назначаемый каждому сетевому и модемов) на дне обязательно есть наклейка,
устройству при его производстве. MAC-адрес содержащая MAC-адреса на все сетевые интер-
позволяет из множества электрических сиг- фейсы. С помощью этого идентификатора доступ
налов выделить именно те данные, которые к сети можно как разрешить, так и запретить.
адресованы конкретному устройству.
На третьем уровне, сетевом, MAC-адрес
уже необходим для адресации пакета данных
в большой сети. Появляется IP-адрес, кото-
рый указывает, куда доставлять пакет данных
для второго уровня, то есть появляется связ-
ка MAC-адрес — IP-адрес. Например, на один
IP-адрес маршрутизатора может быть заре-
гистрировано несколько устройств, и марш- Наклейку на компьютере искать не очень
рутизатор при обработке данных на третьем удобно, поэтому для определения MAC-адре-
уровне будет анализировать пакеты и отправ- са компьютера следует использовать коман-
лять их нужному устройству по MAC-адресу. ду ipconfig в меню «Пуск» компьютера. В поле
Каждая сетевая карта или сетевой ин- ввода команд (поле поиска) набираем cmd,
терфейс имеет уникальный MAC-адрес. ­Если команду перехода в консольный режим ко-
MAC-адреса не были бы уникальны, то не мандной строки.
существовало бы способа различить между
собой два устройства, и это привело бы к на-
рушению работоспособности сегмента сети.
Для обеспечения уникальности MAC-­
адреса имеют длину 6 байт и обычно за-
писываются шестнадцатеричным числом
в формате 12-34-56-78-90-AB.
Каждый производитель сетевых
устройств использует определенный
110 диапазон MAC-адресов, который
был отведен только ему контрол-
В открывшемся окне консоли набираем команду ipconfig /all.

Среди выведенного текста ищем подключение по локальной сети — Ethernet-адаптер:


­Физический адрес: 1C-39-47-B6-7D-64.

Физический адрес — это и есть MAC-адрес. команды тот, который относится к нужному
Если на устройство установлено несколь- вам адаптеру или подключению.
ко сетевых карт, то и MAC-адресов, соответ- Знание MAC-адреса устройства помо-
ственно, будет несколько, на каждую карту жет вам выбрать конкретное устрой-
свой. Выбирайте из выведенного результата ство в ­сети из нескольких.
111
Подведем итог
14.1. Определите MAC-адреса устройств связи, имеющихся в вашем распоряжении (план-
шет, телефон, смартфон), по инструкции пользователя или наклейке на гаджете.
Используя режим командной строки, определите MAC-адрес компьютера или ноутбука

14.2. В
 озможно ли существование приборов с одинаковыми MAC-адресами? Выберите
правильный ответ.
 Да.
 Нет.
 Возможно, если устройства используются в разных сетях.
  Возможны одинаковые MAC-адреса только для групп устройств
одинакового типа (смартфонов, сотовых телефонов, ноутбуков
и т. п.).
14.3. Выберите правильный ответ: Кто назначает MAC-адрес устройству?
 Системный администратор сети.
 Любой пользователь сети.
 Владелец устройства.
 Производитель сетевых устройств.
 Никто не назначает, он сам появляется.

14.4. Выберите правильный ответ: В какой форме записывается обычно MAC-адрес?


 В произвольной текстовой форме.
 В такой, в какой потребует покупатель.
 В форме шестнадцатеричных кодов.
 С помощью специальных символов.

112
Эпизод пятнадцатый.
Славная машина — Arduino

В предыдущих эпизодах мы познакомились с электронными устройствами, такими как


светодиоды, транзисторы и т. д., получили представление о программировании, на­
учились отправлять команды некоторым контроллерам. Далее мы более подробно позна-
комимся с контроллерами семейства Arduino. При помощи электронного конструктора вы
сами будете подключать различные компоненты к контроллеру (кнопки, датчики и т. д.)
и составлять для управления ими программы на языке программирования.
В качестве контроллера мы будем ис-
пользовать платформу Arduino Nano, которая
состоит из двух основных частей — аппарат-
ного обеспечения (непосредственно платы
Arduino) и программного обеспечения, кото-
рое запускается на компьютере.
Основная деталь платы — это микрокон-
троллер. В него будут записываться про-
граммные коды-скетчи1, которые мы с вами пример, если она подключена к компьютеру
станем разрабатывать и анализировать. через USB-кабель, а к разъему питания под-
Электрическое питание на плату может ключен адаптер, то плата выберет адаптер.
подаваться от компьютера через USB-порт, Программное обеспечение представляет
от сети через специальный адаптер или же собой интегрированную среду Arduino IDE.
от отдельного источника питания — батарей- Ее можно бесплатно скачать на официаль-
ки или аккумулятора. Главное при подключе- ном сайте https://www.Arduino.cc/en/Main/
нии — не перепутать плюс с минусом и знать, Donate и после несложной настройки2 при-
что подключаемый источник должен давать ступать к работе.
напряжение от 3 до 12 В, максимум — 24 В.
Плата сама выберет источник питания: на- 2
Как настроить программную среду Arduino IDE
для работы с платой, имеющейся в вашем
1
Sketch (англ.) — эскиз. Скетчами называются про- распоряжении, подробно описано в разделе
граммы для Arduino. «Шпаргалки». 113
15.1. П
 латформа Arduino Nano.
Структура программы
Итак, мы скачали программное обеспече-
ние, настроили оборудование, теперь наша
задача — научиться с ним работать.
Среда управления платой Arduino
IDE содержит много готовых примеров,
в которых можно подсмотреть решение
какой-либо задачи. Для примера мы позна- Диод PWR сигнализирует о подключении
комимся с программой управления встроен- питания к плате Arduino.
ным светодиодом.
Как мы уже упоминали, Arduino IDE
Для удобства работы контроллер Arduino включает в себя большую коллекцию при-
Nano у нас размещен на плате K-6, о кото- меров-скетчей, которые можно загрузить и ис-
рой мы подробнее поговорим далее. Пока пользовать в своей работе. Скетч, в котором
же рассмотрим внимательно сам контрол- запрограммировано мигание светодиода, на-
лер. На нем расположены четыре светодио- зывается Blink. Загрузим скетч Blink, выполнив
да: TX, RX, PWR, L. команду: Файл → Образцы → 01.Basic → Blink.

114
После загрузки в окне IDE появится текст программы для мигания светодиода.

Обратите внимание, что текст программы лы действуют только на одну строчку. Ком-
состоит из инструкций и комментариев к ним. ментарии к встроенным скетчам даны на
Комментарии не влияют на выполнение про- ­английском языке, но мы будем писать их
граммы процессором. С их помощью можно на русском, когда приступим к созданию соб-
более подробно описывать работу программы. ственных программ.
Многострочные комментарии выделяются Процедура setup() выполняется один раз
символами /* ……*/ Текст в таких скобках не в начале работы программы или при вклю-
является какой-либо командой и не влияет чении питания Arduino. Она должна присут-
на работу программы, поэтому в них можно ствовать в каждом скетче. Последовательно
писать любые комментарии. выполняется каждая команда, заключенная
Если написать любой текст после двух между фигурными скобками этой проце-
наклонных черточек (//…), он также не будет дуры. Каждая команда должна завер-
распознаваться программой. Но эти симво- шаться символом «;».
115
void setup() {
// initialize the digital pin as an output
(вывод 13 инициализирован как выход).
pinMode(13, OUTPUT);
}

В рассматриваемой программе проце- ду 13, резистор уже встроен при изготовле-


дура setup() содержит только одну коман- нии контроллера.
ду pinMode (13, OUTPUT), которая сообщает После выполнения команд процедуры
Arduino, что мы собираемся использовать вы- setup процессор переходит к выполнению ко-
вод (пин) номер 13 как выход. Это означает,
манд процедуры loop(). Особенность этой про-
что на выводе 13 платы будут появляться
цедуры в том, что ее команды выполняются
электрические сигналы, которые создает сам
контроллер. Все указанные действия обяза- в бесконечном цикле, то есть после выпол-
тельно вписываются между открывающей нения последней команды процессор снова
и закрывающей фигурными скобками — { }. приступает к выполнению первой. И так бу-
Встроенный светодиод на плате Arduino дет продолжаться, пока плата подключена
Nano и на самом деле подсоединен к выво- к источнику питания.

void loop() {
digitalWrite(13, HIGH); // возвращает на светодиод высокий уровень напряжения
delay(1000); // ждем одну секунду
digitalWrite(13, LOW); //возвращает на светодиод низкий уровень напряжения
delay(1000); // ждем одну секунду
}
Внутри цикла функции размещена ко- править команду подачи напряжения 5 В, то
манда, которая переключает состояние пи- светодиод начнет светиться, так как через
на в одно из двух возможных: HIGH или LOW. него потечет электрический ток. Если пин 13
HIGH соответствует логической единице (она установить в состояние LOW (0 В) — отклю-
же, в свою очередь, соответствует напряже- чить подачу напряжения, то светодиод све-
нию питания микроконтроллера +5 В. Состо- титься не будет.
яние вывода LOW соответствует логическому
Следовательно, оператор digitalWrite(13,
нулю, это близко к 0 В.
HIGH) формирует +5В на выходе 13 и зажи-
Если пин 13 на плате Arduino гает, таким образом, светодиод L1.
установить в состояние HIGH — на-
116 delay(1000);
Команда заставляет микроконтроллер вится близким к нулю, и светодиод гаснет.
остановиться и ничего не делать целых Затем снова выполняется команда паузы
1000 миллисекунд (1000 мс = 1 секунда). на 1000 миллисекунд.
То есть на выходе 13 в течение 1000 мс б­ удет На этом выполнение цикла заканчи-
высокий уровень напряжения, и светодиод вается, но функция loop снова автома-
­будет гореть. тически ­вызывается и запускает команду
digitalWrite(13, LOW); digitalWrite(13, HIGH). И так далее.
Команда переводит пин 13 в состо­
яние LOW. Напряжение на выходе стано-

15.2. П
 рактическая работа. Первый миг
(управление встроенным
светодиодом)
Цель работы: научиться подключать плату Arduino, запускать программы из библиоте-
ки, проверять работу программы, производить модификацию программы.
Оборудование и материалы: плата Arduino, компьютер, USB-кабель.
Порядок выполнения работы:
1. Подключите плату Arduino к компьютеру USB-кабелем.
2. Подготовьте плату к работе, выбрав в Arduino IDE нужный COM-порт.
3. Сохраните копию скетча из библиотеки. Для этого в меню Файл выберите опцию Со-
хранить как…. А затем сохраните скетч, присвоив ему имя, например, Blink1. Позже
можно будет просто открыть его командой Файл → Открыть.
4. Чтобы загрузить выбранный скетч в Arduino, нажмите на иконку «Загрузка»
(­вторая слева иконка на панели инструментов).

В нижней части IDE выводит ряд сооб- программы в формат, понятный для
щений. Сначала появится сообщение о ком- процессора.
пиляции скетча, то есть о преобразовании
117
Далее статус процесса изменится на «За- на Arduino начнут мерцать, указывая, что
гружаем». В этот момент светодиоды TX и RX скетч загружается в плату.

Наконец, в строке состояния появится текст «Загрузка завершена».

118
ОБРАТИТЕ ВНИМАНИЕ! Если в окне появится надпись типа: «Последовательный
порт СОМ3 не найден», проверьте подключение платы к компьютеру и правиль-
ность настройки в программе COM-порта, а также загляните в «Шпаргалки» и удо-
стоверьтесь, что вы все сделали правильно. Затем еще раз загрузите скетч.

Посмотрим, как можно изменить период мигания светодиода.

5. Проведите модификацию кода, изменив параметры команды delay:


Вместо строчки:
delay (1000);
напишите:
delay(100);

Подумайте, что произойдет при таком изменении программы?

119
6. Загрузите измененный скетч в Arduino чаще требуется, чтобы контроллер управлял
Uno и проверьте, как изменился период различными электронными компонентами,
мерцания светодиода. подключенными к внешним контактам — нож-
Итак, мы научились управлять встроен- кам микрочипа.
ными элементами контроллера. Но гораздо

15.3. Практическая работа.


Одинокий светодиод
Цель работы: научиться управлять отдель- Оборудование и материалы: резистор
ным светодиодом на макетной плате. номиналом 360 Ом, светодиод, перемычка,
макетная плата, Arduino, компьютер.

Внимание! Все подключения можно производить, только когда плата Arduino от-
ключена от компьютера.

D13
A0
D12
A1
D11
D1
A2 D10
GND

A3
GND

D9
A4 D8
Arduino Nano

A5 D7
A6 D6
A7 D5
+5V R1
+5V

120
Порядок выполнения работы: 4. Установите на макетную плату рези-
1. Соберите электрическую схему. стор, одну ножку которого подключите
2. Подключите минус (GND) питания Arduino к короткой ножке светодиода, а вторую
к минусовой шине макетной платы. Для ножку резистора установите в отверстие
этого установите один конец проволоч- вдоль синей линии.
ной перемычки на шилд GND платы K-6,
5. Проволочной перемычкой соедините
а второй конец перемычки — в отверстие
анод светодиода (длинную ножку) и кон-
вдоль синей линии макетной платы.
3. Установите светодиод на макетную пла- такт 13 платы Arduino.
ту. Для этого ножки светодиода вставь- 6. Проверьте правильность сборки и под-
те в отверстия по одной вертикальной ключите плату к компьютеру.
линии. 7. Запустите среду разработки Arduino IDE.

121
8. С копируйте текст приведенной ниже про- те в Arduino. Либо откройте скетч Blink1
граммы с комментариями на русском с комментариями на английском.
языке в среду разработки и загрузи-
/*Программа для мигающего светодиода
*/
// Светодиод подключаем к контакту 13 платы Arduino
// устанавливаем начальную команду, которая будет выполняться
// при включении питания
void setup() {
// определяем выбранный нами контакт платы Arduino, как выход
pinMode(13, OUTPUT);
}
// Теперь определяем, что и как будет выполнять наша программа пока
// подключено питание к плате Arduino:
void loop() {
digitalWrite(13, HIGH); // устанавливаем на контакте
13 высокий уровень (5 Вольт)
delay(1000); // ждем одну секунду
digitalWrite(13, LOW); // устанавливаем на нашем контакте 13 низкий
уровень (0 Вольт)
delay(1000); // ждем одну секунду
}
9. Испытайте работу программы. Опишите Чтобы поменять контакт подключения,
результат. необходимо внести изменения во все ча-
10. Измените в программе время задерж- сти программы, где встречается номер пина,
ки, аналогично тому, как вы это дела- и переключить светодиод на соответствую-
ли со встроенным светодиодом. Опиши- щий выход. Светодиод можно подключать
те результат. к любому выводу контроллера Arduino, но
Светодиод мы подключали к контакту 13. всякий раз будет необходимо вносить в про-
В программе это прописано следующим грамму серию однотипных изменений.
образом:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
122 digitalWrite(13, LOW).
Попробуйте изменить программу управ- С одним светодиодом можно исправить
ления внешним светодиодом, подключив его, программу достаточно быстро, а если све-
например, к десятому контакту Arduino, затем тодиодов будет много? Давайте подумаем:
к любому другому. Но пока не будем исполь- как же оптимизировать процесс изменения
зовать для наших экспериментов контакты программы? Для этого нам потребуется еще
2, 3, 4, 5 — они нам понадобятся, когда мы одно понятие, связанное с программирова-
станем работать с моторами. Впрочем, если нием, — переменная.
контроллер Arduino установлен на плате K-6,
то и доступа к этим контактам с цифрового
разъема J13 нет.

15.4 Переменная — она такая


На уроках математики в школе вы исполь- Объявляется переменная командой int,
зовали обозначенные буквами (например, например:
x и у) величины, значение которых могло
int ledpin = 13;
изменяться. В программировании (а значит,
и в робототехнике) переменную определяют Слово int означает, что в качестве пере-
как место в памяти, где хранится некото- менной мы будем использовать целое число.
рое значение. Номер контакта — целое чис- Ledpin — это имя нашей переменной. Его-
ло, значит, нужна такая переменная, которая
то мы и придумываем сами. (Если хотите, его
может хранить целые числа. И вместо того,
можно изменить, только не забудьте изме-
чтобы всякий раз просматривать программу
в поисках всех мест, которые требуется из- нить это имя во всех местах программы, где
менить, мы просто изменим в одном месте оно встречается, и учтите, что Arduino пони-
значение переменной. мает только латинские буквы).
Для этого в самом начале программы пе- 13 — это значение переменной, которое мы
ременную объявляют, то есть придумывают можем менять, когда захотим. Следователь-
ей имя и указывают, что «закладывать» в эту но, в любой момент мы можем переключить
переменную будут целые числа. светодиод на другой контакт Arduino.

123
Теперь скетч примет вид:
Int ledpin = 13;
void setup() {
pinMode(ledpin, OUTPUT);
}
void loop() {
digitalWrite(ledpin, HIGH); //Вольт)
delay(1000);
digitalWrite(ledpin, LOW);
delay(1000);
}
Теперь при изменении номера контакта Конечно, в такой короткой программе найти
больше не потребуется просматривать всю номер ножки выхода нетрудно, но ведь это
программу, выискивая, где записан номер наша первая программа, а следующие будут
­пина: достаточно изменить его всего один значительно длиннее. Поэтому переменная —
раз в начале программы, в переменной ledpin. очень удобная вещь в программировании!

Подведем итог

15.1. Какое максимальное питание можно подать на плату Arduino?


 3 вольта.  24 вольта.
 6 вольт.  220 вольт.

15.2. Могут ли платы Arduino оказаться на разных COM-портах?


 Да  Нет

124
15.3. Р
 асположите в правильной последовательности действия, необходимые, чтобы
подключить плату Arduino IDE к компьютеру.
 В меню Инструменты выбрать требуемый COM-порт.
 Запустить программу Arduino IDE.
 Убедиться, что требуемые параметры визуально отображаются
на интерфейсе программы.
 В меню Инструменты выбрать необходимую плату.
 Проверить на какой COM-порт подключена нужная плата.

15.4. Чему равняется 1000 миллисекунд?


 1 секунде;  100 секундам;
 10 секундам;  1000 секундам.

15.5. Если в программе управления светодиодом команду delay(1000) изменить на


­команду delay(100), то светодиод будет:
 мигать в два раза быстрее;
 мигать в два раза медленнее;
 мигать в десять раз быстрее;
 мигать в десять раз медленнее;
 частота работы светодиода не изменится.

15.6. Впишите правильный ответ:


Как изменить команду delay(1000) в программе управления светодиодом, чтобы
светодиод стал мигать в два раза быстрее?

125
Эпизод шестнадцатый.
Огоньки и кнопочки —
строим с Arduino

В этом эпизоде мы разберем ряд базовых примеров, на основе которых будет строить-
ся управление роботами в следующих эпизодах. Начиная с имитации елочной гирлян-
ды и заканчивая управлением моторами и датчиками расстояния, мы будем собирать
прикольные конструкции и всячески менять программный код, добиваясь интересных
эффектов.
В прошлом эпизоде мы познакомилось тересные модели. В этом эпизоде мы раз-
с простейшими конструкциями, реализован- берем ряд базовых примеров, на основе
ными на базе контроллера Arduino NANO. которых будет строиться наша дальнейшая
Теперь давайте попробуем создать более ин- работа.

16.1. Елочка, гори!


Итак, мы научились управлять одним светодиодом, но
что, если усложнить эксперимент, добавив несколько све-
тодиодов другого цвета? Получится прекрасный новогод-
ний сюрприз.
Давайте создадим линейку светодиодов, моргающих сле-
ва направо и справа налево, и используем на этот раз не один,
а восемь светодиодов.
Кстати, вопрос: сколько миллисекунд нужно поставить
в скетче, чтобы задержка была равна одной секунде1?
1
Конечно же, вы отлично знаете, что приставка
милли- означает тысячную часть, и, следователь-
но, в одной секунде тысяча миллисекунд.
126
Нам понадобятся: наши стандартные на- (вы наверняка помните, что резисторы необ-
стройки Arduino (компьютер, кабель, кон- ходимы для ограничения тока светодиодов),
троллер Arduino), восемь светоизлучающих макетная плата и соединительные провода.
диодов, восемь резисторов 360 Ом 0,25 Вт Электрическая схема имеет следующий вид:
D13 R13

D12 R12

D11 R11

D10 R10

D13
A0
D12 D9 R9
A1
D11
A2 D10
D8 R8
GND

A3

GND
D9
A4 D8
A5 Arduino Nano D7
D6
D7 R7
A6
A7 D5
D6 R6
+5V
+5V

В проекте «Одинокий светодиод» мы пер- захочется, чтобы они меняли цвет быстрее,
воначально использовали цифровой вывод или, наоборот, медленно и задумчиво... Что
13, но затем научились использовать циф- тогда делать?
ровые контакты с 8 до 12 (как вы помните, Мы уже знакомы с переменной. Достаточ-
контакты со второго по седьмой в наших экс- но один раз внести в нее информацию, чтобы
периментах мы пока не используем). время задержки изменилось во всей програм-
Аппаратная сторона проста — подключа- ме. Назовем эту переменную для хранения
ем провод от каждого цифрового контакта к времени задержки, например, del (естествен-
аноду светодиода, затем подключаем соеди- но, вы можете назвать ее так, как вам захо-
нительным проводом резистор 360 Ом и за- чется, только шрифт должен быть латинский).
земляем катод светодиода. Теперь наша задача — написать код!
Светодиоды мы заставим моргать в бес- Но сначала нам надо разработать ал-
конечном цикле последовательности 8-9- горитм работы. Например, для этого
10-11-12-13- ... с задержкой в одну секунду. эпизода он мог бы выглядеть при-
Должно получиться хорошо, но вдруг нам близительно так.
127
Алгоритм работы
¤¤ Устанавливаем, что все контакты мы будем использовать как выходы.
¤¤ Создаем переменную для хранения длительности задержки в миллисекундах.
¤¤ Начинаем бесконечно повторяемый цикл:
¤¤ включить контакт 6, ждать установленное время задержки, выключить его;
¤¤ включить контакт 7, ждать установленное время задержки, выключить его.
¤¤ Повторить эти операции для остальных выходов — с 8 до 13.
¤¤ Окончание бесконечного цикла.
Для начала давайте потренируемся на Ура! Заготовка для нашей новогод-
программе проще: попробуйте внести изме- ней гирлянды работает! Теперь можно по-
нения в программу, которая управляет всего думать, как использовать ее в новогоднем
двумя светодиодами на восьмой и девятой оформлении.
ножках Arduino. Соберите конструкцию и на- Чтобы закрепить изученное, попро-
пишите программу, преобразовав ее из про- буйте изменить скорость или порядок
граммы управления одиноким светодиодом, моргания светодиодов. Например, скор-
рассмотренной в предыдущем эпизоде. Если ректируйте программу так, чтобы све-
никак не получается, воспользуйтесь разде- тодиоды мигали в последовательности
лом «Шпаргалки». 6-7-8-9-10-11-12-13-12-11-10-9-8-7-6.
Добившись, чтобы два диода подми­
гивали именно так, как вы запланировали,
измените конструкцию и откорректируй-
те программу, чтобы задействовать свето­
диоды уже с восьмой по тринадцатую
ножку.
Наверняка у вас все получилось!
Если все же возникли проблемы, то
в «Шпаргалках» для проверки приведен код
для схемы из восьми светодиодов. Этот код
вы можете скопировать в IDE и загру-
зить в Arduino.
128
16.2. Многоцветное свечение
Конечно, мы сконструировали краси-
вую гирлянду, но вдруг у нас нет возмож-
ности развешивать множество светодиодов,
а праздника все-таки хочется. Попробуем
обойтись одним светодиодом, но не простым,
а особенным — трехцветным. Его еще называ-
ют RGB-светодиодом. Выглядит он так же, как Красный

и обычный, но внутри прозрачной колбы раз- Зеленый

мещены светодиоды красного, синего и зеле-


ного свечения. Синий
Катод
Изменяя яркость каждого светодиода, можно полу-
чать самые различные цвета. Принципиальная схе-
ма устройства имеет следующий вид:

Как вы помните,
при подк лючении
светодиодов обяза-
D13
R11 R12 R13 тельно используются
A0
A1
D12 резисторы (у нас на
D11
A2 D10 схеме это резисторы
GND

A3
R13, R12, R11 номи-
GND

D9
A4 D8
налом 360 Ом).
Arduino Nano

A5 D7
D6
D11 D12 D13
A6
A7 D5
+5V
+5V

129
Сборка устройства программы или при сбросе контроллера
¤¤ Устанавливаем светодиод в макетную Arduino.
плату так, чтобы все выводы свето­диода ¤¤ В процедуре loop() мы установим
были помещены в отверстия, не соеди- для красного, зеленого и синего цветов
ненные друг с другом. различные значения, которые и будут
определять цвет каждого свето­диода,
затем после паузы в одну секунду б­ удем
переходить к следующему цвету.
Приступаем к реализации алгоритма.
1. Итак, наш скетч мы начинаем с указа-
ния, какие контакты Arduino мы будем
использовать для каждого цвета: напри-
мер, ­контакт 13 для красного, 12 для зе-
леного, 11 для синего. Первым делом нам
¤¤ Затем устанавливаем резисторы и под- нужно объявить переменные. Имена пе-
ключаем их перемычками к контактам
Arduino D13, D12, D11. ременных можно придумать типа redPin,
greenPin (красный контакт, зеленый кон-
¤¤ Самый длинный вывод и для такого такт и т. д.).
светодиода — это катод. Его мы подклю-
2. Следующим шагом мы должны написать
чаем к минусу питания (GND).
процедуру setup(). Как мы знаем, эта функ-
ция работает только один раз при запуске
Задача эксперимента
программы или при сбросе контроллера
Заставить светодиод переливаться различ-
Arduino. В нашем случае мы определяем
ными цветами, научиться управлять скоро-
контакты контроллера как выходы. Поду-
стью изменения цвета и регулировать оттен-
майте, какой вид будут иметь команды
ки свечения.
процедуры void setup(), где вывод контрол-
лера, соответствующий каждому цвету, ис-
Алгоритм работы пользуется в режиме «выход».
¤¤ В о-первых, определим, какие кон- 3. Затем подготовим процедуру loop(), в ко-
такты Arduino каждого цвета будут торой установим для красного, зеле-
задействованы. ного и  синего цветов различные зна-
¤¤ С ледующим шагом пишем чения  — они и будут определять цвет
процедуру setup(), которая свечения каждого светодиода. Делаем
130 работает только один раз при паузу на одну секунду и переходим к дру-
запуске гому цвету.
void loop() setColor(255, 0, 0); // красный
{ delay(1000);
setColor(255, 0, 0); // красный setColor(0, 255, 0); // зеленый
delay(1000); delay(1000);
setColor(0, 255, 0); // зеленый setColor(0, 0, 255); // синий
delay(1000); delay(1000);
setColor(0, 0, 255); // синий setColor(255, 255, 0); // желтый
delay(1000); delay(1000);
setColor(255, 255, 0); // жёлтый setColor(80, 0, 80); // пурпурный
delay(1000); delay(1000);
setColor(80, 0, 80); // пурпурный setColor(0, 255, 255); // голубой
delay(1000); delay(1000);
setColor(0, 255, 255); // голубой }
delay(1000);

В общем виде наша программа должна #ifdef COMMON_ANODE


иметь вид: red = 255 - red;
/* green = 255 - green;
Программа управления трехцветным blue = 255 - blue;
светодиодом #endif
*/ analogWrite(redPin, red);
int redPin = 13; analogWrite(greenPin, green);
int greenPin = 12; analogWrite(bluePin, blue);
int bluePin = 11; }

void setup() Давайте внимательнее рассмотрим послед-


{ ний блок в скетче.
pinMode(redPin, OUTPUT); void setColor(int red, int green,
pinMode(greenPin, OUTPUT); int blue)
pinMode(bluePin, OUTPUT); {
} analogWrite(redPin, red);
void loop() analogWrite(greenPin, green);
{ analogWrite(bluePin, blue);
void setColor(int red, int green, } 131
int blue)
{
Эта функция имеет три аргумента, опре- свечения светодиода будет находиться в диа-
деляющие яркость красного, зелёного и си- пазоне от 0 до 255. При значении 255 ­яркость
него светодиода. В каждом случае яркость светодиода будет максимальной.

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

16.3. Ц
 ветовая модель. Почему светодиод
светит разными цветами. Лирическое
отступление
В предыдущем эксперименте мы научи- зовых цветов: красного (R), зеленого (G)
лись задавать светодиоду определенный и синего (B).
цвет и даже заставили его переливаться
Допустим, мы подаем однобитовый сигнал
разными оттенками. Но как это у нас полу-
на к а ж д у ю
чилось, если электронное устройство одно?
область. Если
Как мы говорили, внутри пластиковой
подать по од-
колбы у нас установлены светодиоды трех
базовых цветов: красный (Red), зеленый ному биту на
(Green), синий (Blue), которые соответству- к а ж д ый из
ют цветовой модели, принятой в электро- базовых цве-
нике — RGB. тов  — один
Цветовая модель RGB представ- на красный,
ляет собой комбинацию трех ба- один на зеле-
132
ный и один на синий, то, комбинируя их сочетания, можем получить восемь различных цветов —
от черного до белого (черный, красный, зеленый, синий, желтый, пурпурный, голубой, белый).

Естественно, если мы по-


Красный Зеленый Синий Итоговый цвет
дадим не один бит, а боль-
0 0 0 Черный ше, то увеличится и коли-
0 0 1 Синий (Blue) чество комбинаций цветов.
0 1 0 Зеленый (Green) Например, если подавать
по три бита на каждый цвет
0 1 1 Голубой (Cyan) (от 000 до 111), то и комби-
1 0 0 Красный (Red) наций цветов будет уже 255.
1 0 1 Желтый (Yellow) Так и с нашим светодиодом:
подавая сигналы на разные
1 1 0 Пурпурный (Magenta )
ножки, мы можем заставить
1 1 1 Белый его светить самыми разны-
ми цветами.

16.4. Нажимаем кнопочку


До этого момента мы рассматривали раз- жата, напряжение становится высоким (HIGH).
личные варианты управления. Настало вре- Резистор необходим, чтобы на входе Arduino
мя научить Arduino что-нибудь чувствовать: уверенно формировалась логическая едини-
начнем с простой кнопки. В этом эпизоде мы ца, когда кнопка отжата.
будем управлять включением и выключени-
ем светодиода с помощью кнопки.
Подключить кнопку очень просто. Нам по-
надобится только один компонент — подтяги-
вающий резистор. Этот резистор необходим,
потому что Arduino получает информацию не
так, как мы. Контроллер не чувствует, нажа-
та кнопка или нет, вместо этого он контро-
лирует значение напряжения на своем входе.
Нажатие на кнопку приводит к обнулению
напряжения (LOW) на входе. Когда кнопка от- 133
Код для работы в этом эпизоде мож- грамме номер контакта кнопки на 12 (по
но найти среди встроенных примеров умолчанию в примере установлен номер 2),
Arduino IDE: Файл → Примеры → 02.Digital → так как второй контакт Arduino у нас пред-
Button. Только не забудьте изменить в про- назначен для моторов.

Задача эксперимента:
Научиться использовать кнопку для управления различными компонентами.

134
Алгоритм работы
Анализируем скетч.
// устанавливаем номера контактов:
const int buttonPin = 12; // задаем номер контакта, подключенный к кнопке
const int ledPin = 13; // задаем номер выхода светодиода
int buttonState = 0; // переменная для хранения состояния кнопки
void setup() {
// инициализируем контакт, подключенный к светодиоду как выход:
pinMode(ledPin, OUTPUT);
// инициализируем контакт, подключенный к кнопке как вход:
pinMode(buttonPin, INPUT);
}
void loop() {
// считываем значение с входа кнопки:
buttonState = digitalRead(buttonPin);
// проверяем, нажата ли кнопка,
// если нажата, состояние кнопки устанавливаем в положение HIGH:
if (buttonState == HIGH) {
// включение светодиода:
digitalWrite(ledPin, HIGH);
} else {
// выключение светодиода:
digitalWrite(ledPin, LOW);
}
}
Обратите внимание, что у нас появляется новая конструкция — условный оператор, состоящий
из двух ветвей:
if ( TRUE ) {
/* выполняется этот код, если условие истинно */
}
else {
/* выполняется этот код, если условие ложно */
} 135
Условие

Действие 1 Действие 2

Если условие истинно, то выполняются не зажигает или не гасит светодиод, а оши-


команды, определяющие Действие 1, ина- бок программа не выдает, попробуйте под­
че (else), выполняются команды, определя- ключить дополнительное питание к плате
ющие Действие 2. K-6.
Теперь вспомните материалы предыду- А теперь давайте изменим исходную про-
щих экспериментов и измените програм- грамму, задав для каждого светодиода свою
му таким образом, чтобы после нажатия на управляющую кнопку. Нам потребуются два
кнопку светодиод выключался или включал- светодиода, четыре резистора и две кнопки.
ся с задержкой 0,5 секунды. Воспользуемся только что разобранной про-
Вы можете проверить, как должна вы- граммой. Внесите в нее изменения, предпо-
глядеть программа с задержкой, посмо- лагающие использование двух светодиодов
трев раздел «Шпаргалки». Если же кнопка и двух кнопок, соответствующие нашей схеме:

136
Наверняка такая программа с двумя све- пок. Как вы понимаете, подключать мож-
тодиодами у вас не вызовет затруднений и но не только светодиод, но и любой другой
даже «Шпаргалка 6» вам не понадобится. элемент, который будет реагировать на на-
Таким образом, мы с вами научились жатие кнопки.
управлять светодиодами с помощью кно-

16.5. Крутись, мотор... Исследуем


сервопривод
А теперь давайте научимся использовать что ему можно точно, в градусах задать по-
Arduino для управления мотором, но не про- ложение, которое примет вал.
стым, а особенным — сервоприводом. Серво- Подключить сервопривод к Arduino до-
привод — это мотор, у которого мы можем статочно просто — выводы моторчика име-
управлять положением вала. Сервоприводы ют три цвета:
используются для моделирования различных
механических движений роботов: например, ¤¤ коричневый или черный — подключение
к земле (gnd);
для поворота датчиков или сложных дей-
ствий, которые выполняют манипуляторы. От ¤¤ красный — питание (+5 вольт);
обычного мотора сервомотор отличается тем, ¤¤ оранжевый, желтый или белый — подача
управляющего сигнала.

137
Одним из преимуществ Arduino является Итак, мы должны создать объект servo.
готовая к использованию библиотека подпро- Назовем его, например, myservo. В функции
грамм, позволяющая легко управлять серво- setup() мы указываем, что сервопривод под-
приводами. В данном эпизоде используется ключен к выводу 13 контроллера. Затем мы
библиотека для работы с сервоприводами Servo. можем посылать команды для управления
Выбрать ее можно командой Скетч → Подклю- сервоприводом. Угол поворота для вала серво-
чить библиотеку → Servo или прямо в програм- привода может составлять от 0 до 180 граду-
ме, командой #include <Servo.h>. сов, он регулируется в части программы loop().
#include <Servo.h> // подключение библиотеки
Servo myservo;
void setup() {
myservo.attach(13); // устанавливаем контакт 10 как вывод управления
}
void loop() {
myservo.write(0); // устанавливаем угол 0°
delay(2000);
myservo.write(90); // устанавливаем угол 90°
delay(2000);
myservo.write(180); // устанавливаем угол 180°
delay(2000);
}
Может оказаться, что при подаче питания скетч отправлен в Arduino, отсоедините пла-
от USB сервопривод жужжит, но не поворачи- ту K-6 от компьютера и кнопкой включения
вается. В этом случае необходим дополни- запустите программу на выполнение.
тельный источник питания: после того как

16.6. Где-то далеко... Знакомимся


с работой датчика расстояния
Ну и вишенкой на торте этого эпизода будет управ- наша конструкция реагирует на некоторый объект,
ление электронными компонентами с помощью приближающийся к ней: поднесли руку — свето­диод
ультразвукового датчика расстояния. Пусть загорелся, отодвинули — погас.
138
Датчик HC-SR-04 состоит из передатчика, приемника и схемы управления.

Принцип работы датчика

Для запуска датчика необходимо по- Управление светодиодом мы рассматри-


дать с контроллера импульс длительностью вали на предыдущем занятии: когда на све-
10 микросекунд на вход trig. Этот импульс тодиод идет сигнал HIGH, светодиод горит,
запускает ультразвуковой генератор, который когда сигнал LOW — не горит. Эти сигналы
излучает сигналы. Отраженный от объекта и будет формировать ультразвуковой дат-
сигнал достигает приемника и преобразуется чик, в зависимости от того, есть перед ним
в электрический сигнал, который появляется препятствие или нет.
на контакте echo. Длительность этого сигна-
ла пропорциональна расстоянию до объек-
та. Расстояние до объекта рассчитывается по
формуле: S(sm)=techo/58.
D1
D13
Выводы датчика: A0
A1
D12
D11
A2 D10
vcc — « плюс» батареи питания (к нему мы
GND

A3

GND
D9
A4 D8 R1
подключим красный провод);
Arduino Nano

A5 D7
A6 D6

trig — в ход сигнала управления дат­чиком A7 D5


+5V
+5V

(зеленый провод);
echo — выход сигнала измерения (белый
провод);
gnd —  «земля», «минус» батареи питания
(синий провод).
139
Первые эксперименты проведем, разме-
стив ультразвуковой датчик на макетной
плате.

Программа в общем виде может иметь следующий вид:


// датчик расстояния без библиотек
#define Trig 11
#define Echo 12
#define ledPin 13
void setup()
{
Serial.begin (9600);
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
/* задаем скорость общения датчика с компьютером */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop()
{

140
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
if (distance_sm<30) // Если расстояние менее 30 сантиметров
{
digitalWrite(ledPin, HIGH); // cветодиод горит
}
else
{
digitalWrite(ledPin, LOW); // иначе не горит
}
delay(100);
/* ждем 0.1 секунды, следующий импульс может быть излучен только после
исчезновения эха от предыдущего. Это время называется периодом
цикла (cycle period). Рекомендованный период между импульсами —
не менее 50 мс */
// Вывод информации на Монитор порта
Serial.print(impulseTime);
Serial.print(" pulses, us ");
Serial.print(distance_sm);
Serial.println(" cm");
Serial.println("--");
delay(300);
}

Если после загрузки программы в Arduino собранной конструкции, выведя на экран


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

141
Serial.print(impulseTime);
Serial.print("pulses, us");
Serial.print(distance_sm);
Serial.println("cm");
Serial.println("--");

Запустить отслеживание выполнения про- изменяются показания датчика, когда перед


граммы можно командой Инструменты → ним появляется какой-нибудь объект.
Монитор ­порта. На экране мы увидим, как

142
Подведем итог
Попробуйте изменить схему, добавив delayMicroseconds(50);
три светодиода разного цвета таким об- digitalWrite(trigPin, LOW);
разом, чтобы в зависимости от расстояния
до объекта зажигались разные комбинации duration = pulseIn(echoPin,
светодиодов. HIGH);
Программа может выглядеть следующим distance = (duration/2) / 29.1;
образом: digitalWrite(red, LOW);
digitalWrite(yellow,LOW);
digitalWrite(green, LOW);
#include <NewPing.h>
if (distance < 5)
#define trigPin 11
{
#define echoPin 12
digitalWrite(red, HIGH);
#define red 13
digitalWrite(yellow, HIGH);
#define yellow 7
}
#define green 6
else
void setup() {
if (distance < 10)
Serial.begin (9600);
{
pinMode(trigPin, OUTPUT);
digitalWrite(red, HIGH);
pinMode(echoPin, INPUT);
}
pinMode(red, OUTPUT);
else
pinMode(yellow, OUTPUT);
if (distance < 15)
pinMode(green, OUTPUT);
{
}
digitalWrite(yellow, HIGH);
void loop() {
}
long duration, distance;
else
digitalWrite(trigPin, LOW);
if (distance < 20)
delayMicroseconds(50);
digitalWrite(trigPin, HIGH); {

143
digitalWrite(yellow, HIGH); Обратите внимание, что здесь мы исполь-
digitalWrite(green, HIGH); зуем библиотеку NewPing, которую необхо-
} димо подключить: для этого воспользуйтесь
else командой Скетч → Подключить библиоте-
if (distance < 30) ку → Добавить.ZIP.библиотеку и выберите
{ библиотеку NewPing.zip. Принципиальную
digitalWrite(green, HIGH); схему подключения трех светодиодов со-
} ставьте, опираясь на материалы предыду-
else щих эпизодов.
{
digitalWrite(green, HIGH);
delay(25);
digitalWrite(green, LOW);
}
Serial.print(duration);
Serial.print("us,");
Serial.print(distance);
Serial.println("cm");

delay(300);
}

144
Эпизод семнадцатый.
И вместо сердца
пламенный мотор…
Одно из принципиальных назначений робо- Естественно, чтобы привести робота
тов — заменить человека в опасных ­условиях: в движение, необходимо к нему подключить
при пожаре, при разминировании, в зонах по- мотор. Однако подключить мотор напрямую к
вышенной радиации и т. п. Значит, робот дол- плате Arduino у вас вряд ли получится. В сем-
жен уметь по команде передвигаться в нужном надцатом эпизоде мы разберемся в этой про-
направлении. блеме и вдобавок узнаем много нового о
знакомом понятии — «драйвер».

17.1. Подробнее о модуле K-6


На предыдущих занятиях мы работали Для того чтобы запустить мотор даже
с контроллером Arduino NANO, для удобства игрушечного автомобиля, требуется боль-
размещая его на плате K-6. Поговорим чуть шая сила тока, способная вывести из строя
подробнее об этом модуле. микрочип контроллера. Чтобы через контрол-
Мы много раз говорили о том, что одно лер не проходили большие токи, использует-
из назначений роботов, заменить человека в ся силовая электрика.
опасных условиях: при пожаре — при размини- Чтобы управлять платформой с колеса-
ровании, в зонах повышенной радиации и т. п. ми, нужно специальное устройство, которое
Значит, робот должен уметь по команде преобразует электрические сигналы в воз-
передвигаться в нужном направлении. Что- действия, пригодные для непосредственно-
бы привести робота в движение, необходи- го управления колесами. Такое устройство
мо подключить к нему мотор. Однако хоть называется драйвером. Наверняка вы уже
мы и научились подключать сервопривод слышали это слово. Без драйвера-про-
к Arduino, мы не заставим ездить платфор- граммы не будут работать видеокар-
му, подключив мотор напрямую к плате. Да- та или сетевая карта в компьютере. 145
вайте разбираться, в чем тут дело. Поэтому моторы подключаются
к Arduino при помощи специальных микро- Когда мы подсоединим батарейку или акку-
схем — ключей, или аппаратных драйверов. мулятор, необходимо будет включить модуль
В нашем случае драйвером будет слу- с помощью кнопочного выключателя.
жить специальная микросхема, управляю- Именно эта плата K-6 позволяет согласо-
щая скоростью и направлением вращения вать работу контроллера Arduino Nano («моз-
электромотора. га» робота) с датчиками, исполнительными
Рассмотрим устройство и принцип ра- устройствами и механизмами.
боты специального компактного модуля
UMKI K-6. На блоке управления расположе-
ны колодки для установки Arduino Nano, две
микросхемы — драйверы электромоторов,
стабилизатор питания и другие электрон-
ные компоненты.

1, 2, 3, 4 — разъемы для подключения


электромоторов;

Электрическое питание может быть по-


дано на плату через USB-порт от ком-
пьютера или от источника питания.
146
14, 15 — драйверы управления моторами; Плату K-6 можно установить на любую
5 — кнопка включения питания; платформу с управляемыми моторами ко-
6, 7, 8, 9 — светодиоды, индуцирующие вра- лесами. Робот готов к программированию
щение электромоторов; и запуску.
10 — генератор звуковой частоты;
11 — модуль связи Bluetooth;
12 — разъем J12, к которому выведены ана-
логовые выходы Arduino;
13 — разъем J13, к которому выведены
цифровые выходы Arduino.
Разъемы J12, J13 имеют три ряда кон-
тактов. Внешний ряд подключен к мину-
су батареи (GND), средний ряд подключен
к выходу стабилизатора 5 В. Внутренние ря-
ды подключены к соответствующим контак-
там Arduino.

17.2. Драйверы. Лирическое отступление


Википедия дает следующие определе-
ния драйвера.
Драйвер — компьютерная программа,
с помощью которой другие программы по-
лучают доступ к аппаратному обеспечению.
Драйвер — элемент задней втулки ве-
лосипеда, исполняющий роль храпового
механизма.
Драйвер — наемный водитель, который
перегоняет автомобиль клиента из одного
места в другое.
Драйвер — клюшка в гольфе.
147
рами» называли когда-то самых отчаянных
капитанов чайных клиперов1. Драйверы
и в ураганный ветер не спускали парусов
и не брали рифов, а когда мачты уже гото-
вы были улететь к чертовой матери, стреляли
в парус из пистолета. Дырочку от пули ура-
ганный ветер за десятые доли секунды пре-
вращал в огромные дыры, и парус обвисал
лохмотьями. А мачты оставались на местах…

Драйвер — устройство для приведения


каких-либо сигналов к определенным пара-
метрам. В узком смысле: источник высоких
напряжений или токов, управляемый ма-
лым напряжением или током; такой драйвер
применяется для управления электромото-
ром (драйвер мотора), крупной светодиодной
сборкой (драйвер светодиода) и т. д.
В книге писателя Виктора Конецкого «Вче-
рашние заботы» рассказывается: «драйве-

У англичан слово «драйвер» тоже имеет


много значений: от «гонщик» и «преследова-
тель» до «надсмотрщик за рабами».

1
Быстроходные торговые судна 19 века, предназна-
ченные для доставки чая (примеч. ред.).
148
вер» — обыкновенный коногон, в сельском —
погонщик скота, на молодежном «ту драйв
мэд» — «сводить с ума».

И от мирного «кучер» до мрачного «дово-


дящий до отчаяния».

На американском сленге «драйв» — про-


дажа товаров по низким ценам с целью
обойти конкурентов, в горном деле «драй-
149
Еще это слово обозначает хозяина-эксплуа­татора, бизань-мачту, вождение ­автомобиля
и… писательский труд («ту драйв э пен» — «гонять перо» в буквальном переводе).

Вот какое интересное, многозначное слово — драйвер.

17.3. Управляем моторами


Возьмем ту же роботизированную плат- назад, поворот. Давайте подумаем: какие
форму, которую мы рассматривали в каче- команды из тех, что нам известны, обя-
стве примера в начале книги. Внутри у нее зательно должны быть включены в скетч?
четыре мотора, каждый из которых управ-
ляет собственным колесом, и контроллер
Arduino, установленный на плате К-6 с драй-
верами моторов.
Мы управляли роботизированной плат-
формой с мобильного устройства и даже
научились задавать для нее программы с по-
мощью команд-пластинок и на языке КуМир.
Теперь же мы знаем достаточно, чтобы самим
запрограммировать контроллер, ведь мы уже
составили столько программ для Arduino!
Для начала научим машинку просто ез-
дить — составим программу для са-
мых простых движений: вперед,
150
Как вы помните, программа для кон- ся в цикле, то есть исполняются процес-
троллера Arduino обычно состоит из трех сором в течение всего периода работы.
частей: В первой части кода мы определим, каки-
¤¤ в первой части, как в обычной матема- ми контактами платы Arduino воспользуемся
тической задаче, описываются исход- для управления драйверами и электромо-
ные данные: мы объявляем переменные, торами. Пусть переменные motorR и motorL
задаем имена, функции контактов кон- управляют вращением моторов: если на них
троллера, записываем, какие библиоте- приходит единица (HIGH), то вал вращается
ки будем использовать в ходе выполне- по часовой стрелке и платформа едет вперед,
ния программы; если сигнал LOW — вал вращается против ча-
совой стрелки и платформа едет назад. А вот
¤¤ во второй части с названием setup мы разрешать или не разрешать вращение мо-
пишем уже непосредственно код про- торов будут переменные mLspeed и mRspeed:
граммы. Но этот код исполняется толь- сигнал HIGH дает команду на вращение, сиг-
ко один раз: мы программируем выходы нал LOW — на запрет вращения. Как раз за
и входы контроллера на все время дей- это будут отвечать микросхемы-драйверы.
ствия программы; Английские буквы R и L означают right — пра-
¤¤ третья часть программы, loop, представ- вый и left — левый. Они определяют, каким
ляет собой команды, которые повторяют- из моторов мы управляем.

Проанализируем начало программы:


// Управление платформой SmartCar. Контроллер К-6
int motorR1=2; // контакт 2 определяет направление вращения первого
правого мотора
int motorR2=6; // контакт 6 определяет направление вращения второго
правого мотора
int motorL1=4; // контакт 4 определяет направление вращения первого
левого мотора
int motorL2=7; // контакт 7 определяет направление вращения второго
левого мотора
int mLspeed=3; // управляет 3 вращением левого мотора
int mRspeed=5; // управляет 5 вращением правого мотора
151
Чтобы программа корректно работала, Третий и пятый контакты Arduino, как ни
нам необходимо подключить моторы к нуж- старайтесь, на плате К-6 вы не увидите —
ным контактам. Если вы внимательно рас- они скрыты и соединены с драйверами мо-
смотрите плату K-6, то в разъеме J13 увидите, торов. Поэтому подключать их не требуется,
что для подключения доступны только кон- и в этой части ошибок вы сделать не можете.
такты с шестого по тринадцатый, а нам для В этой части кода больше не надо зада-
моторов требуются второй, четвертый, шестой вать никаких параметров.
и седьмой пины Arduino. Именно поэтому мы Приступаем ко второй части программы.
и не использовали эти контакты в задачах Вы знаете, что в этой части кода команды
шестнадцатого эпизода. Требуемые контак- исполняются только один раз.
ты выведены отдельно на красные двойные
void setup()
разъемы: ML-1, ML-2, MR-1 и MR-2 и исполь-
зуются только для управления моторами. {
Разъем для подключения моторов имеет pinMode(mLspeed, OUTPUT);
симметричную форму, и если колеса враща- pinMode(mRspeed, OUTPUT);
ются не так, как вы запланировали, просто pinMode(motorR1, OUTPUT);
переверните разъем, чтобы вал электромо- pinMode(motorR2, OUTPUT);
тора изменил направление вращения. pinMode(motorL1, OUTPUT);
pinMode(motorL2, OUTPUT);
// Драйвер управляется
// выходными сигналами
// с Arduino.
// Поэтому определяем все
// контакты как выход
delay(2000);
digitalWrite(mLspeed,0);
digitalWrite(mRspeed,0);
digitalWrite(motorR1,0);
digitalWrite(motorL1,0);
}

152
В третьей части пишется алгоритм рабо- // 3 разрешает драйверу
ты, то есть то, что робот должен выполнять. // вращать электромотор
void loop() digitalWrite (motorL1, HIGH);
{ digitalWrite (mLspeed, HIGH);
digitalWrite (motorR1, HIGH); delay(1000); // Вращаем 1 сек
// Команда digitalWrite устанав- digitalWrite (motorR1, HIGH);
// ливает на контакте 2 высокий digitalWrite (mRspeed, LOW);
// уровень // Низкий уровень запрещает
// Для драйвера моторов это // вращение моторов
// означает то, что мотор будет digitalWrite (motorL1, HIGH);
// вращаться вперед digitalWrite (mLspeed, LOW);
digitalWrite (mRspeed, HIGH); delay(1000); // остановка 1 сек.
// высокий уровень на контакте }

Подведем итог.
Управление движением
при использовании
двух моторов

17. 1. Вспомнив материалы десятого эпизода «Логика. Ничего случайного», опреде-


лите, каким образом будет двигаться платформа на двух моторах (одном левом
и ­одном правом) при различных значениях переменных (HIGH примем за 1, LOW —
за 0).
Заполните таблицу истинности, выбрав нужные ответы из последней колонки.

153
motorR1 motorL1 mLspeed mRspeed Движение
платформы
1 1 1 1
1 1 1 0
1 1 0 1 1. Платформа
едет вперед.
1 1 0 0
2. Платформа
1 0 1 1 едет назад.
1 0 1 0 3. Платформа
1 0 0 1 поворачивает
направо.
1 0 0 0
4. Платформа
0 1 1 1 поворачивает
налево.
0 1 1 0
5. Платформа
0 1 0 1
стоит на месте.
0 1 0 0 6. Некорректные
0 0 1 1 условия.

0 0 1 0
0 0 0 1
0 0 0 0

17. 2. Загрузите текст программы для движения вперед при использовании двух мо-
торов в Arduino IDE (убедитесь, что комментарии в каждой строчке начинаются
с двух символов //), загрузите код в контроллер. Запустите робота и сделайте вы-
вод о соответствии его движения составленной программе.
17. 3. Измените программу, чтобы платформа начала движение назад. Для это-
го на левый и правый мотор подайте низкий уровень сигнала и дайте
154 разрешение на вращение мотора.
17.4. И
 змените программу, чтобы платформа поворачивала направо. Для этого нужно
вращать вперед правое колесо, а левое не вращать, или вообще для левого коле-
са задать вращение в обратную сторону (откалибровать угол поворота можно, ме-
няя время задержки команды delay).
17.5. Задайте роботу программу: в течение одной секунды ехать вперед, затем на се-
кунду остановиться и двигаться назад одну секунду. Так как команда loop испол-
няется постоянно, то робот будет выполнять эти команды, пока включено питание.
17.6. Используя фрагменты полученных кодов, составьте программу движения по слож-
ной траектории. Траекторию задайте самостоятельно.

Эпизод восемнадцатый.
Скорости не сбрасывай
на виражах…

В от мы и добрались до тонкостей управления роботами. В этом эпизоде мы будем


разбираться в принципах широтно-импульсной модуляции. Именно возможность ис-
пользования ШИМ позволяет добиться плавного движения и точных поворотов. А как нам
помогут разобраться в такой сложной теме воздушный шарик и бумажная вертушка —
узнаете, дочитав книгу.

На предыдущем занятии мы научили на- Конечно же можно! Для этого нам нуж-
шего робота — «Умную машинку» самым про- но использовать другие сигналы. Подавая
стым движениям: SmartCar может ездить на вход сигнал с широтно-импульсной мо-
вперед-назад и поворачивать при поочеред- дуляцией, можно управлять скоростью вра-
ной смене сигналов, поступающих на правые щения моторов.
и левые колеса. Но пока машинка движет- Так что же такое эта широтно-
ся довольно неуклюже. Неужели нельзя до- импульсная модуляция и как ее
биться более плавного управления? использовать? 155
18.1. Ч
 то такое ШИМ и зачем он нужен
в робототехнике
Вы, конечно, знаете, что нужно для того, винты устройства: за него эти рутинные вы-
чтобы автомобиль изменил скорость, напри- числения проводит бортовой контроллер.
мер, поехал бы быстрее: водитель должен Так как же регулируют скорость враще-
нажать педаль газа. При этом в двигатель ния электромоторов?
станет поступать больше топлива, мотор Как известно в электронике существуют
взревет и начнет бешено крутить колеса. три базовых понятия: напряжение, сила то-
Наши роботы работают без водителей, ка и сопротивление. Все эти три параметра
и «топливом» для их моторов служит электри- связаны между собой законом Ома: увели-
чество, поэтому, чтобы управлять скоростью ро- чение сопротивления цепи уменьшает силу
бота, нам нужно уметь легко изменять скорость ­тока при постоянном напряжении, увеличе-
вращения электродвигателей колес. Причем ние напряжения при постоянном сопротивле-
у робота может быть не один-два, а, например,
целых шесть моторов, и крутиться они должны
в разные стороны и каждый со своей скоростью.
Мы же не можем на каждый мотор поставить
по человеку, который высчитывал бы, с какой
силой нажать на педаль газа.
Так, например, летающий робот — коп-
тер — может иметь три, четыре или даже
шесть пропеллеров, каждый из которых на-
сажен на вал собственного электромотора
и вращается с такой скоростью, что лопасти
выглядят размытым диском.
Оператор, управляющий коптером, про-
сто нажимает рычажок на пульте — вверх или ЗАКОН ОМА
вправо, и летающий робот послушно дви- I = U / R
жется в указанном направлении. При
этом человек совершено не задумы- U = I R
156
вается, с какой скоростью и в каком R = U / I
направлении должны вращаться
нии ведет к увеличению силы тока. Об этом тел максимально быстро и высоко, на все
мы уже говорили в десятом эпизоде. его двигатели нужно подать максимальное
Как мы обсуждали ранее, каждый элек- напряжение, и двигатели станут крутиться
тромотор состоит из магнита и намотанного с максимальной скоростью. Но если просто
на сердечник медного провода, то есть обла- подать это максимальное напряжение на мо-
дает сопротивлением, которое мы изменить торы, то коптер, скорее всего, подскочит рез-
не можем. Чтобы мотор стал крутиться бы- ко вверх, перевернется и грохнется об землю
стрее, мы должны подать на него большее (хорошо, если при этом никого не поранит).
напряжение: чем больше напряжение, тем Поэтому, чтобы коптер плавно поднялся, на-
быстрее крутится мотор и тем больше он по- брал максимальную высоту и затем плавно
требляет тока. Автономный робот получает ­опустился, система управления должна по-
питание от батарей, который находятся у не- давать напряжение на моторы, плавно его
го на борту. Отсюда следует очевидный вы- изменяя.
вод: чем быстрее крутятся моторы робота, тем Как же достигнуть такого плавного изме-
быстрее расходуется заряд батарей питания. нения? Как раз для этого и была придумана
Бортовой контроллер летающего робо- система, которая получила название широт-
та-коптера сам по программе меняет напря- но-импульсная модуляция, сокращенно —
жение, которое подается на моторы, чтобы окИМ, или, по-английски — PWM (pulse-width
человек при управлении об этом не задумы- modulation). В робототехнике и электротехни-
вался. Принцип работы такой программы до- ке регулировка при помощи ШИМ-системы
статочно интересен: допустим, наши батареи получила широкое распространение, посколь-
имеют максимальное напряжение при пол- ку с ее помощью очень удобно плавно регу-
ном заряде — 12 вольт. Когда батареи пол- лировать скорость вращения электромоторов.
ностью будут разряжены, напряжение может Давайте разберем, как работает система
опуститься до 9 вольт. Чтобы коптер взле- широтно-импульсной модуляции.

18.2. Моделируем ШИМ


Нам понадобится ветряная мельница Надуем шарик (представьте, что это ба-
из кусочка картона, насаженного на бу­лавку тарейка, полностью заряженная на 12 вольт)
и воткнутого в трубочку от коктейля (это и сожмем пальцами клапан, через ко-
­будет модель мотора), и воздушный шарик, торый надували шарик. Поднесем
моделирующий работу батарейки. наше устройство к мотору и чуть
приоткроем клапан, слегка разжи- 157
мая пальцы. Если быстро отпустить и сжать Заново надуем шарик, но теперь будем по-
пальцы, придерживая шарик другой рукой, то стоянно приоткрывать клапан, по чуть-чуть раз-
воздуха из шарика выйдет немного, и лопа- жимая и снова сжимая пальцы. Регулируя поток
сти лишь слегка шевельнутся. Так мы можем воздуха подобным образом, мы сможем управ-
определить первое пограничное состояние — лять скоростью вращения нашей мельницы.
минимальное количество воздуха (аналог Попробуйте провести серию таких экс-
электроэнергии в нашей модели), которое не- периментов с шариком, управляя скоростью
обходимо, чтобы началось вращение. вращения вертушки. Так вы наглядно про-
иллюстрируете принцип действия широтно-­
Если затем просто разжать пальцы, на- импульсной модуляции (и бонусом проведете
правив струю воздуха на мельницу, то она тренировку легких).
начнет энергично крутиться, разгонится до В электротехнике вместо шарика есть источ-
максимальной скорости и будет вращаться, ник тока, вместо вертушки — электромотор,
пока весь воздух не выйдет из шарика (при а вместо клапана из ваших пальцев — ключ-тран-
аналоге с батарейкой — пока не закончится зистор, который может запустить и перекрыть
заряд). Так мы определили максимальное движение тока почти 1000 раз за секунду, и все
пограничное состояние. это управляется контроллером по программе.

158
Когда вы открываете клапан, в электриче- Если импульсы короткие, иначе говоря,
ской схеме идут сигналы, называемые импуль- узкие, то это значит, клапан, что приоткрыва-
сами, а то время, в течение которого открыт ется по чуть-чуть и ненадолго, тогда на мо-
импульс, называется шириной. Отсюда и на- тор поступает небольшое количество энергии
звание этой модуляции — широтно-импульсная. и вращается он не очень быстро.
Инженеры при настройке электрообору- Увеличение ширины импульсов означает,
дования используют прибор, который назы- что время частичного открытия клапана ста-
вается осциллограф: на нем очень хорошо новится чуть больше, следовательно, энер-
можно разглядеть по оси Х и У наборы та- гии к мотору поступает тоже больше и мотор
ких импульсов. вращается гораздо быстрее.

Понятно, что максимальная скорость быстро! И при разработке, например, робо-


вращения мотора наблюдается, когда им- тов-исследователей для других планет во-
пульсы настолько широкие, что клапан от- прос экономии энергии будет стоять
крыт практически полностью. При этом очень остро!
нельзя забывать, что шарик сдувается очень
159
18.3. Р
 егулировка скорости вращения
мотора
Итак, мы с вами рассмотрели, как можно от 64 до 255, мы сможем менять скорость
изменять скорость вращения электромотора, вращения колес у робота.
используя ШИМ. Давайте теперь подумаем,
Теперь вернемся к нашим робоплатфор-
как запрограммировать движение робоплат-
мам. В контроллере Arduino есть контакты,
формы с разной скоростью.
которые могут формировать сигнал с ши-
Максимальная скорость вращения мо-
тора возможна при значении PWM=255. Как ротно-импульсной модуляцией. Как раз кон-
вы думаете, почему выбрано именно такое такты 3 и 5 позволяют сформировать такой
число? сигнал.
Вспоминаем предыдущие эпизоды, где Рассмотрим еще раз схему подключения
мы рассматривали возможности двоично- моторов к модулю К-6:
го кодирования команд. 225
в десятичной системе равно
восьми единичкам, 1111 1111
в двоичной системе. То есть,
когда значение переменной
PWM равно 255, ключ все
время открыт полностью и на
мотор подается максимально
возможное напряжение.
Минимальное же значение
PWM, при котором мотор толь-
ко начинает крутиться, будет
равно приблизительно 64, что
в двоичной системе можно за-
писать как 10 0000.
Таким образом, меняя
значение переменной
PWM в  диапазоне
160
Для настройки движения мы использова- Следовательно, если мы вызовем функ-
ли цифровые выводы D2, D4, D6, D7, связан- цию analogWrite(), которая отвечает за ге-
ные с моторами, и определили, что подача нерацию постоянной прямоугольной волны
цифрового сигнала на выводы D3 и D5 раз- с заданной шириной импульса, мы сможем
решает вращение электромоторов. В модуле изменять действующее значение для на-
K-6 контакты D3 и D5 подключены напря- пряжения питания электромоторов и, со-
мую к входам драйверов L293D, регулирую- ответственно, изменять скорость движения
щих скорость вращения электромоторов (без робота.
внешних выводов на плату).

18.4. Движение с ускорением


Последовательно изменяя значение ШИМ, попробуем отрегулировать скорость движе-
ния платформы.
Внесем изменения в программу, которую мы составляли в эпизоде «Движение вперед»:
определим переменные на контактах 3 и 5, отвечающие за регулировку скорости.

int mL_PWM=3; // контакт 3 управляет вращением левого мотора


int mR_PWM=5; // контакт 5 управляет вращением правого мотора
После того как мы определим все контакты Arduino как выход, в части void loop() с по-
мощью функции analogWrite() мы будем генерировать сигналы нужной нам ширины в те-
чение 2 секунд.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
// Высокий уровень на контактах 2, 4, 6, 7 означает то,
// что мотор будет вращаться назад
analogWrite (mR_PWM, 0);
analogWrite (mL_PWM, 0);
// Значение ШИМ равно нулю, двигатель не вращается
delay(1000); // действие происходит 1 сек
161
Затем изменим значение ШИМ с 0, напри- со средней скоростью, платформа движет-
мер, до 70. При этом значении колеса начи- ся вперед. Еще через две секунды зададим
нают медленно вращаться, но этого может максимальное значение, PWM=255 — моторы
не хватить, чтобы платформа начала дви- будут вращаться с максимальной скоростью.
жение. Через пару секунд увеличим значение И затем остановим платформу, изменяя зна-
ШИМ до 170 — при этом колеса вращаются чения ШИМ в обратной последовательности.

Программа может иметь следующий вид:


// Управление платформой SmartCar. Контроллер К-6
// движение платформы вперед c ускорением и замедлением

int motorR1=2; /
/ контакт 2 определяет направление вращения первого
// правого мотора
int motorR2=6; /
/ контакт 6 определяет направление вращения второго
// правого мотора
int motorL1=4; /
/ контакт 4 определяет направление вращения первого
// левого мотора
int motorL2=7; /
/ контакт 7 определяет направление вращения второго
// левого мотора
int mL_PWM=3; // контакт 3 управляет вращением левого мотора
int mR_PWM=5; // контакт 5 управляет вращением правого мотора
void setup() {
pinMode(mL_PWM, OUTPUT);
pinMode(mR_PWM, OUTPUT);
pinMode(motorR1, OUTPUT);
pinMode(motorR2, OUTPUT);
pinMode(motorL1, OUTPUT);
pinMode(motorL2, OUTPUT);
// Определяем все контакты как выход
}

162
void loop()
{
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
// Команда digitalWrite устанавливает на контакте высокий уровень
// Для драйвера моторов это означает, что мотор будет вращаться
назад
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 0);
analogWrite (mL_PWM, 0);
// Значение ШИМ равно 0, двигатель не вращается
delay(1000); // действие происходит 1 сек
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 70);
analogWrite (mL_PWM, 70);
// Значение ШИМ 70. Скорость низкая
delay(2000); //время работы 2 сек.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 170);
analogWrite (mL_PWM, 170);
// Значение ШИМ 70. Скорость средняя
delay(2000); //время работы 2 сек.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 255); 163
analogWrite (mL_PWM, 255);
// Значение ШИМ 70. Скорость максимальная
delay(2000); //время работы 2 сек.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 170);
analogWrite (mL_PWM, 170);
// Значение ШИМ 70. Скорость средняя
delay(2000); //время работы 2 сек.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 70);
analogWrite (mL_PWM, 70);
// Значение ШИМ 70. Скорость низкая
delay(2000); //время работы 2 сек.
}
Попробуйте загрузить эту программу в Arduino и проанализируйте результаты работы.

18.5. Регулировка точности поворота


с использованием ШИМ
На предыдущих занятиях мы пробова- ставить программу точного поворота на за-
ли запрограммировать повороты, замеряя данный угол. Для этого необходимо задать
ориентировочный угол поворота с помощью разные значения переменных PWM для пра-
розы румбов. Используя ШИМ, попробуйте со- вого и левого колеса.

164
18.6. Езда «змейкой»
Попеременно устанавливая разное значение ШИМ для правого и левого колес, можно
заставить платформу двигаться змейкой за счет того, что колеса будут вращаться с раз-
ной скоростью.

Фрагмент программы для езды «змейкой» может иметь такой вид:

void loop()
{
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 0);
analogWrite (mL_PWM, 0);
// Значение ШИМ равно 0, двигатель не вращается
delay(1000); // действие происходит 1 сек
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 100);
analogWrite (mL_PWM, 255);
delay(2000); //время работы 2 сек.
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, HIGH);
analogWrite (mR_PWM, 255);
analogWrite (mL_PWM, 100);
delay(2000); //время работы 2 сек.
}
165
Эпизод девятнадцатый.
Но это еще не конец…

Вот, друзья, мы и добрались до конца ми моторами: от обычных электрических до


книги. Мы с вами выяснили, что устройство сервомоторов и шаговых двигателей. Нуж-
становится роботом, когда оно способно за- но научиться самим программировать дис-
помнить переданные ему команды, а затем танционное управление роботом с помощью
выполнить их. Мы обсудили, из каких основ- мобильных устройств по протоколу Bluetooth.
ных частей может состоять робот, и как эти А следующим шагом можно перейти к та-
части могут быть устроены. кой перспективной в робототехнике теме,
И, пожалуй, самое главное: мы сделали как управление целой группой мобильных
первые шаги в обучении программированию роботов.
роботов. Но если вы хотите заниматься ро- Мы обсудим, как самим попробовать
бототехникой дальше, нам с вами предсто- сделать Умный Дом, который будет ра-
ит узнать еще очень много нового. достно встречать вас, готовя комфортное
Чтобы движение робота было быстрым проживание.
и плавным, чтобы он мог работать манипу- Все это мы будем рассматривать в следу-
ляторами, нужно уметь управлять разны- ющих книгах. До новых встреч!

166
Шпаргалки

Эпизод первый. Эпизод второй.


Как роботы стали Они такие разные
роботами 2.1. Стационарных.
2.2. Управляемых по программе
1.2. «Робот действует по программе». (автономных).
1.3. Нет. 2.3 «Луноход-1».
1.4. Да.
1.5. Энкодеры. Эпизод четвертый.
1.6. Контроллер.
1.7. Правила устанав-
ливаете вы! Погово-
рим про алгоритмы
4.1.

Алгоритм

Описание последовательно-
сти действий, строгое исполне-
ние которых приводит к решению
поставленной задачи
за конечное число шагов.

167
Исполнитель
Система команд
Абстрактная или реаль- исполнителя
ная система, способная выпол-
нить действия, предписваемые Набор команд, которые может
алгоритмом. выполнить конкретный исполнитель.

Среда исполнителя
Программа
Обстановка,
в которой Алгоритм, составленный из ко-
функционирует манд, которые входят в систему команд
исполнитель. исполнителя.

4.2. b) У равнение для определения номера стол-


b) Программа, переводящая исполнителя бика, отмечающего исходную позицию
«Умная машинка» из точки 0 исполнителя перед выполнением про-
в точку 2: 1 2 1 2 граммы: Х + 5 + 3 + 2 – 4 + 3 – 1 + 2 = 12.
4.3. Номер склада, на котором находился ис-
a) А рифме т иче ско е выр а ж ение д ля полнитель «Умная машинка» перед вы-
­з аписи перемещений исполнителя: полнением этой программы: 2.
5 + 5 + 5 + 5 – 3 + 8 – 7 + 2.
Номер склада, на котором окажется ис-
полнитель после выполнения этой про-
граммы: 20.

168
Эпизод пятый. Шаг за шагом
по программе…

цикл
старт макс. средн. мин.

цикл
стоп

звук

свет

Вперед — время движения Вперед — среднее время Вперед — время движения


по команде больше среднего движения по команде по команде меньше среднего
Двоичный код команды
110001 110010 110000

169
цикл
старт макс. средн. мин.

цикл
стоп

звук

свет

Назад — время движения Назад — среднее время Назад — время движения


по команде больше среднего движения по команде по команде меньше среднего
Двоичный код команды
111101 111110 111100

170
5.3. Один из возможных вариантов программы в машинных кодах:
111000 110111 111000 110111 111000 110111 111000 110111 111000 110111 111000

Эпизод шестой. Т-с-с… Подробнее о кодах


6.1.

Как программируются робо- Робототехника — профессия Издательство Питер


ты. Роботизированные плат- будущего. https://www.piter.com
формы SmartCar — УМКИ.
6.2.

128 г 64 г 32 г 16 г 8г 4г 2г 1г

75 г

15 г

201 г

129 г

171
6.3.

Десятичный код Двоичный код Десятичный код Двоичный код

77 0100 1101 18 0001 0010

62 0011 1110 44 0010 1100

14 0000 1110 10 0000 1010

6.4.

Десятичный код Двоичный код Десятичный код Двоичный код

7 111 129 1000 0001


9 1001 145 1001 0001
2 10 153 1001 1001
15 1111 195 1100 0011
17 1 0001 255 1111 1111

172
Эпизод восьмой. КуМир — все, что нужно

Калибровка энкодеров
Если углы поворота платформы резко даем на правое и левое колесо, тем большее
отличаются от 90 градусов, нужно прове- расстояние проедет или на больший угол по-
сти калибровку энкодеров для более точ- вернется платформа при однократным нажа-
ной настройки поворота. Для этого в файле тии на кнопку управления.
настройки smart.ini в папке программы Таким образом, длина шага одной ко-
устройства SmartCar нужно поменять ко- манды вверх (вниз) и точность угла пово-
личество импульсов, поступающих на коле- рота определяются количеством импульсов,
со при однократном нажатии кнопки пульта подсчитываемым энкодером, и регулируют-
управления. Чем больше импульсов мы за- ся в файле smart.ini.

173
8.1.

8.2. Алгоритм решения


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

174
Эпизод десятый. Логика. Ничего
случайного. Сборка логических схем
Логическое И
Устройства, выполняющие функции логического умножения — конъюнкции.

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

Логическое ИЛИ

175
Логическая схема ИЛИ с тремя Логическое НЕ
выключателями: Когда выключатель находится в поло-
жении ON — лампа не горит, когда выклю-
чатель находится в положении OFF — лампа
горит.

Эпизод двенадцатый.
микросхема NE555
С3
8 VCC OUT
3
R1
7
5 динамик
R2 4
6
6v

2
GND

1
С1 С2

Принципиальная схема генератора звука.

Эпизод тринадцатый.
Протокол связи — настоящее и будущее
13.2. Протокол Bluetooth — протокол, позво- мениваться данными между несколькими
ляющий связывать друг с другом не- устройствами, но обязательно использую-
сколько устройств на коротком (поряд- щий для этого точку доступа.
ка нескольких метров) расстоянии. Протокол ZigBee — протокол малого энер-
Протокол Wi-Fi — протокол, позво- гопотребления, позволяющий организовать
ляющий с большой скоростью об- роевое управление устройствами сети.
176
Эпизод четырнадцатый. MAC-адрес
не дом и не улица…
14.2. Нет.
14.3. Производитель сетевых устройств.
14.4. В форме шестнадцатеричных кодов.

Эпизод пятнадцатый. Славная


машина — Arduino
Как настроить Arduino IDE имени администратора. В этом случае пра-
В операционной системе Linux запуск вой кнопкой мыши следует открыть контекст-
программы осуществляется сразу, в систе- ное меню и выбрать пункт Запуск от имени
ме Windows может потребоваться запуск от администратора.

177
Когда программа запустится, откро-
ется окно Arduino IDE.
Обратите внимание: вы еще не под-
ключали плату Arduino к компьютеру,
а в правом нижнем углу уже появилась
надпись «Arduino Leonardo on COM4». Так
Arduino IDE сообщает вам, что она настро-
ена на работу с платой Arduino Leonardo.
А когда вы подключите плату, Arduino IDE
будет искать Arduino Leonardo на порту
COM4. И для написания программы уже
заготовлен шаблон будущего скетча, со-
держащий команды, необходимые для
его работы.
Прежде чем приступать к програм­
мированию, необходимо настроить среду
для работы с той версией устройства, кото- работать с другой платой семейства Arduino.
рая имеется у вас. Используя меню Инстру- Для этого выберем из списка контроллер,
менты → Плата, укажем программе, что будем ­который будет подключен к компьютеру.

178
После установки Arduino IDE и выбора к выполнению заданной по умолчанию про-
нужной платы можно подключить имеющееся изводителем программы.
у вас устройство к компьютеру и произвести Чтобы завершить настройку платы, не-
окончательные настройки. В операционной обходимо уточнить, какой номер COM-пор-
системе Windows компьютер опознает под- та присвоил компьютер Arduino Nano. Для
ключенное устройство как плату Arduino Nano этого на Панели управления нужно выбрать
и запускает его установку. пункт Диспетчер устройств Windows и рас-
Когда на плате загорается светоди- крыть вкладку Порты (COM и LPT).
од ON и начинают мигать светодиоды, это Это означает, что операционная систе-
означает, что на плату подано питание ма распознала плату Arduino как COM-порт,
и микро­контроллер Arduino Nano приступил подобрала для нее правильный драйвер

179
и назначила этому COM-порту номер 3. Если Теперь следует сообщить Arduino IDE, что
мы подключим к компьютеру другую плату плата, с которой ей предстоит общаться, на-
Arduino, то операционная система назначит ходится на COM-порту COM3. Для этого необ-
ей другой номер. Поэтому при работе одно- ходимо перейти в меню Инструменты → Порт
временно с несколькими платами очень важ- и выбирать порт COM3.
но внимательно соотносить их с номерами
COM-портов.

Теперь наша плата полностью готова ¤¤ Запустить программу Arduino IDE.


к работе. ¤¤ В меню Инструменты выбрать необ-
15.1. 24 вольта. ходимую плату.
15.2. Да.
15.3. ¤¤ В меню Инструменты выбрать тре­
буемый COM-порт.
180
¤¤ Проверить, на какой COM-порт под- 15.4. 1 секунде.
ключена нужная плата. 15.5. Светодиод будет мигать в десять раз
¤¤ Убедиться, что требуемые параметры быстрее.
визуально отображаются на интер- 15.6. delay(500).
фейсе программы.

Эпизод шестнадцатый. Огоньки


и кнопочки — строим с Arduino
Елочка, гори! Мигаем двумя светодиодами
*/
int del=100; // установка по умолчанию времени выполнения 100 мс
void setup()
{
// инициализация цифровых контактов как выхода:
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
// действия повторяются до отключения питания
void loop()
{
digitalWrite(8, HIGH); // включение светодиода на контакте 8
delay(del); // ждем
digitalWrite(8, LOW); // выключение светодиода
digitalWrite(9, HIGH); // включение светодиода на контакте 8
delay(del); // ждем
digitalWrite(9, LOW); // выключение светодиода
delay(del); // ждем
}

181
Елочка, гори! Мигаем восемью светодиодами в одну сторону
/*Программа «Бегущие огни только туда»
*/
int del=100;
// устанавливаем начальную команду, которая будет выполняться при
// включении питания
void setup() {
// определяем выбранный нами контакт платы Arduino как выход.
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(6, HIGH); // устанавливаем на контакте 6 высокий
// уровень (5 Вольт)
delay(del); // ждем одну секунду
digitalWrite(6, LOW); // устанавливаем на контакте 6 низкий уровень
// (0 Вольт)
delay(del); // ждем одну секунду
digitalWrite(7, HIGH); // устанавливаем на контакте 7 высокий
// уровень (5 Вольт)
delay(del); // ждем одну секунду
digitalWrite(7, LOW); // устанавливаем на контакте 7 низкий уровень
// (0 Вольт)
delay(del); // ждем одну секунду

182
digitalWrite(8, HIGH); // включение светодиода на контакте 8
delay(del);
digitalWrite(8, LOW); // выключение светодиода
delay(del);
digitalWrite(9, HIGH); // включение светодиода на контакте 9
delay(del);
digitalWrite(9, LOW); // выключение светодиода
delay(del);
digitalWrite(10, HIGH); // включение светодиода на контакте 10
delay(del);
digitalWrite(10, LOW); // выключение светодиода
delay(del);
digitalWrite(11, HIGH); // включение светодиода на контакте 11
delay(del);
digitalWrite(11, LOW); // выключение светодиода
delay(del);
digitalWrite(12, HIGH); // включение светодиода на контакте 12
delay(del);
digitalWrite(12, LOW); // выключение светодиода
delay(del);
digitalWrite(13, HIGH); // включение светодиода на контакте 13
delay(del);
digitalWrite(13, LOW); // выключение светодиода
delay(del);
}
Елочка, гори! Мигаем восемью светодиодами туда и обратно
/*Программа «Бегущие огни туда-сюда»
*/
int del=100; // установка по умолчанию времени выполнения 100 мс
void setup()
{
// инициализация цифровых контактов как выхода:

pinMode(6, OUTPUT); 183


pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop()
{
digitalWrite(6, HIGH); // включение светодиода на контакте 6
delay(del); // Ждем (время выполнения действия определяется
// параметром 'del')
digitalWrite(6, LOW); // выключение светодиода
digitalWrite(7, HIGH); // включение светодиода на контакте 7
delay(del);
digitalWrite(7, LOW); // выключение светодиода
digitalWrite(8, HIGH); // включение светодиода на контакте 8
delay(del);
digitalWrite(8, LOW); // выключение светодиода
digitalWrite(9, HIGH); // включение светодиода на контакте 9
delay(del);
digitalWrite(9, LOW); // выключение светодиода
digitalWrite(10, HIGH); // включение светодиода на контакте 10
delay(del);
digitalWrite(10, LOW); // выключение светодиода
digitalWrite(11, HIGH); // включение светодиода на контакте 11
delay(del);

184
digitalWrite(11, LOW); // выключение светодиода
digitalWrite(12, HIGH); // включение светодиода на контакте 12
delay(del);
digitalWrite(12, LOW); // выключение светодиода
digitalWrite(13, HIGH); // включение светодиода на контакте 13
delay(del);
digitalWrite(13, LOW); // выключение светодиода
digitalWrite(12, HIGH); // включение светодиода на контакте 12
delay(del);
digitalWrite(12, LOW); // выключение светодиода
digitalWrite(11, HIGH); // включение светодиода на контакте 11
delay(del);
digitalWrite(11, LOW); // выключение светодиода
digitalWrite(10, HIGH); // включение светодиода на контакте 10
delay(del);
digitalWrite(10, LOW); // выключение светодиода
digitalWrite(9, HIGH); // включение светодиода на контакте 9
delay(del);
digitalWrite(9, LOW); // выключение светодиода
digitalWrite(8, HIGH); // включение светодиода на контакте 8
delay(del);
digitalWrite(8, LOW); // выключение светодиода
digitalWrite(7, HIGH); // включение светодиода на контакте 7
delay(del);
digitalWrite(7, LOW); // выключение светодиода
}

16.2. Многоцветное свечение. Определяем переменные


Следующий фрагмент программы должен иметь вид:
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
185
}
16.4. Нажимаем кнопочку... Задержка реакции на нажатие кнопки
Фрагмент программы включения светодиода с задержкой будет выглядеть
следующим образом:
void loop() {
// считываем значение с входа кнопки:
buttonState = digitalRead(buttonPin);
// проверяем, нажата ли кнопка если нажата,
// то состояние кнопки устанавливаем в положение HIGH:
if (buttonState == HIGH) {
// включение светодиода:
digitalWrite(ledPin, HIGH);
delay(500); // ждем 0,5 секунды
}
else {
// иначе выключение светодиода:
digitalWrite(ledPin, LOW);
delay(500); // ждем 0,5 секунды
}

Нажимаем кнопочку...
Две кнопки управляют светодиодами
D13
D13
A0 R12
D12
A1 10 кОм
D11
A2 D10
GND

A3
GND

D9
A4 D8
Arduino Nano

A5 D7 кнопка 1 R13
A6 D6 560 Ом
A7 D5
+5V
+5V

R10
кнопка 2 560 Ом

R11
10 кОм
D10

186
const int buttonPin1 = 12; // задаем номер входа, подключенный к кнопке 1
const int buttonPin2 = 11; // задаем номер входа, подключенный к кнопке 2
const int ledPin1 = 13; // задаем номер выхода светодиода 1
const int ledPin2 = 10; // задаем номер выхода светодиода 2
int buttonState1 = 0; // переменная для хранения состояния кнопки 1
int buttonState2 = 0; // переменная для хранения состояния кнопки 2
void setup() {
// инициализируем контакт, подключенный к светодиоду как выход:
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
// инициализируем контакт подключенный к светодиоду как вход:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
}
void loop() {
// считываем значение входа кнопки:
buttonState1 = digitalRead(buttonPin);
buttonState2 = digitalRead(buttonPin);
// проверяем, нажата ли кнопка 1.
// если нажата, то состояние кнопки 1 устанавливаем в положение HIGH:
if (buttonState1 == HIGH) {
// включение светодиода:
digitalWrite(ledPin1, HIGH);
}
else {
// иначе выключение светодиода:
digitalWrite(ledPin1, LOW);
}
if (buttonState2 == HIGH) {
// включение светодиода:
digitalWrite(ledPin2, HIGH);
}
else {
// иначе выключение светодиода:
digitalWrite(ledPin2, LOW);
}
} 187
Эпизод семнадцатый. И вместо сердца
пламенный мотор… Управляем моторами
17.1. motorR1 motorL1 mLspeed mRspeed Движение платформы

1 1 1 1
1. Платформа едет вперед

1 1 1 0
3. Платформа поворачивает направо

1 1 0 1
4. Платформа поворачивает налево

1 1 0 0
5. Платформа стоит на месте

1 0 1 1
3. Платформа поворачивает направо 1. Платформа едет
вперед.
1 0 1 0
3. Платформа поворачивает направо 2. Платформа едет
назад.
1 0 0 1 3. Платформа пово-
3. Платформа поворачивает направо
рачивает направо.
1 0 0 0 4. Платформа пово-
5. Платформа стоит на месте
рачивает налево.
0 1 1 1 5. Платформа стоит
4. Платформа поворачивает налево
на месте.
0 1 1 0 6. Некорректные
3. Платформа поворачивает направо условия.
0 1 0 1
4. Платформа поворачивает налево

0 1 0 0
5. Платформа стоит на месте

0 0 1 1
2. Платформа едет назад

0 0 1 0
3. Платформа поворачивает направо

0 0 0 1
4. Платформа поворачивает налево

0 0 0 0 5. Платформа стоит на месте

188
17.3. Фрагмент программы:
void loop()
{
digitalWrite (motorR1, LOW); // Команда digitalWrite устанавливает
// на контакте 2 низкий уровень
// Для драйвера моторов это означает, что мотор будет вращаться назад
digitalWrite (mRspeed, HIGH); // высокий уровень на контакте 3 разрешает
// драйверу вращать электромотор
digitalWrite (motorL1, LOW);
digitalWrite (mLspeed, HIGH);
delay(1000); // Вращаем 1 сек
digitalWrite (motorR1, LOW);
digitalWrite (mRspeed, LOW); // Низкий уровень запрещает вращение
// моторов
digitalWrite (motorL1, LOW);
digitalWrite (mLspeed, LOW);
delay(1000); //останов 1 сек.
}
17.4. Возможный вариант фрагмента программы:
void loop()
{
digitalWrite (motorR1, LOW); // Команда digitalWrite устанавливает
// на контакте 2 низкий уровень
// Для драйвера моторов это означает то, что мотор будет вращаться
назад
digitalWrite (mRspeed, HIGH); // высокий уровень на контакте 3
// разрешает драйверу вращать
// электромотор
digitalWrite (motorL1, HIGH); // Устанавливаем на контакте 4
// высокий уровень
digitalWrite (mLspeed, HIGH);
delay(1000); // Вращаем 1 сек
digitalWrite (motorR1, LOW);
digitalWrite (mRspeed, LOW); // Низкий уровень запрещает вращение
// моторов
digitalWrite (motorL1, LOW);
digitalWrite (mLspeed, LOW);
delay(1000); // останов 1 сек. 189
}
17.5. Фрагмент программы:
void loop()
{
digitalWrite (motorR1, HIGH); // Команда digitalWrite устанавливает
// на контакте 2 высокий уровень
// Для драйвера моторов это означает то, что мотор будет
// вращаться вперед
digitalWrite (mRspeed, HIGH); // высокий уровень на контакте 3
// разрешает драйверу вращать
// электромотор
digitalWrite (motorL1, HIGH);
digitalWrite (mLspeed, HIGH);
delay(1000); // Вращаем 1 сек
digitalWrite (motorR1, HIGH);
digitalWrite (mRspeed, LOW); // Низкий уровень запрещает вращение
// моторов
digitalWrite (motorL1, HIGH);
digitalWrite (mLspeed, LOW);
delay(1000); // останов 1 сек
digitalWrite (motorR1, LOW); // Устанавливаем на контакте 2 низкий
// уровень
// Для драйвера моторов это означает то, что мотор будет
// вращаться назад
digitalWrite (mRspeed, HIGH); // высокий уровень на контакте 3
// разрешает драйверу вращать
// электромотор
digitalWrite (motorL1, LOW);
digitalWrite (mLspeed, HIGH);
delay(1000); // Вращаем 1 сек
digitalWrite (motorR1, LOW);
digitalWrite (mRspeed, LOW); // Низкий уровень запрещает
// вращение моторов
digitalWrite (motorL1, LOW);
digitalWrite (mLspeed, LOW);
delay(1000); // останов 1 сек.
}
190
ОГЛАВЛЕНИЕ
Предисловие 3
Эпизод 1. Как роботы стали роботами 4
Эпизод 2. Они такие разные 12
Эпизод 3. Смартфон в руки, и поехали! Роботы и принцип хранимой программы 19
Эпизод 4. Правила устанавливаете вы! Поговорим про алгоритмы 23
Эпизод 5. Шаг за шагом по программе 35
Эпизод 6. Т-с-с… Подробнее о кодах 42
Эпизод 7. Что понимает машина? 51
Эпизод 8. КуМир — все, что нужно 54
Эпизод 9. Электроника в робототехнике 67
Эпизод 10. Логика. Ничего случайного 79
Эпизод 11. Датчики — органы чувств робота 87
Эпизод 12. Датчики своими руками 91
Эпизод 13. Протокол связи — настоящее и будущее 104
Эпизод 14. MAC-адрес не дом и не улица… 109
Эпизод 15. Славная машина — Arduino 113
Эпизод 16. Огоньки и кнопочки — строим с Arduino 126
Эпизод 17. И вместо сердца пламенный мотор… 145
Эпизод 18. Скорости не сбрасывай на виражах… 155
Эпизод 19. Но это еще не конец… 166
Шпаргалки 167

191
International International
gymnasium gymnasium

Игорь и Вероника Воронины


Программирование для детей.
От основ к созданию роботов

Заведующая редакцией Ю. Сергиенко


Ведущий редактор К. Тульцева
Литературный редактор О. Нестерова
Художник Д. Семёнова
Корректор Н. Сидорова
Вёрстка Д. Семёнова

Изготовлено в России. Изготовитель: ООО «Прогресс книга».


Место нахождения и фактический адрес: 194044, Россия, г. Санкт-Петербург,
Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373.
Дата изготовления: 07.2018.
Наименование: детская литература.
Срок годности: не ограничен.
Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.13.000 — Книги печатные для детей.
Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01.
Подписано в печать 6.07.18. Формат 84×108/16. Бумага офсетная. Усл. п. л. 20,160. Тираж 3000. Заказ 0000.