Публикации сообщества

Александр Григорьев • 27 января 2019

Первый шаг в мир микроконтроллеров

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

Конечно же, некоторое количество вопросов нам придётся прояснить, свои тонкости существуют в любом деле. Однако объем этой вводной информации вполне обозрим. Опыт показывает, что "ликвидацией безграмотности" приходится заниматься с основной массой педагогов, пришедших на мастер-класс по визуальному программированию микроконтроллеров. Между тем есть возможность освоить "азы" самостоятельно, заранее получить минимально необходимые теоретические знания, а быть может, даже самостоятельно попробовать реализовать несколько простых проектов, не имея под рукой никакого оборудования, кроме персонального компьютера с выходом в интернет.

 Сегодня мы поговорим о базовой функциональности любого микроконтроллера, а после обсуждения вопросов теории посмотрим на демонстрационные проекты на базе Arduino Uno (если у Вас есть плата и пара-тройка подходящих проводочков, Вы сумеете их реализовать) и BBC Micro:bit (мы будем пользоваться компьютерным симулятором для проверки функционирования проектов, но они будут работать и на реальном Micro:bit, само собой).

 

Теория

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

Сам микроконтроллер - это микросхема с большим количеством внешних контактов ("ножек", "штырьков", по-английски "pin", в профессиональном жаргоне "пин"). Посредством этих "ног" считываются значения, передаваемые внешними устройствами (показания датчиков, например), и происходит управление работой устройств (включаются/выключаются моторы, лампы и т.д.).

рис1

рис.1

Кстати, Arduino Uno хоть и называют микроконтроллером, на деле это отладочная плата на базе микроконтроллера ATMega328, своего рода "конфета в обертке". На плате располагаются удобные контакты относительно большого размера. Представляете, каково нам было бы, если бы пришлось припаивать провода непосредственно к тонюсеньким ножкам микросхемы?!

рис2

рис.2

У микроконтроллера есть несколько служебных контактов (например, по которым подаётся электропитание со стабилизированным напряжением) и множество контактов ввода/вывода. Контакты питания промаркированы как VCC (положительный, +5V или +3,3V, в зависимости от типа микроконтроллера) и GND ("ground", "земля", отрицательный).

Существует два основных состояния каждого пина: либо на нём есть положительное напряжение (разность потенциалов относительно контакта GND) либо нет. Первое состояние это 1 ("логическая единица"), HIGH ("высокое"), True ("истина"); второе состояние - 0 ("логический ноль"), LOW ("низкое"), False ("ложь"). Иными словами, каждый контакт ввода/вывода может использоваться как цифровой (по английски "digital") пин, имеющий одно из двух возможных значений в двоичной системе исчисления.

С помощью любого контакта ввода/вывода микроконтроллер умеет как считывать двоичные значения (режим работы INPUT, на вход), так и выводить значения наружу (режим работы OUTPUT, на выход). Данная функциональность является базовой, эти два режима работы поддерживаются всеми пинами (даже теми, которые обладают особой, дополнительной функциональностью, например, так называемыми аналоговыми пинами). Каждый пин способен работать в своём собственном режиме, либо на вход, либо на выход. Это удобно, ведь некоторые проекты предполагают наличие большого количества датчиков, а некоторые, напротив, управление сложными исполнительными механизмами.

Чтобы подытожить вышесказанное, перечислим возможные режимы работы контакта ввода/вывода:

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

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

Также перечислим основные команды чтения и записи значений:

  • "digitalRead" - проверка значения на нужном пине, чтение единицы или нуля (существует ли положительное напряжение на пине, поданное внешним устройством);
  • "digitalWrite" - изменение значения нужного пина, запись единицы или нуля (напряжение на пине либо появляется, либо пропадает, соответственно либо включается, либо выключается внешнее устройство);
  • "analogRead" - чтение аналогового значения;
  • "analogWrite" ("pwmWrite") - запись аналогового (точнее, псевдоаналогового) значения.

Сегодня мы поговорим о цифровых командах digitalRead и digitalWrite. Даже если ограничиться лишь использованием этих самых простых операций, можно реализовать бесчисленное множество разнообразных устройств.

