Книга Робототехника: практическое введение для детей и взрослых - читать онлайн бесплатно, автор Александр Вячеславович Фролов. Cтраница 4
bannerbanner
Вы не авторизовались
Войти
Зарегистрироваться
Робототехника: практическое введение для детей и взрослых
Робототехника: практическое введение для детей и взрослых
Добавить В библиотекуАвторизуйтесь, чтобы добавить
Оценить:

Рейтинг: 0

Добавить отзывДобавить цитату

Робототехника: практическое введение для детей и взрослых

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

Для перехвата события создается так называемый программный хандлер (handler), или обработчик. Для одного события может быть создан только один обработчик.

Таким образом, вы можете создать только один обработчик для кнопки A, один – для кнопки B, и один для события, которое возникает при одновременном нажатии обеих кнопок.

Устройство, создающее событие, мы будем называть генератором событий. Как вы увидите дальше, помимо кнопок в микроконтроллере micro:bit существуют и другие генераторы событий, например, связанные с передачей данных по радио или через последовательный интерфейс UART.

Счетчик нажатий кнопок

Нашей следующей программой, работающей с кнопками A и B, будет несложный счетчик. Сразу после запуска значение счетчика будет равно нулю. При нажатии кнопки A значение счетчика увеличивается, а при нажатии кнопки B – уменьшается.

Программа счетчика показана на рис. 3.6 (файл BoxRover/ch03/microbit-Счетчик.hex).



Рис. 3.6. Программа счетчика нажатий кнопок

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

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

Когда нажимается кнопка A, блок изменить увеличивает значение Counter на единицу. Вслед за этим новое значение счетчика выводится на экран. Аналогично, при нажатии кнопки B значение счетчика нажатий уменьшается, и на экран выводится уменьшенное значение (рис. 3.7).



Рис. 3.7. Текущее значение счетчика нажатий отображается на мониторе

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

Проверка состояния кнопки

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

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

Код программы показан на рис. 3.8. Вы найдете эту программу в файле microbit-Вселенная-кнопка-А.hex.



Рис. 3.8. Программа работает только при нажатой кнопке A

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

Давайте усложним нашу программу. Пусть теперь звезды зажигаются и гаснут, если кнопка A не нажата, и перестают зажигаться и гаснуть, когда мы нажимаем кнопка A.

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

Новый вариант программы показан на рис. 3.9, файл microbit-Вселенная-на-паузе.hex.



Рис. 3.9. Новая версия программы управления звездами

В блоке при начале мы задаем в переменной задержка начальное значение задержки, равное 0. При нажатии на кнопку B мы увеличиваем значение задержки на 50 мс.

В блоке постоянно мы использовали цикл если иначе. Как он работает?

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

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

Сенсорная кнопка в виде логотипа

В micro:bit версии 2 появилась сенсорная кнопка в виде логотипа (рис. 3.10). Ее можно нажимать, дотрагиваясь пальцем.



Рис. 3.10. Логотип стал сенсорной кнопкой

Для работы с сенсорной кнопкой в виде логотипа в палитре Ввод, в разделе micro:bit (V2) появились блоки on logo и logo is pressed (рис. 3.11).



Рис. 3.11. Блоки для работы с сенсорной кнопкой в виде логотипа

Блок on logo получает управление, если дотронуться до логотипа пальцем. С помощью блока logo is pressed можно проверить, нажат логотип в настоящее время, или нет.

На рис. 3.12 мы показали простейшую программу microbit2-Сенсорный-логотип.hex, реагирующую на нажатие логотипа.



Рис. 3.12. Обработка событий от логотипа

Если нажать логотип, на экране micro:bit появится галочка. Чтобы она исчезла, нажмите кнопку А.

В блоке on logo можно указать, что событие от логотипа должно возникать только в том случае, если нажимать на него достаточно долго. Такое поведение демонстрирует программа microbit2-Логотип-нажат-долго.hex (рис. 3.13).



Рис. 3.13. Реагирование на длительное нажатие логотипа

Вы также можете регистрировать события, возникающие в момент отпускания логотипа. Для этого в меню блока on logo выберите строку отжата.

Еще одна несложная программа microbit2-Сенсорный-логотип-2.hex демонстрирует использование блока logo is pressed (рис. 3.14).



Рис. 3.14. Проверяем нажатие логотипа в цикле

Эта программа проверяет состояние кнопки логотипа в цикле. Пока логотип нажат, программа рисует на экране micro:bit бьющееся сердце. Но как только вы отпустите логотип, сердце исчезает!

Сенсорные контакты

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

Сенсорные кнопки на micro:bit версии 2 могут работать в емкостном и резистивном режиме.

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

В резистивном режиме предполагается, что человек касается одновременно кнопки и общего провода (земли, минуса источника питания). При этом изменяется сопротивление между кнопкой и землей от практически бесконечного до значений, исчисляемых единицами или десятками КОм.

