Каждый день вы используете различную технику, даже не задумываясь о том, что в ней есть встроенные микрокомпьютеры. Вещи, которыми мы пользуемся в обиходе, становятся все более интеллектуальными.
Робот-пылесос в процессе уборки сам обследует квартиру, составляя ее карту, сам возвращается на пункт подзарядки, и сообщает о своих действиях голосом. Роботы моют окна, работают на выставках и барах, управляют автомобилями, используются в боевых действиях и в борьбе с терроризмом.
Новостные сайты в интернете забиты статьями о том, что скоро роботы начнут отнимать работу у людей, вытесняя их из ряда профессий, в том числе не требующих высокой квалификации. С этим можно спорить, однако несомненно, что робототехника уже прочно вошла в нашу жизнь, и специалисты в этой области будут всегда востребованы.
Но с чего лучше всего начинать обучение программированию и робототехнике?
Можно условно выделить два подхода к обучению.
Первый подход предполагает изучение основ электроники, компьютерной техники, программирования на ассемблере и Си, с последующим переходом к более высокоуровневым средствам проектирования программ и схемотехническим решениям на базе современных процессоров и микроконтроллеров, обучения основам численных методов и дискретной математики.
Когда-то давным-давно был доступен только первый способ, и я сам обучался именно так. Я собирал приемники-передатчики на транзисторах и лампах, различные радио устройства, триггеры из транзисторов, регистры из элементов 2И-НЕ на базе К155ЛА3, электронные часы, частотомер и самодельные компьютеры на микросхеме КР580ВМ80А, добавляя россыпь логических микросхем, микросхем памяти и периферийных устройств (рис. В.1). Первые программы были написаны, конечно же, в машинных кодах!
Рис. В.1. Элементная база прошлого века
У этого подхода есть очевидные преимущества и не менее очевидные недостатки.
Из важных преимуществ – на любом этапе будет понятна суть происходящего на самом низком уровне, на уровне сигналов и команд процессора, на уровне элементов и микросхем. Понимание сложных вещей будет достигаться постепенно, по мере продвижения от простого к сложному.
В то же время огромный недостаток метода обучения с самых основ заключается в том, что весь процесс отнимет очень много времени и сил. Двигаясь с самого начала, вы не скоро сможете создать что-нибудь достаточно сложное и интересное. В то же время хочется как можно быстрее насладиться результатами своего труда.
Второй подход предполагает, что обучение начинается с использования готовых наборов, содержащих микроконтроллеры и периферийные блоки, с применением графических инструментов программирования и языков высокого уровня. Далее после достижения определенных результатов, можно перейти к изучению низкоуровневых средств и инструментов. Именно этот подход мы и будем использовать в данной книге.
На мой взгляд, в процессе обучения нужно двигаться к какой-нибудь интересной, но сложной цели, при этом шаги должны быть достаточно крупными, чтобы продвижение было заметно. Сложность цели необходима для получения самых разносторонних знаний, которые пригодятся в дальнейшем на работе в области ИТ и робототехники.
Здесь интересно было бы создать так называемый STEM-проект, реализация которого позволить получить знания, необходимые в реальной жизни. Аббревиатура STEM – это сокращение от Science, Technology, Engineering и Math, т.е. наука, технология, инженерное дело и математика.
Я предлагаю в качестве такого учебного проекта создать несложную модель марсохода (или движущегося робота для изучения каких-либо других планет) с названием BoxRover. Пусть ваше устройство никогда не полетит в космос, но оно сможет управляться по радио или через интернет, измерять различные параметры окружающей среды, получать фотографии и видео, и передавать все это «на землю», например, в ваш компьютер или планшет.
По мере создания модели марсохода BoxRover вы научитесь программировать встроенные микроконтроллеры, управлять движением, получать данные бортовых измерительных устройств и получите другие необходимые знания.
На рис. В.2 мы показали пример современных компонентов, из которых вы будете делать своего первого робота.
Рис. В.2. Некоторые современные компоненты для изготовления робота
На следующем этапе вы сделаете и другие проекты, например, элементы автоматизации умного дома.
На различных курсах робототехники для детей используются наборы Lego. С их помощью можно быстро собрать робота из готовых деталей и так же быстро запрограммировать на выполнение различных несложных действий. На мой взгляд, такие наборы, хотя и дают представление о некоторых функциях роботов, все же недостаточно хорошо демонстрируют взаимодействие микрокомпьютеров и периферийных устройств.
Чтобы лучше понимать, что происходит, научиться не только программировать готового робота, но и создавать собственные проекты из электронных блоков и компонентов, на разных стадиях обучения мы будем работать с микроконтроллерами BBC micro:bit, платформой Arduino, STM32 Nucleo, а также Raspberry Pi.
Микроконтроллер BBC micro:bit был создан корпорацией BBC как открытый проект, нацеленный на повышение компьютерной грамотности, и в первой версии стал доступен в феврале 2016 года. Сейчас в продаже появилась значительно улучшенная версия 2 этого микроконтроллера.
В России micro:bit версии 1.5 можно купить в нескольких интернет-магазинах по цене ниже 1900 руб., что делает его весьма доступным решением для начала обучения. На момент написания книги версию 2 можно было приобрести в магазине https://mrobot.by (примерно по такой же цене), а также в зарубежных магазинах. На странице https://microbit.org/buy/ представлен список компаний из разных стран, где можно купить micro:bit версии 2.
Даже первая версия этого недорогого микрокомпьютера размером с половину кредитной карты оснащена неплохим набором периферийных устройств. В micro:bit версии 2 был добавлен микрофон, динамик, еще одна сенсорная кнопка, увеличен объем памяти и мощность процессора. Кроме того, появился режим сохранения энергии, что важно при питании от батарей и аккумуляторов.
В табл. 1 вы найдете сравнение характеристик micro:bit версии 1.5 и 2 с другими широко распространенными микроконтроллерами – Arduino UNO и STM32 Nucleo F401RE.
Табл. В1. Сравнение характеристик микроконтроллеров
Если вы создаете проект робота или какой-либо другой проект с микроконтроллером, то при использовании micro:bit v2 можете воспользоваться многими устройствами, установленными на плате этого микроконтроллера:
Заметим, что в micro:bit v2, в отличие от v1.5, шина I2C полностью выделена для внешних устройств. К ней не подключены устройства, расположенные на плате micro:bit.
Также добавился четвертый свободный для использования контакт интерфейса GPIO. Была увеличена допустимая токовая нагрузка на подключаемую периферию. Если раньше в micro:bit v1.5 суммарный ток на контактах GPIO не должен был превышать 90 мА, то в версии 2 этот предел расширен до 190 мА.
Как видите, в микроконтроллере micro:bit уже имеется встроенное оборудование, которое потребуется нам для модели марсохода (рис. В.3, В.4). Устройства, которые появились на плате micro:bit v2 показаны на рис. В.5 и В.6.
Даже с базовым оборудованием micro:bit версии 2 наш марсоход сможет измерять температуру, напряженность магнитного поля, реагировать на ускорения, подавать звуковые сигналы, обнаруживать источники звука, и даже показывать инопланетным зрителям картинки на мониторе!
Рис. В.3. Оборудование на плате micro:bit v1.5
По мере реализации проекта BoxRover мы подключим к micro:bit и другие устройства, например, контроллеры, предназначенные для управления двигателями платформы, погодную станцию, OLED-монитор.
Особенно следует отметить наличие у micro:bit интерфейса GPIO. Используя порты GPIO, вы сможете подключать к микроконтроллеру различные цифровые и аналоговые устройства.
Два контакта порта GPIO используются для подключения внешних устройств, работающих с протоколом I2C (Inter-Integrated Circuit). Также предусмотрено три контакта для обмена данными с устройствами по протоколу SPI (Serial Parallel Interface).
Наличие портов I2C (встречается обозначение I2C) и SPI дает возможность подключить к микроконтроллеру такие устройства, как моторы и шаговые двигатели, датчики движения, датчики газа и наличия воды, радио модули и т.д. Эти устройства продаются в интернет-магазинах и, как вы увидите, легко подключаются к micro:bit и программируются.
Микрокомпьютер micro:bit при питании от батарей потребляет всего несколько десятков мА при напряжении питания 3В. И это если включены все светодиоды, а процессор загружен на полную мощность. Заметим, что макет нашего марсохода будет питаться от батарей или аккумуляторов, поэтому важно, чтобы все бортовые устройства потребляли как можно меньше энергии.
Рис. В.4. Кнопки и светодиодный экран на плате micro:bit v1.5
Начинающие программисты смогут воспользоваться визуальным редактором программ MakeCode. Этот редактор доступен через браузер, так что его даже не надо устанавливать на компьютер (хотя есть и версия для установки на Windows и MacOS). Также можно работать с MakeCode при помощи мобильного приложения, доступного для смартфонов и планшетов на базе Android и iOS.
Рис. В.5. Сенсорная кнопка в виде логотипа, микрофон и светодиод на плате micro:bit v2
Рис. В.6. Микрофон, индикатор питания и динамик на плате micro:bit v2
Для micro:bit можно создавать программы на языке Python, используя несложный в использовании редактор Python Editor. Есть также инструменты, позволяющие программировать micro:bit на языках JavaScript, С и даже Ada.
Микроконтроллер Arduino был создан в 2005 году для быстрого обучения студентов работе с электронными проектами. Сейчас он стал очень популярен, однако, на мой взгляд, Arduino имеет заметно более высокий порог вхождения по сравнению с BBC micro:bit.
Прежде всего, для программирования Arduino используется не самый простой в изучении язык С++. Вам также придется установить на свой компьютер Arduino IDE, либо использовать онлайн редактор Arduino Web Editor.
Изучение языков С и С++ очень полезно в плане профессиональной работы с микроконтроллерами, однако на первом этапе при использовании micro:bit можно получить представление о робототехнике и без знаний этих языков программирования.
Далее, на плате Arduino нет таких устройств, как на micro:bit. Предполагается, что для подключения различной периферии (датчиков, например) вы будете приобретать платы расширения (Arduino Shield или шилды). Эти платы и устройства можно подключить к плате Arduino через разъем GPIO.
В продаже имеется очень много плат расширения Arduino Shield самого разного назначения, однако все их нужно покупать дополнительно.
Что касается энергопотребления, то сам по себе микрокомпьютер Arduino довольно экономичен. Плата Arduino Uno требует питание 9 В, потребляя при этом порядка 50 мА. Есть и более экономный вариант – Arduino Pro Mini. Он может использовать для питания напряжение 3,3 В (как micro:bit), и при этом потребляет всего несколько десятков мкA. Тем не менее, следует учитывать энергопотребление дополнительных модулей (как и в случае micro:bit), а оно может быть довольно значительным.
Конечно, платформу Arduino можно использовать для создания своей модели марсохода и других проектов, однако мы начнем с платформы BBC micro:bit, как более легкой в освоении.
В то время как Arduino представляет собой платформу для обучения и любительских разработок, в профессиональной области большое распространение получили микроконтроллеры STM32 производства STMicroelectronics https://www.st.com/.
Платформа STM32 Nucleo F401RE, совместимая с модулями расширения Arduino, представляет намного больше возможностей по сравнению с платформой Arduino и micro:bit.
C точки зрения применения в робототехнике у микроконтроллеров на базе STM32 намного больше возможностей, чем у Arduino или micro:bit.
Однако все имеет свою цену. И если роботы на базе micro:bit можно разрабатывать с применением очень простых средств блочного визуального программирования, то при использовании Arduino и STM32 не обойтись без знаний языков программирования С или С++. Кроме того, архитектура процессоров STM32 достаточно сложна, а в полном руководстве по моделям STM32 насчитывается более 1700 страниц!
Тем не менее, вам не придется читать это руководство на первом этапе знакомства. Имеются средства программирования для STM32, скрывающие сложность внутри готовых библиотек и программных модулей.
Для решения серьезных задач, таких как обработка данных, полученных от измерительной аппаратуры нашей модели марсохода, передачи видео «на землю», распознавание изображений, передачи данных, полученных от контроллеров умного дома через интернет и т.п. микрокомпьютеры BBC micro:bit и Arduino, к сожалению, не подойдут. В то же время относительно недорого можно приобрести миниатюрный одноплатный компьютер Raspberry Pi, способный составить конкуренцию в некоторых случаях даже настольным компьютерам.
Например, модель Raspberry Pi 4 содержит 64-разрядный 4-ядерный процессор ARMv8-A с тактовой частотой 1,5 Ггц. У него есть встроенный графический процессор GPU Broadcom VideoCore VI, беспроводные интерфейсы Bluetooth и WiFi, разъем RJ-45 Ethernet с пропускной способностью 1 Гбит, интерфейс видеокамеры, два интерфейса Micro HDMI, интерфейсы USB и другое оборудование.
К микрокомпьютеру Raspberry Pi через шину GPIO можно подключить самые разнообразные устройства, такие как измерители параметров, двигатели и пр.
Надо понимать, что для Raspberry Pi 4 нужен довольно мощный источник электропитания. Штатный блок питания, например, обеспечивает 3 А при напряжении 5 В, а это уже 15 Вт. Если устанавливать этот микрокомпьютер на макет марсохода, то для его питания (а также для питания дополнительных устройств) в течение длительного времени потребуются довольно тяжелые и емкие аккумуляторы. Будет нужно прочное шасси и мощные электродвигатели, которые сами по себе будут потреблять много электроэнергии.
Вы можете сделать на базе Raspberry Pi 4, например, сервер обработки данных, полученных от макета марсохода или контроллеров умного дома, Web-сервер для трансляции этих данных в интернете и для решения других подобных задачи. Вы можете создавать программы для Raspberry Pi с использованием практически любых языков программирования, доступных для обычных серверов, настольных компьютеров и ноутбуков.
На момент создания книги на рынке появилось очень много одноплатных микрокомпьютеров различного типа и назначения.
Это многочисленные «клоны» Arduino и Raspberry Pi, которые отличаются ценой, габаритами и потребляемой мощностью. Есть даже готовая мощная система NVIDIA Jetson Nano в миниатюрном исполнении, способная решать серьезные задачи искусственного интеллекта, компьютерного зрения и робототехники.
В продаже можно найти микрокомпьютеры с очень небольшим энергопотреблением, что будет полезно для создания нашего макета или для устройств интернета вещей IoT (Internet of Things).