Всё вышеописанное не выглядит слишком уж сложно, не так ли? Но разобраться со всеми тонкостями будет проще, если увидеть, как на практике работает тот или иной проект.

 

Arduino Uno

Для работы с Arduino Uno мы будем использовать визуальную среду программирования mBlock for PC v.3.4.11 с установленным расширением AdvancedArduino Extension.

Почему именно эту программную среду, я рассказывал в своей прошлой публикации. Если попытаться объяснить кратко, в отличие от многих других продуктов, mBlock оптимально подходит сразу для двух вещей: и для первого знакомства с "классическими" микроконтроллерами Arduino, и для создания прикладных проектов повышенной сложности на их основе.

http://novator.team/post/566

Альтернативная ссылка с полноразмерными иллюстрациями и файлами проектов

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

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

Давайте подготовим всё необходимое.

Загружаем дистрибутив с сайта разработчиков и устанавливаем программу (обратите внимание, мы используем mBlock 3, а не mBlock 5).

http://www.mblock.cc/mblock-software/

рис3

рис.3

Запускаем mBlock и выставляем необходимые настройки. Язык русский (хоть качество перевода и не идеально).

рис4

рис.4

Плата - Arduino Uno.

рис5

рис.5

И сразу же добавляем расширение AdvancedArduino. Запускаем Менеджер расширений.

рис6

рис.6

Находим AdvancedArduino, вбив в строку "Search" это название либо его часть. Нажимаем на кнопку "Загрузка".

рис7

рис.7

Пара секунд, и расширение загружено. Обратите внимание на ссылку "More Info". Щёлкнув по ней, Вы сможете попасть на страницу с примерами использования.

рис8

рис.8

Закрываем Менеджер расширений. Проверяем, что загруженное расширение будет отображаться на палитре блоков в категории "Робот" ("галочка" выставлена).

рис9

рис.9

Выбираем категорию "Робот" на палитре блоков и видим массу непонятных (а для кого-то уже вполне понятных) команд. Но пугаться не следует, сегодня нам будут нужны лишь три блока из верхних четырёх (не считая заголовочного блока "Advanced Arduino Program"). Их имена - "pinMode", "digitalRead" и "digitalWrite".

рис10

рис.10

Я советую с самого начала отказаться от использования базового (стандартного) расширения "Arduino". Во-первых, так Вы начнёте запоминать оригинальные названия всех функций Arduino IDE, тогда как качество перевода этих названий на русский язык в программе mBlock оставляет желать лучшего. Во-вторых, обезопаситесь от ошибок, присутствующих в базовом расширении Arduino и исправленных в AdvancedArduino. Об этих ошибках и о третьей причине выбрать "AdvancedArduino" мы поговорим чуть позже, когда будем разбираться с переключением режимов работы того или иного пина. Для удобства спрячьте расширение "Arduino", например, щёлкнув по его названию.

рис11

рис.11

Теперь займёмся аппаратной частью. Сегодня нам будут нужны лишь сама плата Arduino Uno, USB кабель и три проводочка (если необходимого у Вас нет под рукой, не расстраивайтесь; возможно, всё окажется достаточно понятно и просто по текстовому описанию).

Наверное, Вы нетерпеливо ждёте, когда же мы наконец подключим Arduino Uno. Не спешите, ещё один момент!

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

Во-вторых, проверьте, какие последовательные коммуникационные порты (COM ports, Serial ports) уже известны Вашему компьютеру (точнее, операционной системе). Выберите в mBlock соответствующий пункт меню.

рис12

рис.12

На рисунке выше COM1 - это коммуникационный порт, изначально присутствующий на материнской плате компьютера. Закройте меню и подключите плату к компьютеру USB кабелем. Светодиоды на плате загорелись. При необходимости дождитесь установки драйверов. Откройте пункт меню "Serial ports" снова. Вы должны увидеть новый коммуникационный порт. Именно его и следует выбрать для соединения.

рис13

рис.13

Обратите внимание, заголовок программы mBlock изменился, а индикатор возле имени расширения AdvancedArduino сменил цвет с красного на зеленый (на рисунке с правой стороны).