Забегая вперед, заметим, что вы можете использовать в качестве сенсорных контактов выводы P0, P1 и P2 в качестве сенсорных кнопок. На рис. 3.11 эти контакты отмечены цифрами 0, 1 и 2. Подробнее мы расскажем о контактах разъема платы micro:bit в 7 и 8 главе нашей книги.

На рис. 3.15 мы показали программу microbit2-Сенсорный-контакт.hex, которая делает то же самое, что и программа microbit2-Сенсорный-логотип-2.hex.



Рис. 3.15. Используем контакт P0 в качестве сенсорной кнопки

В начале своей работы программа устанавливает один из двух возможных режимов работы сенсорного контакта – емкостной или резистивный. Чтобы использовать емкостной режим, в меню блока set P0 to touch mode выберите строку capacitive, а чтобы в резистивном – строку resistive.

Блок set P0 to touch mode находится в палитре Расширенные, Контакты, еще, в разделе micro:bit (v2).

Загрузив программу в микроконтроллер, дотроньтесь пальцем до контакта, обозначенного на плате micro:bit цифрой 0. Пока вы держите палец, на экране micro:bit будет биться сердце.

Домашнее задание

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

Решение вы сможете найти в файле microbit-Счетчик-со-сбросом.hex, загрузив архив программ с сайта автора этой книги http://frolov-lib.ru/books/boxrover/.

В качестве второго самостоятельного задания добавьте к программе microbit-Вселенная-на-паузе.hex (рис. 3.9) код, который сбрасывает задержку к исходному значению при одновременном нажатии кнопок A и B.

Решение этого задания есть в файле microbit-Вселенная-на-паузе-со-сбросом.hex.

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

Чтобы открыть замок, вам нужно нажать четыре раза кнопку A, и один раз – кнопку B (в любой последовательности). Только эта комбинация должна открыть замок.

Для проверки состояния замка нажмите кнопки A и B одновременно. Если замок открылся, на экране micro:bit должно быть нарисовано сердечко, если нет, то крестик.

Решение третьего задания вы найдете в файле microbit-Секретный-счетчик.hex.

И, наконец, в четвертом домашнем задании попробуйте изменить режим set P0 to touch mode с емкостного на резистивный. Учтите, что это задание нужно выполнять на micro:bit версии 2.

Программа с измененным режимом записана в файле microbit2-Сенсорный-контакт-2.hex. Проверьте, есть ли разница в работе этой программы при изменении режима.

Итоги

Во третьей главе мы познакомились с обработкой событий от кнопок A и B, расположенных на лицевой стороне платы микрокомпьютера micro:bit, а также от сенсорной кнопки micro:bit версии 2, роль который играет логотип. Вы научились проверять текущее состояние кнопок во время работы программы.

Вы научились задавать действия при нажатии кнопок A и B, а также в тех случаях, когда эти кнопки были нажаты одновременно. Кроме того, вы теперь можете использовать контакты P0, P1 и P2 в качестве сенсорных кнопок.

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

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

4. Измеряем температуру

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

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

Как работает измеритель температуры

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

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

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

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



Рис. 4.1. Включение терморезистора

Конечно, настоящие схемы измерения температуры совсем не такие, но для понимания принципа и этого будет достаточно.

Вы также можете контролировать изменение сопротивления терморезистора с помощью омметра или тестера, переключенного в режим измерения сопротивления.

Существуют два типа терморезисторов. Это термисторы и позисторы. Сопротивление термистора уменьшается при увеличении температуры, а позистора наоборот, увеличивается. Говорят, что термисторы обладают отрицательным температурным коэффициентом сопротивления (ТКС), а позисторы – положительным.

В интернете есть множество статей, посвященных терморезисторам, например, эта – https://elektrikexpert.ru/termorezistor.html. На данном этапе мы не будем углубляться в детали, т.к. для измерения температуры будем использовать готовые устройства, учитывающие все особенности, в частности, нелинейную зависимость сопротивления терморезистора от температуры.

Термометр из micro:bit

Вы можете очень просто превратить свой микроконтроллер micro:bit в термометр. Достаточно использовать программу, показанную на рис. 4.2.



Рис. 4.2. Программа для измерения температуры процессора micro:bit

Эта программа находится в файле BoxRover/ch04/microbit-измеритель-температуры.hex.

Здесь мы добавили в блок постоянно блок показать число, предназначенный для вывода числа на экран микрокомпьютера, а также блок задержки на одну секунду. В качестве значения мы вставили из панели Ввод блок температура (°C). Этот блок возвращает значение температуры процессора micro:bit в градусах Цельсия.

Таким образом, на экран раз в секунду выводится текущее значение температуры в виде бегущей строки (рис. 4.3).



Рис. 4.3. На монитор micro:bit выводится текущая температура процессора