рис14

рис.14

Кстати, если Вы откроете пункт меню "Serial ports" вновь, Вы увидите выставленный маркер ("галочку") напротив соответствующего COM-порта. Только не следует щёлкать по имени COM-порта повторно, иначе Вы снимите соединение.

рис15

рис.15

Вместо этого выберите пункт меню "Обновить прошивку".

рис16

рис.16

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

рис17

рис.17

Всё, с платой уже можно работать! Для того, чтобы понять, что она откликается на наши команды, не обязательно даже составлять какую-то программу. Просто вытащите на рабочее пространство блок "digitalWrite 13 pin, HIGH value" и щёлкните по нему.

рис18

рис.18

На плате Arduino Uno загорелся светодиод, промаркированный буквой "L".  Он специально предназначен для того, чтобы отображать состояние пина номер 13. Удобно, что для проверки работы не требуется подключать никаких внешних устройств! Измените "HIGH" на "LOW" в блоке "digitalWrite" и щелкните по нему вновь. Светодиод погас.

рис19

рис.19

А вот и наша первая программа мигания светодиодом, типичный "Hello, World" в мире микроконтроллеров. Соберите её и запустите кнопкой "Старт" с изображением зелёного флажка (на всякий случай напоминаю, что соседняя кнопка, представляющая собой красный восьмиугольник, это "Стоп"; обе кнопки расположены в mBlock над областью сцены, так же, как в обычном Scratch).

рис20

рис.20

Внимательно посмотрите на плату. Вы обратили внимание, что в тот момент, когда светодиод "L" загорается или гаснет, кратковременно вспыхивают ещё два светодиодных индикатора? Они промаркированы как "RX" и "TX". Это передаются данные от компьютера к микроконтроллеру и обратно. Ведь наша программа в данном случае запущена на компьютере, а Arduino лишь послушно исполняет полученные команды. Но загрузить программу непосредственно в микроконтроллер возможно, и скоро мы этим займёмся.

Важно помнить, что мы не просто лишь зажигаем и гасим лампочку на самой плате. Помимо этого меняется состояние пина номер 13, на нём появляется и исчезает напряжение. Убедиться в этом можно, подключив подходящее внешнее устройство к выводам "13" и "GND". Подключенный внешний светодиод тоже будет загораться и гаснуть. А при помощи транзистора или модуля с электромагнитным реле можно включать и выключать мощный мотор или другую нагрузку.

рис21

рис.21

Для примера я собрал простейшую схему из светодиода и резистора 220 Ом, соединённых последовательно. Как видите, мне не потребовалось даже паяльника. Резистор нужен для того, чтобы защитить светодиод (да и вывод микроконтроллера, работающий в режиме OUTPUT) от чрезмерно большого тока. Если Вы решите воспроизвести этот мой "супер-проект", помните, что для того, чтобы светодиод заработал, при его подключении важно соблюдать полярность (более длинная ножка - плюс).

рис22

рис.22

Теперь давайте освоим использование операции чтения. Вытащите на рабочее поле блок "digitalRead 13 pin" и отредактируйте номер. Мы будем проверять состояние 12-го пина. Щёлкните по блоку мышью. Скорее всего Вы увидите появившуюся надпись "False", что означает отсутствие положительного напряжения на контакте ввода/вывода номер 12.

рис23

рис.23

Почему я пишу "скорее всего"? Потому что нет гарантии, что Вы увидите именно "False", а не "True". Давайте проведем эксперимент, разберёмся, как это может получиться.

Возьмите подходящий проводок и аккуратно воткните его в 12-ый разъем Arduino. Можно делать это и при работающей плате, но безопаснее будет вначале обесточить её, отключив от компьютера (с точки зрения наличия пусть небольшого, но ненулевого риска случайно испортить электронику). Не забудьте только предварительно снять соединение по последовательному порту, а после повторного подключения установить его снова (вновь загружать прошивку на плату не потребуется). Должно получиться примерно вот так (провод должен просто торчать вверх, скручивать его не обязательно).

рис24

рис.24

Теперь соберите и запустите следующий скрипт.

рис25

рис.25

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

А вот если Вы соедините пин 12 с выводом "5V" ("VCC") либо с выводом "GND", получите однозначно определённое значение, соответственно логическую единицу ("True") или логический ноль ("False").

рис26

рис.26

Белый проводочек висит в воздухе - получаем случайное значение, то единицу, то ноль. Касается красного - получаем единицу. Касается черного - ноль.

Как видите, эта схема предполагает переключение контакта. На практике удобнее и надежнее проверять замыкание контакта, поэтому используют схему с подтягивающим резистором ("подтягивает к единице") или стягивающим резистором ("стягивает" до нуля). Сопротивление подбирают таким образом, чтобы проходящий ток был невелик, однако его с избытком хватало, чтобы "перебить" влияние электромагнитных помех (сопротивление резистора может варьироваться в широких пределах, но традиционно это 10 кОм).

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

рис27

рис.27

Наша программа (скрипт, отображённый на рисунке 25), работает пока под управлением компьютера, интерактивно. Микроконтроллер Arduino независимым устройством еще не является. Давайте теперь попробуем составить и загрузить на плату программу, которая будет работать автономно.

Пришла пора прояснить ещё один вопрос. Вы не обратили внимание, что мы пока ни разу принудительно не переключали режим работы того или иного пина (INPUT/OUTPUT)? Дело в том, что среда mBlock (а точнее, загруженная ею в микроконтроллер прошивка) при интерактивном управлении платой занимается этим самостоятельно, автоматически переключая режимы при необходимости. Пока Вы работаете интерактивно, всё функционирует без проблем. Разработчики попытались реализовать подобный подход и для создания программ автономной работы. Однако во втором случае это им удалось плохо, в результате при программировании возникает масса осложнений и ограничений, зачастую труднообъяснимых (особенно для новичков). К частности, нельзя передавать номера пинов в собственные блоки в качестве параметров, а это очень неудобно, поверьте.

Избавиться от этой проблемы можно посредством использования расширения "AdvancedArduino" вместо стандартного расширения "Arduino". Хоть и придется приучиться указывать режим работы каждого пина явно, зато появится возможность переключать режимы именно тогда и именно так, когда и как Вы хотите.

Наличие блока "pinMode" никак не влияет на работу программы при интерактивном управлении с компьютера (повторюсь, переключение режимов INPUT/OUTPUT всё равно происходит автоматически). Попробуйте составить следующий скрипт и проверить его работу.

рис28

рис.28

А теперь превратим программу в автономную. Оторвите скрипт от заголовка ("шапочки") "Когда щёлкнут по кнопке Старт", удалите этот заголовок (бросив обратно на панель блоков, например), а вместо него поставьте "шапочку" "Advanced Arduino Program" и щёлкните по ней. Вид программы mBlock изменился (этого же эффекта можно достичь, выбрав пункт меню "Редактировать", "Arduino mode").

рис29

рис.29

Осталось нажать на кнопку "Upload to Arduino". Программа начала готовиться для загрузки. Некоторое время нам приходится провести в ожидании. Наконец-то загрузка успешно (я надеюсь) завершена.

рис30

рис.30

Здесь стоит обратить Ваше внимание на несколько моментов.

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

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

И наконец, давайте приглядимся повнимательнее, как функционирует наша плата с загруженной программой. Если проводок всё еще воткнут в пин 12 (тот, состояние которого мы проверяем), и не касается контактов GND и 5V(VCC), Вы увидите, что светодиод на плате горит, но не так ярко, как раньше. В действительности он то загорается, то гаснет, но переключения происходят настолько быстро, что глаз не в состоянии их заметить. При автономной работе нет нужды обмениваться информацией с компьютером, все "решения" плата принимает самостоятельно, и это радикально увеличивает скорость работы программы.

Проводок-"антенна" (связанный с пином 12) ловит электромагнитные помехи, и светодиод в результате постоянно очень быстро мигает. Когда мы соединяем пин 12 с контактом 5V (касаясь белым проводом красного), светодиод загорается на полную яркость (потому что постоянно включен), когда с контактом GND - заснет.