Как можно использовать встроенный измеритель температуры?

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

Подготовим программу, которая при превышении температуры сверх заданного значение (30 °C) включает сразу все светодиоды экрана micro:bit. Если же температура нормальная, на экране будет нарисовано сердце (рис. 4.4).



Рис. 4.4. Программа контроля температуры

Программа сохранена в файле microbit-проверка-температуры.hex.

Здесь в палитре Переменные мы определили переменную с именем температура. При помощи блока задать мы задаем значение этой переменной, равной блоку температура (°С), добавленному из панели Ввод.

Когда срабатывает условие, что значение, записанное в переменную температура, превышает 30 °С, блок показать светодиоды включает на экране все светодиоды сразу.

Если же перегрева нет, то блок показать значок выводит на экран изображение сердца.

Домашнее задание

Попробуйте поместить плату micro:bit на пару минут в холодильник (только не в морозильную камеру), а также оставить на солнце. Посмотрите, как это скажется на результатах измерения температуры процессора.

Проследите, чтобы в ходе экспериментов с холодильником на плату micro:bit не попала влага.

Учтите, что значительны перегрев платы micro:bit, а также переохлаждение могут привести к выходу платы из строя. Согласно описанию https://tech.microbit.org/hardware/, датчик температуры в micro:bit работает в диапазоне от -25C до 75C, а его точность составляет ±4C.

Итоги

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

Вы составили программу, которая показывает текущее значение температуры, а также программу контроля превышения заданного значения температуры.

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

5. Измеряем ускорение и контролируем перегрузки

Микроконтроллер micro:bit оборудован очень интересным устройством – акселерометром, или измерителем ускорения.

Вспомним знания, полученные еще в школе. Ускорением называется быстрота изменения скорости тела. Например, когда вы сбрасываете кирпич с крыши дома (никогда так не делайте), то его скорость будет увеличиваться с ускорением свободного падения, равном примерно 9,8 м/c². Это означает, что каждую секунду скорость падающего кирпича будет увеличиваться на 9,8 м/с.

Обычно при вычислениях ускорение свободного падения обозначается как g.

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

Когда вы летите в самолете, то можете испытывать ускорение (или иными словами, перегрузки) до 1,5g. Парашютисты и космонавты подвержены более серьезным перегрузкам, порядка 4g и более. Очень большие перегрузки возникают, когда вы едете в автомобиле и он на ходу врезается в стену или в автомобиль, который едет вам навстречу. Значительные перегрузки, как ударные, так и постоянно действующие, могут привести к серьезным проблемам в здоровье.

Принцип измерения ускорения

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

В микрокомпьютере micro:bit используются так называемый емкостной акселерометр. Его принцип действия иллюстрируется на рис. 5.1.



Рис. 5.1. Иллюстрация принципа действия емкостного акселерометра

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

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

Груз и пластины образуют два конденсатора, обозначенные на рис. 5.1 как CX и CY. Когда расстояние между грузом и пластинами изменяется, меняются и емкости этих конденсаторов.

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

Что касается акселерометра, встроенного в micro:bit, то там применяется три пластины, что дает возможность измерять ускорение по всем трем осям координат.

Согласно документации, акселерометр micro:bit может измерять ускорение в диапазоне от -2g до 2g. При этом возвращаются положительные и отрицательные значения в тысячных долях g, с диапазоном от 0 до 1024.

Обнаружение жестов

Одно из самых интересных применений акселерометра micro:bit – это обнаружение жестов. Это поворачивание платы микроконтроллера логотипом вверх или вниз, наклон вправо или влево, поворачивание монитором вверх или вниз, встряхивание, свободное падение, а также движение с ускорением в 3g, 6g и 8g.

Когда вы совершаете с платой микроконтроллера описанные выше действия, создаются соответствующие события. Их можно обрабатывать в блоке по жесту из палитры Ввод. Список доступных жестов показан на рис. 5.2.



Рис. 5.2. Жесты в микрокомпьютере micro:bit

Расскажем, как вы можете обрабатывать жесты от акселерометра в своих программах.

Бросаем кости

Самое простое что можно придумать с жестами – это сделать игру в кости. Когда вы встряхиваете плату своего micro:bit, на его экране высвечивается случайное число от 0 до 6. Конечно, это упрощенный вариант игры, так как тут мы «бросаем» только одну кость.

Программа игры в кости показана на рис. 5.3.



Рис. 5.3. Программа обработки события встряхивания

Когда микроконтроллер обнаруживает, что его начали трясти, он создает событие на жест встряхивание. Обработчик этого события показывает на экране случайное число в диапазоне от 0 до 6.

Эта программа находится в файле BoxRover/ch05/microbit-Кости.hex архива, который можно скачать с сайта автора книги по адресу http://frolov-lib.ru/books/boxrover/.

Отслеживаем ориентацию платы micro:bit в пространстве

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

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