В большинстве случаев нам хотелось бы добавить однозначности в проект и быть уверенным, что у нашей кнопки лишь два возможных состояния: нажата или отпущена. Как я уже писал, для этого применяется схема с подтягивающим или стягивающим резистором. Но оказывается, можно избежать использования внешних схем, задействовав подтягивающий резистор, который изначально встроен в сам микроконтроллер! Благодаря наличию команды "pinMode" в составе расширения AdvancedArduino мы можем выбрать очень удобный режим работы контакта ввода/вывода - "INPUT_PULLUP", режим ввода с активированным подтягивающим резистором.

Давайте проверим это на практике. Оставьте воткнутыми в плату лишь два проводка: белый (пин 12) и черный (GND). Вновь установите соединение с платой по коммуникационному последовательному порту. Модифицируйте вышеприведённую программу, изменив режим работы 12-го пина с INPUT на INPUT_PULLUP, загрузите.

рис31

рис.31

Вот теперь всё работает однозначно: когда белый проводок не касается черного, светодиод включен, когда касается - выключен. Никаких внешних схем не требуется, удобно! К сожалению, режим INPUT_PULLUP возможно использовать лишь при создании программ автономной работы (в "Arduino mode").

На всякий случай напоминаю, что для возвращения возможности интерактивного управления необходимо вновь загрузить прошивку на плату, а выйти из "Arduino mode" можно через главное меню mBlock (пункт "Редактировать"), либо нажав на кнопку "Back" (рядом с кнопкой "Upload to Arduino").

Заканчивая рассмотрение различных сложностей, связанных с переключением режимов работы контактов ввода/вывода микроконтроллера, нельзя не сказать ещё об одном "загадочном" моменте. Какими бы средствами для программирования Arduino Вы не пользовались (Arduino IDE, mBlock с расширением Arduino или AdvancedArduino), Вы рано или поздно столкнётесь с ситуацией, когда используемый Вами пин работает на выход не так, как Вы ожидаете. При выполнении команды "digitalWrite" электрический ток на контакте появляется, но... очень маленький. Если подключить к выводу светодиод, Вы увидите, что он горит, но очень и очень тускло. Если вместо светодиода подключить то или иное внешнее устройство, оно либо будет работать абсолютно нормально (этого небольшого тока хватает для его включения), либо не будет работать вообще (тока не хватает), либо даже будет работать в опасном для себя режиме (например, если транзистор открыт лишь наполовину, он перегревается; риск невелик, но тем не менее о нём стоит упомянуть).

Причина данного явления - вывод микроконтроллера в режиме INPUT, а не в режиме OUTPUT, как Вы надеетесь. Либо Вы забыли включить в программу команду "pinMode" (и активированным остался режим по умолчанию - INPUT), либо используете в mBlock расширение "Arduino", а оно в данной ситуации отработало неправильно. Так что если уж Вы занимаетесь программированием микроконтроллеров Arduino, в любом случае приходится задумываться о режимах работы выводов.

А если Вы хотите понять, почему ток всё-таки появляется, могу объяснить. Когда ножка микроконтроллера (предположим, 12-ая) находится в режиме "на вход", команда "digitalWrite(12,HIGH)" подключает встроенный подтягивающий резистор, а "digitalWrite(12,LOW)" отключает его. Иными словами, происходит переключение режимов работы "INPUT" и "INPUT_PULLUP".

Можно было бы предложить Вам проверить вышесказанное на практике. Но... мы столкнёмся с новыми тонкостями, объяснить которые будет ещё сложнее. Для тех, кто решил осуществить эту проверку самостоятельно, советую использовать внешний светодиодный модуль либо светодиодную сборку (см. в конце статьи) и вывод микроконтроллера, отличный от 13-го.

Нет смысла пытаться объять необъятное, на этом сегодня мы заканчиваем рассмотрение платформы Arduino.

 

BBC Micro:bit

Надеюсь, всем уже известно, что эта плата на базе микроконтроллера Nordic nRF51822 была разработана специально для нужд образования. Как следствие, несмотря на всё еще сохраняющуюся местами "сырость" программных средств и методической базы, с Micro:bit действительно легко и приятно работать. Многообразие возможностей настолько велико, что трудно выбрать какой-либо один "правильный" вариант применения или подход в освоении этой платформы.

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

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

А для запуска MakeCode не обязательно его устанавливать на компьютер. Достаточно в браузере открыть следующую ссылку:

http://makecode.microbit.org

рис32

рис.32

Как видите, на этой странице множество демонстрационных учебных проектов. Вы можете потом их протестировать, но для начала давайте создадим свой собственный. Нажмите на ссылку "Новый проект" ("New project", если у вас пока всё еще выбран английский интерфейс).

Среда MakeCode внешне очень похожа на Scratch, но вместо Сцены у нас виртуальная плата Micro:bit. Когда мы создадим программу, эта "плата" начнёт (виртуально) исполнять наши команды.

Приступим. Первым делом стоит сменить язык на русский (щёлкните по шестерёнке).

рис33

рис.33

Вытащим на рабочее поле необходимые блоки. "Пауза" находится в разделе "Основное", "цифровой: записать" - в разделе "Расширенные", "Контакты". Менять режим работы контактов ввода/вывода нет возможности (или необходимости).

рис34

рис.34

Теперь соберите скрипт. Для большей наглядности смените P0 на P2 (английская буква "P" в данном случае означает "пин" или "порт"). Как только скрипт будет готов, Вы сразу увидите, что он заработал!

рис35

рис.35

Когда на виртуальном пине появляется "напряжение", рядом отображается единица, когда исчезает - ноль.

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

рис36

рис.36

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

рис37

рис.37

Добавим новый проект. Для этого надо щёлкнуть по ссылке "micro:bit" в левом верхнем углу. Вы вернётесь на начальную страницу (см. рис.32), где можно выбрать любой свой старый проект для загрузки или создать новый. Кстати, также можно импортировать проект из файла (об этом чуть позже).

Теперь попробуем читать значение пина P2. Нам понадобятся блоки из разделов "Основное", "Музыка", "Циклы", "Логика" и "Контакты".

рис38

рис.38

Обратите внимание, как изменился симулятор. Щёлкните мышью по контакту P2. Считается, что таким образом Вы подали логическую единицу (напряжение +3.3V или чуть меньше) на этот контакт. Чтобы изучить работу программы, перезапустите симулятор. Для наглядности можно использовать режим пошагового исполнения.

рис39

рис.39

Чтобы перенести свой проект на другой компьютер, а также чтобы загрузить его на реальную плату Micro:bit, необходимо сохранить его в виде HEX-файла, нажав на кнопку "Скачать" (см. рис.37). Если у вас есть плата, подключите ее USB-кабелем к компьютеру и просто скопируйте HEX-файл на соответствующий появившийся внешний накопитель. Вуаля, программа запустилась! Но для полноценной проверки работы представленных проектов Вам все-таки придется дополнительно обзавестись подходящими соединительными проводами, наушниками и самым простым светодиодным модулем (либо хотя бы скрутить вместе ножки резистора и светодиода, как на рисунке 22).

И ещё, тот же самый HEX-файл можно использовать для импорта проекта на другой компьютер (см.рис.32, кнопка "Импорт").

 

Arduino и/или Micro:bit и дополнения к ним

Безусловно, BBC Micro:bit чудо как хорош. Однако сбрасывать со счетов классическую Arduino Uno было бы как минимум опрометчиво. Моё личное мнение таково: обе платы нуждаются в дополнениях, обе платы имеют право на существование, и при наличии одной платы вторая без дела тоже не останется (особенно с учётом существенной разницы в стоимости и разницы в возможностях, см. ниже).

Конечно, и на базе "голого" Micro:bit можно реализовать множество проектов. Но я всё-таки советую приобрести дополнительно как минимум провода с зажимами ("крокодилами"), а желательно еще иметь под рукой любой набор с Arduino-совместимыми электронными компонентами и вот такой "шилдик" (плату расширения, со спикером "на борту", кстати).

http://ru.aliexpress.com/item/IO-Breakout-BBC-Micro/32864449315.html

рис40

рис.40

Жаль только, что приобрести дополнения для Micro:bit непосредственно в России пока что весьма проблематично. У платформы Arduino в этом плане дела обстоят гораздо лучше.

Если Вам по душе решение "всё включено", могу порекомендовать лишь один набор, в комплектации которого мы (Юрий Винницкий и я) принимали самое непосредственное участие. Это "Scratch+Arduino. Набор для юных конструкторов".

http://www.bhv.ru/books/book.php?id=198903

http://robotbaza.ru/product/scratcharduino-nabor-dlya-yunyh-konstruktorov

рис41

рис.41

Другой проверенный набор, в чём-то более функциональный, но лишённый важных и чудовищно удобных при обучении детей компонентов (да к тому же в нём не лежит наша книга!), это "Датчики и сенсоры для проектов на основе контроллера, совместимого с Arduino".

http://arduino-kit.ru/product/datchiki-i-sensoryi-dlya-proektov-na-osnove-kontrollera-arduino

рис42

рис.42

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

http://robotdyn.ru/catalog/arduino/boards/uno_r3_ch340g_compatible_with_arduino_uno_r3.html

Вторая по важности вещь, это светодиодная сборка, на 6 портов (многоцветная), либо на 14 портов (одноцветная). Этот компонент мы используем практически во всех учебных проектах, и при его наличии с точки зрения удобства Arduino мало чем уступает Micro:bit. Я бы сказал больше - в некотором смысле превосходит. Ведь отладив алгоритм на светодиодной сборке можно вместо неё подключить шаговый двигатель (через транзисторную сборку, естественно) и увидеть, как вращается его вал.

Само собой, светодиодная сборка включена в набор "Scratch+Arduino". Однако, её можно приобрести и отдельно, на AliExpress, а теперь и у российских поставщиков.

http://ru.aliexpress.com/item/2pcs-DC-3-3V-5V-12V-6bits-Multicolor-Rapid-Prototyping-LED-2-54mm-PIN-0603-Package/32275114940.html

http://mgbot.ru/catalog/displei/svetodiodnaja-linejka-sinego-cveta-svechenija/

рис43

рис.43

Некой менее функциональной, хоть по-своему и симпатичной заменой может служить вот такой "светофор".

http://ru.aliexpress.com/item/5/32882087826.html

рис44

рис.44

В самом крайнем случае (хоть это и лишает смысла многие проекты) можно взять простой светодиодный модуль RGB.

http://mgbot.ru/catalog/displei/modul-rgb-svetodioda-dla-arduino/

Отмечу, что все эти компоненты допустимо вставлять непосредственно в плату Arduino, без использования проводов.

Третье по важности дополнение, позволяющее заняться программированием игр, превращающее Arduino в неплохую игровую приставку (а также в пульт управления мобильным роботом), это Joystick Schield.

http://robotdyn.ru/catalog/arduino/shields/joystick_shield_for_arduino_.html

рис45

рис.45

Также очень пригодится самый простой кнопочный модуль и пропорциональный потенциометр (желательно ползунковый, "слайдер"), но это доступные распространённые компоненты.

http://arduino-kit.ru/product/modul-taktovoy-knopki

http://amperka.ru/product/troyka-slider

рис46

рис.46

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

http://mgbot.ru/catalog/dzhostiki-klaviatuy-knopki/knopochnaja-klaviatura-na-5-knopok-adkeyboard/

рис47

рис.47

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

И тем не менее, Micro:bit и его "одноклассники", тридцатидвухразрядные микроконтроллеры, оказываются (почти) незаменимы при переходе к более сложным учебным проектам, предполагающим контроль сразу нескольких процессов, и об этом я уже писал в одной из своих прошлых публикаций.

http://novator.team/post/136

 

Кол-во комментариев: (5)

Борис Ярмахов
Мощно! Ощущение, что прочитал главу из книги! Или модуль из учебного курса. Микроконтроллеры - это целый мир.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    Спасибо! "Сделать хотел грозу, а получил козу..." Думал быстренько написать коротенькую статейку, чтобы десять раз не рассказывать об одном и том же, а получилась почти глава из книги... И времени я на неё потратил почти как на главу из книги :)
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии