Microbit для неугомонных учёных 9785970600627, 9781593279745

Эта книга описывает множество занимательных экспериментов и проектов с использованием BBC micro:bit – компактной платы,

182 69

Russian Pages 292 [293] Year 2021

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Microbit для неугомонных учёных
 9785970600627, 9781593279745

Table of contents :
Содержание
Об авторе
О техническом рецензенте
Благодарности
Введение
Об этой книге
Эксперименты
Проекты
Исходный код проектов
1. Начало
Экскурсия по micro:bit
Верхняя сторона
Нижняя сторона
Подключение питания
Питание через микро-USB
Питание от батареек
Подключение электронных устройств к входным и выходным контактам
Ввод дискретных и аналоговых сигналов
Вывод аналогового сигнала: широтно-импульсная модуляция
Встроенные периферийные устройства
Программирование micro:bit
Основное оборудование
Подключение micro:bit
Программирование с помощью Blocks: Hello World
Добавляем графику
Сохранение и публикация программ
Поиск блоков
Программирование на MicroPython: Hello World
Загрузка редактора для MicroPython
Ввод программы
REPL
Добавление графики
Основные понятия в программировании
Переменные
Blocks
MicroPython
Арифметика
Blocks
MicroPython
Условный оператор if
Blocks
MicroPython
Строки
Blocks
MicroPython
Массивы и списки
Blocks
MicroPython
В заключение о программировании
Скачивание программ
Скачивание программ на языке Blocks
Скачивание программ на языке MicroPython
Итоги
2. Мир звука
Подключение динамика к micro:bit
Тихий способ: наушники
Громкий способ: колонки
Эксперимент 1: генерация звуков
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: частота и звук
Эксперимент 2: оно говорит!
Что понадобится
Конструирование
Программа
Проект: музыкальный дверной звонок
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Проект: шумомер
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Как это работает: выход микрофона
Итоги
3. Да будет свет
Эксперимент 3: датчик освещенности
Что понадобится
Конструирование
Программа
Как это работает
Проект: автоматический ночник
Что понадобится
Конструирование
Программа
Проект: световая гитара
Что понадобится
Конструирование
Программа
Проект: бесконечные отражения
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Как это работает
Итоги
4. Волшебный магнетизм
Проект: компас
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: магнитное поле Земли
Эксперимент 4: измерение магнитных полей
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: сила магнитов
Проект: магнитная сигнализация открывания двери
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Итоги
5. Удивительное ускорение
Эксперимент 5: жесты
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: сила, ускорение и гравитация
Эксперимент 6: построение графика ускорения в реальном времени
Что понадобится
Конструирование
Программа
Как это работает: расчет суммарного ускорения
Проект: детектор тщательности чистки зубов
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Эксперимент 7: запись данных об ускорении в файл
Что понадобится
Конструирование
Программа
Что можно попробовать
Проект: акселерометр
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Итоги
6. Волшебство движения
Эксперимент 8: запуск сервомотора
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Как это работает: сервомоторы и импульсы
Проект: аниматронная голова (робот Mike на плате micro:bit)
Что понадобится
Конструирование
Программа
Проверка конструкции с по мощью программы из эксперимента 8
Использование программы из проекта
Что можно попробовать
Проект: робот-вездеход
Что понадобится
Конструирование
Как это работает: электромоторы и поток электроэнергии
Итоги
7. Путешествие во времени
Эксперимент 9: счет времени
Что понадобится
Конструирование
Программа
Как это работает: счет времени
Проект: двоичные часы
Как читать показания двоичных часов
Что понадобится
Конструирование
Программа
Как это работает: вывод времени в двоичном формате
Проект: говорящие часы
Что понадобится
Конструирование
Программа
Как это работает: обучаем micro:bit говорить
Итоги
8. Игры разума
Эксперимент 10: скорость реакции
Что понадобится
Конструирование
Проверка вашей нервной системы
Программа
Что можно попробовать
Как это работает: измерение времени реакции
Проект: детектор лжи
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Как это работает: обнаружение лжи по напряжению и сопротивлению
Итоги
9. Помешательство на экологии
Эксперимент 11: измерение температуры
Что понадобится
Конструирование
Программа
Инициализация переменных
Переход в режим занятости
Как это работает: почему греется процессор?
Проект: регистратор температуры и освещенности
Что понадобится
Конструирование
Программа
Инициализация переменных
Чтение температуры
Чтение уровня освещенности
Цикл while
Как это работает: датчики
Проект: автоматический полив растений
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: измерение влажности почвы
Итоги
10. Радиосвязь
Эксперимент 12: определение дальности радиосвязи
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Как это работает: радиосигналы
Проект: беспроводной дверной звонок
Что понадобится
Конструирование
Программа
Blocks
MicroPython
Что можно попробовать
Как это работает: отправка и получение
Проект: радиоуправляемый робот-вездеход
Что понадобится
Конструирование
Программа
Пульт управления
Робот
Что можно попробовать
Как это работает: блоки управления электромотором
Итоги
Приложение
Полезные инструменты
Общие принадлежности
Питание micro:bit
Дополнительные принадлежности
Прочие принадлежности
Предметный указатель

Citation preview

MICRО:BIT FОR MAD SCIENTISTS 30 CLEVER CОDING AND ELECTRОNICS PRОJECTS FОR KIDS

BY SIMОN MОNK

San Francisco

MICRО:BIT ДЛЯ НЕУГОМОННЫХ УЧЕНЫХ 30 ЗАНИМАТЕЛЬНЫХ ПРОЕКТОВ ПРОГРАММ И ЭЛЕКТРОННЫХ УСТРОЙСТВ ДЛЯ ПОДРОСТКОВ

САЙМОН МОНК

Москва, 2021

УДК 53.02 ББК 26 М77

Монк С. М77 Micro:bit для неугомонных ученых / пер. с анг. А. Н. Киселева. – М.: ДМК Пресс, 2021. – 292 с.: ил. ISBN 978-5-97060-062-7 Эта книга описывает множество занимательных экспериментов и проектов с использованием BBC micro:bit – компактной платы, с помощью которой читатель освоит азы программирования. В первой главе подробно рассказывается о подключении устройства и принципах его функционирования, а следующие главы посвящены практической работе. Материал сгруппирован по темам: свет, звук, движение, экологические проекты, радиосвязь и др. Прочитав книгу, вы научитесь конструировать с помощью micro:bit забавные и полезные устройства, среди которых шумомер, компас, детектор лжи, робот-вездеход. Цветные иллюстрации упрощают выполнение проектов. Издание будет полезно в равной мере детям и взрослым, интересующимся программированием на базовом уровне. УДК 53.02 ББК 26 Title of English-language original: Micro:bit for Mad Scientists: 30 Clever Coding and Electronics Projects for Kids, ISBN 978-1-59327-974-5, published by No Starch Press Inc. 245 8th Street, San Francisco, California United States 94103. The Russian-Language 1st edition Copyright © 2021 by DMK Press Publishing under license by No Starch Press Inc. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

ISBN 978-1-59327-974-5 (англ.) ISBN 978-5-97060-062-7 (рус.)

Copyright © 2019 by Simon Monk © Оформление, издание, перевод, ДМК Пресс, 2021

Я посвящаю эту книгу Жерару Перису (Gerard Paris), спутнику моей мамы, а также другу и вдохновителю всех, кто с ним знаком

СОДЕРЖАНИЕ Об авторе ......................................................................................................11 О техническом рецензенте ...........................................................11 Благодарности .........................................................................................12 Введение .......................................................................................................13 1. Начало.......................................................................................................18

Экскурсия по micro:bit ....................................................................................... 19 Верхняя сторона ............................................................................................. 19 Нижняя сторона .............................................................................................. 21 Подключение питания ................................................................................... 21 Подключение электронных устройств к входным и выходным контактам ........................................................................................................ 24 Встроенные периферийные устройства ....................................................... 27 Основное оборудование ...................................................................................... 28 Программирование micro:bit ............................................................................. 29 Подключение micro:bit................................................................................... 29 Программирование с помощью Blocks: Hello World ................................... 30 Программирование на MicroPython: Hello World ....................................... 38 Основные понятия в программировании ........................................................ 45 Переменные .................................................................................................... 45 Арифметика .................................................................................................... 48 Условный оператор if ..................................................................................... 49 Строки .............................................................................................................. 51 Массивы и списки ........................................................................................... 53 В заключение о программировании............................................................. 55 Скачивание программ ....................................................................................... 55 Скачивание программ на языке Blocks ....................................................... 55 Скачивание программ на языке MicroPython ............................................ 57 Итоги .................................................................................................................... 59

2. Мир звука ...............................................................................................60

Подключение динамика к micro:bit ................................................................. 61 Тихий способ: наушники ............................................................................... 61 Громкий способ: колонки ............................................................................... 63 Эксперимент 1: генерация звуков .................................................................... 64 Что понадобится.............................................................................................. 64 Конструирование ............................................................................................ 64 Программа ....................................................................................................... 65 Что можно попробовать.................................................................................. 66 Как это работает: частота и звук................................................................... 67

6

СОДЕРЖАНИЕ

Эксперимент 2: оно говорит! ............................................................................. 69 Что понадобится.............................................................................................. 69 Конструирование ............................................................................................ 69 Программа ....................................................................................................... 70 Проект: музыкальный дверной звонок ............................................................ 70 Что понадобится.............................................................................................. 71 Конструирование ............................................................................................ 72 Программа ....................................................................................................... 74 Что можно попробовать.................................................................................. 75 Проект: шумомер ................................................................................................ 77 Что понадобится.............................................................................................. 77 Конструирование ............................................................................................ 77 Программа ....................................................................................................... 79 Как это работает: выход микрофона............................................................. 81 Итоги .................................................................................................................... 82

3. Да будет свет .......................................................................................83

Эксперимент 3: датчик освещенности.............................................................. 84 Что понадобится.............................................................................................. 84 Конструирование ............................................................................................ 84 Программа ....................................................................................................... 85 Как это работает ............................................................................................. 85 Проект: автоматический ночник ...................................................................... 85 Что понадобится.............................................................................................. 86 Конструирование ............................................................................................ 86 Программа ....................................................................................................... 87 Проект: световая гитара .................................................................................... 88 Что понадобится.............................................................................................. 89 Конструирование ............................................................................................ 89 Программа ....................................................................................................... 93 Проект: бесконечные отражения ...................................................................... 95 Что понадобится.............................................................................................. 96 Конструирование ........................................................................................... 98 Программа ......................................................................................................105 Как это работает ............................................................................................107 Итоги ...................................................................................................................108

4. Волшебный магнетизм............................................................. 109

Проект: компас ...................................................................................................110 Что понадобится.............................................................................................110 Конструирование ...........................................................................................111 Программа ......................................................................................................113 Что можно попробовать.................................................................................116 Как это работает: магнитное поле Земли ...................................................116 Эксперимент 4: измерение магнитных полей................................................117 Что понадобится.............................................................................................117 Конструирование ...........................................................................................118 СОДЕРЖАНИЕ

7

Программа ......................................................................................................121 Что можно попробовать.................................................................................123 Как это работает: сила магнитов .................................................................123 Проект: магнитная сигнализация открывания двери ..................................124 Что понадобится.............................................................................................124 Конструирование ...........................................................................................125 Программа ......................................................................................................126 Что можно попробовать.................................................................................128 Итоги ...................................................................................................................128

5. Удивительное ускорение ........................................................ 129

Эксперимент 5: жесты .......................................................................................130 Что понадобится.............................................................................................131 Конструирование ...........................................................................................131 Программа ......................................................................................................131 Что можно попробовать.................................................................................134 Как это работает: сила, ускорение и гравитация ......................................134 Эксперимент 6: построение графика ускорения в реальном времени........137 Что понадобится.............................................................................................137 Конструирование ...........................................................................................137 Программа ......................................................................................................139 Как это работает: расчет суммарного ускорения .......................................140 Проект: детектор тщательности чистки зубов................................................142 Что понадобится.............................................................................................142 Конструирование ...........................................................................................143 Программа ......................................................................................................143 Что можно попробовать.................................................................................147 Эксперимент 7: запись данных об ускорении в файл ...................................147 Что понадобится.............................................................................................148 Конструирование ...........................................................................................148 Программа ......................................................................................................151 Что можно попробовать.................................................................................152 Проект: акселерометр........................................................................................153 Что понадобится.............................................................................................154 Конструирование ...........................................................................................154 Программа ......................................................................................................155 Итоги ...................................................................................................................157

6. Волшебство движения .............................................................. 158

Эксперимент 8: запуск сервомотора ................................................................159 Что понадобится.............................................................................................160 Конструирование ...........................................................................................160 Программа ......................................................................................................162 Как это работает: сервомоторы и импульсы ...............................................164 Проект: аниматронная голова (робот Mike на плате micro:bit) ...................168 Что понадобится.............................................................................................168 Конструирование ...........................................................................................169

8

СОДЕРЖАНИЕ

Программа ......................................................................................................180 Что можно попробовать.................................................................................184 Проект: робот-вездеход......................................................................................185 Что понадобится.............................................................................................186 Конструирование ...........................................................................................187 Как это работает: электромоторы и поток электроэнергии ......................194 Итоги ...................................................................................................................195

7. Путешествие во времени ........................................................ 196 Эксперимент 9: счет времени ...........................................................................197 Что понадобится.............................................................................................198 Конструирование ...........................................................................................198 Программа ......................................................................................................199 Как это работает: счет времени....................................................................200 Проект: двоичные часы .....................................................................................201 Как читать показания двоичных часов ......................................................202 Что понадобится.............................................................................................203 Конструирование ..........................................................................................203 Программа ......................................................................................................204 Как это работает: вывод времени в двоичном формате ............................208 Проект: говорящие часы ...................................................................................210 Что понадобится.............................................................................................211 Конструирование ...........................................................................................211 Программа ......................................................................................................212 Как это работает: обучаем micro:bit говорить ............................................215 Итоги ...................................................................................................................216 8. Игры разума ...................................................................................... 217

Эксперимент 10: скорость реакции .................................................................218 Что понадобится.............................................................................................219 Конструирование ...........................................................................................219 Проверка вашей нервной системы ..............................................................221 Программа ......................................................................................................223 Что можно попробовать.................................................................................226 Как это работает: измерение времени реакции .........................................226 Проект: детектор лжи........................................................................................229 Что понадобится.............................................................................................229 Конструирование ...........................................................................................230 Программа ......................................................................................................231 Как это работает: обнаружение лжи по напряжению и сопротивлению............................................................................................233 Итоги ...................................................................................................................235

9. Помешательство на экологии ............................................. 236 Эксперимент 11: измерение температуры......................................................237 Что понадобится.............................................................................................237 Конструирование ...........................................................................................237 СОДЕРЖАНИЕ

9

Программа ......................................................................................................239 Проект: регистратор температуры и освещенности ......................................241 Что понадобится.............................................................................................243 Конструирование ...........................................................................................243 Программа ......................................................................................................245 Как это работает: датчики ............................................................................248 Проект: автоматический полив растений .......................................................250 Что понадобится.............................................................................................251 Конструирование ...........................................................................................252 Программа ......................................................................................................256 Что можно попробовать.................................................................................260 Как это работает: измерение влажности почвы.........................................261 Итоги ...................................................................................................................262

10. Радиосвязь ...................................................................................... 263

Эксперимент 12: определение дальности радиосвязи ..................................264 Что понадобится.............................................................................................264 Конструирование ...........................................................................................265 Программа ......................................................................................................266 Как это работает: радиосигналы..................................................................269 Проект: беспроводной дверной звонок ............................................................270 Что понадобится.............................................................................................271 Конструирование ...........................................................................................271 Программа ......................................................................................................272 Что можно попробовать.................................................................................274 Как это работает: отправка и получение ....................................................274 Проект: радиоуправляемый робот-вездеход...................................................274 Что понадобится.............................................................................................276 Конструирование ...........................................................................................276 Программа ......................................................................................................277 Что можно попробовать.................................................................................280 Как это работает: блоки управления электромотором ..............................280 Итоги ...................................................................................................................282

Приложение ............................................................................................ 283 Предметный указатель .................................................................. 289

10

СОДЕРЖАНИЕ

ОБ АВТОРЕ Саймон Монк имеет инженерное образование в области кибернетики и информатики, а также докторскую степень в области программной инженерии. Много лет занимался разработкой программного обеспечения и основал компанию Momote, производящую программное обеспечение для мобильных устройств. В настоящее время Саймон пишет книги об электронике и программировании и помогает своей жене Линде (Linda) управлять их совместной компанией Monk Makes (https://www.monkmakes. com/), где занимается разработкой комплектов электронных компонентов и принадлежностей для BBC micro:bit и Raspberry Pi. Вы можете последовать за Саймоном в Twitter (@simonmonk2) и узнать больше о его книгах на сайте https://www.simonmonk.org/.

О ТЕХНИЧЕСКОМ РЕЦЕНЗЕНТЕ Дэвид Вэйл (David Whale) – инженер-разработчик программного обеспечения для встраиваемых устройств и на добровольных началах занимается популяризацией точных наук в школах Великобритании. Активный член сообществ Raspberry Pi и micro:bit с момента их основания. Участвовал в развитии проекта BBC micro:bit, консультировал компании IET и BBC, а также помогал писать книги и оказывал помощь в повышении квалификации учителей по всей стране. Он написал для детей очень интересную книгу по программированию «Adventures in Minecraft»1 (Wiley) и рецензирует самые разные книги и статьи известных авторов. Цель Дэвида – вдохновить подрастающее поколение инженеров и ученых, потому что наше будущее скоро окажется в их руках.

1

Вэйл Дэвид, О’Хэнлон Мартин. Minecraft. Программируй свой мир на Python. СПб.: Питер, 2018. ISBN 978-5-4461-0951-7. – Прим. перев.

11

БЛАГОДАРНОСТИ Я очень благодарен Дэвиду Вэйлу за то, что он нашел время для рецензии этой книги. Работать с ним было очень приятно. Я также благодарен за помощь и поддержку фонду Micro:bit Foundation и сообществу любителей micro:bit, которые неоднократно помогали мне по техническим вопросам. Также я хотел бы поблагодарить Лиз (Liz), Джанель (Janelle), Билла (Bill) и всех других сотрудников издательства No Starch Press и, конечно же, очень талантливого Мирана Липовача (Miran Lipovača) за прекрасные и забавные иллюстрации.

12

ВВЕДЕНИЕ

С

момента появления BBC micro:bit в 2016 году были выпущены миллионы этих устройств. Они нравятся и детям, и взрослым во всем мире. Устройство micro:bit создавалось с целью обучения детей навыкам программирования. Самое большое его преимущество состоит в том, что для работы с ним не нужно ничего, кроме USB-кабеля и компьютера. Кроме того, запрограммировав это устройство, его можно отключить от компьютера – и оно благополучно продолжит работать от батареек.

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

ОБ ЭТОЙ КНИГЕ В этой книге вы найдете описание множества занимательных экспериментов и проектов. В экспериментах я расскажу, как все работает, а в проектах мы с вами используем полученные знания, чтобы создать что-нибудь необычное. Книга разделена на 10 глав. В главе 1 я расскажу все, что нужно знать о подключении и использовании micro:bit. Эти знания потребуются нам во всех экспериментах и проектах, описанных в данной книге. Каждая следующая глава посвя14

ВВЕДЕНИЕ

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

Эксперименты Вот список экспериментов в этой книге. Генерация звуков. Здесь вы узнаете, как воспроизводить музыкальные ноты и другие звуки с помощью micro:bit. Оно говорит! Тут вы научите micro:bit говорить! Датчик освещенности. Здесь я расскажу, как использовать встроенный датчик освещенности. Измерение магнитных полей. Тут мы будем учиться использовать встроенный магнитометр для измерения магнитных полей. Жесты. Здесь мы используем программу распознавания жестов, чтобы научить micro:bit выполнять разные действия при встряхивании или падении. Построение графика ускорения в реальном времени. В этом эксперименте вы познакомитесь с программой Mu, предназначенной для визуализации данных. Запись данных об ускорении в файл. Здесь мы будем учиться записывать в файл данные об ускорении, получаемые с устройства micro:bit, чтобы иметь возможность просмотреть их позже. Запуск сервомотора. Эксперимент с сервомотором! Счет времени. Здесь я расскажу, как micro:bit определяет время. Скорость реакции. Тут вы сможете проверить время своей реакции. Измерение температуры. В данном эксперименте мы воспользуемся датчиком температуры в micro:bit и сконструируем электронный термометр. Определение дальности радиосвязи. Здесь вы узнаете, как из micro:bit сконструировать простой радиопередатчик.

ВВЕДЕНИЕ

15

Проекты Вот список проектов в этой книге. Музыкальный дверной звонок. При нажатии на кнопку воспроизводит выбранную вами мелодию. Шумомер. Измеряет и показывает громкость звука. Автоматический ночник. Автоматически включает освещение, когда в комнате становится темно. Световая гитара. Издает звуки в такт движениям руки над светодиодами micro:bit. Бесконечные отражения. Создает с помощью света иллюзию бесконечной глубины. Компас. Настоящий рабочий компас! Магнитная сигнализация открывания двери. Срабатывает при открытии двери, когда магнит отдаляется от micro:bit. Детектор тщательности чистки зубов. Подсчитывает движения зубной щетки, чтобы убедиться, что вы сохраните ваши жемчужно-белые зубы в хорошем состоянии. Акселерометр. Измеряет и показывает, с каким ускорением перемещается micro:bit. Аниматронная голова. Голова робота с движущимися глазами и говорящим ртом. Робот-вездеход. micro:bit!

Двухколесный

робот,

управляемый

Двоичные часы. Показывают время на светодиодном дисплее. Говорящие часы. Объявляют время каждый час и всякий раз, когда вы нажимаете кнопку. Детектор лжи. Измеряет электропроводимость кожи, чтобы определить правдивость испытуемого. Регистратор температуры и освещенности. Автоматически регистрирует уровень освещенности и температуру. Автоматический полив растений. Включает полив растений, когда датчик влажности определяет, что почва слишком сухая. (Ваши растения будут счастливы!) 16

ВВЕДЕНИЕ

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

ИСХОДНЫЙ КОД ПРОЕКТОВ Наиболее популярные компьютерные языки для программирования micro:bit – это Makecode Blocks (далее мы будем называть его просто Blocks) и MicroPython. Я подготовил программы для проектов и экспериментов на обоих языках, Blocks и MicroPython. Это означает, что вам не придется вводить код вручную, если, конечно, вы этого не захотите. Весь исходный код для этой книги вы найдете на странице GitHub, по адресу: https://github.com/simonmonk/mbms/. В главе 1 я подробно расскажу, как скачать и использовать этот код.

ВВЕДЕНИЕ

17

1 НАЧАЛО

В

этой главе я расскажу, как начать работу с BBC micro:bit, и подготовлю вас к встрече с экспериментами и проектами в следующих главах. Я подскажу вам несколько идей, что можно сделать с micro:bit, и расскажу, как программировать это устройство. Здесь вы также узнаете, как использовать код на языках Blocks и MicroPython.

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

ЭКСКУРСИЯ ПО MICRO:BIT А теперь давайте рассмотрим плату micro:bit и посмотрим, что на ней написано.

Верхняя сторона На рис. 1.1 показана верхняя сторона платы micro:bit.

Разъем микро­USB

Блок светодиодов (дисплей) Кнопка A

Кнопка B

Контакты

Рис. 1.1. Плата micro:bit Вверху (на рис. 1.1) находится разъем микро-USB, с помощью которого micro:bit подключается к компьютеру. Программы для micro:bit вы будете писать на компьютере, поэтому вам придется переносить их на micro:bit, подключив устройство к компьютеру с помощью USB-кабеля. Кроме того, разъем микро-USB может использоваться для питания micro:bit. Слева и справа (на рис. 1.1) находятся две кнопки, подписанные буквами A и B соответственно. Мы можем запрограммироНАчАлО

Powered by TCPDF (www.tcpdf.org)

19

вать micro:bit так, чтобы при нажатии этих кнопок выполнялись некоторые действия, например мигали светодиоды или звенел дверной звонок. Между кнопками находится блок из 25 светодиодов в виде решетки, состоящей из 5 рядов и 5 столбцов. Это дисплей micro:bit. Несмотря на то что на нем всего 25 светодиодов, этот дисплей может отображать текстовые сообщения в виде бегущей строки, небольшие изображения, узоры – много всего! Внизу (на рис. 1.1) находится позолоченная (да, да, позолоченная настоящим золотом!) полоска, которая называется краевым разъемом. На полоске имеется пять отверстий, подписанных 0, 1, 2, 3V и GND. Эти большие контакты позволяют подключать дополнительные устройства к плате micro:bit с помощью зажимов типа «крокодил». Например, вы можете подключить динамик, чтобы устройство micro:bit могло издавать звук, или мотор, чтобы оно могло двигать что-то. Контакты меньшего размера, узкие полоски между отверстиями, можно использовать только с помощью специального адаптера. В этой книге мы будем применять только большие разъемы, и лишь в двух проектах, в которых мы будем конструировать роботов, нам потребуется адаптер, чтобы подключить электромотор.

20

ГлАВА 1

Нижняя сторона Теперь перевернем плату micro:bit и посмотрим, что имеется на обратной стороне (рис. 1.2). Разъем микро­USB

Кнопка сброса

Разъем для подключения батарейки

Рис. 1.2. Обратная сторона платы micro:bit, версий 1.3B (слева) и 1.5 (справа) Когда писались эти строки, существовало две версии micro:bit. Обе работают совершенно одинаково, и для этой книги абсолютно не важно, какая версия у вас. Последняя версия (1.5) отличается лишь немного упрощенным дизайном. Разницу можно увидеть в левом нижнем углу на рис. 1.2. Слева вверху (на рис. 1.2) – это разъем микро-USB. Правее него находится микропереключатель. Это кнопка сброса. Нажав эту кнопку, можно заставить micro:bit перезапустить установленную в нем программу. Справа от кнопки сброса находится разъем для подключения батарейки или аккумулятора с напряжением 3 В. Теперь мы подробно рассмотрим особенности использования micro:bit, начав с подключения питания.

Подключение питания Подать напряжение электропитания на плату micro:bit можно через разъем микро-USB или разъем для подключения батарейки, в зависимости от того, что вы собираетесь делать. НАчАлО

21

Питание через микро-USB При подключении micro:bit к компьютеру с помощью кабеля USB на плату подается напряжение питания 5 В (5 вольт). Однако микроконтроллеру требуется всего 3,3 В, а не 5 В, и слишком большое напряжение может повредить его. Поэтому на плате имеется микросхема интерфейса USB, которая преобразует эти 5 В в 3,3 В. Когда плата micro:bit подключена к компьютеру кабелем USB, то контакт 3V на краевом разъеме можно использовать для подачи питания на слаботочные электронные устройства, такие как внешние светодиоды или динамики, предназначенные для работы с micro:bit. ПРИМЕЧАНИЕ Основная причина, почему контакт подписан как 3V, а не 3,3V, заключается в том, что для второй цифры просто не хватает места, а также потому, что схема защиты снижает напряжение 3,3 В до 3 В. Контакт с подписью GND – это земля, то есть линия электропитания 0 В. Когда к micro:bit подключено какое-то дополнительное устройство, ток, питающий это устройство, вытекает с контакта 3V и должен вернуться в micro:bit, чтобы замкнуть цепь. Контакт GND как раз и есть та точка, куда возвращается ток.

Питание от батареек После того как вы запрограммируете свое устройство micro:bit, вам может понадобиться перенести его в другое место, далеко от компьютера, и в этом случае вам потребуются батарейки. Вы можете использовать блок батареек AAA, подобный изображенному на рис. 1.3. Чтобы включить электропитание, просто подключите батарейки к разъему для батареек, как показано на рис. 1.3. В приложении (в конце книги) я перечислил несколько мест, где можно купить такие батарейки и аккумуляторы. Очень удобно, если на корпусе блока батареек будет иметься дополнительный выключатель, с помощью которого вы сможете включать и выключать micro:bit, не выдергивая провода, что намного безопаснее и проще. 22

ГлАВА 1

Рис. 1.3. Подключение блока батареек к micro:bit Не используйте перезаряжаемые аккумуляторы AAA, потому что они, как правило, дают слишком низкое напряжение, недостаточное для питания micro:bit. Кроме того, эти аккумуляторы могут порождать опасно высокие токи при случайном коротком замыкании в цепи. Если вы все же решите использовать перезаряжаемые аккумуляторы, то выбирайте специализированный внешний аккумулятор с разъемом USB, подобный изображенному на рис. 1.4.

Рис. 1.4. Использование внешнего аккумулятора для питания micro:bit НАчАлО

23

Такие аккумуляторы можно подключать к micro:bit через разъем микро-USB. Для питания micro:bit вполне можно использовать недорогие внешние аккумуляторы небольшой емкости. Устройство micro:bit потребляет так мало электроэнергии, что более дорогие и интеллектуальные внешние аккумуляторы могут автоматически отключиться, посчитав, что к ним ничего не подключено и батарея находится на хранении. Справа на рис. 1.4 – это блок питания Monk Makes Charger для micro:bit. В нем используется литий-полимерный (LiPo) аккумулятор, который автоматически заряжается при подключении к компьютеру кабелем USB. Если у вас есть такой блок питания, то после отключения USB-кабеля micro:bit будет питаться от этого аккумулятора. В приложении (в конце книги) вы найдете еще несколько способов питания вашего устройства micro:bit. ВНИМАНИЕ! Самые ранние версии micro:bit могут выйти из строя при попытке подключить внешний аккумулятор к разъему микро-USB. Если у вас такое устройство, отличное от устройств версий 1.3B и 1.5, то избегайте любых способов подачи питания на плату, кроме подключения USB-кабелем к компьютеру или аккумуляторной батарее с напряжением 3 В. На платах micro:bit ранних версий не было номера версии. Переверните micro:bit и посмотрите справа внизу рядом с разъемом 0. Если там написано V1.3B или V1.5, то можно использовать внешние аккумуляторы USB и блоки питания. Если номер версии отсутствует, не используйте эти блоки питания. В любом случае держитесь подальше от мощных источников питания и USB-аккумуляторов. Исчерпывающее руководство по безопасности при работе с micro:bit можно найти по адресу: https://microbit.org/guide/safety-advice/.

Подключение электронных устройств к входным и выходным контактам Одна из замечательных особенностей платы micro:bit – возможность подключения к ее контактам дополнительных элект24

ГлАВА 1

ронных устройств. В данной книге мы будем использовать эти контакты для управления электромоторами, освещением и динамиком, а также для получения сигналов с датчиков, измеряющих освещенность, громкость звука и температуру. Контакты 3V и GND предназначены для подачи питания. Контакты 0, 1 и 2 обычно называют входами/выходами, и мы будем подключать к ним электронные устройства. ПРИМЕЧАНИЕ Иногда контакты называют ножками, хотя они совсем не похожи на ножки. Термин «ножка» происходит от микросхем, установленных на плате micro:bit. Микросхемы имеют ножки, соединяющие их с платой, и каждый из этих трех контактов на плате соединен со своей ножкой своей микросхемы. Контакты 0, 1 и 2 могут использоваться для: ►► вывода дискретных (цифровых) сигналов, например для включения и выключения внешнего светодиода; ►► вывода аналоговых сигналов, например для управления яркостью свечения светодиода; ►► генерации импульсов, например для управления сервомотором; ►► ввода дискретных сигналов, например для определения факта нажатия внешней кнопки; ►► ввода аналоговых сигналов, например для измерения температуры с помощью аналогового датчика; ►► сенсорного ввода, например для определения момента прикосновения к контакту или проводу, соединенному с контактом.

Ввод дискретных и аналоговых сигналов Когда контакт используется для вывода дискретного сигнала, в программах можно писать команды включения напряжения (3 В) на контакте и выключения (0 В). Причем напряжение можно только включить или выключить – на контакт нельзя подать никакое другое напряжение между 0 В и 3 В. То же относится к случаям, когда контакты используются для ввода НАчАлО

25

дискретных сигналов: сигнал может иметь только два состояния – включен и выключен. Если на контакт, используемый для ввода дискретных сигналов, подать напряжение, которое ближе к 3 В, чем к 0 В, то программа, прочитав состояние этого контакта, будет считать сигнал включенным, в противном случае – выключенным. Аналоговые сигналы могут иметь множество промежуточных состояний между «включено» и «выключено». Аналоговые входы на micro:bit могут давать любые значения в диапазоне от 0 до 1023, в зависимости от уровня напряжения на контакте.

Вывод аналогового сигнала: широтно-импульсная модуляция Micro:bit, как и все остальные цифровые электронные устройства, может работать только с дискретными цифровыми сигналами, имеющими два состояния – «включено» и «выключено». Чтобы вывести аналоговый сигнал с напряжением от 0 до 3 В, электронные устройства имитируют его, генерируя последовательности коротких дискретных импульсов. Чем длиннее импульс, тем больше мощности отдается устройству, подключенному к аналоговому выходу. Этот способ генерации аналоговых сигналов называют широтно-импульсной модуляцией, или ШИМ. На рис. 1.5 показан принцип действия ШИМ. Если к контакту подключен светодиод и длительность импульса с напряжением 3 В составляет всего 5 % от общего времени, то светодиод будет светиться очень тускло. Напротив, если длительность импульса с напряжением 3 В составит 90 % от общего времени, то светодиод будет светиться почти с максимальной яркостью. Самое интересное, что в действительности в обоих случаях светодиод будет мигать 50 раз в секунду, но человеческий глаз не различает вспышки, следующие так быстро, и просто видит тусклый или яркий свет. Если трех контактов 0, 1 и 2 окажется недостаточно для вашего проекта, то можно использовать дополнительный адаптер для подключения к другим контактам, находящимся между этими тремя пронумерованными контактами (см. рис. 1.1). 26

ГлАВА 1

Напряжение на выходном контакте 3B 5% 0B Напряжение на выходном контакте 3B 50 % 0B Напряжение на выходном контакте 3B 90 % 0B

Рис. 1.5. Аналоговые выходы на micro:bit позволяют выводить разную мощность

Встроенные периферийные устройства Надписи на обратной стороне платы micro:bit подсказывают нам о некоторых интересных возможностях micro:bit. Слева внизу (см. рис. 1.2) на плате можно видеть две надписи: compass (компас) и accelerometer (акселерометр). В действительности компас – это магнитометр, то есть он измеряет силу магнитного поля. Его можно использовать как компас, а также для обнаружения магнитов. Акселерометр измеряет силы, действующие на микросхему акселерометра. Поскольку гравитация – это постоянная сила, притягивающая все вниз, с помощью акселерометра можно, измеряя действующие силы и их направление, определить, когда и с каким ускорением переместилась плата micro:bit, а также когда она находится в свободном падении или ударяется обо что-то. Также на обратной стороне можно увидеть надпись BLE Antenna. На плате micro:bit имеется оборудование BLE (Bluetooth НАчАлО

27

Low Energy – Bluetooth с низким энергопотреблением), которое позволяет micro:bit обмениваться данными по беспроводной сети с другими micro:bit или телефонами с поддержкой Bluetooth. Обратите внимание, что технология обмена данными между двумя устройствами micro:bit на самом деле не является технологией Bluetooth; просто она использует ту же частоту. Подробнее об этой особенности micro:bit рассказывается в главе 10.

ОСНОВНОЕ ОБОРУДОВАНИЕ Почти во всех экспериментах и проектах, описанных в этой книге, вам понадобится несколько вещей: ►► плата micro:bit; ►► кабель с разъемами микро-USB и USB для подключения micro:bit к компьютеру. Это должен быть стандартный кабель для передачи данных, а не кабель для зарядки, в котором отсутствуют соединения, необходимые для передачи данных. Кабель, предназначенный для зарядки, нельзя использовать для загрузки программ в micro:bit; ►► провода с зажимами типа «крокодил». В идеале провода должны быть не длиннее 10–15 сантиметров, чтобы не запутаться в них; ►► батарейный блок 3V AAA с двумя батарейками AAA; ►► блок питания USB. Понадобится только в некоторых проектах. В начале описания каждого проекта или эксперимента я буду приводить список необходимых предметов, а в приложении (в конце книги) вы найдете дополнительную информацию о том, где их можно приобрести. В этой книге я постарался максимально упростить конструкции проектов, и, за исключением робота-вездехода из главы 6, вам не придется ничего паять. Для большинства проектов вам понадобятся только провода с зажимами «крокодил» для соединения устройств. При подключении с помощью зажимов «крокодил» лучше всего располагать зажим вертикально, как 28

ГлАВА 1

показано на рис. 1.6, потому что при этом уменьшается вероятность случайно отсоединить провод.

Рис. 1.6. Безопасное подключение зажима «крокодил»

ПРОГРАММИРОВАНИЕ MICRO:BIT Неугомонный ученый не отличается терпением, поэтому давайте прямо сейчас заставим наше устройство micro:bit чтонибудь сделать. Для этого сначала запрограммируем micro:bit. Одна из замечательных особенностей micro:bit заключается в том, что для начала работы с ним вам понадобится только USB-кабель и компьютер с браузером и подключением к интернету. Можно использовать компьютер под управлением Windows, macOS или Linux. Если на вашем компьютере установлен современный браузер, например Chrome, этого будет более чем достаточно. Сначала подключим micro:bit к компьютеру. Затем напишем небольшую программу, используя два метода: перетаскивая мышью блоки кода в Blocks и вручную напечатав код на языке MicroPython.

Подключение micro:bit Для начала подключите micro:bit к компьютеру с помощью USB-кабеля. Подойдет любой USB-кабель для передачи данных, но помните, что кабели, предназначенные только для заНАчАлО

29

рядки, не имеют соединений, необходимых для передачи данных, и нам они не подойдут. Если у вас возникнут проблемы с программированием micro:bit, как описывается далее, попробуйте использовать другой USB-кабель. После подключения micro:bit к компьютеру операционная система должна опознать его как USB-накопитель. Чтобы скопировать программу в micro:bit, найдите устройство micro:bit в своей файловой системе, которое должно выглядеть как флеш-накопитель или какое-либо другое съемное устройство. Затем скопируйте шестнадцатеричный файл в папку со значком micro:bit, и ваша программа автоматически будет установлена. Процесс загрузки программы в micro:bit также называют прошивкой. А теперь создадим шестнадцатеричный файл и запишем его в micro:bit.

Программирование с помощью Blocks: Hello World Программы для micro:bit можно создавать на веб-сайте, не устанавливая никакого программного обеспечения. Мы создадим программу, которая будет показывать на светодиодном дисплее бегущую строку с текстом. Запустите браузер и откройте адрес https://makecode.microbit.org. Щелкните на значке New Project (Новый проект), в открывшемся диалоге введите имя проекта «Hello World», щелкните на кнопке Create (Создать), и после этого должна появиться страница, как показано на рис. 1.7. Это редактор, в котором создаются программы. Слева находится изображение виртуальной платы micro:bit, которая будет выполнять написанные вами программы. Раздел посередине – это список категорий, таких как Basic (Основное), Input (Ввод) и Music (Музыка). В каждой из этих категорий имеются блоки, которые можно перетаскивать мышью в рабочую область справа. Каждый блок – это инструкция для micro:bit. Перетаскивая блоки и соединяя их, можно написать программу на языке Blocks. Когда вы откроете редактор, то увидите, что в рабочем разделе справа (в разделе редактирования) уже имеются два блока: on start (при начале) и forever (постоянно). Любые блоки внутри 30

ГлАВА 1

блока on start (при начале) будут выполняться один раз при первом включении micro:bit, при загрузке новой программы или после нажатия кнопки сброса на micro:bit. Любые блоки внутри блока forever (постоянно) будут запускаться снова и снова, пока вы не остановите программу.

Виртуальная плата micro:bit

Категории блоков кода

Рис. 1.7. Веб-страница https://makecode.microbit.org В нашей первой программе нам не понадобится блок forever (постоянно), поэтому щелкните на нем правой кнопкой мыши и в открывшемся контекстном меню выберите пункт Delete block (Удалить блок), чтобы удалить этот блок из программы. Затем добавьте в программу блок show string (показать строку) – строкой в языках программирования называется текст. Для этого щелкните на категории Basic (Основное), перетащите блок show string (показать строку) в область программирования и поместите его в блок on start (при начале), как показано на рис. 1.8. Если на вашем компьютере включен звук, то вы услышите приятный щелчок в момент соединения блоков.

Рис. 1.8. Блоки кода, отображающие бегущую строку с текстом «Hello World» НАчАлО

31

Теперь щелкните внутри пузыря с текстом и введите Hello World. Если хотите, можете ввести любой другой текст. Как только блок show string (показать строку) окажется на месте, виртуальная плата micro:bit слева должна показать бегущую строку с вашим текстом, чтобы вы могли видеть, что делает ваша программа. Теперь перенесем программу на настоящую плату micro:bit. Подключите micro:bit с помощью USB-кабеля и щелкните на кнопке Download (Скачать) слева внизу на веб-странице.

Файл программы загрузится из редактора точно так же, как любой другой файл, который вы можете загрузить из интернета. Папка, куда будет загружен файл, зависит от вашей операционной системы и настроек браузера, но обычно эта папка называется Downloads (Загрузки). Найдите эту папку, откройте ее, и вы должны увидеть в ней файл с именем microbit.hex. Затем выберите этот файл и перетащите его в папку со значком micro:bit (рис. 1.9). Как только вы отпустите кнопку мыши, должно начаться копирование файла в micro:bit, при этом должен начать мигать светодиод на обратной стороне micro:bit. Когда мигание прекратится, micro:bit автоматически запустит программу, и по светодиодному дисплею побежит бегущая строка с текстом. Если вы захотите повторить, нажмите кнопку сброса на обратной стороне micro:bit – и программа будет выполнена повторно. 32

ГлАВА 1

Рис. 1.9. Перетащите файл в папку со значком micro:bit

Скачивание непосредственно в micro:bit Большинство браузеров позволяют выбрать папку для сохранения файлов перед их скачиванием. Вы можете использовать эту возможность, чтобы скачивать файлы прямо в micro:bit. Тогда вам не придется сначала скачивать файлы, а потом копировать их. Чтобы выполнить необходимые настройки в браузере Chrome, введите в адресной строке chrome://settings/, на открывшейся странице выберите раздел Advanced (Дополнительные), прокрутите вниз до пункта Downloads (Скачанные файлы) и включите параметр Ask where to save each file before downloading (Всегда указывать место для скачивания). После этого, когда в следующий раз вы щелкнете на кнопке Download (Скачать) в редакторе Blocks, вам будет предложено указать место для сохранения файла, и вы сможете выбрать папку micro:bit. Когда писались эти строки, разработчики micro:bit заканчивали работу над новой функцией, упрощающей прошивку программ для пользователей браузера Chrome. Прочитать об этой функции можно здесь: https://support.microbit.org/support/solutions/ articles/19000084059-beta-testing-web-usb.

НАчАлО

33

Добавляем графику Чтобы отобразить сообщение, мы добавили внутрь блока on start (при начале) еще один блок – show string (показать строку). Блок on start (при начале) – это блок особого типа – блок событий, – который запускает связанный с ним код всякий раз, когда возникает определенное событие. В данном случае таким событием является запуск программы. Давайте немного усложним программу, добавив новое событие, которое будет возникать при нажатии кнопки A. Для этого щелкните на категории Input (Ввод) и перетащите в область редактирования блок on button A pressed (кнопка A нажата). Затем перетащите блок show leds (показать светодиоды) из категории Basic (Основное) в блок on button A pressed (кнопка A нажата). Квадратики в блоке show leds (показать светодиоды) представляют светодиоды на плате. Вы можете выбрать светодиоды, которые должны загореться, щелкая мышью на квадратиках. Результат должен выглядеть примерно так, как показано на рис. 1.10.

Рис. 1.10. Добавление в программу отображения узора на светодиодном дисплее В блоке show icon (показать значок) имеется несколько готовых светодиодных изображений, и вы можете выбрать любое 34

ГлАВА 1

из них. Снова щелкните на кнопке Download (Скачать) и скопируйте новый шестнадцатеричный файл в micro:bit. После загрузки новой программы вы сможете протестировать ее: нажмите кнопку A – и на светодиодном дисплее micro:bit должны загореться светодиоды, выбранные в блоке show leds (показать светодиоды), как показано на рис. 1.11.

Рис. 1.11. Так выглядит узор из горящих светодиодов на настоящей плате micro:bit

Сохранение и публикация программ Сайт https://makecode.microbit.org запоминает все ваши проекты. Выберите подходящее название для своего проекта, введите его в поле рядом с кнопкой Download (Скачать) – и ваш проект будет сохранен с этим именем. При каждом изменении программы она будет автоматически сохраняться, но для уверенности вы можете сохранить ее вручную, щелкнув на значке с изображением дискеты справа от поля с именем проекта. Обратите внимание, что после щелчка на этой кнопке вам будет предложено скачать шестнадцатеричный файл, но вы можете НАчАлО

35

отказаться от этого, щелкнув в открывшемся диалоге на кнопке Cancel (Отмена). Учтите, что сохраненные программы на самом деле находятся в кеше вашего браузера, поэтому если вы очистите кеш, то потеряете свои программы. Чтобы переключиться на другую программу или приступить к созданию новой, щелкните на кнопке Home (Главная) в верхней части страницы. Чтобы опубликовать программу и сделать ее доступной для других, щелкните на кнопке Share (Поделиться), которая находится правее кнопки Home (Главная). После этого вам будет предложено подтвердить свое желание опубликовать проект. Щелкните на кнопке Share (Публикация проекта) – и перед вами появится ссылка, как показано на рис. 1.12.

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

Поиск блоков Отыскать блоки show string (показать строку) и show leds (показать светодиоды), которые мы использовали, было несложно, но редактор Blocks содержит множество блоков и скрывает те, которые используются редко. Поэтому вы не увидите ошеломляющего множества вариантов в начале своего приключения с micro:bit. Есть два места, в которых скрываются блоки. Во-первых, вы, возможно, заметили, что при выборе одной из категорий бло36

ГлАВА 1

ков, например Basic (Основное), чуть ниже названия категории появляется значок с изображением троеточия и надписью more (еще; см. рис. 1.13).

Рис. 1.13. Дополнительные блоки в подразделе more (еще) Раздел more (еще) в категории Basic (Основное) содержит такие блоки, как clear screen (очистить экран) и show arrow (показать стрелку). Если попробовать выбрать другие категории, то можно заметить, что почти все они имеют раздел more (еще) и в некоторых из них довольно много дополнительных блоков. Между прочим, если навести указатель мыши на блок и немного подождать, то откроется всплывающая подсказка, кратко описывающая, что делает блок. Потратив немного времени на знакомство с различными блоками, вы получите некоторое представление о том, что можно делать с micro:bit. Второе место, где можно найти скрытые блоки, находится в категории Advanced (Расширенные), находящейся сразу под категорией Math (Математика; рис. 1.14). После щелчка на этой категории откроется список с множеством дополнительных категорий, содержащих более сложные конструкции языка Blocks, начиная с Functions (Функции). И снова потратьте немного времени на знакомство с блоками. Не волнуйтесь, если вам не удастся с первого раза понять назначение каких-то из них. Если вам нужен какой-то конкретный блок, воспользуйтесь полем Search (Поиск), чтобы найти его. Из раздела Advanced (Расширенные) вы чаще всего будете использовать категории Text (Строки) и Pins (Контакты). В некоторых главах мы также используем блоки из категорий Func­ tions (Функции) и Arrays (Массивы). НАчАлО

37

Рис. 1.14. Категория Advanced (Расширенные)

Программирование на MicroPython: Hello World Blocks хорошо подходит для тех, кто только начинает осваивать программирование, потому что позволяет воплощать действительно впечатляющие проекты, перетащив мышью всего несколько блоков. Однако многие предпочитают писать программы в текстовом виде, а не перетаскивать блоки. Кроме того, ручной набор текстовых строк больше похож на настоящее программирование. MicroPython – это версия языка программирования Python 3, которая включает все необходимое для программирования micro:bit. Фактически многие блоки в Blocks имеют прямые эквиваленты в языке MicroPython, поэтому переключиться с Blocks на MicroPython довольно просто. Python – популярный язык программирования для начинающих, и поэтому его часто преподают в школах.

Загрузка редактора для MicroPython Мы будем использовать редактор Mu (https://codewith.mu), который имеет множество функций. Его можно скачать сразу на свой компьютер. Mu также позволяет прошить программу прямо в micro:bit без необходимости перетаскивать шестнад-

38

ГлАВА 1

цатеричный файл мышью. Самое замечательное в Mu заключается в том, что он не требует доступа в интернет, чтобы прошить программу после того, как вы скачаете его к себе на компьютер. Загрузите Mu с сайта https://codewith.mu/#download. На сайте доступно несколько версий Mu, поэтому выберите ту, которая подходит для вашего компьютера. На странице загрузки вам будут предложены разные версии для разных операционных систем. Если вы пользуетесь Windows, загрузите версию с пометкой «64-bit» для Windows Installer (рис. 1.15). Если вы пользуетесь macOS, то вам будет доступна только одна версия.

Рис. 1.15. Страница для загрузки Mu Запустите установку и согласитесь с лицензионным соглашением. Оставьте остальные параметры как есть. После первого запуска редактор Mu предложит вам выбрать режим. Выберите режим BBC micro:bit, как показано на рис. 1.16. После этого Mu откроет пустое окно редактора, куда вы сможете ввести свою первую программу.

НАчАлО

Powered by TCPDF (www.tcpdf.org)

39

Рис. 1.16. Выбор режима в редакторе Mu

Ввод программы Итак, приступим! Введите следующие строки в окне редактора Mu: from microbit import * display.scroll("Hello World")

Окно должно выглядеть, как показано на рис. 1.17.

Рис. 1.17. Ввод программы на MicroPython в редакторе Mu 40

ГлАВА 1

Сохраните программу, щелкнув на кнопке Save (Сохранить) в панели инструментов в верхней части окна Mu. В ответ вам будет предложено указать имя программы. Введите имя hello.py. Теперь подключите свое устройство micro:bit к компьютеру, если оно еще не подключено, и щелкните на кнопке Flash (Прошить) в панели инструментов в окне Mu. После этого должен запуститься процесс загрузки шестнадцатеричного файла в micro:bit, как если бы вы перетащили файл, созданный редактором Blocks. Как только светодиод на обратной стороне micro:bit перестанет мигать, по светодиодному дисплею должно пробежать сообщение Hello World. Давайте подробнее рассмотрим программу. Вот первая строка: from microbit import *

С этой строки начинается почти каждая программа на MicroPython для micro:bit, потому что это она сообщает интерпретатору MicroPython, что тот должен подключить встроенную библиотеку, необходимую для работы со светодиодным дисплеем micro:bit и другим оборудованием. Эта строка не добавляется автоматически, поскольку MicroPython можно использовать с множеством других плат, а не только с micro:bit. На самом деле эта строка означает следующее: из библиотеки mirobit импортировать все (символ * означает «все»). Тот же эффект можно получить с помощью инструкции import microbit, но тогда вам придется перед всеми операциями, выполняемыми этой библиотекой, добавлять префикс microbit, а это лишний ручной ввод. Вторая строка в нашей маленькой программе выводит сообщение на дисплей: display.scroll("Hello World")

Команда display.scroll сообщает плате micro:bit, что та должна вывести (display) бегущую строку (scroll) на светодиодный дисплей. За командой следуют круглые скобки с текстом, заНАчАлО

41

ключенным в кавычки. Круглые скобки используются, чтобы добавить дополнительную информацию для команды. В данном случае дополнительная информация (ее также называют аргументом) – это текст, который нужно вывести на дисплей. Текст также необходимо заключить в двойные кавычки, чтобы показать, что программа должна рассматривать его как простой текст, а не как дополнительные команды программирования. Если после прошивки программы вы видите на дисплее micro:bit какой-то другой текст, не похожий на Hello World (или вообще ничего не увидите), вероятно, в вашу программу вкралась ошибка. При использовании текстового языка программирования необходимо соблюдать абсолютную точность при вводе команд. Например, если ошибиться в написании слова display или scroll, это вызовет ошибку при запуске программы. Ошибки в программах называют жучками (или багами, от англ. «bug» – «жучок»). Ошибки проявляются, только когда micro:bit попытается выполнить программу. Столкнувшись с ошибкой, внимательно сравните написанную вами программу с программой в книге, чтобы убедиться, что они в точности совпадают. Однако есть еще один способ поиска ошибок – REPL.

REPL REPL (Read-Eval-Print-Loop – прочитать–выполнить–вывести– повторить) – это интерфейс командной строки для micro:bit – этот инструмент позволяет отправлять команды на языке MicroPython непосредственно в плату micro:bit, без необходимости оформлять их в виде программы. Если в окне этого инструмента ввести строку 1 + 2, то в ответ он выведет 3. Точно так же, если при попытке выполнить команду обнаружится ошибка, REPL прямо сообщит о ней. Чтобы проверить, как это работает, давайте намеренно внесем ошибку в программу, записав команду scroll как scrol (удалив одну букву l в конце). Теперь снова щелкните на кнопке Flash (Прошить). Программа благополучно загрузится, даже притом что она содержит ошибку, но на этот раз на дисплее micro:bit побежит строка: AttributeError: 'MicroBitDisplay' object 42

ГлАВА 1

has no attribute 'scrol' (AttributeError: у объекта ‘MicroBitDisplay’ нет атрибута ‘scrol’). Прокрутка этого сообщения занимает много времени, поэтому, чтобы получить более четкое представление, щелкните на кнопке REPL в верхней панели инструментов Mu, а затем нажмите кнопку сброса на обратной стороне платы micro:bit. После этого в окне REPL должен появиться полный текст с сообщением об ошибке (внизу на рис. 1.18).

Рис. 1.18. Вывод сообщений об ошибках в инструменте REPL в редакторе Mu Три угловые скобки >>> в окне REPL – это приглашение к вводу, то есть после этого приглашения можно ввести команду на языке Python, нажать клавишу Enter – и эта команда будет немедленно выполнена в micro:bit. Попробуйте ввести после приглашения >>> следующую команду и нажмите Enter (обратите внимание, что на этот раз команда scroll не содержит ошибки): display.scroll("The REPL is useful")

Плата micro:bit должна немедленно вывести на светодиодный дисплей бегущую строку с указанным в команде текстом. Вам не нужно повторно вводить команду import, потому что устройство micro:bit уже выполнило ее – как раз перед тем, как наткнуться на ошибочную команду scrol. НАчАлО

43

ПРИМЕЧАНИЕ При вводе команд в программе Hello World вы могли заметить, что редактор Му пытается помочь, угадывая набираемый текст. Например, если ввести слово display, а затем приостановиться, то появится список вариантов продолжения (clear, get_pixel, is_on, off, on, scroll, set_ pixel и show). Вы можете выбрать нужный, чтобы не вводить его вручную.

Добавление графики Теперь добавим в программу немного графики, как мы делали это в Blocks. Нам снова понадобится определить момент нажатия кнопки A и затем отобразить графический узор. Сделать это на языке MicroPython немного сложнее, потому что в отличие от Blocks этот язык не имеет понятия события. Вместо этого нужно написать цикл, который повторяет содержащиеся в нем команды, пока не получит приказ остановиться. В нашей программе эти команды в цикле будут проверять нажатие кнопки A и, когда это произойдет, выполнят необходимое действие. Другими словами, вместо ожидания события нажатия кнопки A программа должна снова и снова проверять, нажата ли эта кнопка. Вот эта программа: from microbit import * display.scroll("Hello World") while True: if button_a.was_pressed(): display.show(Image.CHESSBOARD)

Строка while True отмечает начало цикла, который будет продолжать выполняться, пока что-то его не прервет. Этим «что-то» может быть выключение платы micro:bit, нажатие кнопки сброса или комбинации клавиш Ctrl­C в окне инструмента REPL. Строки внутри цикла должны иметь дополнительный отступ, по сравнению со строкой начала цикла. К счастью, Mu распознает начало цикла и услужливо добавляет отступ к следующей строке. Первая строка внутри цикла – это условный оператор if. Он вызывает функцию button_a.was_pressed, чтобы проверить, была 44

ГлАВА 1

ли нажата кнопка A с момента последней проверки вызовом was_pressed. Если да, то будут выполнены строки с отступом под оператором if. Обратите внимание, что следующая строка имеет еще больший отступ – это означает, что данная строка должна выполняться, только если команда в операторе if вернет значение True (то есть если кнопка действительно была нажата). Эта следующая строка сообщает, что устройство micro:bit должно показать на светодиодном дисплее указанный узор из библиотеки Image. Для этого примера я выбрал узор CHESSBOARD (шахматная доска). Более подробно о команде if мы поговорим ниже, в разделе «Условный оператор if». В языке Python отступы очень важны, и необходимость строгого следования правилам оформления отступов может стать причиной множества ошибок при первом знакомстве с языком. Строки с отступами, например внутри команды while или if, должны иметь одинаковые отступы. В Mu используются отступы из четырех пробелов. По мере обретения опыта программирования на Python вы начнете оформлять отступы почти интуитивно, эта привычка превратится в вашу вторую натуру.

ОСНОВНЫЕ ПОНЯТИЯ В ПРОГРАММИРОВАНИИ В этом разделе мы познакомимся с некоторыми ключевыми понятиями в программировании, которые необходимо понимать, чтобы уметь изменять программы, написанные другими программистами, или писать свои. Эти понятия не зависят от используемого языка – Blocks или MicroPython, – поэтому далее мы посмотрим, как каждое из понятий реализуется в обоих языках, сначала в Blocks, а потом в MicroPython.

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

45

Blocks В числе основных категорий в редакторе Blocks имеется категория Variables (Переменные). Создайте новый проект, щелкнув на кнопке New Project (Новый проект) на главной странице редактора Blocks (https://makecode.microbit.org). Удалите блок for­ ever (постоянно) – он нам не понадобится, – а затем в категории Variables (Переменные) выберите элемент Make a Variable... (Создать переменную...). В появившемся диалоге введите имя переменной counter. Перетащите блок set counter to 0 (задать для counter значение 0) в область программирования и вставьте его в блок on start (при начале). Затем в категории Input (Ввод) найдите блок on button A pressed (кнопка A нажата) и перетащите его в область программирования. В категории Variables (Переменные) найдите блок change counter by 1 (изменить counter на 1) и перетащите его в блок on button A pressed (кнопка A нажата). Затем туда же перетащите блок show number (показать число) из категории Basic (Основное). Наконец, выберите блок counter в категории Variables (Переменные) и перетащите его в блок show number (показать число) на место числа 0, чтобы он заменил это число. После всех этих действий программа в Blocks должна выглядеть, как показано ниже.

При желании можете опробовать эту программу на виртуальном устройстве micro:bit, изображенном слева от редактора, для этого щелкните на кнопке A. Вы должны увидеть, как 46

ГлАВА 1

на дисплее появится число «1», и затем оно будет увеличиваться с каждым новым щелчком на A. Давайте разберемся с тем, что происходит в программе. В блоке on start (при начале) создается переменная с именем counter, и ей присваивается начальное значение 0. Когда активируется блок on button A pressed (кнопка A нажата), он запускает сначала блок change counter by 1 (изменить counter на 1), который изменяет значение переменной counter, прибавляя 1, а затем show number (показать число), который выводит значение переменной на дисплей. В данном случае наша переменная counter содержит число, но вообще переменные могут хранить текст и даже коллекции данных.

MicroPython На языке MicroPython аналогичная программа выглядит так: from microbit import * counter = 0 while True: if button_a.was_pressed(): counter += 1 display.scroll(str(counter))

Первая строка, как обычно, импортирует библиотеку micro:bit. Следующая строка создает переменную counter и присваивает ей начальное значение 0. Затем объявляется цикл while, который проверяет факт нажатия кнопки A и добавляет 1 к переменной counter. Чтобы добавить 1, используется оператор +=, который эквивалентен блоку change counter (изменить counter) в Blocks. Чтобы вывести новое значение на дисплей, нужно с помощью команды str(counter) преобразовать число в текстовую строку, потому что команда display умеет выводить только текстовые строки. Обратите внимание, что использование одних команд внутри других – это нормальное явление в программировании на НАчАлО

47

Python. Здесь мы использовали команду str внутри команды display.scroll, заключив ее в круглые скобки. В таких случаях первой выполняется самая внутренняя команда (в данном случае str), и ее результат передается следующей команде (в данном случае команде display.scroll).

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

Blocks Допустим, мы решили удваивать число в переменной вместо увеличения его на единицу. Для этого нужно предыдущую программу изменить так, чтобы переменная counter инициализировалась начальным числом 1, а блок on button A pressed (кнопка A нажата) умножал counter на 2, как показано ниже.

Теперь вместо блока change counter by 1 (изменить counter на 1) нужно использовать блок set counter to (задать для counter значение), а внутри него число 0 заменить блоком умножения (×) из категории Math (Математика). На место первого операнда в блок умножения нужно поместить переменную counter, а во втором операнде ввести число 2. Теперь при каждом нажатии кнопки A значение переменной counter будет удваиваться. 48

ГлАВА 1

В Blocks трудно манипулировать математическими операциями, потому что приходится вкладывать одни блоки внутрь других. Поэтому если программа должна выполнять много арифметических операций, то, вероятно, лучше написать ее на MicroPython.

MicroPython В языке MicroPython арифметические операции выполняются с помощью символов +, –, * (умножение) и / (деление). Для изменения порядка выполнения операций также можно использовать круглые скобки, как это принято в математике. Вот как выглядит аналогичная программа удвоения на MicroPython: from microbit import * counter = 1 while True: if button_a.was_pressed(): counter = counter * 2 display.scroll(str(counter))

Ключевая строка здесь: counter = counter * 2

Символ = после имени переменной означает: «результат выражения справа от символа = присвоить этой переменной». В данном случае используется выражение counter * 2 (значение переменной counter умножается на 2). Также можно использовать более короткую форму записи counter *= 2, как мы сделали это для операции сложения в предыдущей программе.

Условный оператор if Программу можно рассматривать как последовательность шагов, которые выполняет micro:bit. Иногда требуется, чтобы программа принимала решения и выполняла определенные шаги на основе этих решений. Блоки в категории Logic (Логика) позволяют программам принимать решения. НАчАлО

49

Давайте перепишем наш пример, увеличивающий переменную counter на 1, так чтобы она продолжала счет до 10, а затем возвращалась к 0, чтобы начать счет сначала.

Blocks Попробуйте сконструировать в Blocks следующую программу.

Сначала добавьте блок if (если) после блока change counter by 1 (изменить counter на 1). В блок if true then (если истина то) на место true (истина) подставьте блок сравнения, который сравнивает значение counter с числом 10. Если значение счетчика больше (>) 10, то программа запустит блоки внутри блока if (если). В данном случае блок if содержит единственный блок, присваивающий переменной counter число 0. Если счетчик не больше 10, то программа просто выведет число на дисплей. Существует и другой вариант блока if (если), который позволяет выполнить одно действие, если условие истинно, и другое действие, если условие ложно. Больше об этом вы узнаете в следующих главах. 50

ГлАВА 1

MicroPython Мы уже использовали условный оператор if в MicroPython, когда проверяли, была ли нажата кнопка. Но теперь мы не просто проверяем истинность или ложность условия, а сравниваем переменную counter с числом 10. Вот как выглядит та же версия программы на MicroPython: from microbit import * counter = 0 while True: if button_a.was_pressed(): counter += 1 if counter > 10: counter = 0 display.scroll(str(counter))

Особое внимание обратите на отступы в этой программе: здесь один условный оператор if вложен внутрь другого оператора if, который сам находится внутри цикла while. Проверьте себя – сможете ли вы понять, как работает этот код, опираясь на объяснение в описании версии для Blocks.

Строки Как уже говорилось выше, строка – это последовательность символов (цифр, букв или знаков препинания), часто составляющих слова и предложения. Мы уже использовали строку в самой первой программе Hello World на рис. 1.8, чтобы вывести текст «Hello World».

Blocks Большинство блоков со строками в Blocks находятся в категории Text (Строки). Самый простой из них – блок с парой кавычек и пробелом между ними, вместо которого можно ввести свой текст и получить строку. Этот блок можно использовать, чтобы запомнить строку в переменной. Следующая программа записывает строку в переменную и выводит ее длину. НАчАлО

51

Мы используем блок on start (при начале), внутри которого присваиваем переменной message некоторый текст. В блок show number (показать число) нужно добавить блок length of (длина) и внутрь этого блока вставить переменную message. Блок length of (длина) определяет количество символов в указанной строковой переменной message, которое затем отображается на дисплее блоком show number (показать число). В категории Text (Строки) имеются также другие блоки, позволяющие выполнять такие действия, как объединение двух строк, вырезание части строки и преобразование строки в число.

MicroPython Строки в MicroPython отличаются от команд тем, что заключены в двойные кавычки, в точности как в Blocks. Вот как выглядит предыдущая программа, написанная на MicroPython: from microbit import * message = "This text is in a variable." while True: display.scroll(str(len(message)))

Она работает точно так же, как программа на Blocks. Обратите внимание, что здесь используется команда str для преобразования числа (то есть длины строки, которую возвращает len) в строку, чтобы ее можно было вывести на дисплей. 52

ГлАВА 1

Массивы и списки До сих пор мы использовали переменные, хранящие только один элемент данных – число или строку. Но иногда требуется сохранить в переменной сразу несколько значений и обращаться к ним по очереди. Примером такого набора значений может служить последовательность нот, составляющих мелодию (как будет показано в главе 2). В Blocks такие коллекции значений называются массивами, а в MicroPython – списками. Однако суть от названия не меняется.

Blocks В редакторе Blocks есть категория Arrays (Массивы), содержащая блоки для работы с массивами. Наиболее важными из них являются set list to (задать для список значение), set text list to (задать для список значение) и get value at (получить значение по индексу). Первые два позволяют создать список, содержащий числа или строки соответственно, а последний – получить значение определенного элемента в массиве. Следующая небольшая программа создает переменную с именем colors и присваивает ей массив из четырех строк. Затем выбирает случайный элемент из этого массива и выводит его на дисплей. Обратите внимание, что во вложенном блоке array of (массив) есть кнопки + и –, которые позволяют настроить количество элементов в массиве при его создании.

Мы добавили блок on button A pressed (кнопка A нажата). Внутрь этого блока вставили блок show string (показать строку), НАчАлО

53

внутри которого вставили блок get value at (получить значение по индексу). Затем мы добавили блок pick random (выбрать случайно) из категории Math (Математика), чтобы получить случайное число от 0 до 3. Все вместе это означает следующее: когда программа обнаружит, что была нажата кнопка A, блок pick random (выбрать случайно) выберет случайное число от 0 до 3, блок get value at (получить значение по индексу) извлечет из массива строку с индексом, равным этому случайному числу, а затем блок show string (показать строку) выведет полученную строку на дисплей. Обратите внимание, что независимо от языка программирования – Blocks или MicroPython – нумерация элементов в массивах начинается с 0, а не с 1, поэтому если блок pick random (выбрать случайно) выберет число 0, то на дисплее появится первый элемент массива.

MicroPython Вот как выглядит та же программа на языке MicroPython: from microbit import * import random numbers = ["orange", "yellow", "green", "blue"] while True: if button_a.was_pressed(): display.scroll(numbers[random.randint(0, 3)])

Чтобы в MicroPython определить список, нужно напечатать квадратные скобки [ и ] и внутри этих скобок перечислить элементы списка через запятую. Квадратные скобки также используются для получения значения определенного элемента списка, но в этом случае внутри квадратных скобок указывается индекс – позиция элемента в списке. В данном примере в квадратные скобки заключена команда random.randint, которая возвращает случайное число от 0 до 3.

54

ГлАВА 1

В заключение о программировании На этом мы заканчиваем краткое знакомство с приемами программирования micro:bit. Весь код, который приводится в этой книге, можно скачать из интернета, поэтому вам не нужно осваивать программирование, чтобы начать экспериментировать и создавать свои проекты. В процессе чтения этой книги вы познакомитесь с новыми блоками и функциями языка MicroPython, работу которых я буду объяснять по мере их появления. Дополнительную информацию о программировании на MicroPython для micro:bit можно найти на сайте https://microbit-micropython.readthedocs.io. Если вы только начинаете знакомиться с языком Python, то полезным дополнением к этой книге вам послужит другая моя книга: «Programming micro:bit: Getting Started with MicroPython» (McGraw-Hill, 2018).

СКАЧИВАНИЕ ПРОГРАММ Некоторые программы в этой книге длинные и сложные, и, возможно, вам не захочется вводить их вручную. Если вы не хотите разрабатывать программы самостоятельно, то можете просто скачать их и прошить в свое устройство micro:bit.

Скачивание программ на языке Blocks Все программы на языке Blocks доступны на сайте GitHub по адресу: https://github.com/simonmonk/mbms/. Когда вы выберете понравившийся вам проект и щелкнете на его ссылке, он откроется в вашем браузере. Прокрутите страницу GitHub вниз, пока не увидите текст, похожий на изображение на рис. 1.19. Вам нужен список ссылок на все программы на языке Blocks. Чтобы открыть выбранную программу, просто щелкните левой кнопкой мыши на соответствующей ссылке. Например, на рис. 1.20 показано, что получится, если щелкнуть на ссылке проекта «Musical Doorbell» (музыкальный дверной звонок).

НАчАлО

55

Рис. 1.19. Ссылки на все программы на языке Blocks из этой книги

Рис. 1.20. После щелчка на ссылке «Musical Doorbell» откроется проект музыкального дверного звонка 56

ГлАВА 1

Обратите внимание, что рис. 1.20 не похож на обычное окно редактора Blocks. Причина в том, что проекты открываются в режиме, в котором можно только просмотреть код и прошить его в micro:bit. Если у вас появится желание изменить программу или просто увидеть ее в более привычном редакторе, щелкните на кнопке Edit (Правка) в правом верхнем углу. После этого для вас будет создана отдельная копия программы, которая откроется в привычном редакторе и будет доступна для изменения.

Скачивание программ на языке MicroPython Программы на MicroPython доступны на сайте GitHub по адресу: https://github.com/simonmonk/mbms/. Если у вас есть опыт использования программного обеспечения Git, то можете клонировать весь репозиторий на свой компьютер. Для тех, кто не имеет такого опыта, ниже приводится пошаговое руководство, следуя которому, можно скачать все программы. 1. Откройте в браузере страницу с адресом https://github.com/ simonmonk/mbms/, щелкните на зеленой кнопке Clone or download (Клонировать или скачать)1 и в открывшемся меню выберите пункт Download ZIP (Скачать файл ZIP), как показано на рис. 1.21.

Рис. 1.21. Скачивание кода с программами из книги 1

Пока эта книга готовилась к печати, разработчики сайта изменили надпись на кнопке, теперь на ней написано Code (Код). – Прим. перев. НАчАлО

57

2. Найдите файл ZIP в папке, куда вы его скачали (mbmsmaster.zip), и распакуйте его. Процесс распаковки зависит от вашей операционной системы – Windows, macOS или Linux. В macOS и в большинстве дистрибутивов Linux ZIP-файлы автоматически распаковываются при попытке открыть их. Если вы пользуетесь Windows, то имейте в виду, что Windows позволяет заглядывать внутрь ZIP-файлов, не распаковывая их, поэтому вы не сможете использовать файлы программ, находящиеся внутри ZIP-файла, пока не извлечете их. Чтобы извлечь файлы в Windows, щелкните правой кнопкой мыши на ZIP-файле в проводнике и в появившемся контекстном меню выберите пункт Extract All... (Извлечь все...), как показано на рис. 1.22.

Рис. 1.22. Распаковывание ZIP-файла в Windows Извлеченные файлы будут сохранены в папке mbmsmaster. Внутри этой папки вы найдете еще одну папку, с именем python, а внутри нее – программы на языке MicroPython в виде файлов с расширением .py. 58

ГлАВА 1

3. К сожалению, эти программы нельзя открыть в редакторе Mu простым двойным щелчком. Чтобы открыть программу, сначала запустите редактор Mu, щелкните на кнопке Load (Загрузить), в открывшемся диалоге найдите нужную вам программу на MicroPython и щелкните на кнопке Open (Открыть). Чтобы сократить время на поиск нужной программы, я советую переместить все программы на MicroPython из папки python, которую вы только что скачали, в папку, где обычно Mu ожидает найти свои программы. По умолчанию это папка mu_code в вашей домашней папке. Теперь, когда вы щелкнете на кнопке Load (Загрузить) в редакторе Mu, вы сразу увидите все программы на MicroPython.

ИТОГИ Итак, познакомившись с некоторыми основами micro:bit, можно приступать к экспериментам и работе над проектами. Мы начнем с создания и улавливания звуков с помощью micro:bit.

НАчАлО

59

2 МИР ЗВУКА

В

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

ПОДКЛЮЧЕНИЕ ДИНАМИКА К MICRO:BIT Есть два способа услышать звуки, воспроизводимые micro:bit. Они зависят от того, насколько громким должен быть воспроизводимый звук.

Тихий способ: наушники Самый простой, пожалуй, способ услышать звуки, воспроизводимые micro:bit, – подключить наушники с помощью зажимов типа «крокодил», как показано на рис. 2.1.

Рис. 2.1. Подключение наушников с помощью зажимов типа «крокодил» Если приглядеться внимательно, то можно заметить, что металлический штекер от наушников разделен на три части пластиковыми кольцами. Это означает, что штекер имеет три контактные области. Область, ближайшая к проводу, ведущему к наушникам, – это «земля». Подключите ее к контакту GND (0 В) на плате micro:bit с помощью отрезка провода и зажимов «крокодил». Две другие контактные области – это аудиосигналы для ушей (левого и правого). Если вы хотите слышать звук в обоих ушах, подключите зажим «крокодил» так, чтобы он захватывал обе области. Также можно подключить зажим «крокодил» к самому кончику (как на рис. 2.1), но тогда звук будет слышен МИР зВукА

61

только в одном ухе. В любом случае, подключите зажим на другом конце этого провода к любому из трех контактов на плате micro:bit: 0, 1 или 2. Для вывода звука многие пользователи обычно используют контакт 0. ПРИМЕЧАНИЕ Наушники с микрофоном, предназначенные для использования с мобильным телефоном, будут иметь четыре контактные области на штекере, а не три. Это не должно иметь большого значения, потому что вы по-прежнему можете подключить вывод звука к самому кончику, а ближайшую к корпусу штекера область – к контакту GND на плате.

Рис. 2.2. Подключение наушников через адаптер аудиоразъема 62

ГлАВА 2

Если у вас есть такая возможность, то для подключения можно использовать адаптер аудиоразъема, как на рис. 2.2. Просто включите наушники в этот адаптер, черный провод от адаптера – к контакту GND, а другой провод – к контакту 0. Подобные адаптеры для наушников обеспечивают более надежное соединение, чем зажимы «крокодил».

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

Рис. 2.3. Подключение усиливающей аудиоколонки к micro:bit Существуют аудиоколонки, созданные специально для использования с micro:bit. Одни из них имеют кабели с зажимами типа «крокодил» для подключения к контактам на плате micro:bit, а другие, такие как Monk Makes Speaker (рис. 2.4), имеют контакты как на плате micro:bit, что упрощает их подключение с помощью проводов и зажимов «крокодил».

Рис. 2.4. Динамик Monk Makes Speaker для micro:bit МИР зВукА

63

Усиливающим аудиоколонкам нужен источник питания. Некоторые колонки могут питаться от отдельных батареек или через USB-разъем. Другие могут питаться непосредственно от micro:bit, и такие колонки должны подключаться к трем контактам: к GND (0 В); к 3V, чтобы запитать внутренний усилитель колонки; и к контакту 0 (или 1 или 2) для получения аудиосигнала, поступающего с платы micro:bit. Выполните подключение любым удобным для вас способом и давайте, наконец, поэкспериментируем!

ЭКСПЕРИМЕНТ 1: ГЕНЕРАЦИЯ ЗВУКОВ В этом эксперименте вы узнаете, как генерировать звуки с помощью micro:bit и аудиоколонки или наушников.

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► аудиоколонка или наушники; ►► отрезки провода с зажимами «крокодил». Где все это можно приобрести, вы узнаете в приложении. Предположим, что вы используете динамик Monk Makes Speaker для micro:bit и набор зажимов «крокодил», но подойдет любой другой способ подключения из описанных выше.

Конструирование 1. Подключите динамик одним из способов, показанных на рис. 2.1–2.4. Затем подключите плату micro:bit к своему компьютеру. 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 1: Generating Sounds (Эксперимент 1: генерация звуков). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы 64

ГлАВА 2

не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого эксперимента называется Experiment_01.py. 3. Загрузив программу в micro:bit, нажмите кнопку A. Вы должны услышать в динамике (или в наушниках) тональный сигнал!

Программа Для этого эксперимента вам не придется писать много кода. Независимо от выбранного языка, Blocks или MicroPython, нужно просто определить факт нажатия кнопки A и затем воспроизвести звук.

Blocks Вот как выглядит программа для этого эксперимента в редакторе Blocks.

В программе используется блок on button A pressed (кнопка A нажата), который запускает play tone (проиграть тон), чтобы воспроизвести звуковой сигнал. Поместите блок play tone (проиграть тон) внутрь блока on button A pressed (кнопка A нажата) так, чтобы он встал на место. Затем в раскрывающемся меню Middle C (Средняя C)1 выберите тон, который вы хотите услышать (в данном случае используется тон по умолчанию Middle C (Средняя C)), а в поле 1 beat (1 бит) установите продолжительность ноты (в данном случае продолжительность равна 1 целой ноте). 1

Нота «до» средней октавы. – Прим. перев. МИР зВукА

65

MicroPython Вот версия программы на языке MicroPython: from microbit import * import music while True: if button_a.was_pressed(): music.pitch(262, 1000)

Для Python написано огромное количество библиотек, в которых собраны наборы функций для выполнения определенных операций. Импортируя эти библиотеки в свою программу, можно получить доступ ко многим интересным возможностям, и при этом не придется писать сложный код самостоятельно. Библиотека music – одна из таких библиотек: она содержит функции, которые можно использовать для воспроизведения звука в micro:bit. Чтобы воспользоваться этой библиотекой, сначала нужно импортировать ее с помощью команды import music. Редактор Blocks многое делает автоматически, например он знает, как часто запускать блоки и в каком порядке, но в программах на MicroPython вы должны сами четко указать все, что требуется. Здесь используется цикл while True:, требующий от micro:bit продолжать проверять, была ли нажата кнопка A. Когда кнопка A будет нажата, программа воспроизведет ноту, выполнив команду pitch, которой вы должны передать два аргумента: частоту звука (число 262 соответствует ноте «до» средней октавы) и его продолжительность в миллисекундах (в данном случае 1000 мс, то есть 1 секунда).

Что можно попробовать Можете попробовать изменить высоту ноты. Если вы используете программу на языке Blocks, вернитесь в браузер и щелкните на кнопке Edit (Редактировать код), чтобы перенести программу в редактор Blocks, затем щелкните на поле Middle  C (Средняя C). После этого на экране появится мини-клавиатура, на которой можно выбрать другую ноту для воспроизведе66

ГлАВА 2

ния. Чтобы изменить ноту в программе на MicroPython, введите новое число вместо 262. Затем снова щелкните на кнопке Flash (Прошить). Ниже в этой главе вы познакомитесь с более подходящим способом выбора нот в MicroPython. Также можете попробовать заставить micro:bit воспроизводить звук нажатием обеих кнопок, A и B, и даже заставить каждую из них воспроизводить свою ноту – целый аккорд!

Как это работает: частота и звук Как micro:bit создает звук в динамике? На самом деле micro:bit невероятно быстро включает и выключает ток (поток электричества), заставляя часть мембраны динамика вибрировать и создавать звук. Скорость включения и выключения тока определяет частоту (высоту) звука, поэтому, меняя частоту, можно генерировать разные тона. Объясню этот эффект подробнее. На рис. 2.5 показано устройство динамика. Жесткий (обычно металлический) каркас удерживает коническую мембрану. Узкий конец этого конуса имеет цилиндрическую форму, и на него намотана катушка из проволоки. Катушка находится внутри сильного постоянного магнита, закрепленного на каркасе динамика. Коническая мембрана

Звуковые волны

Постоянный Катушка магнит

Контакты Каркас

Рис. 2.5. Устройство динамика

МИР зВукА

67

Когда через катушку проходит ток, она вместе с конической мембраной очень быстро перемещается вперед и назад. Эта вибрация создает в воздухе волны давления, которые мы слышим как звук. Чтобы воспроизвести определенный звук, мембрана динамика должна перемещаться вперед и назад определенное количество раз в секунду. Количество движений мембраны в секунду – это частота, измеряемая в герцах (сокращенно Гц). Чем выше частота, тем выше тон звука. Частота 262 Гц соответствует ноте «до» средней октавы на фортепиано. Нота «до» октавы выше имеет частоту 524 Гц. В музыке, при подъеме на октаву выше, частота звука удваивается. Плата micro:bit управляет током и, следовательно, частотой, очень быстро включая и выключая контакт 0. Когда контакт 0 выключен, выходное напряжение равно 0 В, а когда включен – 3 В. Если нарисовать график зависимости выходного напряжения от времени, то получится картина, изображенная на рис. 2.6. По понятным причинам волны этого типа называют прямоугольными. Поскольку выходы на плате micro:bit могут иметь только два состояния, включено и выключено, это единственный вид волны, которую она может сгенерировать. Напряжение 3В

0В Время

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

68

ГлАВА 2

ЭКСПЕРИМЕНТ 2: ОНО ГОВОРИТ! Язык MicroPython для micro:bit обладает по-настоящему удивительной возможностью: программа на этом языке может произносить целые фразы на человеческом языке! В данном эксперименте мы опробуем эту возможность и попросим устройство micro:bit поговорить с нами. Программное обеспечение, генерирующее речь, было разработано для воспроизведения фраз на английском языке, однако, поэкспериментировав с орфографией, вы сможете заставить библиотеку воспроизводить фразы на других языках. На момент написания этих строк данная возможность была недоступна в языке Blocks, поэтому мы будем экспериментировать только с программой на MicroPython.

Что понадобится В этом эксперименте используется то же оборудование, что и в эксперименте 1: ►► плата micro:bit; ►► аудиоколонка или наушники; ►► отрезки провода с зажимами «крокодил».

Конструирование 1. Подключите динамик одним из способов, показанных на рис. 2.1–2.4. Затем подключите плату micro:bit к своему компьютеру. 2. В этом эксперименте используется библиотека speech, которая недоступна в языке Blocks, поэтому программа для данного эксперимента написана только на Python. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и загрузите файл Experiment_02.py. Там же, в репозитории, вы найдете программы для других экспериментов и инструкции по их загрузке и использованию. Запишите программу в micro:bit.

МИР зВукА

69

3. Загрузив программу в micro:bit, нажмите кнопку A. Вы должны услышать в динамике словесное сообщение. Неугомонному ученому нравится этот голос, потому что он напоминает ему голос его старого доброго друга – профессора Хокинса (Hawkins), которого, увы, больше нет с нами.

Программа Вот как выглядит программа на языке MicroPython: from microbit import * import speech while True: if button_a.was_pressed(): speech.say("Mad Scientists love micro bits")

C библиотекой speech заставить micro:bit говорить человеческим языком очень просто, нужно лишь выполнить команду say. Библиотека speech довольно сложна, она позволяет даже менять высоту голоса, чтобы сымитировать пение! Полное описание библиотеки вы найдете на сайте https://microbit-micropython. readthedocs.io/en/latest/tutorials/speech.html.

ПРОЕКТ: МУЗЫКАЛЬНЫЙ ДВЕРНОЙ ЗВОНОК Сложность: легкая Неугомонный ученый особенно неравнодушен к музыкальному дверному звонку. И наверное, вас не удивит, если я скажу, что одна из его самых любимых мелодий – «Имперский марш» из фильма «Звездные войны». В главе 10 мы вернемся к этому проекту и добавим второе устройство micro:bit, чтобы получить беспроводной дверной звонок. Этот проект (показан на рис. 2.7) является продолжением эксперимента 1, только вместо одного тона он воспроизводит мелодию. Нажимая кнопку A, мы будем воспроизводить одну 70

ГлАВА 2

мелодию, а нажимая кнопку B – другую. На YouTube есть короткий видеоролик, демонстрирующий работу этого проекта (https://youtu.be/xmLupw4PxYQ/).

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

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit, которая будет служить основой этого проекта и предоставлять две кнопки для нажатия; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к динамику (длинные провода упростят задачу); ►► адаптер питания от USB или батарейный блок 3 В с выключателем для питания micro:bit и динамика; ►► динамик для воспроизведения мелодии дверного звонка (я советую использовать динамик Monk Makes Speaker, созданный специально для micro:bit); ►► офисный пластилин Blu-Tack или двусторонний скотч для крепления micro:bit и динамика к дверной коробке. МИР зВукА

71

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

Конструирование Приступая к новому проекту, всегда стоит сначала собрать и протестировать конструкцию на рабочем столе и только потом переносить ее на место, где она будет использоваться. 1. Подключите динамик к micro:bit с помощью трех проводов и зажимов «крокодил», как показано на рис. 2.7. Желательно подобрать цвет проводов: черный для подключения к контакту GND, красный – к контакту 3V и любой другой цвет – к контакту 0, через который будет передаваться аудиосигнал. Использование проводов разного цвета поможет вам ничего не перепутать. 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелк-

72

ГлАВА 2

ните на ссылке Musical Doorbell (Музыкальный дверной звонок). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Файл с программой для этого проекта называется ch_02_Doorbell.py. 3. Загрузив программу в micro:bit, нажмите кнопку A. Вы должны услышать мелодию «Конферансье» Скотта Джоплина (Scott Joplin). Потом нажмите кнопку B, и вы услышите «Похоронный марш» Фредерика Шопена. 4. Если все заработало как надо, отсоедините плату micro:bit от компьютера и подключите ее к адаптеру питания USB или батарейному отсеку. Протестируйте конструкцию еще раз, чтобы убедиться, что она работает. Затем закрепите плату micro:bit с одной стороны дверной коробки, а динамик – с другой. Отмечу несколько важных моментов: •► ►во-первых, приклеивая детали конструкции на офисный пластилин, вы можете запачкать и испортить стены, поэтому обязательно спросите разрешение, если это необходимо. Это особенно актуально, если вы решили использовать двусторонний скотч, так как он может надолго прикрепиться к краске; •► ►во-вторых, провода, соединяющие контакты на плате micro:bit и на динамике, должны проходить так, чтобы они не сильно защемлялись при закрытии двери, поэтому подумайте, как их провести, прежде чем начать закреплять детали на стенах. В главе 10 мы создадим другую версию этого проекта – беспроводной дверной звонок, – в котором используем две платы micro:bit; •► н ► аконец, если вы решите использовать адаптер питания через USB, то вам понадобится розетка, достаточно близко расположенная к двери, чтобы можно было протянуть провода от адаптера питания USB до платы micro:bit.

МИР зВукА

73

Программа А теперь исследуем программу проекта.

Blocks Вот программа на языке Blocks.

Она очень похожа на программу из эксперимента 1, но имеет некоторые важные отличия. Во-первых, программа состоит из двух столбиков блоков: один обрабатывает кнопку A, а второй – кнопку B. Во-вторых, в меню repeating (повторять) нужно выбрать once (один раз), потому что мелодия должна воспроизводиться только один раз. В-третьих, для воспроизведения всей последовательности нот используется блок start melody (запустить мелодию). Обратите внимание, что в Blocks уже имеется набор готовых мелодий – вам остается только выбрать нужную!

MicroPython Вот версия программы на MicroPython: from microbit import * import music while True: if button_a.was_pressed(): music.play(music.ENTERTAINER) elif button_b.was_pressed(): music.play(music.FUNERAL)

74

ГлАВА 2

Она работает точно так же, как программа на Blocks. Метод music.play – это аналог блока start melody (запустить мелодию). Также в программе использован условный оператор if, чтобы определить, какая кнопка была нажата. Использование оператора if позволяет воспроизвести разные мелодии нажатием кнопок A и B. В MicroPython доступны те же предопределенные мелодии, что и в Blocks.

Что можно попробовать Наличие на выбор нескольких предопределенных мелодий – это, конечно, хорошо, но у каждого из нас могут быть свои пристрастия в музыке. Более того, у кого-то из вас может возникнуть желание написать свои мелодии для звонка! В этом случае в программе на Blocks можно создать список блоков play tone (проиграть тон), как показано в следующем примере, и заполнить его нотами, которые вы хотели бы услышать, а программа воспроизведет их по очереди.

Итак, если вы знаете все ноты, составляющие определенную мелодию, то можете создать ее таким способом. Вам также потребуется указать, как долго должна играть каждая нота. Возможно, вам придется немного поэкспериментировать, прежде чем ваша музыка будет звучать так, как вы хотите. А теперь посмотрим, как создать мелодию в MicroPython: from microbit import * import music notes = ['A4:4', 'A', 'A', 'F:2', 'C5:2', 'A4:4', 'F:2', 'C5:2', 'A4:4'] МИР зВукА

75

while True: if button_a.was_pressed(): music.play(notes)

Библиотека music для MicroPython сама позаботится о воспроизведении целой мелодии, если записать ее с использованием специальной нотации. Каждая нота определяется строкой символов (если вы забыли, что такое строки, вернитесь к главе 1 и прочитайте раздел «Строки»). Первый символ в строке – это название ноты (буквы от A до G). Затем идет номер октавы – нота Middle C (Средняя C) находится в октаве с номером 4, поэтому вы, возможно, захотите ограничить свою мелодию октавами 3, 4 и 5. Номер октавы можно не указывать, и если опустить его, то Python будет думать, что вам нужна первая октава. Если у какой-то ноты указать номер октавы, то этот номер будет использоваться для всех последующих нот, для которых номер октавы не указан. Далее можно поставить двоеточие и вслед за ним указать продолжительность ноты. Продолжительность измеряется в четвертях. Например, чтобы сыграть половинную ноту «до» средней октавы, ее нужно записать так: C4:2. Чтобы связать несколько нот в мелодию, нужно сконструировать список. До сих пор мы использовали переменные, содержащие только одно значение. Переменная-список может содержать несколько элементов-значений, к которым можно обращаться по отдельности и использовать независимо от других. Чтобы указать, что переменная notes содержит список, а не одно значение, нужно перечислить эти значения через запятую и заключить их все в квадратные скобки, [ и ]. Каждый элемент в нашем списке содержит строку, представляющую одну ноту. Чтобы воспроизвести всю последовательность нот, нужно вызвать функцию play и передать ей список нот для воспроизведения. В данном примере воспроизводятся несколько вступительных нот «Имперского марша» из фильма «Звездные войны». Как видите, эта программа импортирует обычную библиотеку microbit, а также библиотеку music. Мелодия определена в переменной с именем notes. Далее следует цикл while True:, 76

ГлАВА 2

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

ПРОЕКТ: ШУМОМЕР Сложность: легкая Неугомонный ученый любит измерять все подряд. Поэтому специально для него в этом проекте мы создадим простой шумомер, измеряющий громкость шума. Пользуясь им, неугомонный ученый сможет доказать своим шумным соседям, что они создают слишком много шума.

Что понадобится Для этого проекта вам понадобится микрофон, чтобы можно было улавливать звуки и измерять их громкость. Я буду использовать плату расширения Monk Makes Sensor, на которой имеется несколько датчиков, в том числе и микрофон. Громкость звука будет отображаться на светодиодном дисплее micro:bit. Чем громче звук, тем больше светодиодов будет зажигаться. Итак, для этого проекта вам понадобятся: ►► плата micro:bit, которая будет служить основой этого проекта и предоставлять две кнопки для нажатия; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к динамику (длинные провода упростят задачу); ►► любой источник питания micro:bit – это может быть блок питания через USB-кабель или батарейный блок; ►► Monk Makes Sensor для micro:bit – плата расширения с микрофоном.

Конструирование 1. Подключите плату расширения к micro:bit тремя проводами с зажимами «крокодил», как показано на рис. 2.8. Для этого подключите контакт 3V на плате расширения к конМИР зВукА

77

такту 3V на плате micro:bit, контакт GND – к контакту GND и контакт с изображением микрофона на плате расширения – к контакту 0 на плате micro:bit. Старайтесь выбирать провода определенного цвета для соединений: черный – для GND, красный – для 3V и любой другой цвет – для подключения микрофона к контакту 0 на micro:bit.

Рис. 2.8. Шумомер 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Shout­O­Meter (Шумомер). Когда откроется страница с программой, щелкните на кнопке Down­ load (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_2_Shoutometer.py. 3. Загрузив программу в micro:bit, попробуйте свистнуть в микрофон (рис. 2.9) и посмотрите, как в ответ на это будут загораться светодиоды, показывая уровень шума. Если вы не 78

ГлАВА 2

умеете свистеть, можете просто постукать пальцем по микрофону. На YouTube есть короткий видеоролик, демонстрирующий работу этого проекта (https://youtu.be/6pGDSHmfFng/). Микрофон

Рис. 2.9. Плата расширения Monk Makes Sensor для micro:bit с микрофоном

Программа Программа на Blocks имеет возможность использовать встроенный блок plot bar graph of (построить гистограмму), но в MicroPython такой возможности нет, поэтому программа на MicroPython получилась немного сложнее, так как в ней пришлось написать нашу собственную версию этой функции.

Blocks В языке Blocks имеется удобный блок plot bar graph of (построить гистограмму), благодаря которому отображение громкости звука превращается в простую задачу.

МИР зВукА

79

Все действия производятся в блоке forever (постоянно), поэтому они выполняются непрерывно. Вставьте в блок forever (постоянно) блок plot bar graph of (построить гистограмму), который будет отображать уровень громкости звука, воспринимаемого микрофоном. Как можно видеть на рисунке выше, программа читает с контакта 0 значение аналогового сигнала, вычитает из него 511 и передает результат в plot bar graph of (построить гистограмму) для построения гистограммы с максимальным значением, равным 512. Причины выбора таких значений обсуждаются в разделе «Как это работает: выход микрофона» ниже. Правильно собрать блок может быть сложной задачей, особенно когда дело касается математики. К счастью, редактор Blocks позволяет свободно перемещать блоки, поэтому если они оказываются в неподходящем месте, вы можете просто перетащить их туда, где они должны находиться. Более подробно о конструировании программ в редакторе Blocks рассказывается в главе 1.

MicroPython Версия программы на MicroPython немного сложнее. В MicroPython нет встроенной функции для отображения гистограммы, поэтому нам придется написать ее. Блок plot bar graph of (построить гистограмму) обеспечивает плавное изменение уровня громкости на светодиодном дисплее, несмотря на быстро меняющуюся громкость звука. Чтобы добиться того же в программе на MicroPython, я определяю наибольший уровень громкости звука по 10 замерам. from microbit import * def sound_level(): max_level = 0 for i in range(0, 10): sound_level = (pin0.read_analog() – 511) / 100 if sound_level > max_level: max_level = sound_level return max_level

80

ГлАВА 2

def bargraph(a): display.clear() for y in range(0, 5): if a > y: for x in range(0, 5): display.set_pixel(x, 4–y, 9) while True: bargraph(sound_level()) sleep(10)

Функция sound_level использует цикл for, чтобы получить 10 замеров уровня громкости звука. Каждый замер (так же как в программе на Blocks) – это значение аналогового сигнала минус 511. Однако, чтобы определить, сколько рядов светодиодов следует зажечь для этого уровня громкости, полученное значение делится на 100. Затем функция сравнивает получившийся уровень громкости в переменной sound_level со значением в переменной max_level, и если он больше, в max_level записывается значение из sound_level. После 10 замеров самый большой из них окажется в max_level, и это значение будет возвращено функцией. Функция bargraph принимает значение для отображения. Чем больше значение, тем больше светодиодов будет включено. Входное значение должно быть в диапазоне от 0 до 4. Но даже если оно окажется больше 4, то ничего страшного не произойдет, просто функция включит все ряды светодиодов. Функция перебирает ряды светодиодов один за другим, и если значение a окажется больше номера ряда y, то внутренний цикл for включит все светодиоды в этом ряду. В главном цикле while остается только вызвать функцию bargraph и передать ей уровень громкости звука, возвращаемый функцией sound_level.

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

МИР зВукА

81

Рис. 2.10. Пример сигнала на выходе микрофона Как видите, слева на графике, до появления шума, напряжение на выходе микрофона составляет примерно 1,5 В. Когда появляется шум, напряжение начинает колебаться, потому что микрофон улавливает волны давления звука. Напряжению 1,5 В в micro:bit соответствует значение 511 аналогового сигнала. Вот почему мы вычитаем 511 из замера перед отображением на светодиодном дисплее; если этого не сделать, то половина светодиодов будет гореть при полной тишине.

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

82

ГлАВА 2

3 ДА БУДЕТ СВЕТ

В

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

ЭКСПЕРИМЕНТ 3: ДАТЧИК ОСВЕЩЕННОСТИ Давайте посмотрим, как с помощью micro:bit измерить уровень освещенности. Освоив этот прием, вы сможете создавать всевозможные проекты, где требуется измерять освещенность, включая автоматический ночник и гитару, управляемую светом, которые вы найдете далее в данной главе. Создатели micro:bit были очень дальновидны, предусмотрев возможность измерения уровня освещенности с помощью светодиодов. Я объясню принцип работы в разделе «Как это работает» ниже.

Что понадобится Для этого эксперимента вам понадобится только сама плата micro:bit и USB-кабель.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 3: Sensing Light (Эксперимент 3: датчик освещенности). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Напомню, что все эксперименты и проекты в этой главе написаны только на языке Blocks, поэтому в репозитории нет программ на MicroPython для этой главы. 2. После загрузки программы в micro:bit на светодиодном дисплее должно появиться число от 0 до 9, соответствующее текущему уровню освещенности. Попробуйте изменить освещенность, накрыв micro:bit рукой или включив дополнительное освещение, и посмотрите, как изменится число.

84

ГлАВА 3

Программа Вот как выглядит программа для этого эксперимента в редакторе Blocks.

Блок light level (уровень освещенности) читает показания датчика освещенности на плате micro:bit, который возвращает число в диапазоне от 0 до 255. Однако числа, содержащие больше одной цифры, на светодиодном дисплее отображаются как бегущая строка, что очень неудобно, поэтому я решил разделить это число на 26, чтобы результат всегда был меньше 10. После отображения уровня освещенности на светодиодном дисплее программа приостанавливается на полсекунды, чтобы дать вам время прочитать число. Если этого не сделать, то при изменении уровня освещенности цифры будут сменяться слишком быстро.

Как это работает В micro:bit нет специального датчика освещенности. Вместо этого используется остроумный трюк, основанный на измерении уровня освещенности на светодиодном дисплее, подробное описание которого можно найти по адресу https://lancaster-university.github.io/microbit-docs/extras/light-sensing/.

ПРОЕКТ: АВТОМАТИЧЕСКИЙ НОЧНИК Сложность: легкая Наш неугомонный ученый боится темноты, хотя и не любит в этом признаваться. Поэтому мы с вами разработаем проект, ДА буДЕт СВЕт

85

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

Этот простой проект основан на эксперименте 3. Он точно так же будет определять уровень освещенности и с наступлением темноты включать все светодиоды на дисплее micro:bit.

Что понадобится Для этого проекта вам понадобится только плата micro:bit. Поскольку светодиодный дисплей на плате micro:bit должен будет оставаться включенным в течение длительного времени, для этого проекта лучше использовать внешний источник питания с разъемом USB или Monk Makes Power для micro:bit (см. раздел «Питание micro:bit» в приложении). Батареи слишком быстро разряжаются.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Automatic Night­Light (Автоматический ночник). Когда откроется страница с программой, щелкните на 86

ГлАВА 3

кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. 2. После загрузки программы в micro:bit закройте плату рукой от света – и светодиодный дисплей должен загореться. Уберите руку, и дисплей должен погаснуть.

Программа Вот как выглядит программа для этого проекта в редакторе Blocks.

ДА буДЕт СВЕт

87

Здесь используются два блока if (если). Первый проверяет, упал ли уровень освещенности ниже 10, то есть наступила ли темнота. Если это условие выполняется, то программа включает все светодиоды, запуская блок show leds (показать светодиоды), который включает все светодиоды на дисплее. Второй блок if (если) выключает светодиоды, если уровень освещенности поднимется выше 50. Промежуток между двумя уровнями, 10 и 50, необходим, чтобы светодиоды не мигали при приближении уровня освещенности к тому или другому значению. На техническом языке такой промежуток между уровнями включения/выключения называют гистерезисом.

ПРОЕКТ: СВЕТОВАЯ ГИТАРА Сложность: средняя Теперь займемся созданием гитары, которая управляется светом! Эта гитара будет воспроизводить разные ноты в такт движениям руки над светодиодным дисплеем. На YouTube есть короткий видеоролик, демонстрирующий работу этого проекта (https://www.youtube.com/watch?v=OFUYxIYCXQs). Я рекомендую закрепить плату micro:bit, динамик и аккумулятор на картонном основании, своей формой напоминающем гитару. Неугомонный ученый не очень хороший художник, поэтому сходство картонного основания с гитарой (рис. 3.1) весьма условное.

Рис. 3.1. Плата micro:bit в роли музыкального инструмента 88

ГлАВА 3

Провода, соединяющие micro:bit с динамиком, проложены с обратной стороны, чтобы не портить внешний вид.

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к динамику; ►► батарейный блок 3 В для питания micro:bit и динамика (хорошо, если батарейный блок будет с выключателем); ►► динамик для micro:bit, через который будут воспроизводиться ноты (вы можете использовать динамик Monk Makes Speaker или другие устройства для воспроизведения звука, описанные в главе 2); ►► офисный пластилин Blu-Tack или двусторонний скотч для крепления micro:bit и динамика к картонному основанию; ►► лист картона, чтобы вырезать из него основание в форме гитары (подойдет картонная коробка); ►► клей для бумаги (ПВА или любой другой клей) для приклеивания бумажного шаблона к картону; ►► лист бумаги с нарисованным контуром гитары (необязательно); вы можете нарисовать свою гитару на листе бумаги или прямо на листе картона; ►► ножницы, чтобы вырезать гитару из картона.

Конструирование Прежде чем закреплять micro:bit на картонном основании, желательно сначала загрузить и протестировать программу. Именно так мы и поступим. 1. Подключите динамик к micro:bit с помощью трех проводов и зажимов «крокодил», как показано на рис. 3.2. Старайтесь выбирать провода определенного цвета для соединений: черный – для GND, красный – для 3V и любой другой цвет – для подключения аудиовхода динамика к контакту 0 на micro:bit. ДА буДЕт СВЕт

89

Рис. 3.2. Подключение динамика к плате micro:bit 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Light Guitar (Световая гитара). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. 3. После загрузки программы устройство micro:bit должно начать воспроизводить некоторый тон. Попробуйте приблизить ладонь к светодиодному дисплею, чтобы затенить его, – тон должен измениться. Если тон изменяется не в очень большом диапазоне, то попробуйте отрегулировать чувствительность (как это сделать, описывается в разделе «Программа» ниже). 4. Выключите питание micro:bit. По адресу https://github.com/simonmonk/mbms/ вы найдете папку с именем other downloads, в которой находится рисунок гитары в форматах PDF, PNG и SVG. Вы можете напечатать на принтере этот шаблон в форме гитары или нарисовать свой. 5. Приклейте лист бумаги с рисунком гитары к картону, как показано на рис. 3.3.

90

ГлАВА 3

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

Рис. 3.4. Вырежите ножницами контур гитары 7. Используя маленькие шарики офисного пластилина, закрепите динамик и плату micro:bit на картонном корпусе гитары так, чтобы края с контактами оказались над пря-

ДА буДЕт СВЕт

91

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

Рис. 3.5. Закрепите плату micro:bit, динамик и батарейный блок на корпусе гитары После закрепления всех компонентов гитара должна выглядеть, как показано на рис. 3.6.

Рис. 3.6. Плата micro:bit, динамик и батарейный блок, закрепленные на корпусе гитары 8. Переверните гитару и подсоедините micro:bit к динамику, как показано на рис. 3.7. Чтобы вспомнить, какие контакты нужно соединить, вернитесь к рис. 3.2. 92

ГлАВА 3

Рис. 3.7. Соединение micro:bit с динамиком 9. Подключите разъем батарейного блока к micro:bit. А теперь можно оторваться!

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

ДА буДЕт СВЕт

93

В блок on start (при начале) включаются блоки, которые должны сработать только в момент включения micro:bit. В нашем случае эти блоки создают массив нот. Массив – это не одно, а целый список значений. Мы используем массив, чтобы получить список из восьми возможных нот. При разном уровне освещенности программа будет воспроизводить разные ноты. Первый блок внутри блока on start (при начале) создает новый массив с именем notes, который изначально содержит только ноту Middle C (Средняя C). Блоки add value (добавить значение), следующие ниже, добавляют в массив еще семь нот, то есть в конечном итоге в массив будут помещены все восемь нот.

94

ГлАВА 3

Блоки внутри блока forever (постоянно) будут работать непрерывно. Эти блоки получают уровень освещенности, а затем на основе этого уровня выбирают ноту для воспроизведения. Первым выполняется блок light level (уровень освещенности) который определяет текущий уровень освещенности и делит его на 25. Если в ваших условиях гитара не воспроизводит все восемь нот, то попробуйте отрегулировать чувствительность, немного уменьшив это число 25. Первый блок set to (задать для) формирует конкретное значение (номер ноты) для переменной note number. Поскольку номер ноты – это уровень освещенности, деленный на 25, то в результате получится значение от 1 до 10. Но при максимальном уровне освещенности получится число 10, что вызовет проблемы. Обращаясь к элементам в массиве, вы должны указать порядковый номер (позицию) нужного элемента. Последний элемент в нашем массиве имеет порядковый номер 7 (восемь нот пронумерованы от 0 до 7). Наша гитара, как предполагается, будет использоваться в помещении, где довольно мало света. Однако если помещение ярко освещено, то первый блок set to (задать для) может получить номер ноты 10, которой нет в массиве. Чтобы убедиться, что номер ноты не превысил максимально допустимое значение, далее следует блок if (если), который сравнивает номер ноты (переменную note number) с числом 7. Если номер ноты оказался больше 7, то следующий блок set to (задать для) присваивает переменной note number число 7 – проблема решена. Блок play tone (проиграть тон) извлекает из массива элемент с порядковым номером note number и воспроизводит соответствующую ноту в течение 1/8 доли.

ПРОЕКТ: БЕСКОНЕЧНЫЕ ОТРАЖЕНИЯ Это, казалось бы, волшебное зеркало (рис. 3.8) гарантированно произведет впечатление на гостей неугомонного ученого. Зеркало в небольшой рамке для картины выглядит намного глубже, чем есть на самом деле.

ДА буДЕт СВЕт

95

Рис. 3.8. Бесконечное зеркало на основе micro:bit В этом проекте плата micro:bit будет управлять лентой с 30 светодиодами, смонтированной в рамке для картины, а по обе стороны мы поместим отражающую пленку, чтобы создавать интересные световые эффекты. На YouTube есть короткий видеоролик, демонстрирующий работу этого проекта (https://www.youtube.com/watch?v=-4Ud47OkIyY). ПРИМЕЧАНИЕ Это довольно сложный проект, потому что отражающую пленку трудно натянуть на рамку без морщин и складок. Однако если вам это удастся, то эффект оправдает все сложности!

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► светодиодная лента длиной 0,5 м с адресуемыми светодиодами (NeoPixels), например самоклеющаяся светодиодная лента WS2812B RGB 5050 SMD Strip длиной 0,5 метра; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к светодиодной ленте; 96

ГлАВА 3

►► блок питания Monk Makes Power для micro:bit для питания платы micro:bit и светодиодной ленты. Имейте в виду, что обычный аккумуляторный блок питания с разъемом USB не обеспечит достаточного тока для этого проекта, а батарейный блок AAA обеспечит достаточно энергии, только если батареи совсем свежие; ►► отдельный блок питания постоянного тока на 6 В для питания светодиодов. Блок питания должен иметь на конце штекер постоянного тока (см. раздел «Питание micro:bit» в приложении); ►► глубокая рамка для картины с размерами 18×13 см; ниже мы еще поговорим о рамке. Вам понадобится рамка с пластиковым вкладышем; ►► два листа 18×13 см;

светоотражающей

оконной

пленки

►► канцелярский нож, чтобы разрезать светоотражающую пленку и проделать прорезь в рамке для проводов, идущих к светодиодной ленте; ►► мыльная вода для очистки стекла и крепления пленки; ►► линейка или пластиковая карта для разглаживания пленки; ►► клейкая лента для удаления защитной пленки с отражающей поверхности. Найдите рамку с размерами 18×13 см с вкладышем для крепления фотографий размером 15×10 см. Важно, чтобы рамка была достаточно глубокой, поэтому ищите рамку, похожую на изображенную на рис. 3.9. Я использовал рамку глубиной 3 см. Кроме того, рамка должна быть со стеклом. За стеклом должен иметься пластиковый вкладыш (на который мы наклеим светодиодную ленту), а за ним – задняя стенка. Светоотражающая пленка отражает свет, поэтому действует как зеркало. Обычно эта пленка продается в больших рулонах и клеится на окна здания. К счастью для нас, продавцы этой пленки часто предлагают небольшие демонстрационные образцы, которых вполне достаточно для наших нужд. Проще всего найти пленку в интернете. Поищите на eBay или Amazon, введя фразу «серебристая светоотражающая оконная пленка», ДА буДЕт СВЕт

97

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

(b)

Рис. 3.9. Глубокая рамка для создания бесконечного зеркала: (a) вид спереди, (b) вид сзади со снятой задней стенкой Вам понадобятся два листа пленки с размерами не менее 18×13 см, но я советую приобрести еще несколько запасных листов пленки; закрепить пленку на стекле для рамки и удалить пузыри – дело непростое, поэтому неплохо иметь несколько запасных листов на случай, если первые попытки окончатся неудачей. Найти адресуемые светодиодные ленты легче всего на eBay, но они также продаются на таких сайтах, как Adafruit и SparkFun. Ищите ленту по названию «WS2812B RGB 5050 LED Strip». Вам нужна лента с плотностью 60 светодиодов на метр. Для этого проекта достаточно полметра такой ленты с 30 светодиодами. Светодиодные ленты бывают двух видов: водостойкие (для наружного использования) и с самоклеящейся основой. Вам нужна самоклеящаяся лента.

Конструирование После того как вы соберете все материалы и инструменты, останется только закрепить на рамке светодиодную ленту и отражающую пленку. Когда мы запрограммируем светодиоды, свет будет отражаться между пленками, создавая иллюзию глубины. 1. Прежде чем приступить к сборке, желательно убедиться, что светодиодная лента работает с micro:bit. Для проверки подключите светодиодную ленту к micro:bit тремя проводами с зажимами «крокодил». 98

ГлАВА 3

Обратите внимание, что ленту можно также подключить с помощью специального разъема и проводов, на одном конце которых находится зажим «крокодил», а на другом – игольчатый штекер. Также подключите блок питания постоянного тока и Monk Makes Power для micro:bit, как показано на рис. 3.10.

Рис. 3.10. Проверка совместимости светодиодной ленты с micro:bit Штекеры на проводах с зажимами «крокодил» включите в трехконтактный разъем светодиодной ленты. Ваша светодиодная лента может иметь провода другого цвета, чем те, что показаны на рис. 3.10, поэтому обязательно посмотрите, какие провода к каким контактам на ленте припаяны. Один провод будет подписан как GND; подключите его к контакту GND на плате micro:bit. Второй провод будет подписан как 5V; подключите его к контакту 3V на плате micro:bit. Последнее соединение, в середине, будет иметь маркировку DIN (расшифровывается как Data In – цифровой вход) или стрелку, указывающую на светодиод. Подключите его к контакту 0 на плате micro:bit. 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Magic Mirror (Волшебное зеркало). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный ДА буДЕт СВЕт

99

файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_03_Magic_ Mirror.py. 3. После загрузки программы в micro:bit вы должны увидеть, как светодиоды мигают в случайном порядке. На рис. 3.11 показано, как выглядит бесконечное зеркало, собранное из рамки для картины. Лицевая сторона

Прорезь для проводов

Светодиодная лента

Лицевое стекло

Светоотражающая пленка Пластиковый вкладыш Светоотражающая пленка Задняя стенка

Рис. 3.11. Конструкция бесконечно глубокого зеркала Далее описывается, как собрать эту конструкцию. 4. Разберите рамку и выньте пластиковый вкладыш. С помощью канцелярского ножа осторожно сделайте прорезь в одном из его углов, как показано на рис. 3.12, через которую мы проложим провода к светодиодной ленте. ВНИМАНИЕ! Канцелярские ножи могут быть очень острыми, поэтому будьте осторожны или попросите помощи у взрослых.

100

ГлАВА 3

Рис. 3.12. Вырезание паза для проводов в пластиковом вкладыше 5. Не снимая защитную пленку, уложите светодиодную ленту по краю пластикового вкладыша. Если лента окажется недостаточно длинной, то можете проложить ее, срезав углы, как показано на рис. 3.13. Закончив примерку, снимите защитную пленку и закрепите светодиодную ленту на внутренней стороне вкладыша.

Рис. 3.13. Укладка светодиодной ленты в пластиковом вкладыше 6. Отложите вкладыш в сторону. Следующий наш шаг – наклеивание светоотражающей пленки на стекло. Осторожно

ДА буДЕт СВЕт

101

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

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

102

ГлАВА 3

Рис. 3.15. Удаление пузырей между пленкой и стеклом 7. Дайте пленке высохнуть, выждав час. Затем переверните стекло и с помощью канцелярского ножа обрежьте пленку по размеру стекла (рис. 3.16).

Рис. 3.16. Обрезка пленки по размеру стекла

ДА буДЕт СВЕт

103

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

Рис. 3.17. Обрезка пленки по размеру задней стенки рамки 9. Теперь соберите рамку. Вставьте стекло в раму стороной, на которую наклеена пленка, внутрь. Это защитит пленку и улучшит внешний вид конструкции (рис. 3.18a). Если в вашей рамке предусмотрен дополнительный картонный бордюр, позволяющий вставлять в рамку фотографии меньшего размера, то можете вставить его после стекла. Затем вставьте пластиковый вкладыш так, чтобы кабель вышел через один из углов (рис. 3.18b). Если вдоль стенок вкладыша имеется широкий выступ для поддержки фотографии, то вставляйте вкладыш так, чтобы этим выступом он был обращен к стеклу.

104

ГлАВА 3

Наконец, установите заднюю стенку так, чтобы кабель вышел через один из углов (рис. 3.18c). Закрепите ее на месте и переверните готовую рамку (рис. 3.18d). (a)

(c)

(b)

(d)

Рис. 3.18. Сборка рамки 10. Подключите micro:bit к блоку питания – и ваше волшебное зеркало должно ожить.

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

ДА буДЕт СВЕт

105

Blocks Вот как выглядит программа в редакторе Blocks.

При использовании адресуемых светодиодов (в программе на языке Blocks они называются NeoPixel) необходимо в блоке on start (при начале) присвоить блок NeoPixel at переменной, которую я назвал leds. Кроме того, в блоке NeoPixel at следует указать номер контакта, который будет использоваться для управления светодиодами. В данном случае предполагается использовать контакт P0. Затем нужно указать количество светодиодов на ленте, в нашем случае – 30. И наконец, нужно также определить, как NeoPixel будет определять цвета. В данном случае используется стандартный формат RGB. Для кода, который должен выполняться постоянно, в программе снова используется блок forever (постоянно). В блоке for­ ever (постоянно) сначала генерируется случайное число от 0 до 29 с помощью блока pick random (выбрать случайно) и присваивается переменной led. Так выбирается один из светодиодов. Затем генерируются еще три случайных числа (от 0 до 255), определяющих значения каналов красного, зеленого и синего цветов, из которых формируется значение цвета и присваивается переменной color. Блок show обновляет цвет светодиодов на ленте с учетом только что внесенных изменений. Попробуйте поэкспериментировать с кодом, меняя цвета светодиодов. 106

ГлАВА 3

MicroPython Вот версия программы на MicroPython: from microbit import * import neopixel, random leds = neopixel.NeoPixel(pin0, 30) while True: led = random.randint(0, 29) color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) leds[led] = color leds.show() sleep(5)

Эта программа действует почти так же, как версия на языке Blocks. Обратите внимание, что в программе на MicroPython необходимо импортировать библиотеки neopixel и random, чтобы получить доступ к светодиодной ленте и генерировать случайные числа. Далее с помощью библиотеки neopixel необходимо определить параметры светодиодной ленты – номер контакта, к которому она подключена (в данном случае 0), и количество светодиодов (в данном случае 30). Это делается с помощью команды leds = neopixel.NeoPixel (pin0, 30). Затем цикл while выполняет ту же работу, что и блок forever в версии на языке Blocks, выбирая случайный светодиод и устанавливая для него случайный цвет.

Как это работает На рис. 3.19 показано, как работает бесконечное зеркало. Свет от светодиодов распространяется во всех направлениях (A на рис. 3.19). Часть этого света направляется вверх, к стеклу, покрывающему рамку. Зеркальная пленка отражает часть (но не весь) этого света в сторону задней стенки, которая также покрыта зеркальной пленкой (B). Остальной свет выходит за стекло (С), и некоторая его часть попадает на сетчатку глаза наблюдателя. ДА буДЕт СВЕт

107

C Лицевое стекло D A B

Светоотражающая пленка на задней стенке

Рис. 3.19. Свет многократно отражается от двух листов светоотражающей пленки, создавая эффект бесконечных отражений Часть света, упавшего на заднюю стенку (B), снова отражается в сторону стекла (D). Часть этого света точно так же выходит за стекло и попадет на сетчатку глаза наблюдателя, а остальная часть отразится еще раз. Именно это многократное отражение света создает иллюзию бесконечной последовательности светодиодов, исчезающей в зеркале.

ИТОГИ В этой главе вы узнали, как с помощью micro:bit измерить освещенность и зажечь свет. В главе 4 мы обратим наше внимание на магнетизм.

108

ГлАВА 3

4 ВОЛШЕБНЫЙ МАГНЕТИЗМ

К

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

ПРОЕКТ: КОМПАС Сложность: легкая В этом проекте, изображенном на рис. 4.1, мы используем встроенный магнитометр, имеющийся на плате micro:bit, в роли компаса и будем на светодиодном дисплее показывать стрелку, указывающую на магнитный север. Магнитный север

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

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► батарейный блок 3 В для питания micro:bit. Чтобы сконструировать компас, нужна только плата micro:bit, но если вы планируете попробовать использовать этот компас на открытой местности, то вам также понадобится батарейный блок.

110

ГлАВА 4

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Compass (Компас). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_04_Compass.py. 2. После загрузки программы в micro:bit появится сообщение, приглашающее вас переместить плату micro:bit в том или ином направлении. Это сообщение автоматически выводится сразу после прошивки любой программы, использующей магнитометр. Цель этого действия – откалибровать магнитометр. Микросхема магнитометра на плате micro:bit чувствительна к локальным изменениям магнитного поля. Перемещая магнитометр в разных направлениях, вы помогаете его внутреннему программному обеспечению компенсировать локальные искажения магнитного поля Земли. Именно поВОлшЕбНый МАГНЕтИзМ

111

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

Рис. 4.2. Калибровка магнитометра на плате micro:bit 3. Чтобы использовать плату как компас, подключите батарейный блок к плате micro:bit и вынесите ее на улицу, подальше от таких предметов, как компьютеры и бытовая техника. Держите micro:bit горизонтально ровно. Если стрелка указывает вправо или влево, медленно поворачивайте в указанном направлении, пока стрелка не будет указывать прямо вперед. Когда это произойдет, вы окажетесь лицом к магнитному северу. Если не получается найти север, попробуйте откалибровать компас еще раз, нажав кнопку A. 112

ГлАВА 4

Программа Программы на обоих языках, Blocks и MicroPython, построены по одному шаблону. Сначала программа измеряет направление, или пеленг (направление, куда направлена плата micro:bit), а затем определяет, какую из трех стрелок (север, запад или восток) показать на светодиодном дисплее, чтобы помочь пользователю повернуться в правильном направлении.

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

Программа в этом проекте предусматривает запуск калибровки магнитометра нажатием кнопки A. Блок calibrate compass (калибровать компас) находится внутри блока on button A pressed (кнопка A нажата). Блок calibrate compass (калибровать компас) отображает точку на светодиодном дисплее, как при калибровке магнитометра, о которой расВОлшЕбНый МАГНЕтИзМ

113

сказывалось выше. Вы можете «покатать» ее по дисплею, как мы делали это в начале проекта. В блоке forever (постоянно) программа читает значение com­ pass heading (компасный курс) – градусы от 0 до 359 – и записывает его в переменную heading. Затем следует большой блок if (если), включающий условия if (если), else if (иначе если) и else (иначе). Этот блок проверяет направление ориентации micro:bit и отображает стрелку на светодиодном дисплее, показывающую, в какую сторону повернуть, чтобы встать лицом к северу. Если вы набираете эту программу самостоятельно, то обратите внимание, что в разделе Logic (Логика) в редакторе Blocks явно присутствует только два типа блоков if (если): if then (если то) и if then else (если то иначе). Чтобы добавить раздел else if (иначе если) в блок if then else (если то иначе), щелкните на значке +, обведенном красной окружностью на рис. 4.3.

Рис. 4.3. Добавление еще одного раздела в блок if (если) Первое условие: строка в большом блоке if (если) проверяет, находится ли направление в диапазоне от 10° до 180° (0° – это точное направление на север). То есть если направление от 10° до 180°. Это означает, что вы смотрите на восток. В этом случае micro:bit покажет стрелку, указывающую влево (на запад), подсказывая, что вы должны повернуться влево, чтобы встать лицом к северу. Иначе, если направление не находится в диапазоне от 10° до 180°, то раздел else if (иначе если) проверяет, находится ли направление в диапазоне между 180° и 350°. Если это условие выполняется, то micro:bit покажет стрелку, указывающую вправо (на восток), подсказывая, что вы должны повернуться вправо. 114

ГлАВА 4

Если направление находится в диапазоне между 10° и 350°, то третья часть блока if (если) покажет стрелку, указывающую прямо (на север), подсказывая, что вы на правильном пути! На рис. 4.4 показано, как это работает (числа – возможные значения направления). Север 350° 0° 10°

Запад

Восток

180°

Рис. 4.4. Стрелка показывает, в каком направлении нужно повернуться, чтобы встать лицом к северу

MicroPython Вот версия программы на MicroPython: from microbit import * while True: heading = compass.heading() if heading > 10 and heading < 180: display.show(Image.ARROW_W) elif heading >= 180 and heading < 350: display.show(Image.ARROW_E) else: display.show(Image.ARROW_N) if button_a.was_pressed(): compass.calibrate()

ВОлшЕбНый МАГНЕтИзМ

115

Эта программа реализует ту же логику, что и программа на языке Blocks: она читает показания магнитометра и, опираясь на них, выбирает, какую стрелку показать. Если направление находится между 10° и 180°, то отображается стрелка влево (на запад); если направление находится между 180° и 350°, то отображается стрелка вправо (на восток); и если направление находится между 350° и 10°, то отображается стрелка, указывающая прямо (на север), подсказывающая, что вы можете продолжать движение в том же направлении.

Что можно попробовать Посмотрите, можно ли с помощью магнита помешать компасу определить правильное направление на север.

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

Линии напряженности магнитного поля

Северный полюс

Южный полюс

Рис. 4.5. Магнитное поле Земли Чтобы определить направление, магнитометр micro:bit измеряет напряженность магнитного поля Земли.

116

ГлАВА 4

Интересно отметить, что магнитные полюса не совпадают с осью вращения Земного шара. Разница между направлениями на географический и магнитный северные полюсы может доходить до 20°, в зависимости от вашего местоположения. Еще один интересный факт: магнитные полюса постоянно перемещаются со скоростью около 6 миль (10 км) в год. Однажды полюса полностью поменяются местами, а это значит, что магнитный север окажется на южном географическом полюсе. Это происходит на Земле примерно каждые 450 000 лет.

ЭКСПЕРИМЕНТ 4: ИЗМЕРЕНИЕ МАГНИТНЫХ ПОЛЕЙ Сложность: средняя Как вы могли убедиться сами, реализовав предыдущий проект, встроенный магнитометр micro:bit достаточно чувствителен, чтобы его можно было использовать в роли компаса и с его помощью определять направление на север. Однако он также может служить отличным инструментом для измерения силы магнита, находящегося поблизости. В этом эксперименте (показанном на рис. 4.6) мы измерим напряженность магнитного поля на разных расстояниях от магнита.

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► сильный неодимовый магнит; ►► линейка (желательно с миллиметровой разметкой). На eBay можно найти магниты самых разных форм и размеров. Как показано на рис. 4.6, я сам использовал магнит в форме цилиндра с диаметром 10 мм, но вы можете использовать неодимовый магнит любой другой формы с близкими размерами. Обратите внимание, что на одну из сторон магнита я приклеил кусочек скотча и написал на нем букву N. Зачем это сделано, я расскажу чуть позже.

ВОлшЕбНый МАГНЕтИзМ

117

Рис. 4.6. Неодимовый магнит, используемый в эксперименте 4 ВНИМАНИЕ! Неодимовые магниты очень сильные, поэтому будьте осторожны при обращении с ними. Если два магнита примагнитятся друг к другу, их будет сложно разделить.

Конструирование Программа постоянно отображает на светодиодном дисплее бегущую строку с числом. Это число представляет общую напряженность магнитного поля, измеренную магнитометром. В ходе эксперимента мы попробуем измерить напряженность поля на разных расстояниях от магнита. 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 4: Magnetic Fields (Эксперимент 4: измерение магнитных полей). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого эксперимента называется Experiment_04.py. 118

ГлАВА 4

2. Положите цилиндрик магнита набок на плоскую поверхность. Неодимовый магнит настолько силен, что если положить его набок, он повернется вдоль линий магнитного поля Земли (обратившись одной плоской стороной на север), как стрелка компаса. Когда магнит повернется, приклейте отрезок скотча на сторону, обращенную к северу. (Можете использовать проект «Компас», описанный выше в этой главе, чтобы определить направление на север.) 3. Положите рядом линейку так, чтобы отметка 0 см указывала на север, а отметка 30 см – на юг, как показано на рис. 4.7. Линейка поможет следить за неизменностью ориентации магнита, чтобы влияние магнитного поля Земли оставалось постоянным.

Север

Рис. 4.7. Положите линейку, сориентировав ее в направлении север–юг, чтобы следить за неизменностью ориентации магнита 4. Передвиньте магнит, расположив его рядом с отметкой 1 см на линейке. Убедитесь, что северной стороной он обращен к micro:bit. Расположите плату micro:bit так, чтобы она была обращена стороной с контактами к югу, и совместите ВОлшЕбНый МАГНЕтИзМ

119

ее край с отметкой 0 см. Запишите показания, отображаемые на светодиодном дисплее, в следующей таблице в строке, соответствующей расстоянию 1 см. Единица измерения напряженности магнитного поля называется тесла. Поле с напряженностью в 1 тесла очень и очень сильное, поэтому показания micro:bit выражаются в миллионных долях тесла – микротеслах (мкТл, или μT) Расстояние от micro:bit до магнита (см) Напряженность магнитного поля (мкТл) 1

_________________________________________________

2

_________________________________________________

3

_________________________________________________

4

_________________________________________________

5

_________________________________________________

6

_________________________________________________

7

_________________________________________________

8

_________________________________________________

9

_________________________________________________

10

_________________________________________________

5. Переместите магнит к отметке 2 см на линейке. Прочитайте и запишите в таблицу новое число, отображаемое на светодиодном дисплее, в соответствующую строку. Повторите этот процесс для всех значений до 10 см. Обратите внимание, что по мере удаления магнита от micro:bit напряженность поля быстро уменьшается. 6. Закончив снимать показания, попробуйте построить график с результатами. На вертикальной оси (оси Y) откладывайте напряженность поля в мкТл, а на горизонтальной оси (оси X) – расстояние от магнита до micro:bit в сантиметрах. График можно нарисовать вручную на бумаге, или, если хотите, создайте копию таблицы Google Sheets на основе моей таблицы, а затем замените мои показания своими. Ссылку на эту таблицу вы найдете на https://github.com/ simonmonk/mbms/. Откройте эту ссылку и в меню электронной таблицы выберите File (Файл) > Make a Copy (Создать

120

ГлАВА 4

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

Рис. 4.8. График с результатами измерений Мы обсудим эти результаты в разделе «Как это работает: сила магнитов» ниже.

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

ВОлшЕбНый МАГНЕтИзМ

121

Blocks Вот как выглядит программа для этого эксперимента в редакторе Blocks.

Блок show number (показать число), находящийся внутри блока forever (постоянно), выводит значение, полученное блоком magnetic force (сила магнитного поля). Блок magnetic force (сила магнитного поля) имеет четыре варианта, которые можно увидеть в раскрывающемся меню этого блока. Выбирая тот или иной вариант, можно получить напряженность поля по оси X, Y либо Z или суммарное значение напряженности по всем трем осям. Мы будем использовать суммарное значение, которому соответствует вариант strength (сила) в раскрывающемся меню.

MicroPython Вот версия программы на MicroPython: from microbit import * while True: display.scroll(str(int(compass.get_field_strength() / 1300)))

Функция get_field_strength в MicroPython читает показания с магнитометра micro:bit. В отличие от блока magnetic force (сила магнитного поля) в языке Blocks, код на MicroPython не задает единицы измерения для функции, но известно, что возвращаемое ею значение примерно в 1300 раз превышает величину, возвращаемую блоком magnetic force (сила магнитного поля). Поэтому программа на MicroPython делит полученное число на 1300 и затем преобразует результат в целое число с помощью функции int. 122

ГлАВА 4

Функция str используется для преобразования числа в текстовую строку, чтобы функция scroll могла отобразить его на светодиодном дисплее micro:bit.

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

Как это работает: сила магнитов График на рис. 4.8 показывает, что с удалением магнита от micro:bit напряженность магнитного поля сначала падает очень быстро, а затем скорость падения постепенно уменьшается. Фактически зависимость между напряженностью магнитного поля и расстоянием от магнита выражается так называемым правилом обратных квадратов. То есть напряженность поля обратно пропорциональна квадрату расстояния до магнита. Это означает, что когда расстояние между магнитом и micro:bit увеличивается вдвое, напряженность поля уменьшается вчетверо. Напряженность магнитного поля Земли при измерении на ее поверхности составляет от 25 до 65 мкТл. Измеряя напряженность магнитного поля в отсутствие магнита поблизости, вы должны получать показания в этом диапазоне. Даже сверхсильный неодимовый магнит, используемый в этом эксперименте, имеет напряженность поля всего несколько сотен мкТл на расстоянии нескольких сантиметров. Магниты, которые используются, чтобы заглянуть внутрь человеческого тела во время сеанса магнитно-резонансной томографии (МРТ), создают напряженность поля (там, где лежит человек) от 0,5 до 1,5 Тл. Это в несколько тысяч раз больше, чем у неодимового магнита. Вот почему необходимо снимать с себя любые металлические предметы перед процедурой МРТ!

ВОлшЕбНый МАГНЕтИзМ

123

ПРОЕКТ: МАГНИТНАЯ СИГНАЛИЗАЦИЯ ОТКРЫВАНИЯ ДВЕРИ Сложность: средняя

Рис. 4.9. Магнитная сигнализация открывания двери

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

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к динамику (желательно, чтобы провода были длиной не меньше 15 см); ►► адаптер питания от USB или батарейный блок 3 В для питания micro:bit и динамика; в приложении (в конце книги) вы найдете еще несколько способов питания вашего устройства micro:bit; ►► офисный пластилин Blu-Tack или двусторонний скотч для крепления micro:bit и динамика к дверной коробке и магнита к двери; 124

ГлАВА 4

►► динамик, вы можете использовать любой способ воспроизведения звука из описанных в главе 2; здесь я использую динамик Monk Makes Speaker, созданный специально для micro:bit; ►► неодимовый магнит, можно взять тот же магнит, что использовался в эксперименте 4.

Конструирование Прежде чем монтировать детали на двери, нужно немного поэкспериментировать, чтобы определить, какая напряженность магнитного поля соответствует закрытой двери. Также необходимо предварительно откалибровать магнитометр. 1. Подключите динамик к micro:bit с помощью трех проводов и зажимов «крокодил», как показано на рис. 4.9. Желательно подобрать цвет проводов: черный для подключения к контакту GND, красный – к контакту 3V и любой другой цвет – к контакту 0, через который будет передаваться аудиосигнал. Использование проводов разного цвета поможет вам ничего не перепутать. Динамик следует разместить на расстоянии не менее 15 см от micro:bit, потому что в динамиках имеются сильные магниты, которые могут влиять на работу магнитометра micro:bit. 2. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Magnetic Alarm (Магнитная сигнализация). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_04_Magnetic_Alarm.py. 3. Загрузив программу в micro:bit, приблизьте магнит к micro:bit, динамик должен замолчать. Затем отодвиньте ВОлшЕбНый МАГНЕтИзМ

125

магнит на расстояние нескольких сантиметров – должен зазвучать сигнал. Закончив отладку программы, отключите micro:bit от компьютера и подключите к адаптеру питания USB или батарейному блоку. Затем закрепите micro:bit и динамик на дверной коробке. Прикрепите магнит к двери на расстоянии 2 см от micro:bit. ВНИМАНИЕ! Приклеивая детали конструкции на офисный пластилин, вы можете запачкать и испортить стены, поэтому обязательно спросите разрешение, если это необходимо. Чтобы использовать адаптер питания USB, недалеко от двери должна находиться электрическая розетка, чтобы хватило длины проводов адаптера питания USB.

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

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks. 126

ГлАВА 4

Эта программа просто сравнивает напряженность магнитного поля, полученную от магнитометра, с пороговым значением 100 мкТл, и если она окажется меньше порога, то воспроизводит определенную ноту в течение 4 долей. Поскольку напряженность магнитного поля Земли у поверхности находится в диапазоне от 25 до 65 мкТл, выбор порогового значения, равного 100 мкТл, гарантирует, что рядом с платой действительно присутствует магнит.

MicroPython Вот версия программы на MicroPython: from microbit import * import music while True: if compass.get_field_strength() < 160000: music.pitch(523, 1000)

Программа на MicroPython работает точно так же, как программа на языке Blocks, но, так как единицы измерения get_ field_strength отличаются от единиц измерения блока magnetic force (сила магнитного поля), величина порога срабатывания сигнализации отличается от величины в версии программы на Blocks. В документации не указывается явно, в каких единицах измеряется значение, возвращаемое функцией get_field_ strength (https://microbit-micropython.readthedocs.io/en/latest/compass. html), поэтому, действуя методом проб и ошибок, я выбрал пороговое значение 160 000. Команде music.pitch передается частота воспроизводимой ноты. В отличие от программы на Blocks, здесь требуется укаВОлшЕбНый МАГНЕтИзМ

127

зать частоту звуковой волны, а не ноту. Частота 523 герца (Гц) соответствует ноте «до» верхней октавы. Команда music. pitch также требует указать продолжительность воспроизведения ноты. Здесь мы потребовали проигрывать ноту в течение 1000 мс, или 1 секунды.

Что можно попробовать Сможет ли вор обмануть нашу сигнализацию? Попробуйте поднести к micro:bit второй магнит с другой стороны дверной коробки. Если поднести его достаточно близко к micro:bit, то вы сможете открыть дверь, не вызвав срабатывания сигнализации. Также, если хотите, можете попробовать изменить тон сигнала, выбрав другую частоту. В следующей таблице перечислены некоторые ноты и соответствующие им частоты (с точностью до целого числа). Нота «До» средней октавы «Ре» «Ми» «Фа» «Соль» «Ля» «Си» «До» верхней октавы

Частота (Гц) 262 294 330 349 392 440 494 523

Полную таблицу музыкальных нот и их частот можно найти по адресу: https://www.liutaiomottola.com/formulae/freqtab.htm1.

ИТОГИ Магнитометр, имеющийся на плате micro:bit, можно использовать не только для определения направления на север. В этой главе мы увидели, как с его помощью определить присутствие магнита, и даже провели некоторые научные исследования, измеряя напряженность магнитного поля. В следующей главе мы рассмотрим еще один из встроенных датчиков micro:bit – акселерометр. 1

128

А также в Википедии: https://ru.wikipedia.org/wiki/Октавная_система. – Прим. перев.

ГлАВА 4

5 УДИВИТЕЛЬНОЕ УСКОРЕНИЕ

А

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

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

ЭКСПЕРИМЕНТ 5: ЖЕСТЫ Программное обеспечение micro:bit позволяет распознавать жесты, поэтому можно запрограммировать определенную реакцию на разные движения, такие как наклон или встряхивание, которые улавливаются акселерометром. В этом разделе мы запрограммируем плату micro:bit так, чтобы она отображала улыбающийся смайлик при каждом встряхивании. Далее в этой главе вы узнаете, как обрабатывать исходные данные, поступающие прямо из микросхемы акселерометра, чтобы измерить ускорение. 130

ГлАВА 5

Что понадобится Для проведения эксперимента вам понадобится только плата micro:bit.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 5: Gestures (Эксперимент 5: жесты). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого эксперимента называется Experiment_05.py. 2. Загрузив программу в micro:bit, встряхните плату, и на светодиодном дисплее должен появиться улыбающийся смайлик.

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

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

уДИВИтЕльНОЕ уСкОРЕНИЕ

131

Жесты, определяемые по изменению ускорения, доступные в языке Blocks, реализованы в виде событий, как и нажатие кнопок. Программа начинается с блока on (по жесту). Щелкните на кнопке с треугольником внутри этого блока, чтобы открыть раскрывающееся меню со списком возможных жестов, как показано на рис. 5.1, и выберите жест shake (встряхивание).

Рис. 5.1. Выбор из списка жестов

Жесты Жест shake (встряхивание) определяется по любому энергичному встряхиванию платы micro:bit. Два других жеста, logo up (логотип вверх) и logo down (логотип вниз), определяются по повороту платы micro:bit вертикально логотипом вверх или вниз соответственно. Под логотипом в данном случае подразумевается значок, нарисованный на плате micro:bit, рядом с разъемом USB. Жесты screen up (экран вверх) и screen down (экран вниз) определяются по повороту платы micro:bit горизонтально светодиодным дисплеем вверх или вниз соответственно. Например, повернув плату горизонтально светодиодным дисплеем вниз, вы активируете событие screen down (экран вниз). Жесты tilt left (наклон влево) и tilt right (наклон вправо) определяются при наклоне платы micro:bit влево или вправо более чем на 60° (примерно). Чтобы вызвать эти события, плату нужно наклонить довольно сильно. 132

ГлАВА 5

Последние четыре жеста определяются по общей силе, действующей на акселерометр, независимо от направления ее приложения. Например, если micro:bit находится в свободном падении, то это ее состояние будет определено как жест free fall (свободное падение). Жесты 3g, 6g и 8g определяются по величине силы, действующей на акселерометр, измеряемой в единицах перегрузки g (где g – ускорение свободного падения). Например, с помощью этих жестов можно определить легкий удар пальцем по плате micro:bit. Легкий удар сдвинет плату micro:bit совсем ненамного, поэтому вы могли бы подумать, что действующая сила не так велика, но на самом деле легкое постукивание по плате может вызывать довольно большие перегрузки.

MicroPython Вот версия программы на MicroPython: from microbit import * while True: if accelerometer.was_gesture('shake'): display.show(Image.HAPPY) sleep(500) display.clear()

Большая часть кода в этой программе уже знакома вам. Сначала программа импортирует библиотеку microbit, а затем запускает цикл while True, чтобы обеспечить непрерывную работу основного кода. Внутри цикла программа проверяет, обнаружился ли жест встряхивания, и если да, то показывает улыбающийся смайлик! Поскольку в MicroPython нет понятия «события», для определения жеста приходится вызывать функцию was_gesture внутри цикла while. Вместо жеста 'shake' также можно использовать 'up' (жест «логотип вверх»), 'down' (жест «логотип вниз»), 'left' (жест «наклон влево»), 'right' (жест «наклон вправо»), 'face up' уДИВИтЕльНОЕ уСкОРЕНИЕ

133

(жест «экран вверх»), 'face down' (жест «экран вниз»), 'freefall' (жест «свободное падение»), '3g', '6g' или '8g'.

Что можно попробовать Попробуйте добавить в программу из эксперимента 5 определение других жестов. Для каждого жеста можно, например, показывать свой смайлик. В главе 10 мы еще вернемся к функции распознавания жестов и с ее помощью будем управлять роботом-вездеходом!

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

Пружина

A В

Грузик (массой m)

Сила (F)

Рис. 5.2. Устройство акселерометра на плате micro:bit

Представьте себе крошечный грузик с массой m, закрепленный на пружине. (На рис. 5.2 этот грузик изображен в виде шара, но, вообще говоря, ее форма не имеет значения.) Обычно грузик находится в положении A, но если приложить к нему некоторую силу (например, силу тяжести), он переместится 134

ГлАВА 5

в другое положение, обозначенное на рис. 5.2 буквой B. Чем больше сила, тем больше расстояние между A и B. Измеряя это расстояние, акселерометр вычисляет силу, воздействующую на грузик. Глядя на рис. 5.2, можно заметить, что одна только сила тяжести будет тянуть грузик вниз. Но чем сильнее растягивается пружина, тем сильнее она тянет массу в направлении, противоположном силе тяжести. То есть сила тяжести, приложенная к грузику и направленная вниз, растягивает пружину, которая в свою очередь сопротивляется и прикладывает силу упругости, направленную вверх. Когда две силы, действующие в противоположных направлениях, уравновешивают друг друга, расстояние между B и A может служить мерой силы гравитации, действующей на micro:bit. Чем больше расстояние между A и B, тем больше сила, действующая на грузик. Как вы наверняка помните, перегрузка прямо связана с ускорением силы тяжести. Ускорение – это скорость увеличения скорости. Иначе говоря, если уронить плату micro:bit с высокого здания, то она будет падать с ускорением g, где g – это величина, на которую будет увеличиваться скорость падения micro:bit каждую секунду. Если уронить micro:bit с высокого здания в вакууме, где нет сопротивления воздуха, замедляющего падение, то каждую секунду скорость micro:bit будет увеличиваться примерно на 9,8 м/с. То есть если начальная скорость была нулевой (в момент, пока вы еще не разжали пальцы), а затем вы отпустили плату и она падала в течение 10 с, то к этому моменту она достигнет скорости 98 м/с (около 353 км/ч). Кроме того, когда плата micro:bit коснется земли после падения со скоростью 353 км/ч, она, вероятно, разлетится вдребезги. Однако если уронить micro:bit в вакууме, то акселерометр покажет 0, даже притом что плата явно ускоряется со скоростью 9,8 м/с за секунду. Объясняется это тем, что на самом деле акселерометр не измеряет ускорение. Как показано на рис. 5.3, он измеряет силу, действующую на грузик внутри микросхемы. Эта сила равна нулю, если грузик и пружина ускоряются с одинаковой скоростью, что и происходит в действительности, потому что и грузик, и пружина находятся внутри одной микросхемы на плате micro:bit. уДИВИтЕльНОЕ уСкОРЕНИЕ

135

Если бы вы находились в космосе, вдали от небесных тел, оказывающих гравитационное воздействие, то ускорение было бы равно силе, действующей на объект, деленной на массу объекта. Поскольку масса всегда постоянна, акселерометр может определить ускорение, когда на него воздействует некоторая сила. На самом деле микросхема акселерометра устроена намного сложнее, чем показано на рис. 5.2. В ней есть три устройства для измерения сил, действующих в трех направлениях под прямым углом друг к другу. Иначе говоря, микросхема измеряет действующую на него силу в трех измерениях – X, Y и Z, – как показано на рис. 5.3. Z Y

X

Горизонтальное положение X = 0, Y = 0, Z = –1024 (г)

Наклон вперед X = 0, Y = 300, Z = –950

Рис. 5.3. Акселерометр на плате micro:bit измеряет действующую на него силу в трех измерениях Если бы плата micro:bit лежала горизонтально на столе (как на рис. 5.3 слева), то ось X была бы направлена слева направо, ось Y – в направлении от вас, а ось Z – снизу вверх. Таким образом, если положить плату micro:bit горизонтально на стол, то сила тяжести будет воздействовать только вдоль оси Z (сверху вниз), а по осям X и Y никакие силы воздействовать не будут. Теперь, если немного наклонить micro:bit вперед, то некоторая доля силы гравитации будет действовать вдоль оси Y, поэтому значение Y больше не будет равно 0. Это также означает, что сила гравитации, воздействующая вдоль оси Z, немного уменьшится и, соответственно, уменьшится значение Z. 136

ГлАВА 5

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

ЭКСПЕРИМЕНТ 6: ПОСТРОЕНИЕ ГРАФИКА УСКОРЕНИЯ В РЕАЛЬНОМ ВРЕМЕНИ В редакторе Mu есть отличная функция, с помощью которой можно оперативно отображать данные, поступающие с платы micro:bit. В этом эксперименте мы используем функцию Plotter (Плоттер), чтобы увидеть, как изменяются силы, воздействующие на плату micro:bit при ее перемещении. ПРИМЕЧАНИЕ На момент написания этих строк функция Plotter (Плоттер) была доступна только в версиях редактора Mu для Windows и Mac. В этом эксперименте я покажу, как получить общую суммарную величину ускорения, а также ускорение по каждой из осей X, Y и Z.

Что понадобится Для данного эксперимента вам понадобится только плата micro:bit, подключенная к компьютеру с помощью кабеля USB.

Конструирование 1. В этом эксперименте используется функция редактора Mu, которая называется Plotter (Плоттер). Эта функция доступна только для программ на Python, поэтому здесь не будет программы на языке Blocks. Программу можно найти по адресу https://github.com/simonmonk/mbms/. Файл с программой на Python для этого эксперимента называется Experiment_06.py. Прошейте эту программу в плату micro:bit. 2. Щелкните на значке Plotter (Плоттер) в панели инструментов редактора Mu, чтобы открыть плоттер, как показано на рис. 5.4. Если вам интересно будет видеть исходные дануДИВИтЕльНОЕ уСкОРЕНИЕ

137

ные, на основе которых Mu строит графики, то щелкните на кнопке REPL.

Рис. 5.4. Вывод графика изменения сил, воздействующих на акселерометр 3. Наклоните плату micro:bit так, чтобы увидеть, как изменятся графики. Как можно заметить на рис. 5.4, всего выводится четыре графика, каждый своим цветом. Для каждой оси отображается один график (синий для X, зеленый для Y и оранжевый для Z). Есть также фиолетовый график, отражающий сумму сил, воздействующих на плату, которая складывается из сил, воздействующих во всех трех направлениях. Как вычислить сумму сил, я расскажу в разделе «Как это работает: расчет суммарного ускорения» ниже. Если у вас в области REPL не отображаются данные, то возможно, что вы пользуетесь платой micro:bit со старой версией программного обеспечения, которое необходимо обновить. В этом случае выполните инструкции на странице https://support.microbit.org/support/solutions/articles/19000019131-how-to-up138

ГлАВА 5

grade-the-firmware-on-the-micro-bit/, чтобы обновить программное обеспечение на своем устройстве.

Программа Вот программа на Python, которая посылает данные из акселерометра в редактор Mu: from microbit import * from math import sqrt while True: x, y, z = accelerometer.get_values() net = sqrt(x*x + y*y + z*z) all = (x, y, z, net) print(all) sleep(100)

Программа, как обычно, импортирует библиотеку microbit. Затем она импортирует функцию квадратного корня sqrt из библиотеки math. Эта функция будет использоваться для вычисления суммарного ускорения. Далее следует цикл while, в котором программа получает показания акселерометра сразу по трем осям X, Y и Z, используя метод get_values. Этот метод возвращает кортеж – структуру данных, способную хранить несколько значений. Этот кортеж присваивается трем переменным: x, y и z. Когда кортеж присваивается сразу нескольким переменным, как в этой программе, в переменные записываются отдельные элементы кортежа, которые выбираются по порядку. То есть переменные x, y и z в этой программе получат три значения – каждая свое. Эти переменные используются для вычисления величины суммарного ускорения, которая записывается в переменную net. Далее суммарное ускорение вместе с ускорениями по осям X, Y и Z пересылается в редактор Mu, который, в свою очередь, строит график. Редактор Mu ожидает получить значения в форме кортежа, поэтому перед отправкой данных программа создает новый кортеж all, содержащий все четыре значения. уДИВИтЕльНОЕ уСкОРЕНИЕ

139

Затем программа печатает кортеж командой print(all), которая не только выводит значения в окне REPL редактора Mu (мы уже обсуждали это окно в разделе «REPL» в главе 1), но также передает их в функцию Plotter (Плоттер). Эти значения можно увидеть в нижнем левом углу на рис. 5.6.

Как это работает: расчет суммарного ускорения Для вычисления суммарного ускорения на основе ускорений по осям X, Y и Z используется древнегреческая технология, которая называется теоремой Пифагора. Чтобы понять ее суть, изобразим силу, порождающую ускорение, в виде линии со стрелкой на конце. Стрелка указывает направление силы, а длина линии – величину силы. Подобные линии называются векторами и часто используются в физике. Вам будет проще понять операции с векторами, если использовать двумерное представление. На рис. 5.5 показаны некоторые двумерные векторы в системе координат с осями X и Y. Синий вектор, лежащий на оси X, соответствует силе со значением 4, а зеленый вектор, лежащий на оси Y, соответствует силе со значением 3. Сумма

Y

3

5

4

3 X

Рис. 5.5. Двумерные векторы Пурпурный вектор соответствует суммарному влиянию сил зеленого и синего векторов и является суммарным вектором, вычисленным нашей программой. Длина суммарного вектора соответствует сумме приложенных сил, а вычислить ее можно с помощью теоремы Пифагора. Теорема Пифагора гласит, что в прямоугольном треугольнике (треугольнике с прямым углом) квадрат гипотенузы (самая длинная сторона) равен сумме квадратов катетов (двух других сторон). 140

ГлАВА 5

Глядя на рис. 5.5, можно заметить, что у нас действительно имеется прямоугольный треугольник, потому что синий и зеленый векторы образуют прямой угол. Согласно теореме Пифагора можно сказать, что квадрат длины фиолетового вектора равен 32 + 42, то есть 9 + 16 = 25. Соответственно, длина фиолетового вектора равна квадратному корню из 25, то есть 5. То же верно для трех и любого другого количества измерений. Чтобы найти длину суммарного вектора по имеющимся векторам X, Y и Z, нужно извлечь квадратный корень из суммы квадратов этих трех векторов. На рис. 5.6 показаны три силы в трехмерной системе координат с осями X, Y и Z, действующие в определенный момент времени. Y 3 4 2 Z

X

5,4 Сумма

Рис. 5.6. Силы, действующие в трехмерном пространстве Вот строка в программе, которая вычисляет длину суммарного вектора по имеющимся векторам X, Y и Z: net = sqrt(x*x + y*y + z*z)

Значения x, y и z находятся в элементах a[0], a[1] и a[2] кортежа, возвращаемого командой accelerometer.get_values(). Если предположить, что векторы X, Y и Z имеют длины 4, 3 и 2, как показано на рис. 5.6, то квадрат длины суммарного вектора будет вычислен так: 4 × 4 + 3 × 3 + 2 × 2 = 16 + 9 + 4 = 29. То есть длина суммарного вектора равна корню квадратному из 29, или примерно 5,4. уДИВИтЕльНОЕ уСкОРЕНИЕ

141

ПРОЕКТ: ДЕТЕКТОР ТЩАТЕЛЬНОСТИ ЧИСТКИ ЗУБОВ Сложность: легкая Проснувшись утром, наш неугомонный ученый так спешит заняться увлекательнейшими экспериментами, что чистит зубы на скорую руку. Мы должны помочь ему следить за тщательностью этой процедуры. С этой целью мы используем micro:bit и создадим детектор тщательности чистки зубов для зубной щетки (рис. 5.7), который будет подсчитывать количество движений.

Рис. 5.7. Детектор тщательности чистки зубов Детектор тщательности чистки зубов отображает на светодиодном дисплее оценку от 0 до 9. Он увеличивает оценку на 1 за каждые 50 движений зубной щеткой. Досчитав до 10, он отобразит улыбающийся смайлик, чтобы показать неугомонному ученому, что чистка зубов выполнена достаточно тщательно. ВНИМАНИЕ! Не допускайте попадания воды на плату micro:bit – она может перегореть!

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► батарейный блок 3 В для питания micro:bit (хорошо, если батарейный блок будет с выключателем); ►► обычная зубная щетка (не электрическая); 142

ГлАВА 5

►► 2 резинки для закрепления платы micro:bit и батарейного блока на щетке. Этот проект предполагает использование самой обычной зубной щетки. Электрические зубные щетки не подойдут.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Toothbrushing Monitor (Детектор тщательности чистки зубов). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_05_Toothbrush_Monitor.py. 2. Подключите батарейный блок к micro:bit и с помощью резинок закрепите плату с батарейным блоком на зубной щетке, как показано на рис. 5.7. Закрепляя плату резинками, убедитесь, что они не перекрывают светодиодный дисплей и не затрудняют доступ к выключателю на батарейном блоке. Также резинки не должны накладываться на кнопку сброса на обратной стороне платы micro:bit. 3. Включите питание. После этого на светодиодном дисплее должна появиться цифра 0. Сымитируйте энергичные движения щеткой, как при чистке зубов, и через некоторое время на дисплее должна появиться цифра 1.

Программа Программы для этого проекта измеряют ускорение и, когда оно превышает определенный порог, прибавляют 1 к переменной count, хранящей количество движений щеткой. Когда количество движений станет достаточно большим, чтобы его можно было квалифицировать как еще один балл к оценке качества чистки зубов, оценка увеличивается и отображается на дисплее. уДИВИтЕльНОЕ уСкОРЕНИЕ

143

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

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

Это, пожалуй, самая сложная программа из всех, что мы видели до сих пор. Блок on start (при начале) определяет четыре переменные. Вот для чего они предназначены: ►► strokes per point хранит количество движений щеткой, необходимое для увеличения оценки на 1. Если вы ленитесь чистить зубы, то можете уменьшить это число, чтобы оценка увеличивалась быстрее и вы быстрее могли достичь улыбающегося смайлика. Но имейте в виду, что в таком случае ваш следующий визит к стоматологу может оказаться неприятным; 144

ГлАВА 5

►► score – число, которое увеличивается на 1 через каждые 50 движений щеткой, пока не достигнет 10; ►► count используется для подсчета движений, выполненных с момента получения следующей оценки. Счет начинается с 0 и сбрасывается каждый раз, когда увеличивается оценка score; ►► old mg хранит значение ускорения, когда последний раз было определено движение щеткой. Программа сравнивает это значение с новым значением, чтобы различать разные движения щеткой. Блок forever (постоянно) начинается с последовательности блоков set XX to (установить для XX). В первом блоке выбрана переменная mg, в которую помещается суммарное ускорение. В раскрывающемся меню в блоке acceleration (mg) (ускорение (в тысячных долях g)) выбран пункт strength (сила), который автоматически вычисляется по теореме Пифагора. (В программе на MicroPython суммарное ускорение вам придется рассчитать самостоятельно.) Второй блок, set change in mg (установить для change in mg), вычисляет изменение силы ускорения, вычитая текущую силу из предыдущей (которая хранится в old mg). Если разность получилась больше 800, что указывает на движение щеткой, то переменная count увеличивается на 1. Значение 800 было выбрано опытным путем: взгляните на рис. 5.8, на котором изображен график изменения суммарного ускорения в процессе интенсивной чистки зубов.

Рис. 5.8. График изменения суммарного ускорения в процессе чистки зубов

уДИВИтЕльНОЕ уСкОРЕНИЕ

145

Каждый пик на графике представляет одно движение щеткой – максимальное суммарное ускорение, возникающее при изменении направления движения щетки. Значение 800 позволяет правильно распознать большинство движений, которые нередко дают разность ускорений около 1000. Если вы чистите зубы довольно осторожно, вам может потребоваться уменьшить этот порог, иначе вы рискуете никогда не добраться до улыбающегося смайлика. Первый блок if (если) определяет, достаточно ли велико ускорение, чтобы его можно было считать движением щетки, а внутри него находится второй блок if (если), который проверяет значение счетчика count. Если его значение превысило установленное число движений (strokes per point), которое необходимо произвести, чтобы повысить оценку на один балл, то программа прибавляет 1 к оценке score и отображает новое значение. В конце программа проверяет, превысила ли оценка число 9, и если да, то отображает смайлик.

MicroPython Вот версия программы на MicroPython: from microbit import * from math import sqrt strokes_per_point = 50 old_mg = 0 count = 0 change_in_mg = 0 score = 0 mg = 0 display.show(str(score)) while True: x, y, z = accelerometer.get_values() mg = sqrt(x*x + y*y + z*z) change_in_mg = mg – old_mg old_mg = mg if change_in_mg > 800: count += 1 if count > strokes_per_point: score += 1 display.show(str(score))

146

ГлАВА 5

count = 0 if score > 9: display.show(Image.HAPPY)

Программа на MicroPython почти в точности копирует программу на Blocks, за исключением вычисления суммарного ускорения вручную. Это связано с тем, что в MicroPython нет встроенной функции для этого.

Что можно попробовать Можно попробовать использовать этот проект в качестве шагомера – устройства, которое подсчитывает количество шагов при ходьбе или беге. Для этого попробуйте упростить программу, избавившись от переменной score, потому что в этом случае вас будет интересовать только количество шагов (эквивалентных движениям щетки при чистке зубов). Программа должна подсчитывать шаги, а затем, когда будет нажата кнопка A, отображать количество шагов на светодиодном дисплее. Для проверки закрепите плату с батарейным блоком на лодыжке (но прежде открепите зубную щетку) и пройдитесь, считая шаги в уме. Затем посмотрите, сколько шагов насчитал шагомер. Если измерения неточные, то попробуйте изменить порог ускорения, который сейчас равен 800, чтобы сделать шагомер более или менее чувствительным.

ЭКСПЕРИМЕНТ 7: ЗАПИСЬ ДАННЫХ ОБ УСКОРЕНИИ В ФАЙЛ Плоттер – инструмент для построения графиков в Mu – отлично подходит для случаев, когда есть возможность подключить micro:bit к компьютеру с помощью USB-кабеля. Однако иногда нашему неугомонному ученому требуется записать показания в память micro:bit, чтобы потом извлечь их и проанализировать в спокойной обстановке. В этом эксперименте мы попробуем записать показания акселерометра в память micro:bit. Это позволит выполнить разуДИВИтЕльНОЕ уСкОРЕНИЕ

147

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

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

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► батарейный блок 3 В.

Конструирование 1. В этом эксперименте используется локальная файловая система micro:bit, которая на момент написания этих строк была недоступна для программ на языке Blocks. То есть для проведения данного эксперимента вам придется использовать программу на Python. Загрузите программу из репозитория с примерами для этой книги (https://github.com/simonmonk/ mbms/). Файл с программой для данного эксперимента называется Experiment_07.py. Загрузите программу в micro:bit. 2. После включения питания micro:bit на светодиодном дисплее появится изображение крестика X. Это означает, что в данный момент плата ничего не записывает. Когда вы нажмете кнопку A, на светодиодном дисплее появится галочка, 148

ГлАВА 5

и micro:bit начнет запись. Когда вы повторно нажмете кнопку A, запись остановится, и показания акселерометра будут сохранены в файл, который можно выгрузить на компьютер. Для проверки нажмите кнопку A, помахайте платой и снова нажмите кнопку A. 3. Чтобы выгрузить файл с показаниями на компьютер, запустите редактор Mu, подключите micro:bit к компьютеру с помощью USB-кабеля и щелкните на кнопке Files (Файлы) в панели инструментов Mu (рис. 5.9). В нижней части окна редактора появятся две колонки. Слева будут перечислены файлы, хранящиеся в памяти платы micro:bit, а справа – файлы в каталоге mu_code в вашем домашнем каталоге. На рис. 5.9 в левой колонке можно видеть только один файл, data.txt.

Рис. 5.9. Вид редактора Mu после щелчка на кнопке Files (Файлы) Чтобы скопировать файл из micro:bit, просто перетащите его мышкой из левой колонки в правую. Так же как в эксперименте 6, описанном выше в этой главе, если кнопка Files (Файлы) не работает, то возможно, что вы пользуетесь платой micro:bit со старой версией программного обеспечения, которое необходимо обновить. В этом случае выполните инструкции на странице https:// support.microbit.org/support/solutions/articles/19000019131-howуДИВИтЕльНОЕ уСкОРЕНИЕ

149

to-upgrade-the-firmware-on-the-micro-bit/, чтобы обновить программное обеспечение на своем устройстве. 4. После переноса данных из micro:bit в компьютер можно построить график, импортировав файл в электронную таблицу, например Excel или Google Sheets. Процедура для разных электронных таблиц немного отличается. Я покажу, как использовать электронную таблицу Google Sheets, поскольку она предлагается бесплатно. От вас требуется только выполнить вход в свою учетную запись Google. Откройте в браузере страницу https://docs.google.com/spreadsheets/ и в области Start a new spreadsheet (Создать таблицу) выберите вариант Blank (Пустой файл). Затем в меню Google Sheets выберите пункт File (Файл) > Import (Импортировать). В появившемся диалоге выберите вкладку Upload (Загрузка) и найдите файл data.txt, который вы скопировали в компьютер. Данные из файла должны появиться в первом столбце электронной таблицы. Выберите столбец, щелкнув левой кнопкой на заголовке, и затем в меню Google Sheets выберите пункт Insert (Вставка) > Chart (Диаграмма), чтобы создать диаграмму, как показано на рис. 5.10.

Рис. 5.10. График, построенный на основе данных, записанных на плате micro:bit 150

ГлАВА 5

Программа Вот программы на MicroPython для этого эксперимента: from microbit import * from math import sqrt import os filename = 'data.txt' recording = False display.show(Image.NO) while True: if button_a.was_pressed(): recording = not recording if recording: display.show(Image.YES) try: os.remove(filename) except: pass fs = open(filename, 'w') else: display.show(Image.NO) fs.close() if recording: x, y, z = accelerometer.get_values() net = sqrt(x*x + y*y + z*z) fs.write(str(net)) fs.write('\n') sleep(10)

В памяти micro:bit можно сохранить лишь весьма ограниченный объем данных, поэтому программа импортирует пакет os, который позволит удалить любые данные, уже имеющиеся в памяти micro:bit. Далее определяется имя файла с данными как data.txt. Вы можете выбрать другое имя файла, изменив значение переменной filename, но я рекомендую оставить все как есть, пока вы не убедитесь, что программа работает. Затем определяется переменная recording, в которой хранится состояние программы – ведется запись или нет. В основном цикле while значение этой переменной переключается между значениями True и False, когда нажимается кнопка A, чтобы зауДИВИтЕльНОЕ уСкОРЕНИЕ

151

пустить или остановить запись данных. Именно это переключение реализует строка recording = not recording: если переменная recording хранит значение True, то эта строка заменит его значением False, и наоборот. Цикл while True выполняется бесконечно. Внутри цикла находятся два оператора if. Первый определяет действия, которые должны выполняться при нажатии кнопки A, а второй проверяет, находится ли программа в режиме записи. Когда кнопка A нажимается в первый раз, включается режим записи, и на экране отображается значок YES (галочка), а метод os.remove удаляет файл данных. Команда remove заключена в команду try: except:. Это гарантирует, что в случае появления какой-либо ошибки (в частности, если файл данных невозможно удалить, потому что его нет) программа просто проигнорирует ошибку и не прервет работу. После этого программа открывает файл в режиме w, то есть в режиме записи (от английского слова write). При повторном нажатии кнопки A на экране появится значок NO (крестик), и файл закроется. Второй блок if записывает показания акселерометра в файл, если переменная recording имеет значение True. Если программа будет слишком долго работать в режиме записи, она заполнит всю память и остановится по ошибке. Однако данные, которые она успела записать к этому моменту, останутся доступными. Команда sleep в конце цикла записи замедляет процесс записи, чтобы исчерпание памяти произошло не слишком быстро.

Что можно попробовать Этот эксперимент позволит измерить изменение ускорения в различных ситуациях. Например, можно записать ускорение micro:bit при подбрасывании платы в воздух. Если вы планируете попробовать это, то примите меры предосторожности: ►► выберите место с мягким грунтом, чтобы плата не разбилась, если вам не удастся поймать ее. Кроме того, во время подобных экспериментов батарея нередко отсоединяется или выпадает из держателя; ►► не бросайте плату туда, где она может ударить кого-нибудь по голове; 152

ГлАВА 5

►► свяжите micro:bit с батарейным блоком, например с помощью резинок; ►► поместите micro:bit в футляр. Для этого отлично подойдет футляр Kitronik MI:pro с батарейным блоком MI:power (рис. 5.11). При использовании этого футляра вам не понадобится отдельный батарейный блок, потому что в этом футляре уже имеется небольшая батарейка на 3 В.

Рис. 5.11. Футляр Kitronik MI:pro с батарейным блоком MI:power Также можно попробовать измерить ускорение, закрепив плату micro:bit на шнуре и осторожно покрутив ее. И снова, будьте осмотрительны, так как micro:bit может оторваться от шнура, разбиться или поранить кого-нибудь. Объем памяти для файлов в micro:bit весьма ограничен – всего 40 Кбайт. Поэтому предыдущие файлы могут стираться при загрузке новой программы в micro:bit.

ПРОЕКТ: АКСЕЛЕРОМЕТР Сложность: легкая Этот проект, изображенный на рис. 5.12, позволяет видеть величину ускорения на светодиодном дисплее micro:bit. Когда уДИВИтЕльНОЕ уСкОРЕНИЕ

153

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

Рис. 5.12. Плата micro:bit в роли акселерометра

Что понадобится Для этого проекта понадобится только плата micro:bit. Для большей мобильности можно добавить в конструкцию батарейный блок. Также можно использовать футляр MI:pro со встроенным батарейным блоком MI:power, показанный на рис. 5.11.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Acceleration Display (Акселерометр). Когда откроется страница с программой, щелкните на кнопке Down­ load (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. 154

ГлАВА 5

Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_05_Acceleration_Display.py. 2. Попробуйте быстро переместить micro:bit вверх и вниз и понаблюдайте, как ускорение в разных направлениях влияет на показания. Если есть такая возможность, прокатитесь с платой micro:bit в лифте и посмотрите, как меняются показания в процессе движения лифта.

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

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

уДИВИтЕльНОЕ уСкОРЕНИЕ

155

Вся программа целиком находится в блоке forever (постоянно). Сначала он читает суммарное ускорение, а затем вычисляет значение y. В данном случае переменная y хранит номер ряда на светодиодном дисплее, который должен загореться. Когда плата micro:bit неподвижна, единственная сила, действующая на нее, – это сила тяжести с величиной 1000 mg (1 g). Поэтому программа вычитает 1000 из суммарного ускорения и делит результат на 100, чтобы изменение ускорения на 1/10 g вызывало переход к следующему ряду светодиодов. К полученному результату прибавляется 2, чтобы в состоянии покоя горел ряд с номером 2 (средний ряд светодиодов, если считать с 0). Два блока if (если) используются, чтобы убедиться, что значение y не выходит за пределы диапазона от 0 до 4 (для 5 рядов светодиодов). Чтобы зажечь правильный ряд, программа сначала гасит все светодиоды на дисплее, а затем использует цикл for (для), чтобы добраться до нужного ряда и включить его.

MicroPython Вот версия программы на MicroPython: from microbit import * from math import sqrt while True: x, y, z = accelerometer.get_values() acc = sqrt(x*x + y*y + z*z) y = int(2 + (acc – 1000) / 100) display.clear() if y < 0: y = 0 if y > 4: y = 4 for x in range(0, 5): display.set_pixel(x, y, 9)

Эта программа почти в точности копирует программу на Blocks, за исключением вычисления суммарного ускорения вручную.

156

ГлАВА 5

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

уДИВИтЕльНОЕ уСкОРЕНИЕ

157

6 ВОЛШЕБСТВО ДВИЖЕНИЯ

В

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

ЭКСПЕРИМЕНТ 8: ЗАПУСК СЕРВОМОТОРА Один из способов сдвинуть что-то с места – использовать сервомотор, подобный изображенному на рис. 6.1.

Рис. 6.1. Сервомотор, подключенный к плате micro:bit Сервомотор – это небольшой маломощный электромотор с рычагом, которым можно управлять программно. В отличие от большинства других электромоторов, сервомоторы не совершают полный оборот – они поворачивают свой вал в диапазоне 180°, и ваша программа может повернуть вал сервомотора на определенный угол. В этом эксперименте вы узнаете, как подключить сервомотор к micro:bit и как управлять им.

ВОлшЕбСтВО ДВИЖЕНИя

159

Что понадобится ►► Плата micro:bit. ►► Сервомотор. Для этого эксперимента идеально подойдет сервомотор 9g. Плата micro:bit обладает достаточной мощностью, чтобы приводить в действие небольшой сервомотор, но справиться с полноразмерным сервомотором ей будет сложно. Выбирайте сервомотор с напряжением питания 3 В (более подробно о выборе сервомотора рассказывается в приложении в конце книги). ►► Провода зажимами типа «крокодил» для подключения сервомотора к micro:bit (также можно использовать провода только с разъемами, как рассказывается ниже). ►► USB-кабель для подключения к компьютеру, блок питания Monk Makes Power для micro:bit или блок аккумуляторов с разъемом USB; также можно использовать батарейный блок AAA (в зависимости от мощности сервомотора), но батарейки AAA могут не обеспечивать достаточную силу тока для сервомотора. В приложении (в конце книги) вы найдете еще несколько способов питания вашего устройства micro:bit. Вместо проводов с зажимами типа «крокодил» можно использовать более распространенные соединительные провода с разъемами на одном конце и зажимами «крокодил» на другом конце. Такие провода можно включить в разъем сервомотора и подключить зажимом «крокодил» к плате micro:bit. Однако при этом вы должны убедиться в надежности соединений. В любом случае соединительные провода с разъемами на одном конце и зажимами «крокодил» на другом конце полезно иметь в комплекте с micro:bit, так что их стоит приобрести.

Конструирование Подключите сервомотор к micro:bit. 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 8: Servomotors (Эксперимент 8: сервомоторы). Когда откроется страница с программой, 160

ГлАВА 6

щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется Experiment_08.py. 2. В комплект сервомотора обычно входит несколько типов рычагов, которые можно закрепить на зубчатом вале двигателя. Для этого эксперимента выберите простой рычаг, изображенный на рис. 6.1. ПРИМЕЧАНИЕ В комплект сервомотора должен входить маленький винт для более прочного крепления рычага к валу. Если вы планируете создать аниматронную голову, проект которой описывается далее в этой главе, приготовьте такой винт или отложите его, чтобы не потерять и иметь возможность использовать его в будущем. 3. Подключите сервомотор к плате micro:bit с проводами, как показано на рис. 6.2.

Рис. 6.2. Подключение сервомотора к плате micro:bit ВОлшЕбСтВО ДВИЖЕНИя

161

4. Сервомотор имеет три контакта, различающихся цветовой маркировкой: управление: оранжевый или желтый провод (этот контакт служит для передачи управляющих воздействий, изменяющих положение рычага сервомотора); +V: красный провод – провод питания. В большинстве своем сервомоторы питаются напряжением 5 В, но многие из них также будут работать с напряжением питания 3 В; GND: коричневый, иногда черный провод (земля). 5. После включения питания рычаг сервомотора должен повернуться в положение под углом 90°, перпендикулярно корпусу сервомотора. Плата micro:bit будет использовать это положение в качестве ориентира. Если рычаг не повернулся на угол 90°, то снимите его и снова наденьте на вал, как показано на рис. 6.1. Если вы планируете создать аниматронную голову, проект которой описывается далее в этой главе, то зафиксируйте рычаг на валу винтом. 6. Теперь у вас есть действующий сервомотор! Если теперь нажать кнопку A, то рычаг сервомотора должен повернуться на 10° в одном из направлений. Нажатие кнопки B должно повернуть рычаг на 10° в обратном направлении. Если нажать сразу обе кнопки, то величина текущего угла рычага должна появиться на светодиодном дисплее micro:bit.

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

Blocks Вот как выглядит программа для этого эксперимента в редакторе Blocks.

162

ГлАВА 6

Для запоминания текущего угла поворота программа использует переменную angle. Эта переменная объявляется в блоке on start (при начале), где ей присваивается начальное значение 90. Когда вслед за этим выполняется следующий блок write pin (записать в контакт), сервомотор поворачивает рычаг в положение, соответствующее углу, величина которого хранится в переменной angle, то есть 90°. Если нажать кнопку A, выполнится блок button A pressed (кнопка A нажата). Если нажать кнопку B, выполнится блок button B pressed (кнопка B нажата). Оба блока действуют похожим образом. Блок button A pressed (кнопка A нажата) сначала сравнивает переменную angle с числом 10, и если она больше или равна, то вычитает из нее 10, чтобы переместить рычаг ВОлшЕбСтВО ДВИЖЕНИя

163

в одном направлении. Блок button B pressed (кнопка B нажата) сравнивает переменную angle с числом 170, и если она меньше или равна 170, то прибавляет к ней 10, чтобы переместить рычаг в другом направлении. Оба блока используют вложенный блок servo write pin (сервопривод: записать в контакт), чтобы повернуть сервомотор на новый угол.

MicroPython Вот версия программы на MicroPython: from microbit import * def set_servo_angle(pin, angle): duty = 26 + (angle * 51) / 90 pin.write_analog(duty) angle = 90 set_servo_angle(pin2, angle) while True: if button_a.was_pressed() and angle >= 10: angle –= 10 set_servo_angle(pin2, angle) if button_b.was_pressed() and angle 20: base_z = new_z act() if random.randint(0, 1000) == 0: act() sleep(50)

В основной части программы имеется цикл while True, который выполняет команды внутри него, пока программа не будет остановлена. Это удобно, когда нужно, чтобы программа постоянно отвечала на ваши действия. Здесь программа проверяет внезапное изменение ускорения, вызванное толчком головы. Сначала цикл регистрирует ускорение, читая показания акселерометра. Затем использует функцию abs, чтобы получить величину ускорения – в данном случае направление не важно, важна только величина ускорения. Первый оператор if проверяет, изменилось ли ускорение более чем на 20 mg. Если это так, то в переменную base записывается новое значение ускорения (это гарантирует, что в следующей итерации цикла ускорение снова изменится не менее чем на 20 mg), и вызывается act. Второй оператор if привносит некоторую случайность в реакцию аниматронной головы. Программа выбирает случайное число от 0 до 1000. Если оно равно 0 (1 шанс из 1001), то вызывается функция act. Несмотря на низкую вероятность этого события, благодаря тому что значение проверяется сотни раз в секунду, голова реагирует несколько раз в минуту.

Что можно попробовать Попробуйте для питания головы использовать аккумулятор с разъемом USB или батарейный блок AAA, чтобы отключить устройство от компьютера. Если вы хотите изменить фразы, произносимые головой, откройте программу в редакторе Mu и добавьте свои предложения в массив sentences.

184

ГлАВА 6

Библиотека speech воспроизводит речь довольно тихо и к тому же не очень внятно. Вы можете немного улучшить стуацию, подключив громкоговоритель с усилителем. Если вы решите расширить проект, взгляните на примеры здесь: https://microbit-micropython.readthedocs.io/en/latest/tutorials/ speech.html. В этих примерах библиотека speech используется для пения.

ПРОЕКТ: РОБОТ-ВЕЗДЕХОД Сложность: высокая В этом проекте мы создадим робот-вездеход. Используя приложение под названием Bitty Controller, вы сможете управлять маленьким роботом с помощью своего телефона на Android (рис. 6.21). Неугомонный ученый любит использовать вездеход, чтобы доставлять записки своим лаборантам.

Рис. 6.21. Робот-вехдеход, управляемый платой micro:bit

ВОлшЕбСтВО ДВИЖЕНИя

185

ВНИМАНИЕ! В этом проекте используется недорогой набор-конструктор шасси, но провода, которые идут в комплекте с этим конструктором, не закреплены. Это означает, что вам придется припаять провода к электромоторам. Это единственный проект в книге, требующий пайки. Пайка – несложная, но довольно опасная операция: выполняя пайку, легко обжечься. Поэтому обратитесь за помощью к взрослому, который поможет вам сделать эту часть проекта.

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► телефон на Android; ►► плата расширения Kitronik Motor Driver Board для micro:bit (V2) для управления электромоторами; ►► недорогой конструктор для сборки шасси, включает два электромотора и батарейный блок на 4 батарейки AA; ►► 4 батарейки AA; ►► приложение Bitty Controller для Android, его можно установить из Google Play Store (стоит примерно 5 долларов США); ►► разные отвертки для сборки шасси и подключения проводов к винтовым клеммам на плате контроллера мотора; ►► паяльное оборудование для припаивания проводов к электромоторам; ►► офисный пластилин Blu-Tack для крепления платы расширения и micro:bit на шасси. На eBay или Amazon можно найти недорогие конструкторы для сборки шасси робота, например как показанный на рис. 6.22. Выбирайте шасси с батарейным отсеком 4×AA и двумя электромоторами (со встроенными редукторами).

186

ГлАВА 6

Рис. 6.22. Недорогое шасси для робота

Конструирование Самая сложная часть этого проекта – сборка шасси. Для этого требуется высокая точность и немалое терпение. Как вы, наверное, понимаете, все шасси разные, поэтому вместо пошаговых инструкций по сборке я дам лишь несколько общих советов. В комплекте с шасси должна поставляться инструкция по сборке, хотя иногда такие инструкции могут быть довольно туманными. В общем случае вы должны закрепить электромоторы, поворотное колесо (колесо, которое может свободно поворачиваться в любом направлении), контроллер двигателя и плату micro:bit. 1. Припаяйте прилагаемые провода к клеммам электромоторов, как показано на рис. 6.23a–c. Для этого нанесите каплю расплавленного припоя на вывод электромотора, а затем прижмите зачищенный конец провода паяльником к этой капле (рис. 6.23a).

ВОлшЕбСтВО ДВИЖЕНИя

187

a) Припаивание первого провода к электромотору

b) Первый провод припаян

c) Оба провода припаяны к электромотору

Рис. 6.23. Припаивание проводов к электромотору 2. Не важно, к какой клемме вы припаяете красный провод. Просто убедитесь, что к обоим двигателям провода припаяны однотипно. То есть если вы припаяли красный провод к правой клемме одного двигателя, то припаяйте красный провод к правой клемме другого двигателя. 3. Удалите слой бумаги, покрывающий корпус шасси. На рис. 6.24a–e показан процесс сборки, но имейте в виду, что ваше шасси может иметь некоторые отличия.

188

ГлАВА 6

a) Крепление первого электромотора

b) Оба электромотора закреплены

c) Крепление втулок к поворотному колесу

d) Поворотное колесо закреплено на шасси

e) Собранное шасси с закрепленным батарейным отсеком

Рис. 6.24. Сборка шасси Вот несколько важных моментов, о которых следует помнить при сборке шасси: ►► не затягивайте гайки и болты слишком сильно, так как может треснуть пластмассовый корпус;

ВОлшЕбСтВО ДВИЖЕНИя

189

►► при установке электромоторов вставляйте болты так, чтобы гайки оказались внутри шасси и части болтов, выступающие за гайки, не мешали колесам; ►► если гайка не накручивается на болт, попробуйте немного повернуть болт против часовой стрелки, чтобы найти начало резьбы; поворачивая винт отверткой, можно удерживать гайку маленькими плоскогубцами. 4. После сборки шасси вставьте плату micro:bit в плату контроллера Kitronik Motor Driver, управляющую электромоторами, светодиодным дисплеем наружу, как показано на рис. 6.25. Аккуратно совместите краевой разъем micro:bit с гнездом на плате контроллера и плотно вставьте ее. После этого закрепите плату контроллера на шасси с помощью офисного пластилина (см. рис. 6.25).

Рис. 6.25. Крепление платы micro:bit в плате контроллера 5. Теперь можно подключить электромоторы к батарейному отсеку. Сначала посмотрите на рис. 6.26, где показано, как должны выглядеть соединения. Выкрутите винт на вы190

ГлАВА 6

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

Рис. 6.26. Подключение электромоторов к батарейному отсеку 6. Выполните следующие соединения: ►► красным проводом соедините клемму «+» батарейного отсека с винтовой клеммой на плате контроллера с подписью RED +; ►► черным проводом соедините клемму «­» батарейного отсека с винтовой клеммой на плате контроллера с подписью BLACK ­; ►► красный провод от левого (если смотреть с задней части шасси) электромотора подключите к винтовой клемме на плате контроллера с подписью MOTOR1 P12; ►► черный провод от левого электромотора подключите к винтовой клемме на плате контроллера с подписью MOTOR1 P8; ►► красный провод от правого электромотора подключите к винтовой клемме на плате контроллера с подписью MOTOR2 P0; ВОлшЕбСтВО ДВИЖЕНИя

191

►► черный провод от правого электромотора подключите к винтовой клемме на плате контроллера с подписью MOTOR1 P16. 7. Для управления роботом-вездеходом в этом проекте предлагается использовать приложение для Android. Программу для micro:bit вы найдете по адресу: http://www.bittysoftware.com/downloads.html#controller. Щелкните на ссылке micro:bit hex file for Kitronik Buggy ­ no pairing required и загрузите шестнадцатеричный файл. Этот файл также доступен для скачивания в папке Other Downloads. Затем подключите micro:bit к компьютеру с помощью USB-кабеля и запишите загруженный шестнадцатеричный файл в micro:bit. Батарейки пока вам не понадобятся. 8. Чтобы установить приложение на телефон Android, откройте магазин Google Play и найдите приложение Bitty Controller. За приложение придется заплатить несколько долларов. Скачайте и установите приложение. 9. Нам осталось сделать всего один шаг, чтобы опробовать проект! Вставьте четыре батарейки AA в батарейный отсек. Они будут питать электромоторы и плату micro:bit, то есть после этого вы сможете отсоединить USB-кабель и отпустить робот-вездеход в свободное путешествие. Откройте приложение Bitty Controller (рис. 6.27) на телефоне и коснитесь кнопки Scan (Сканировать). После этого приложение должно найти вашу плату micro:bit. На рис. 6.27 она обнаружена под именем BBC micro:bit [gaviv]. Коснитесь этой ссылки – и появится изображение в виде пульта радиоуправления, как показано на рис. 6.28. На светодиодном дисплее micro:bit также должна появиться буква C, обозначающая, что плата соединилась с вашим телефоном.

192

ГлАВА 6

Рис. 6.27. Приложение Bitty Controller

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

ВОлшЕбСтВО ДВИЖЕНИя

193

то поставьте робота на пол и попробуйте проехать пару метров. Если вам не нравится назначение кнопок, вы сможете выбрать более подходящую для себя раскладку в разделе Options (Параметры) приложения Bitty Controller. Робот может двигаться вперед при нажатии кнопки «назад», и наоборот. Это означает, что подключение проводов перепутано: поменяйте местами подключение красного и черного проводов на обоих двигателях. Если робот движется по кругу, то поменяйте местами подключение проводов только на одном из двигателей. Чтобы выключить робота (хороший способ продлить срок службы батарей), просто выньте один конец одной из батареек из держателя. Та-да! Теперь у вас есть грубый выключатель.

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

Против часовой стрелки

А

В

А

В

+





+

Рис. 6.29. Управление направлением вращения электромотора 194

ГлАВА 6

В контроллере Kitronik Motor Controller имеется микросхема, которая управляет направлением тока в двух двигателях. Она также обеспечивает относительно высокий ток, необходимый электромоторам.

ИТОГИ В этой главе вы узнали много нового. Сначала вы познакомились с сервомоторами и узнали, как ими управлять с помощью micro:bit. Затем мы построили два сложных проекта: аниматронную голову и дистанционно управляемый роботвездеход. Попутно вы узнали о широтно-импульсной модуляции (ШИМ) и использовали несколько простых приемов программирования. Теперь, когда вы знаете, как конструировать движущиеся устройства, можете начать задумываться о других проектах, которые хотели бы реализовать. Что бы вы хотели заставить двигаться? В следующей главе мы будем работать со временем.

ВОлшЕбСтВО ДВИЖЕНИя

195

7 ПУТЕШЕСТВИЕ ВО ВРЕМЕНИ

Н

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

ЭКСПЕРИМЕНТ 9: СЧЕТ ВРЕМЕНИ Цель этого эксперимента – создать часы на основе micro:bit, которые показывают точное время. Это означает, что мы запрограммируем micro:bit на отсчет времени с точностью до одной секунды.

Один из способов реализовать такую возможность – использовать функцию sleep, как в следующем фрагменте кода. Обратите внимание, что этот код не является полноценной программой, поэтому не пытайтесь его запустить. Команда sleep запрещает micro:bit выполнять любые действия в течение указанного периода времени. В данном случае задержка составляет 1000 мс (1 секунду). seconds = 0 while True: sleep(1000) seconds += 1

ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

197

В этом примере после каждой задержки в 1 секунду программа прибавляет 1 к переменной seconds, которая подсчитывает количество прошедших секунд. Цикл повторяется бесконечно и в течение какого-то времени может вполне правильно отсчитывать время. Проблема в том, что такие часы будут постепенно отставать, потому что программа не учитывает время, которое micro:bit тратит на выполнение операции прибавления 1 к переменной seconds. В этом примере операция сложения не займет много времени, но если программа при этом будет отображать время на светодиодном дисплее или даже произносить время голосом, что мы попробуем позже, то тогда неучтенное время может оказаться весьма существенным. Кроме того, такие неучтенные затраты времени на дополнительные операции трудно предсказать, потому что каждый раз они могут потребовать на выполнение разное время. Более удачный способ подсчета времени – использование функции running_time. Эта функция возвращает количество миллисекунд, прошедших с момента последнего сброса платы micro:bit, и не зависит от того, сколько времени требуется на выполнение других частей программы. В данном эксперименте мы используем функцию running_time и с ее помощью будем вычислять, на сколько спешат или отстают часы на micro:bit.

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► USB-кабель.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для данной книги (https://github.com/simonmonk/mbms/). Файл с программой для этого эксперимента называется Experiment_09.py. Откройте программу в редакторе Mu и прошейте ее в плату micro:bit. 198

ГлАВА 7

2. После этого нажмите кнопку B на плате micro:bit. На светодиодном дисплее должна появиться цифра, после чего micro:bit начнет отсчет секунд. 3. Запустите таймер на своем телефоне или другом устройстве, установив на нем ровно 16 минут 40 секунд. Запустите таймер и одновременно нажмите кнопку B, чтобы сбросить счетчик секунд в micro:bit. Когда таймер на телефоне сработает, нажмите кнопку A, чтобы остановить часы и записать количество секунд, отображаемых на светодиодном дисплее. Поскольку в этом эксперименте мы работаем со временем, важно запускать таймер точно в то же время, когда нажимается кнопка B, и нажимать кнопку A в момент срабатывания таймера. Вам будет проще, если ваш друг поможет вам провести этот эксперимент: один из вас может управлять таймером, а другой – платой micro:bit. Почему таймер нужно устанавливать на 16 минут 40 секунд? Потому что это 1000 секунд. Если после срабатывания таймера на светодиодном дисплее micro:bit отображается число больше 1000, это означает, что часы спешат, а если отображается число меньше 1000, это означает, что часы отстают. Когда я провел эксперимент со своей платой micro:bit, то на дисплее отображалось число 989, то есть внутренние часы моей платы micro:bit за каждые 1000 секунд отстают примерно на 11 секунд. Запишите число, отображаемое вашей платой micro:bit. Мы используем его в проектах в этой главе, чтобы повысить точность хода часов.

Программа Вот программа на MicroPython для эксперимента 9: from microbit import * seconds = 0 last_time = 0 while True: now = running_time() ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

199

elapsed_ms = now – last_time if elapsed_ms >= 1000: seconds += 1 last_time = now if button_a.was_pressed(): display.scroll(str(seconds)) if button_b.was_pressed(): seconds = 0 display.show("0") sleep(100) display.clear()

Программа использует две переменные: ►► last_time хранит время, когда программа в последний раз отсчитала очередную секунду; ►► seconds хранит количество секунд, прошедших с момента последнего нажатия кнопки сброса на плате micro:bit. Я считаю полезным думать о часах в micro:bit как об обычных тикающих часах, которые тикают через определенные промежутки времени. Основной цикл while использует функцию running_time, чтобы узнать, сколько миллисекунд проработала плата с момента последнего нажатия кнопки сброса. Полученное число сохраняется в переменной с именем now. Затем программа вычисляет, сколько миллисекунд прошло с момента последнего тиканья, вычитая last_time из now. Если количество прошедших миллисекунд больше или равно 1000, то есть больше или равно 1 секунде, то переменная seconds увеличивается на 1, и отсчет прошедших миллисекунд начинается сначала. Чтобы запрограммировать реакцию на нажатие кнопок A и B, здесь используются два оператора if. Если нажать кнопку A, то программа выведет на светодиодный дисплей количество секунд, прошедших с момента запуска программы. Если нажать кнопку B, то программа сбросит счетчик секунд в 0.

Как это работает: счет времени В процессоре micro:bit имеется кварцевый генератор (электронный компонент, используемый для точного измерения време200

ГлАВА 7

ни), точность которого должна быть выше 0,00003, то есть этот кварцевый генератор не должен убегать или отставать больше, чем на 30 секунд за миллион (то есть больше, чем на 30 секунд за 11,5 дня). Однако в моей плате micro:bit его точность по какой-то причине оказалась ниже и составила 0,011, или 11 000 секунд за миллион. Чтобы получить по-настоящему точные часы, вам понадобится специальный чип часов реального времени RTC (Real Time Clock) и отдельный кварцевый генератор. На момент написания этой книги еще не существовало чипов RTC специально для micro:bit. Другие чипы RTC теоретически можно подключить к micro:bit, но это довольно сложный процесс. Поэтому, вероятно, лучше не слишком полагаться ни на какие из часов, которые мы создадим в этой главе, однако эти проекты довольно забавные и научат вас важным навыкам.

ПРОЕКТ: ДВОИЧНЫЕ ЧАСЫ Сложность: легкая В этом проекте, показанном на рис. 7.1, мы сконструируем часы, которые показывают время в двоичном формате. Двоичная система счисления используется в компьютерах. Более подробно о ней я расскажу в разделе «Как это работает: вывод

Рис. 7.1. Двоичные часы в футляре Kitronik MI:Pro ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

201

времени в двоичном формате» ниже. Двоичные часы отображают часы, минуты и секунды в виде отдельных двоичных чисел на светодиодном дисплее micro:bit. На рис. 7.2 показано, как выглядит время в двоичном виде на светодиодном дисплее micro:bit. Сначала такие показания часов могут выглядеть как случайный набор горящих светодиодов, но вскоре я объясню, как все это работает. Кроме того, неугомонный ученый очень любит демонстрировать свое умение читать показания двоичных часов, желая произвести впечатление на своих друзей!

16

8

4

2

1

Часы (11)

32

Минуты (5)

32

Секунды (3)

Рис. 7.2. Время в двоичном формате на светодиодном дисплее micro:bit

Как читать показания двоичных часов Наши двоичные часы отображают время в 24-часовом формате. Чтобы прочитать показания таких часов, начните с верхнего ряда светодиодов (см. рис. 7.2). Этот ряд отображает часы. Каждому столбцу светодиодов соответствует свое число. Справа налево столбцы представляют числа 1, 2, 4, 8 и 16. Из этих пяти чисел можно создать все возможные значения от 1 до 24. Чтобы получить час, сложите номера столбцов с горящими светодиодами. В случае, изображенном на рис. 7.2, в верхнем ряду горят светодиоды в столбцах с номерами 1, 2 и 8; сложив эти числа, получаем 11. Итак, время на рис. 7.2 соответствует 11 часам. 202

ГлАВА 7

Следующие два ряда представляют количество минут, а два нижних ряда представляют количество секунд. Светодиоды в рядах, соответствующих минутам и секундам, тоже пронумерованы числами 1, 2, 4, 8 и 16. Однако, поскольку этих чисел недостаточно, чтобы отобразить весь диапазон минут и секунд от 0 до 59, используется дополнительный светодиод (с номером 32) в предыдущем ряду. Взгляните на рис. 7.2: светодиод с номером 32 для отображения минут – это крайний левый светодиод во втором ряду сверху, а светодиод с номером 32 для отображения секунд – это крайний левый светодиод в четвертом ряду сверху. На рис. 7.2 в рядах, соответствующих минутам, горят светодиоды с номерами 4 и 1. Сложив их, получаем 5 минут. В рядах, соответствующих секундам, горят светодиоды с номерами 2 и 1, что соответствует 3 секундам. То есть на этом дисплее отображается время 11:05:03. Если нажать и удерживать нажатой кнопку A, цифры на часах начнут очень быстро увеличиваться, что позволит установить нужное время. Вам только нужно быть готовым вовремя отпустить кнопку, когда на дисплее появится правильное время. На YouTube можно найти ролик (https://www.youtube.com/ watch?v=v26gYo5OG0g), демонстрирующий работу часов и их установку.

Что понадобится Для этого проекта вам понадобятся только плата micro:bit и источник питания. Если вы планируете использовать часы продолжительное время, то лучше применить USB-адаптер или другой источник постоянного питания для micro:bit (см. приложение), чтобы сэкономить на батарейках. Также можно приобрести футляр для micro:bit, чтобы ваши часы выглядели лучше. Помните, что эти часы не очень точные, поэтому вам часто придется их переустанавливать.

Конструирование 1. Программа для этого проекта написана только на языке MicroPython, потому что необходимые математические вычисления очень сложно реализовать на языке Blocks. Откройте ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

203

в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/). Файл с программой для данного проекта называется ch_07_Binary_Clock.py. 2. Прежде чем загрузить программу в micro:bit, откройте ее в редакторе Mu и измените текущее время для большей точности. Я советую установить время раньше текущего на пару минут. Вы сможете откорректировать его после запуска программы, нажав и удерживая кнопку A. Установите время, изменив следующие строки в программе. Не забывайте, что наши часы показывают время в 24-часовом формате, то есть чтобы установить время, соответствующее, например, 6 часам вечера, присвойте переменной hours число 12 + 6 = 18. hours = 8 minutes = 25

Также измените значение переменной adjust, указав в ней, на сколько секунд за тысячу часы micro:bit убегают или отстают. Часы на моей плате micro:bit отстают на 11 секунд с каждой 1000 секунд, поэтому я присвоил переменной adjust значение –11, чтобы учесть это отставание (обратите внимание на знак «минус»). Если бы моя плата micro:bit убегала вперед, скажем, на 10 секунд с каждой 1000 секунд, то я бы присвоил переменной adjust значение 10, чтобы немного замедлить ее.

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

204

ГлАВА 7

# mmmmm # s # sssss sec_leds = [[4, 4], [3, 4], [2, 4], [1, 4], [0, 4], [0, 3]] min_leds = [[4, 2], [3, 2], [2, 2], [1, 2], [0, 2], [0, 1]] hour_leds = [[4, 0], [3, 0], [2, 0], [1, 0], [0, 0]] adjust = –11

Первые четыре строки кода на самом деле не являются частью программы. Это строки комментариев, то есть заметки, напоминающие, какие светодиоды отображают часы, минуты и секунды. Эти строки послужат полезным справочником при определении координат светодиодов в следующих массивах. Следующие три строки – это двумерные массивы, упоминавшиеся выше. С их помощью программа будет определять координаты светодиодов, соответствующих секундам, минутам и часам. Напомню, что массивы похожи на переменные и отличаются только тем, что хранят несколько элементов. Используемые здесь массивы называются двумерными, потому что их элементы тоже являются массивами. Например, первый элемент в первом массиве sec_leds – это [4, 4]. Он соответствует первому светодиоду, используемому для отображения количества секунд, то есть светодиоду с координатой X, равной 4, и координатой Y, равной 4. Этот светодиод находится в правом нижнем углу дисплея. На рис. 7.3 показаны координаты отдельных светодиодов, составляющих дисплей.

0, 0

x

y 4, 4

Рис. 7.3. Координаты светодиодов на дисплее ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

205

Как видите, светодиод в левом верхнем углу имеет координаты [0, 0], а светодиод в правом нижнем углу – координаты [4, 4].

Далее следуют переменные hours, minutes и seconds, хранящие текущее время (часы, минуты и секунды соответственно): hours = 8 minutes = 25 seconds = 1 adjust = –11

Переменная adjust используется для корректировки хода часов. Более подробно об этом рассказывается в разделе «Конструирование» выше. Вот функция, которая включает и выключает светодиоды для отображения числа в двоичной форме: def display_binary(value, num_bits, leds): v = value for i in range(0, num_bits): v_bit = v % 2 display.set_pixel(leds[i][0], leds[i][1], int(v_bit * 9)) v = int(v / 2)

У нас есть три отдельных числа (часы, минуты и секунды) для отображения времени, и функция display_binary может работать со всеми ними. От нас требуется только передать число для отображения, количество светодиодов (num_bits) и массив с координатами светодиодов. Эти три параметра функции ис206

ГлАВА 7

пользуются для отображения трех составляющих времени – секунд, минут и часов. Для отсчета времени используются две переменные: last_time = 0 tick = 1000 + adjust

Переменная last_time хранит время, когда в последний раз произошла смена значения секунд, а переменная tick хранит продолжительность такта часов в миллисекундах. По умолчанию один такт (переменная tick) равен 1000 + adjust, но это значение изменится, когда вы нажмете кнопку A, чтобы установить время. Вот функция, которая ведет отсчет времени: def update_time(): global hours, minutes, seconds seconds += 1 if seconds > 59: seconds = 0 minutes += 1 if minutes > 59: minutes = 0 hours += 1 if hours > 23: hours = 0

Функция update_time прибавляет 1 к количеству секунд (seconds) при каждом вызове. Когда счетчик секунд становится больше 59, функция сбрасывает его в 0 и увеличивает количество минут (minutes). То же происходит со счетчиком часов. Для этого используются вложенные операторы if. Следующая функция отображает часы, минуты и секунды в двоичном формате: def display_time(): display_binary(seconds, 6, sec_leds) display_binary(minutes, 6, min_leds) display_binary(hours, 5, hour_leds) ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

207

Функция display_time вызывает функцию display_binary, объявленную выше. Основная программа заключена в цикл while, который отсчитывает время и ускоряет ход часов, когда кто-то нажимает кнопку A. while True: if button_a.is_pressed(): tick = 10 else: tick = 1000 + adjust now = running_time() elapsed_ms = now – last_time if elapsed_ms >= tick: update_time() display_time()

Первый условный оператор if в цикле проверяет, нажата ли кнопка A. Если нажата, то программа уменьшает длительность такта до 10 мс. В противном случае устанавливает длительность такта равной сумме 1000 + adjust. Следующие далее строки ведут счет времени. Функция running_time возвращает количество миллисекунд, прошедших с момента последнего сброса платы micro:bit. В каждой итерации цикла программа подсчитывает, сколько времени прошло с момента последней смены секунд, и при необходимости наращивает счетчики часов, минут и секунд. Для этого она: 1) вызывает running_time, получает текущее время и сохраняет его в переменной с именем now; 2) вычисляет значение elapsed_ms как разность между переменными now и last_time; 3) наращивает счетчики, если elapsed_time больше, чем продолжительность одного такта, равного 1 секунде; 4) копирует в last_time значение now, тем самым сбрасывая счетчик миллисекунд в 0.

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

ГлАВА 7

торые меняются быстрее, чем мы успеваем их вычислить. Но двоичная система появилась не просто так. Все мы хорошо знакомы с десятичной системой записи чисел. Слово десятичное обозначает число 10. Для записи чисел в десятичной системе мы используем 10 разных символов (цифры от 0 до 9). Чтобы записать число больше 9, например 15, мы используем две цифры. Исходя из позиции цифры 1 в числе 15, мы знаем, что она на самом деле представляет число 10. В следующей таблице показаны числа от 0 до 10 в двоичном формате. Обратите внимание, что в десятичной системе мы не записываем начальные нули. Например, мы не будем писать 15 как 0015. Однако в двоичном формате числа обычно пишут с начальными нулями, чтобы они имели одинаковое количество цифр. Именно так действуют умудренные опытом программисты. Итак, в данном случае все двоичные числа состоят из четырех цифр. Десятичное 0 1 2 3 4 5 6 7 8 9 10

Двоичное 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010

Теоретически компьютеры могли бы хранить такие числа, используя 10 различных уровней напряжения электрического тока, представляющих цифры от 0 до 9, но на практике дело обстоит иначе. Компьютеры используют двоичную систему. Вместо 10 цифр в двоичной системе используются только две (двоичные цифры также называют битами): 0 и 1. Компьютеры используют двоичный код, потому что транзисторы внутри них могут быть либо выключены (0), либо включены (1). То есть они имеют только 2 возможных состояния вместо 10. Кроме того, из-за особенностей двоичной логики, лежащей в их осноПутЕшЕСтВИЕ ВО ВРЕМЕНИ

209

ве, компьютерам проще выполнять арифметические операции с двоичными числами, чем с десятичными. Подобно хорошо знакомой нам десятичной системе, двоичная система позволяет объединять несколько цифр для представления больших чисел. В десятичной системе цифры в каждой следующей позиции увеличиваются в 10 раз – 1, 10, 100, – а в двоичной системе в 2 раза – 1, 2, 4 и т. д. Например, четырехзначное двоичное число 1010 имеет единицы в позициях, соответствующих значениям 8 и 2, и нули в других позициях. В десятичном представлении это будет число 8 + 2, или 10. Как оказывается, для представления больших чисел не нужно много двоичных цифр. Например, восьми двоичных цифр (называемых байтом) достаточно для представления десятичных чисел от 0 до 255. С помощью 16 двоичных цифр (бит) можно представить числа в диапазоне от 0 до 65 535. Компьютер, способный оперировать числами из 64 битов, сможет представлять числа в диапазоне от 0 до 18 446 744 073 709 551 615. Между прочим, в micro:bit используется 32-битный процессор, способный оперировать числами в весьма приличном диапазоне: от 0 до 4 294 967 295. Используемая нами функция running_time возвращает время в виде 32-битного числа. То есть она сможет непрерывно работать в течение 4 294 967 295 ÷ 1000 ÷ 60 ÷ 60 ÷ 24 = 49,7 дня, прежде чем исчерпает доступный диапазон.

ПРОЕКТ: ГОВОРЯЩИЕ ЧАСЫ Сложность: легкая Иногда неугомонный ученый так занят экспериментами с пробирками и химикатами, что ему некогда взглянуть на часы. Из-за этого он иногда забывает поесть! В таких случаях ему пригодятся говорящие часы. Этот проект (рис. 7.4) объявляет время каждый час или каждый раз, когда кто-то нажимает кнопку A. На YouTube можно найти ролик (https://www.youtube.com/ watch?v=iNjXEK8RUtU), демонстрирующий работу этих часов.

210

ГлАВА 7

Рис. 7.4. Говорящие часы

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения micro:bit к динамику; ►► динамик для воспроизведения голоса (я советую использовать динамик Monk Makes Speaker или другие устройства для воспроизведения звука, описанные в главе 2); ►► адаптер питания от USB, в приложении (в конце книги) вы найдете еще несколько способов питания вашего устройства micro:bit. Если вы планируете использовать часы продолжительное время, то лучше применить USB-адаптер или другой источник постоянного питания для micro:bit, чтобы сэкономить на батарейках. Также можно сконструировать футляр или закрепить micro:bit с динамиком на листе картона, который использовался в проекте световой гитары из главы 3.

Конструирование 1. В этом проекте используется библиотека speech, которая недоступна в языке Blocks, поэтому программа для этого проекта написана только на MicroPython. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и загрузите файл ch_07_ Talking_Clock.py. ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

211

2. Прежде чем загрузить программу в micro:bit, откройте ее в редакторе Mu и измените переменные hours и minutes, присвоив им текущее время. Также измените значение переменной adjust, как описывалось в разделе «Конструирование» в проекте двоичных часов. 3. Подключите динамик к плате micro:bit: одним проводом с зажимами «крокодил» соедините контакт 0 на плате micro:bit с контактом IN на динамике, а двумя другими соедините контакты подачи питания на динамик, как показано на рис. 7.4. 4. Подождите, пока наступит время, установленное на шаге 2. Затем подключите micro:bit к источнику питания. Обратите внимание, что в этом проекте не предусмотрена возможность корректировки времени.

Программа Для простоты мы рассмотрим программу по частям. Фрагмент программы, который отсчитывает время, остался прежним, как в программе из предыдущего проекта. Основное отличие состоит в том, что вместо отображения на светодиодном дисплее программа будет озвучивать текущее время. digits = ["no", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nienteen"] tens = ["no", "no", "twenty", "thirty", "forty", "fifty"] preamble = "The time is " am = "aye em" pm = "pee em"

В программе используется несколько переменных и массивов для хранения слов, которые будет произносить micro:bit. Библиотека speech содержит записи некоторых общеупотребительных слов. Она может произносить отдельные цифры, такие как 1, 2 или 3, но для чисел от 10 и больше она будет произносить цифры по отдельности, что не очень удобно. Вот почему в массиве digits числа больше 10 записаны словами. Обратите внимание, что слово «nienteen» (девятнадцать) запи212

ГлАВА 7

сано с ошибкой (правильно nineteen), это сделано намеренно, чтобы это число звучало правильно, когда его будет произносить синтезированный голос. Массив digits содержит все числа от 0 до 19. Часы никогда не должны произносить цифру 0, поэтому в программе я заменил его словом «no» (нет). Массив tens служит аналогичной цели для чисел, кратных 10. Мы уже учли все числа от 0 до 19 в массиве digits, поэтому программе не придется произносить первые два элемента из массива tens, я заменил их словом «no» (нет). Переменная preamble содержит текст, который micro:bit будет произносить перед каждым объявлением времени. Переменные am и pm содержат фонетические версии индикатора am/pm1. Когда наступит момент объявить время, micro:bit произнесет одно из этих слов. Далее приводится функция, которая произносит время. Она называется speak_the_time. def speak_the_time(): h = hours am_pm = am if h >= 12: am_pm = pm if h > 12: h = h – 12 if minutes == 0: # В этом случае часы произнесут, например, # "The time is twelve pm exactly" # ("время двенадцать часов пополудни ровно") speech.say(preamble + digits[h] + " " + am_pm + " exactly") else: if minutes < 10: # В этом случае часы произнесут, например, # "The time is twelve o four pm" # ("время двенадцать часов и четыре минуты пополудни") speech.say(preamble + digits[h] + " o " + digits[minutes] + " " + am_pm) 1

Давным-давно в России тоже использовались такие индикаторы: «пополуночи» (для часов от полуночи до полудня) и «пополудни» (для часов от полудня до полуночи); но впоследствии мы стали говорить «утра», «дня», «вечера», «ночи», а в англоязычных странах по-прежнему используют обозначения «am» («пополуночи») и «pm» («пополудни»). – Прим. перев. ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

213

elif minutes < 20: # В этом случае часы произнесут, например, # "The time is twelve eighteen pm" # ("время двенадцать часов восемнадцать минут пополудни") speech.say(preamble + digits[h] + " " + digits[minutes] + " " + am_pm) else: mins_tens = int(minutes / 10) mins_units = minutes % 10 if mins_units == 0: # В этом случае часы произнесут, например, # "The time is twelve twenty pm" # ("время двенадцать часов двадцать минут пополудни") speech.say(preamble + digits[h] + " " + tens[mins_tens] + " " + am_pm) else: # В этом случае часы произнесут, например, # " The time is twelve twenty four pm " # ("время двенадцать часов двадцать четыре минуты # пополудни") speech.say(preamble + digits[h] + " " + tens[mins_tens] + " " + digits[mins_units] + " " + am_pm)

Это довольно сложная функция, так как она должна учитывать разные способы выражения времени. Часы озвучивают время в 12-часовом формате, но хранят его в 24-часовом формате, поэтому в первую очередь speak_the_time решает, какая половина суток в данный момент: am (пополуночи – от полуночи до полудня) или pm (пополудни – от полудня до полуночи). Она вычитает 12 из переменной hours, когда час достигает 13. Затем вложенные операторы if охватывают следующие возможные случаи: ►► если число минут равно нулю, то часы произнесут, например: «The time is twelve pm exactly» («Время двенадцать часов ровно пополудни»); ►► иначе, если число минут меньше 10, то добавляется буква «о» (как принято в английском языке), и часы произнесут, например: «The time is twelve o four pm» («Время двенадцать часов и четыре минуты пополудни»); 214

ГлАВА 7

►► если число минут двузначное и меньше 20, то используется массив digits, и часы произнесут, например: «The time is twelve eighteen pm» («Время двенадцать часов восемнадцать минут пополудни»); ►► для других двузначных значений минут от 20 и больше, кратных 10, используется массив tens, и часы произнесут, например: «The time is twelve twenty pm» («Время двенадцать часов двадцать минут пополудни»; ►► если число минут не кратно 10, то часы произнесут, например: «The time is twelve twenty four pm» («Время двенадцать часов двадцать четыре минуты пополудни»). В конце программы находится основной цикл while: while True: if button_b.is_pressed(): speak_the_time() now = running_time() elapsed_ms = now – last_time if elapsed_ms >= tick: elapsed_seconds = int(elapsed_ms / tick) update_time(elapsed_seconds) blink() last_time = now

Этот цикл проверяет, нажата ли кнопка B или наступил ли ровно час, и в любом из этих случаев сообщает время. Он также вызывает функцию blink, чем обеспечивает мигание значка с изображением сердца на светодиодном дисплее, чтобы показать, что часы работают, даже если они молчат.

Как это работает: обучаем micro:bit говорить Библиотека speech открывает массу новых возможностей, как вы видели это в главе 6. Качество речи, конечно, не идеальное, но она действительно добавляет изюминку в проекты. Сама библиотека speech основана на понятии фонем: строительных блоков звука. Когда вызывается функция say, она сначала преобразует переданный ей текст в серию фонем. Но из-за необычности разговорной речи результат нередко оказывается ПутЕшЕСтВИЕ ВО ВРЕМЕНИ

215

далеким от идеала, чем и обусловлено неправильное написание «nineteen» (девятнадцать) в программе этого проекта – такое неправильное написание помогает функции say произнести слово более точно. Узнать больше о библиотеке speech можно по адресу: https:// microbit-micropython.readthedocs.io/en/latest/tutorials/speech.html.

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

216

ГлАВА 7

8 ИГРЫ РАЗУМА

В

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

ЭКСПЕРИМЕНТ 10: СКОРОСТЬ РЕАКЦИИ Сложность: средняя Люди воспринимают воздействие внешних раздражителей с помощью нервных клеток, или нейронов. Нервы – это провода в человеческом теле, по которым передаются сигналы от мозга к остальным частям тела и обратно. Когда дотрагиваешься до горячей плиты, кажется, что почти сразу чувствуешь боль. Но по сравнению с медными проводами нервы передают сигналы намного медленнее. Измеряя время, необходимое мозгу, чтобы отреагировать на сигнал, можно оценить, насколько быстро этот сигнал проходит по нервам. В этом эксперименте вы будете нажимать кнопку A рукой или ногой, когда экран micro:bit погаснет, а micro:bit будет измерять время вашей реакции. Мы сделаем картонную педаль для micro:bit, с помощью которой вы сможете нажимать кнопку (рис. 8.1).

Рис. 8.1. Превращение micro:bit в ножной выключатель 218

ГлАВА 8

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► лист картона 20×10 см, лучше всего подойдет толстый прочный картон; размеры необязательно должны в точности совпадать с указанными; ►► канцелярский нож для резки картона; ►► офисный пластилин Blu-Tack для крепления картонной педали к плате micro:bit.

Конструирование Сначала нужно сделать педаль из картона, которая будет складываться пополам и охватывать плату micro:bit с двух сторон. 1. Проведите две параллельные линии примерно посередине листа картона на расстоянии около 5 мм друг от друга, как показано на рис. 8.2. Сложите картон по этим линиям. Также нарисуйте прямоугольник на месте, где будет вырезано окно. Окно должно быть достаточно большим, чтобы в него входил светодиодный дисплей micro:bit.

ИГРы РАзуМА

219

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

Рис. 8.2. Надрезы по линии сгиба и окно для светодиодного дисплея micro:bit ВНИМАНИЕ! Канцелярские ножи могут быть очень острыми, поэтому будьте осторожны или попросите помощи у взрослых. 3. Поместите плату micro:bit внутрь сложенного пополам листа картона так, чтобы можно было видеть светодиодный дисплей через вырез. Закрепите плату micro:bit на картонной педали небольшими кусочками офисного пластилина. Осторожно нажимая верхнюю часть педали, вы должны почувствовать момент, когда щелкнет кнопка A (см. рис. 8.1). Убедитесь, что при этом случайно не нажимается кнопка сброса с обратной стороны платы micro:bit. Если кнопка сброса все-таки нажимается, попробуйте использовать кусочки офисного пластилина большего размера. 4. Программа для этого эксперимента написана только на MicroPython. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/ mbms/). Скачайте файл с программой для этого эксперимента, который называется Experiment_10.py. Откройте файл в редакторе Mu и загрузите его в micro:bit. 220

ГлАВА 8

Проверка вашей нервной системы Программа, управляющая этим экспериментом, использует инструмент REPL в редакторе Mu, с помощью которого сообщает о результатах и дает необходимые инструкции. (Если вы забыли, как работает REPL, то вернитесь к главе 1 и прочитайте раздел «REPL».) Так как программа использует инструмент REPL, плата micro:bit должна оставаться подключенной к компьютеру с помощью USB-кабеля. Для измерения реакции мы будем использовать светодиодный дисплей micro:bit и кнопку A. Откройте инструмент REPL в редакторе Mu. Как указано в инструкциях, что выводятся в панели REPL, вы должны нажимать и удерживать кнопку A всякий раз, когда на дисплее micro:bit появится крестик, и отпускать ее, когда дисплей погаснет. Вот какой текст можно увидеть в REPL1. Инструкции разбиты на разделы для ясности. TEST 1 – USING your hand Hold the switch down while the cross is showing. Release momentarily when the display blanks. Repeat 5 times. Press ENTER when ready to start the test

Перевод: Испытание 1 – для руки Нажмите и удерживайте кнопку, пока на дисплее отображается крестик. Отпустите ее, как только дисплей погаснет. Повторите испытание 5 раз. Нажмите ENTER, когда будете готовы приступить к испытанию.

Чтобы приступить к первому испытанию, нажмите и удерживайте кнопку A вашей рабочей рукой (правой, если вы правша, или левой, если вы левша) и нажмите один раз клавишу ввода 1

Так как в тексте программы инструкции написаны на английском языке, вслед за этими инструкциями я буду приводить их перевод на русский язык. – Прим. перев. ИГРы РАзуМА

221

на клавиатуре компьютера. На экране должен появиться крестик. После случайной задержки от 3 до 7 секунд дисплей погаснет. Когда это произойдет, тут же отпустите кнопку. В окне REPL должно появиться количество миллисекунд, прошедших от момента, когда дисплей погас, и до момента, когда вы отпустили кнопку. Например: 252

Затем на дисплее снова должен появиться крестик на некоторый период времени, и вы снова должны нажать и удерживать кнопку, чтобы повторить испытание. Эксперимент следует повторить пять раз. Если отпустить кнопку до того, как дисплей погаснет, в окне REPL должно появиться сообщение «You let go too soon» («Вы отпустили слишком рано»). Из-за этого эксперимент будет признан неудавшимся, и вам придется повторить весь процесс сначала. В этом случае нажмите кнопку сброса на плате micro:bit или отсоедините USB-кабель и снова подключите его. После пяти попыток дисплей micro:bit должен остаться погашенным, а в окне REPL появится среднее время вашей реакции, например: 252 264 264 282 The average time using your hand was 262.7999 ms

Перевод: Среднее время реакции с использованием руки составило 262.7999 мс

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

ГлАВА 8

Теперь повторите испытание для ноги. После пяти попыток в окне REPL должно появиться среднее время реакции и предложение ввести два ваших размера, как в этом примере: The average time using your foot was 368.3999 ms Enter the distance from the back of your neck to your fingers in cm: 107 Enter the distance from the back of your neck to your toes in cm: 188

Перевод: Среднее время реакции с использованием ноги составило 368.3999 ms Введите расстояние от шеи до кончиков пальцев на руке в см: 107 Введите расстояние от шеи до кончиков пальцев на ноге в см: 188

Используя эти размеры, программа вычислит, сколько времени в миллисекундах потребовалось вашему мозгу, чтобы понять, что дисплей погас, – это время обдумывания, а также скорость в метрах в секунду, с которой сигнал передавался до руки или ноги, – это скорость передачи. Thinking time (ms): 123.3036 Transmission speed (m/s): 13.03703

Перевод: Время обдумывания (мс): 123.3036 Скорость передачи (м/с): 13.03703

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

Программа В переменной n программа хранит количество попыток, которое нужно предпринять, чтобы выполнить испытание. В данном случае предполагается выполнить пять попыток. ИГРы РАзуМА

223

from microbit import * import random n = 5 def run_full_test(): print("TEST 1 – USING your hand") t_hand = run_test() print("The average time using your hand was " + str(t_hand) + " ms") print("Now repeat the test for your foot") t_foot = run_test() print("The average time using your foot was " + str(t_foot) + " ms") ❶ d_hand = int(input("Enter the distance from the back of your neck to your fingers in cm: ")) ❷ d_foot = int(input("Enter the distance from the back of your neck to your toes in cm: ")) thinking_time = (d_foot * t_hand – d_hand * t_foot) / (d_foot – d_hand) transmission_speed = 10 * (t_foot – thinking_time) / d_foot print("Thinking time (ms): " + str(thinking_time)) print("Transmission speed (m/s): " + str(transmission_speed))

Функция run_full_test поочередно запускает испытания для рук и ног. (Как проводятся эти испытания, я покажу чуть ниже.) Последние четыре строки в функции вычисляют время обдумывания и скорости передачи; подробнее об этих вычислениях я расскажу в разделе «Как это работает: измерение времени реакции» ниже. Эта функция также предлагает ввести расстояние от шеи до кончиков пальцев на руке и ноге, используя для этого функцию ввода input. Введенная информация сохраняется в переменных, чтобы программа смогла использовать ее. Расстояние от шеи до кончиков пальцев на руке сохраняется в переменной d_hand ❶, а расстояние от шеи до кончиков пальцев на ноге – в переменной d_foot ❷. Функция input выводит строку текста, которую мы передали ей в качестве параметра, а затем ждет, пока вы введете какойлибо текст. Она возвращает все, что было введено, в виде стро-

224

ГлАВА 8

ки, а функция int преобразует эту строку в целое число, чтобы потом его можно было использовать в вычислениях. Далее следует функция run_test: def run_test(): print("Hold the switch down while cross is showing and " + "release momentarily when the display blanks") print("Repeat " + str(n) + " times.") input("Press ENTER when ready to start the test") total = 0 for i in range(0, n): t = get_reaction_time() if t > 10: print(t) total += t else: print("You let go too soon") return total / n

Функция run_test выполняет серию из 5 попыток для руки или ноги, предоставляя необходимые инструкции и собирая необходимые показания для вычисления времени реакции вызовом функции get_reaction_time. Если время реакции меньше 10 мс, что означает сверхчеловеческую скорость реакции, то программа сообщит, что вы отпустили кнопку слишком рано. В противном случае отображается время вашей реакции. def get_reaction_time(): display.show(Image.NO) sleep(random.randint(3000, 7000)) display.clear() t0 = running_time() while pin5.read_digital() == False: # Ожидает отпускания кнопки A pass t1 = running_time() t = t1 – t0 return t

Функция get_reaction_time отображает крестик на светодиодном дисплее и приостанавливается на случайный интервал времени от 3 до 7 секунд. Затем она гасит все светодиоды на

ИГРы РАзуМА

225

дисплее и записывает в переменную t0 текущее время, чтобы программа знала, с какого момента был начат отсчет времени реакции. Когда вы отпустите кнопку A, функция выйдет из цикла while, запишет текущее время в переменную t1 и вычислит время реакции, отняв t0 от t1. Возможно, вам интересно, почему программа ждет момента, когда кнопка A будет отпущена, вызывая pin5.read_digital, а не button_a.is_pressed. Причина в том, что функция is_pressed работает не так быстро, как read_digital, и добавляет дополнительное нежелательное время к времени реакции. Здесь используется pin5, потому что на плате micro:bit кнопка A подключена непосредственно к контакту 5. На самом деле на плате micro:bit имеется еще несколько контактов, кроме контактов 0, 1, 2 и 3, к которым мы подключаем провода зажимами «крокодил». Однако в этой книге мы не будем упоминать их и сосредоточимся исключительно на легкодоступных контактах.

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

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

ГлАВА 8

На самом деле все эти предположения ошибочны, но у неугомонного ученого еще будет время разобраться с ними. С учетом этих предположений скорость передачи сигнала по нервам равна общему времени реакции минус время на обдумывание, деленному на расстояние, которое должен пройти сигнал. Измерение двух расстояний позволяет грубо определить время, необходимое на обдумывание, и скорость сигнала. Вот переменные, которые используются в этих расчетах: ►► t_hand общее время реакции (обдумывание + действие) при использовании руки; ►► t_foot общее время реакции при использовании ноги; ►► d_hand расстояние, которое преодолевает сигнал от головного мозга до мышц руки; ►► d_foot расстояние от головного мозга до мышц ноги; ►► thinking_time время, необходимое на обдумывание (регистрацию события) и отправку нервного импульса в руку или ногу; ►► transmission_speed скорость, с какой сигнал распространяется по нервам от головного мозга до мышц руки или ноги. А теперь погрузимся в математические вычисления. Скорость распространения сигнала по нервам для руки можно вычислить по следующей формуле: transmission_speed =

d_hand . t_hand – thinking_time

Аналогично для ноги: transmission_speed =

d_foot . t_foot – thinking_time

Это означает, что d_hand d_foot = . t_hand – thinking_time t_foot – thinking_time Теперь воспользуемся правилами алгебры, чтобы получить время на обдумывание и вычислить скорость распространения сигнала по нервам. Для этого умножим обе стороны уравнения на ИГРы РАзуМА

227

t_hand – thinking_time. В результате получаем: d_hand =

d_foot(t_hand – thinking_time) . (t_foot – thinking_time)

Если теперь обе стороны умножить на (t_foot – thinking_time), то получится: d_hand(t_foot – thinking_time) = d_foot(t_hand – thinking_time). Раскрываем скобки: d_hand × t_foot – d_hand × thinking_time = d_foot × t_hand – d_foot × thinking_time. То есть d_hand × t_foot – d_foot × t_hand = d_hand × thinking_time – d_foot × thinking_time, или d_hand × t_foot – d_foot × t_hand = thinking_time(d_hand – d_foot), и уже из этого уравнения выводим время на обдумывание: thinking_time =

(d_hand × t_foot – d_foot × t_hand) . (t_foot – thinking_time)

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

(t_foot – thinking_time) . d_foot

Результатом будет скорость в сантиметрах в миллисекунду. Чтобы преобразовать ее в метры в секунду, нужно умножить результат на 1000 и разделить на 100, или, проще говоря, умножить на 10. 228

ГлАВА 8

ПРОЕКТ: ДЕТЕКТОР ЛЖИ Сложность: средняя Неугомонный ученый не любит вечеринок-сюрпризов и хотел бы выяснить, не планируют ли лаборанты вечеринку на его день рождения. Чтобы помочь ему, мы создадим детектор лжи (рис. 8.3)!

Рис. 8.3. Детектор лжи Устройство, которое мы сконструируем в этом проекте, измеряет гальваническое сопротивление кожи, то есть сопротивление кожи потоку электричества. Чтобы измерить гальваническое сопротивление, мы используем micro:bit и пару металлических ложек.

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► 2 отрезка провода с зажимами «крокодил» для соединения двух металлических ложек с платой micro:bit; ►► 2 ложки. Ложки будут служить датчиками, которые испытуемый должен будет брать в руки. Зажимы «крокодил» будут крепиться к ложкам и могут их поцарапать, поэтому используйте ложки, которые не жалко! ИГРы РАзуМА

229

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Lie Detector (Детектор лжи). Когда откроется страница с программой, щелкните на кнопке Down­ load (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Инструкции по загрузке и использованию примеров можно найти в разделе «Скачивание программ» в главе 1. Файл с программой для этого проекта называется ch_08_Lie_Detector.py. 2. Одним проводом с зажимами «крокодил» соедините одну ложку с контактом 2, а вторым проводом – вторую ложку с контактом GND, как показано на рис. 8.3. Для проведения эксперимента с детектором лжи вам понадобятся два человека: ваш помощник, который будет задавать сложные вопросы, и испытуемый, который будет отвечать на эти вопросы. Испытуемый должен держать ложки так, чтобы выпуклая сторона полностью касалась ладоней. Когда оператор нажмет кнопку A, в центре светодиодного дисплея micro:bit должна загореться точка. Если сопротивление кожи начнет падать из-за того, что испытуемый потеет, то точка на светодиодном дисплее переместится вверх. Если сопротивление кожи начнет возрастать, то точка переместится вниз. Если создастся ощущение, что точка «застряла» в верхней или нижней части дисплея, оператор должен нажать кнопку A, чтобы отцентрировать ее. Показания будут постепенно дрейфовать в ту или в другую сторону, даже если испытуемому не задавать сложных или неудобных вопросов. Задав вопрос, оператор должен подождать три или четыре секунды, прежде чем проверить показания на дисплее.

230

ГлАВА 8

Программа Для этого проекта написаны две программы – на языках Blocks и Python. Далее следует полное описание программы на языке Blocks, поэтому если вы решите перейти сразу к программе на Python, то потом обязательно вернитесь и прочитайте дополнительные объяснения.

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

ИГРы РАзуМА

231

В блоке on start (при начале) первым следует вложенный блок set pull pin (задать преобразование контакта), который включает встроенный подтягивающий резистор на 12 кОм (по умолчанию подтягивающий резистор отключен). Далее в блоке on start (при начале) следует блок, который снимает показания с контакта 2, подключенного к одной из ложек, и сохраняет результат в переменной baseline. В процессе работы программа будет сравнивать новые показания с этим базовым уровнем, чтобы увидеть, насколько изменилось сопротивление кожи пациента. В блоке forever (постоянно) программа снимает аналоговое значение с контакта 2, которое представляет гальваническое сопротивление кожи испытуемого после ответа на заданный вами вопрос. Из вновь прочитанного значения, которое находится в переменной reading, вычитается базовый уровень baseline, и результат делится на 10, чтобы уменьшить его до нужной величины. Полученное число используется для выбора одного из пяти светодиодов. Число должно находиться в диапазоне от –2 до 2, иначе произойдет ошибка. После приведения числа в требуемый диапазон (с использованием пары блоков if (если)) программа гасит все светодиоды на дисплее и с помощью блока plot (включить) включает светодиод в среднем столбце, в строке с номером 2 + change. Когда оператор нажимает кнопку A, программа вновь снимает показания с контакта 2 и сохраняет результат в переменной baseline.

232

ГлАВА 8

MicroPython Вот версия программы на MicroPython: from microbit import * pin2.set_pull(pin2.PULL_UP) baseline = pin2.read_analog() while True: if button_a.was_pressed(): baseline = pin2.read_analog() reading = pin2.read_analog() change = int((reading – baseline) / 10) if (change > 2): change = 2 if (change < –2): change = –2 display.clear() display.set_pixel(2, 2 + change, 9)

Эта программа действует почти так же, как программа на языке Blocks, с некоторыми небольшими отличиями. Во-первых, здесь используется функция int, чтобы преобразовать вычисленную величину изменения показаний (результат выражения (reading – baseline) / 10) в целое число. Во вторых, для включения нужного светодиода используется метод set_pixel. Этот метод отличается от блока plot (включить) в языке Blocks, потому что требует передать ему не только координаты x и y, но также уровень яркости от 0 до 9. В этой программе передается уровень яркости 9, чтобы сделать включенный светодиод максимально ярким и видимым.

Как это работает: обнаружение лжи по напряжению и сопротивлению Сопротивление кожи – один из показателей, фиксируемых настоящими детекторами лжи, которые так часто можно увидеть в фильмах. Если вы покраснели или начали потеть, например услышав неудобный вопрос, электрическое сопротивление вашей кожи изменится. Но проверки одного лишь сопротивления недостаИГРы РАзуМА

233

точно. Вопросы, которые вы задаете, и как вы их задаете, могут повлиять на реакцию человека или заставить его нервничать, а кроме того, сопротивление кожи у всех людей разное. К тому же люди, способные держать свои эмоции под контролем, могут научиться обманывать полиграф. Но для неугомонного ученого, пытающегося выяснить, не затевают ли его сотрудники вечеринку-сюрприз, этого детектора лжи вполне достаточно. Программа для данного проекта преобразует прочитанные показания в напряжение. Большинство металлов имеют низкое сопротивление, потому что металл хорошо проводит электричество, тогда как, например, пластик имеет высокое сопротивление, потому он плохо проводит электричество. Наш детектор лжи измеряет сопротивление с помощью контакта на плате micro:bit, который работает как аналоговый вход (см. главу 1), и двух резисторов, называемых делителем напряжения (рис. 8.4). Контакт 3 В 12 кОм Контакт 2 Кожа micro:bit Контакт GND

Рис. 8.4. Схема делителя напряжения Единицей измерения сопротивления является ом (Ом), 1000 Ом обозначается как 1 кОм. На рис. 8.4 резистор с сопротивлением 12 кОм, подключенный к контакту 2, – это резистор, встроенный в процессор micro:bit. Он подтягивает напряжение на контакте 2 к 3 В (вообразите, что резисторы на рис. 8.4 – это пружины). Когда испытуемый не держит ложки в руках, напряжение, протекающее через этот резистор, является единственной силой, действующей на контакт 2, и программа фиксирует на нем максимальное значение 1023, то есть 3 В. Но как только испытуемый возьмет ложки в руки, в игру вступает второй «резистор» – кожа испытуемого. Этот резистор 234

ГлАВА 8

противодействует резистору 12 кОм, подтягивая напряжение на контакте 2 вниз, к уровню 0 В. Если бы сопротивление кожи составляло ровно 12 кОм, то два резистора тянули бы каждый в свою сторону с одинаковой силой, и напряжение на контакте 2 было бы равно 1,5 В. Если испытуемый потеет, то сопротивление его кожи падает, и напряжение на контакте 2 снижается. И наоборот, когда испытуемый перестает потеть, сопротивление его кожи увеличивается, что позволяет резистору 12 кОм поднять напряжение.

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

ИГРы РАзуМА

235

9 ПОМЕШАТЕЛЬСТВО НА ЭКОЛОГИИ

Н

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

ЭКСПЕРИМЕНТ 11: ИЗМЕРЕНИЕ ТЕМПЕРАТУРЫ Сложность: легкая Не имея другой одежды, кроме лабораторных халатов, и сэкономив на теплоизоляции секретной лаборатории, неугомонный ученый решил построить собственную систему обогрева. Для этого ему нужно знать точную температуру в каждой комнате в лаборатории. К сожалению, вскоре он обнаружил, что micro:bit не обеспечивает необходимой точности. В языках Blocks и MicroPython есть функция с именем temperature, которая возвращает значение температуры в градусах Цельсия. Однако сам датчик встроен в процессор micro:bit и потому фактически измеряет температуру микросхемы, а не окружающей среды. При нормальной комнатной температуре около 20 °С (68 °F), если micro:bit не работает достаточно долго, датчик дает довольно точные показания. Однако нельзя быть уверенным в правильности показаний температуры, если процессор micro:bit работал напряженно и начал нагреваться. В этом эксперименте мы исследуем разницу между показаниями температуры работающего и неработающего процессоров micro:bit.

Что понадобится Для проведения эксперимента вам понадобятся: ►► плата micro:bit; ►► USB-кабель. Также можно использовать отдельный термометр для проверки показаний. Кроме того, вам понадобится немного терпения, чтобы оставить программу поработать полчаса и получить хорошие результаты.

Конструирование 1. В этом эксперименте используется функция редактора Mu, которая называется Plotter (Плоттер). Эта функция доступна только для программ на Python, поэтому здесь не будет проПОМЕшАтЕльСтВО НА экОлОГИИ

237

граммы на языке Blocks. Программу можно найти по адресу https://github.com/simonmonk/mbms/. Файл с программой на Python для этого эксперимента называется Experiment_11. py. Прошейте эту программу в плату micro:bit. Программа измеряет температуру каждые 20 секунд. Она также активизирует micro:bit каждые 10 минут, а затем бездействует в течение 10 минут, чтобы вы могли заметить разницу в температуре между тем, когда процессор micro:bit работает, и когда он находится в режиме ожидания. 2. Щелкните на значке Plotter (Плоттер) в панели инструментов редактора Mu, чтобы открыть плоттер, и нажмите кнопку сброса на плате micro:bit, чтобы запустить процесс чтения показаний. Новые показания температуры и признак занятости процессора micro:bit отображаются в плоттере и REPL каждые 20 секунд. Состояние «занят»/«незанят» процессора меняется каждые 10 минут. На рис. 9.1 показан результат записи данных в течение 40 минут.

Рис. 9.1. Графики изменения температуры и занятости процессора Синий график показывает температуру, возвращаемую функцией temperature, а зеленый график показывает, занят или свободен процессор micro:bit. В периоды, когда процессор 238

ГлАВА 9

занят, программа включает светодиодный дисплей и радиомодуль и отображает сообщение «Busy» (Занят). Как можно видеть на рис. 9.1, когда процессор micro:bit находится в режиме занятости, измеренная температура повышается примерно на 3 °C. Когда процессор переходит в режим ожидания, температура снижается. Особо отмечу, что во время проведения эксперимента, в ходе которого были получены эти графики, температура в комнате, измеренная отдельным термометром, оставалась на уровне 20,0 °C.

Программа Программа на MicroPython для этого эксперимента должна, во-первых, каждые 10 минут переключать состояние занятости (хранится в переменной busy) и каждые 20 секунд измерять температуру.

Инициализация переменных В программе используются переменные last_busy_flip и last_ log_time для записи последнего момента времени, когда произошли два важных события: смена состояния занятости (last_ busy_flip) и замер температуры (last_log_time): busy = False last_busy_flip = 0 busy_period = 600000 last_log_time = 0 log_period = 20000

Переменная busy_period определяет период времени в миллисекундах между переключением состояния занятости; в данном случае 600 000 мс равны 600 секундам, то есть 10 минутам. Переменная log_period определяет период времени в миллисекундах между замерами температуры; в данном случае 20 000 мс равны 20 секундам. Строка busy = False означает, что изначально программа запускается в режиме ожидания (не занятости).

ПОМЕшАтЕльСтВО НА экОлОГИИ

239

Переход в режим занятости Если процессор micro:bit работает в режиме «занято», то включаются дисплей и радиомодуль и отображается сообщение «Busy» (Занят). В противном случае дисплей и радиомодуль выключены. while True: if busy: ❶ display.on() ❷ radio.on() display.show("Busy") else: display.off() radio.off() now = running_time() if now > last_busy_flip + busy_period: busy = not busy last_busy_flip = now now = running_time() if now > last_log_time + log_period: print((temperature(), busy * 10)) last_log_time = now

В цикле while программа проверяет переменную busy, и если она имеет значение True, то программа должна включить дисплей ❶ и радиомодуль ❷. В противном случае их следует выключить. Далее выполняются еще две проверки. Первая из них проверяет, не пора ли изменить состояние занятости, а вторая – не пора ли измерить температуру и, соответственно, вывести значения переменных в REPL. Проверки выполняются с использованием переменных busy_period и log_period. Чтобы моменты смены режима занятости были лучше заметны на графике (рис. 9.1), программа умножает логическое значение в переменной busy – True или False – на 10. Язык Python позволяет это! При этом False интерпретируется как 0, а True – как 1. Поскольку Python интерпретирует логические значения как числа, мы можем умножать их на другие числа. В результате вместо 0 или 1 логические значения отображаются на графике как 0 или 10. 240

ГлАВА 9

Как это работает: почему греется процессор? Микросхемы процессоров, подобные той, что используется в micro:bit, содержат десятки и даже сотни тысяч транзисторов. Эти транзисторы работают как электронные переключатели и могут быть включенными или выключенными (представляют цифры 1 и 0 в двоичной системе). Транзисторы потребляют очень небольшое количество электроэнергии, когда постоянно находятся в определенном состоянии (включено или выключено), но при изменении состояния потребляют дополнительную электроэнергию. Вот почему, когда программы производят интенсивные вычисления, вентиляторы в ваших компьютерах набирают обороты – они удаляют избыточное тепло, выделяемое при большом количестве переключений. Когда процессор занят работой, он нагревается. Но на температуру процессора могут влиять и другие факторы. В этом эксперименте такими факторами являются светодиоды и радиомодуль, которые выделяют немного тепла. Поэтому, даже притом что программа не выполняет большого объема вычислений, так как она всего лишь включает/выключает радиомодуль и дисплей, эти два фактора существенно влияют на температуру процессора micro:bit.

ПРОЕКТ: РЕГИСТРАТОР ТЕМПЕРАТУРЫ И ОСВЕЩЕННОСТИ Сложность: средняя Как безнадежный перфекционист и неисправимый ботаник, неугомонный ученый ищет способ, с помощью которого мог бы определить идеальное место для комнатных растений. Давайте поможем ему в этом, сконструировав регистратор температуры и освещенности. В эксперименте 7 мы записывали показания ускорения в файл для последующего анализа. В этом проекте мы поступим так же: будем регистрировать показания в течение опреПОМЕшАтЕльСтВО НА экОлОГИИ

241

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

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

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

ГлАВА 9

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► блок датчиков Monk Makes Sensor для micro:bit; подойдет также другая плата с датчиками освещенности и температуры; ►► 4 отрезка провода с зажимами типа «крокодил»; ►► батарейный блок AAA; ►► прозрачный пластиковый контейнер для бутербродов; он необходим, если вы решите использовать собранную конструкцию на открытом воздухе; контейнер должен быть достаточно большим, чтобы вместить все компоненты, включая батарейки.

Конструирование 1. Загрузите программу из репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/). Файл с программой для данного эксперимента называется ch_09_Logger. py. Загрузите программу в micro:bit. 2. Подключите к micro:bit плату с датчиками, как показано на рис. 9.3. 3. Поместите все компоненты в контейнер для бутербродов так, чтобы платы с датчиками и micro:bit расположились как можно ближе к верхней крышке. Добиться этого можно, например, расположив зажимы «крокодил», как показано на рис. 9.1. 4. Подключите батарейки. Когда вы будете готовы начать регистрацию, нажмите кнопку A и закройте кон- Рис. 9.3. Подключение платы тейнер крышкой. На дисплее по- с датчиками Monk Makes Sensor к micro:bit явится одна точка.

ПОМЕшАтЕльСтВО НА экОлОГИИ

243

5. Памяти в таком регистраторе достаточно для хранения около 2000 показаний, поэтому если измерения будут производиться один раз в минуту, памяти хватит для работы регистратора в течение 33 часов. Проблема лишь в том, на сколько хватит комплекта батареек AAA. Чтобы остановить цикл измерений, снова нажмите кнопку A. После этого можно подключить micro:bit к компьютеру и использовать функцию Files (Файлы) в редакторе Mu, чтобы скопировать файл data.txt на компьютер, как мы уже делали это в эксперименте 7 в главе 5. 6. Для анализа накопленных данных их можно импортировать в электронную таблицу и нарисовать диаграммы, как показано на рис. 9.4. Как это делается, подробно рассказывается в эксперименте 7 в главе 5, где я показал пример импорта данных из файла data.txt в электронную таблицу Google Sheets.

Рис. 9.4. Графики изменения температуры и освещенности 244

ГлАВА 9

На рис. 9.4 крутой спад графика освещенности соответствует наступлению темноты.

Программа В программе для этого проекта мы должны импортировать библиотеку os, которую будем использовать для удаления любых файлов с данными, которые, возможно, уже находятся в памяти micro:bit. Это необходимо, чтобы освободить место для новых данных. Нам также понадобятся функция log из библиотеки math для вычисления температуры. log (от слова logarithm – логарифм) – это математическое понятие, используемое в уравнении Стейнхарта–Харта для преобразования сопротивления термистора в температуру. Если вы увлекаетесь математикой, то вам, возможно, будет интересно побольше узнать о логарифмах здесь: https://www.mathsisfun.com/algebra/logarithms.html.

Инициализация переменных Программа для этого проекта ждет нажатия кнопки A, а затем в цикле, снова и снова, снимает показания температуры и уровня освещенности. Оба показания затем записываются в файл, чтобы по завершении регистрации их можно было скопировать на компьютер для дальнейшего анализа. sample_period = 60000 filename = 'data.txt' temp_pin = pin1 light_pin = pin2 last_sample_time = 0 recording = False display.show(Image.NO)

Переменной sample_period присваивается значение 60 000, что соответствует 60 000 мс, или 1 минуте. Эта переменная определяет, как часто программа должна записывать данные в файл. По умолчанию данные сохраняются в файл с именем data.txt. Вы можете изменить его, присвоив переменной filename строку с другим именем. ПОМЕшАтЕльСтВО НА экОлОГИИ

245

Переменные temp_pin и light_pin определяют номера контактов, к которым подключены датчики температуры и освещенности соответственно. В переменной last_sample_time программа хранит время последней записи показаний в файл. Переменная recording хранит состояние регистрации – запущена или не запущена. Эта переменная изменяет свое значение True и False при каждом нажатии кнопки A.

Чтение температуры Для чтения температуры программа использует функцию read_c. Она выполняет довольно сложные математические вычисления. def read_c(): r0 = 100000.0 r2 = 100000.0 b = 4250.0 v33 = 3.3 # Фактический результат не зависит от этого значения V = temp_pin.read_analog() * v33 / 1023.0 R = r2 * (v33 – V) / V t0 = 273.15 # 0 градусов Цельсия в шкале Кельвина t25 = t0 + 25.0 # 25 градусов Цельсия в шкале Кельвина # Уравнение Стейнхарта–Харта (вы легко найдете его в Google) inv_T = 1/t25 + 1/b * log(R/r0) T = (1/inv_T – t0) return round(T, 1)

Мы не будем углубляться в математику, я привел вычисления на тот случай, если вы захотите их увидеть. Эта функция измеряет напряжение на контакте temp_pin (в данном случае на контакте 1) и использует его для вычисления температуры в градусах Цельсия (см. раздел «Как это работает: датчики» ниже, где приводится дополнительная информация). Если вы хотите, чтобы температура измерялась в градусах Фаренгейта, используйте функцию read_f, которая вызывает read_c и преобразует температуру в градусы Фаренгейта: def read_f(self): return read_c() * 9/5 + 32

246

ГлАВА 9

Чтение уровня освещенности Программа измеряет температуру в градусах Цельсия или Фаренгейта. Однако уровень освещенности не выражается в каких-то конкретных единицах. Уровень освещенности в данном случае – это просто аналоговое значение, прочитанное с контакта 2. Фактически в этой программе мы используем свою собственную единицу измерения освещенности. Вы можете дать ей имя, если хотите. Как вам, например, светлость? С помощью имеющегося датчика сложно измерить интенсивность света в стандартных единицах люкс. Но если у вас есть откалиброванный люксметр, то можете попробовать провести свой эксперимент и оценить разные уровни освещенности в люксах.

Цикл while Главный цикл while (в конце программы) проверяет нажатие кнопки A и при необходимости переключает значение переменной recording между True и False. Когда запускается регистрация, программа отображает на дисплее одну точку и удаляет существующий файл данных с помощью os.remove. Команда remove заключена в блок try:/except:, который гарантирует, что в случае ошибки, например если файла данных нет и его нельзя удалить, программа проигнорирует ошибку и продолжит работу как ни в чем не бывало. После удаления старого файла создается новый файл и открывается в режиме w, то есть в режиме для записи (от англ. write – запись). При повторном нажатии кнопки A на светодиодном дисплее отображается значок NO (крестик) и файл закрывается. В главном цикле while есть также условный оператор if, который записывает показания освещенности и температуры в файл, если переменная recording имеет значение True и с момента last_sample_time прошло достаточно времени. while True: if button_a.was_pressed(): recording = not recording if recording: display.show(".") ПОМЕшАтЕльСтВО НА экОлОГИИ

247

try: os.remove(filename) except: pass fs = open(filename, 'w') else: display.show(Image.NO) fs.close() now = running_time() if now > last_sample_time + sample_period: last_sample_time = now if recording: temp = read_c() light = light_pin.read_analog() fs.write(str(temp) + "," + str(light)) fs.write('\n')

Как это работает: датчики Термистор (или терморезистор) – это особый тип резистора (см. проект «Детектор лжи» в главе 8), сопротивление которого изменяется при изменении температуры. В Monk Makes Sensor используется термистор типа NTC (negative temperature coefficient – с отрицательным температурным коэффициентом сопротивления). Слово отрицательный (negative) означает, что при повышении температуры сопротивление термистора уменьшается. Программа определяет температуру по сопротивлению термистора. Наш датчик на основе термистора измеряет температуру как электрическое сопротивление. Однако micro:bit не может измерять сопротивление напрямую. Сначала необходимо преобразовать сопротивление в напряжение, которое затем можно прочитать на контакте, действующем как аналоговый вход. Для этого нужно использовать делитель напряжения, как мы это делали в проекте «Детектор лжи» в главе 8. Только на этот раз роль переменного сопротивления будет играть термистор, а не кожа испытуемого (рис. 9.5). Обратите внимание, что плата Monk Makes Sensor для micro:bit имеет встроенный резистор 100 кОм. Не при каждом изменении температуры на один градус сопротивление термистора меняется на одно и то же количество 248

ГлАВА 9

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

Контакт 1 100 кОм Контакт GND

Рис. 9.5. Схема делителя напряжения с термистором для измерения температуры Всякий термистор имеет два основных параметра: ►► сопротивление при температуре 25 °С (в нашей программе это значение хранится в переменной r0 и для нашего датчика равно 100 кОм); ►► константа, которая называется «бета» (beta), или просто B, и различается для разных термисторов (в нашей программе эта константа хранится в переменной b). Для термистора на плате Monk Makes Sensor эта константа равна 4250. Значение константы «бета» всегда указывается в паспорте термистора. Какие вычисления выполняются, можно увидеть в программе. Если вы захотите узнать больше об этой формуле, поищите в интернете по словам «уравнение Стейнхарта–Харта». Поскольку напряжение на контакте 1 зависит от отношения сопротивления термистора к постоянному резистору, оно не зависит от напряжения питания. Это особенно удобно, потому что напряжение на контакте 3V на плате micro:bit может быть любым – от 3,3 В до примерно 2 В, в зависимости от того, какой способ используется для питания micro:bit и насколько свежие батарейки. Вот почему в программе присутствует комментарий в функции read_c, объясняющий, что переменная v33 (3,3 В) в действительности не влияет на результаты. Фактически, если упростить формулу, она сократится. Эта переменная ПОМЕшАтЕльСтВО НА экОлОГИИ

249

включена, только чтобы вам было проще исследовать математические вычисления.

ПРОЕКТ: АВТОМАТИЧЕСКИЙ ПОЛИВ РАСТЕНИЙ Сложность: высокая Всякий раз, когда неугомонному ученому приходится покидать свою секретную лабораторию, чтобы поехать на конференцию, он очень беспокоится за свои комнатные растения. Чтобы избавить его от этих волнений, мы сконструируем машину для автоматического полива растений. Эта машина будет измерять влажность почвы, и когда она опустится ниже определенного порога, то включится водяной насос. По нажатии кнопки A машина будет измерять влажность почвы, а по нажатии кнопки B – запускать насос на 10 секунд.

Рис. 9.6. Машина автоматического полива комнатных растений 250

ГлАВА 9

Что понадобится Для этого проекта вам понадобятся: ►► плата micro:bit; ►► плата с реле для micro:bit, которая будет включать и выключать насос (также можно использовать контроллер для управления электромоторами, такой как Kitroniks, применявшийся нами в проекте создания роботавездехода в главе 6); ►► дозирующий насос для аквариума с напряжением питания 12 В; эти насосы медленные, зато надежные; ►► трубки и соединители для подачи воды из резервуара в горшок с растением; ►► большая пластиковая бутылка, которая будет служить резервуаром для воды; ►► источник питания с выходным напряжением 12 В для питания насоса; ►► источник питания с адаптером USB для питания платы micro:bit, например Monk Makes Power; эта конструкция рассчитана на долговременную работу, поэтому простые батарейки не подойдут. В приложении (в конце книги) вы найдете еще несколько способов питания вашего устройства micro:bit; ►► резистор с сопротивлением 1 кОм; ►► адаптер постоянного тока с винтовыми клеммами для подключения реле и подачи питания на насос; ►► 7 отрезков провода с зажимами типа «крокодил» для подключения электродов к micro:bit; ►► зажимы для бумаги, чтобы удерживать трубку для полива на месте; ►► 2 гвоздя по 12-13 сантиметров для использования в качестве электродов, которые будут втыкаться в землю в горшке с растением (обратите внимание, что 15-сантиметровые гвозди тоже прекрасно подойдут); лучше использовать оцинкованные гвозди, потому что они не ржавеют; ►► растение в горшке. ПОМЕшАтЕльСтВО НА экОлОГИИ

251

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

Насос для этого проекта должен быть перистальтическим. Иногда такие насосы еще называют дозирующими. Приобрести такой насос можно на eBay всего за несколько долларов. Обычно они поставляются с короткими впускными и выпускными патрубками, которые необходимо удлинить, чтобы они могли дотянуться до резервуара с водой и горшка с растением. Чаще патрубки имеют диаметр 4 мм – стандартный размер для систем орошения сада. Трубки и соединители можно приобрести на eBay, в хозяйственном магазине, в зоомагазине или в магазине, где продают товары для сада и огорода. Для подключения электродов к micro:bit вам потребуются длинные отрезки провода с зажимами «крокодил». Длина проводов должна быть не меньше 30 см. Роль резервуара для воды может играть любая емкость достаточного объема (подойдет старый пакет из-под молока).

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

ГлАВА 9

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

Резистор

Насос

Адаптер с винтовыми зажимами

Рис. 9.7. Электрические соединения в конструкции для автоматического полива растений 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Plant Waterer (Автоматический полив растений). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс заПОМЕшАтЕльСтВО НА экОлОГИИ

253

грузки программ в micro:bit. Версия программы на языке Python находится в файле ch_09_Plant_Waterer.py. 2. Оберните выводы резистора 1 кОм вокруг контактов 1 и 2 платы micro:bit. 3. Ориентируясь на рис. 9.7, соедините проводами с зажимами «крокодил» micro:bit, плату с реле, адаптер с винтовыми клеммами и насос. Пока не подключайте желтый и зеленый провода к гвоздям и не подсоединяйте трубки к насосу. Чтобы закрепить зажимы «крокодил» на концах винтовых клемм адаптера постоянного тока, используйте отвертку: сначала полностью откройте винтовые клеммы, вывернув винты, вставьте зажимы «крокодил» и затем заверните винты. Если зажимы «крокодил» слишком велики и не входят в отверстия винтовых клемм, то используйте выпрямленные канцелярские скрепки: вставьте их в винтовые клеммы, закрепите и затем подключите к ним зажимы «крокодил». 4. Подключите источник питания 12 В к адаптеру с винтовыми клеммами и нажмите кнопку B на плате micro:bit. После этого насос должен включиться, поработать 10 секунд и выключиться. Если этого не произошло, еще раз проверьте все электрические соединения. 5. Утопите гвозди в почву в горшке с растением на расстоянии 8–10 сантиметров друг от друга так, чтобы они выступали над поверхностью на высоту, достаточную для крепления к ним зеленого и желтого зажимов «крокодил», как показано на рис. 9.8.

Рис. 9.8. Размещение гвоздей в горшке с растением 254

ГлАВА 9

6. Теперь нажмите кнопку A на плате micro:bit, и на светодиодном дисплее должна появиться бегущая строка с числом. Это число показывает уровень влажности почвы. Чем выше влажность почвы, тем меньше число. Попробуйте полить почву в горшке, подождите несколько секунд и снова нажмите кнопку A. Число должно уменьшиться. Старайтесь не увлажнить почву слишком сильно, так как для повторного высыхания потребуется много времени, и вы можете не дождаться, когда наша конструкция включит полив. Теперь полейте растение нужным количеством воды. Возможно, вам придется посоветоваться с кем-нибудь, кто знает, насколько влажной должна быть почва для вашего конкретного растения. Выяснив это, поливайте растение небольшими порциями воды, пока почва не станет достаточно влажной. Затем нажмите кнопку A и запишите появившееся число. Это целевой уровень влажности для конструкции автоматического полива. 7. Теперь можно приступать к сборке водонесущей части конструкции. Для начала измерьте расстояние от резервуара до насоса и от насоса до горшка с растением. Трубка от резервуара до насоса должна быть достаточной длины, чтобы протянуться от насоса через верхний край резервуара и достать до его дна. Отрежьте трубки нужной длины. Прежде чем присоединить трубки к насосу, нужно выяснить, какой патрубок насоса является входным, а какой выходным. Для этого нажмите кнопку B и поочередно перекройте пальцем каждый из патрубков. Вы почувствуете пальцем, какой из патрубков всасывающий. Подпишите патрубки. Закрепите трубки на патрубках с помощью соединителей. 8. Закрепите зажим для бумаги на боковой стороне горшка и протолкните трубку через ручки зажима, как показано на рис. 9.9.

ПОМЕшАтЕльСтВО НА экОлОГИИ

255

Рис. 9.9. Крепление трубки для полива к горшку с растением 9. Наполните резервуар водой и вставьте в него всасывающую трубку так, чтобы она доставала до дна. 10. Проверьте работу конструкции, нажав кнопку B несколько раз. Если вода попадает в горшок и нигде не наблюдается протечек, то работу по созданию машины для автоматического полива можно считать почти законченной. Иначе найдите и устраните протечки, отрегулировав соединения. 11. Последний шаг, прежде чем запустить конструкцию в работу и освободить себя для других экспериментов – отрегулировать значение dry_threshold. Присвойте переменной dry_threshold значение, которое вы записали на шаге 6, а затем снова загрузите программу в micro:bit.

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

256

ГлАВА 9

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

ПОМЕшАтЕльСтВО НА экОлОГИИ

257

В блоке on start (при начале) определяются три переменные: ►► dry_threshold хранит значение, записанное на шаге 6. Когда замер уровня влажности оказывается выше этого значения (почва слишком сухая), включается полив; ►► on_time_ms определяет время (в миллисекундах), в течение которого насос будет включен. Это значение должно быть достаточно небольшим (скажем, 10 секунд), чтобы предотвратить чрезмерный полив растения. Это значение также предотвратит аварийные случаи, которые могут привести к небольшому потопу! ►► check_period_ms определяет время между проверками уровня влажности, потому что воде нужно время, чтобы равномерно увлажнить почву в горшке. По умолчанию ей присвоено значение 3 600 000 (1 час в миллисекундах). При значении 10 000 в переменной on_time_ms (10 секунд) максимальное время полива в течение дня составит 24 × 10 секунд, или 4 минуты. За это время наш насос сможет перекачать около 500 мл воды. Это довольно много, но если горшок большой, то может потребоваться уменьшить значение check_period_ ms – или увеличить значение on_time_ms, чтобы растение могло получить больше воды. Мы обсудим это далее в разделе «Что можно попробовать». Кроме этих трех переменных, в программе определены также две функции: check_dryness и water_the_plant. Функция check_ dryness обновляет переменную dryness, записывая в нее измеренный на контакте 2 уровень влажности почвы. Обратите внимание, что эта функция также включает напряжение на контакте 1, но только на время снятия показаний. Я объясню, почему так сделано, в разделе «Как это работает: измерение влажности почвы». Функция water_the_plant включает напряжение на контакте 0, чтобы активировать реле, включающее насос, на время, указанное в переменной on_time_ms, и отображает на светодиодном дисплее стрелку, направленную вниз, чтобы показать, что идет полив. В блоке forever (постоянно) программа сначала проверяет, прошло ли достаточно времени с момента последнего измере258

ГлАВА 9

ния влажности (по умолчанию 1 час). Если прошло достаточно времени, то вызывается функция check_dryness и полученное ею показание сравнивается с dry_threshold. Если почва в горшке слишком сухая, вызывается функция water_the_plant. После проверки в переменную dont_water_until записывается текущее время плюс значение check_period_ms, чтобы запланировать следующую проверку влажности. Затем уровень влажности выводится на светодиодный дисплей с помощью блока plot bar graph (построить гистограмму). Чем больше светодиодов включено, тем суше почва и тем ближе момент включения насоса. Также в программе имеется блок, проверяющий нажатие кнопки A и реагирующий соответствующим образом. Этот код вызывает функцию check_dryness и отображает полученный замер, а затем, спустя некоторое время, вновь отображает гистограмму. Обработчик кнопки B вызывает water_the_plant и потом вновь отображает гистограмму с уровнем влажности.

MicroPython Вот версия программы на языке MicroPython: from microbit import * dryness = 0 dry_threshold = 500 on_time_ms = 10000 check_period_ms = 3600000 dont_check_until = 0 def water_the_plant(): pin0.write_digital(1) display.show(Image.ARROW_S) sleep(on_time_ms) pin0.write_digital(0) def check_dryness(): global dryness pin1.write_digital(1) dryness = pin2.read_analog() pin1.write_digital(1) def bargraph(a): display.clear() ПОМЕшАтЕльСтВО НА экОлОГИИ

259

for y in range(0, 5): if a > y: for x in range(0, 5): display.set_pixel(x, 4–y, 9) while True: if button_a.was_pressed(): check_dryness() display.scroll(str(dryness)) bargraph(dryness / 200) if button_b.was_pressed(): water_the_plant() check_dryness() bargraph(dryness / 200) if running_time() > dont_check_until: check_dryness() if dryness > dry_threshold: water_the_plant() dont_check_until = running_time() + check_period_ms bargraph(dryness / 200)

Поскольку в языке MicroPython нет эквивалента блоку plot bar graph (построить гистограмму), для отображения уровня влажности в этой версии программы используется функция bargraph из проекта «Шумомер» в главе 2.

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

260

ГлАВА 9

Как это работает: измерение влажности почвы Загрязненная вода (например, вода в почве) имеет гораздо более низкое электрическое сопротивление, чем воздух. Иначе говоря, чем суше почва, тем выше ее электрическое сопротивление, и наоборот – чем более влажная почва, тем ниже ее сопротивление. Измеряя сопротивление между двумя гвоздями, можно оценить влажность (сухость) почвы. Взглянув на рис. 9.7, можно заметить резистор между контактами 1 и 2. Чтобы было легче понять суть, на рис. 9.10 та же схема нарисована по-другому. Контакт 1 1 кОм Micro:bit

Контакт 2 Почва Контакт GND

Рис. 9.10. Схема для измерения сопротивления почвы Обратите внимание, что электрическая схема на рис. 9.10 почти идентична схеме на рис. 8.4 в главе 8, с помощью которой мы измеряли сопротивление кожи в проекте «Детектор лжи». Единственное отличие состоит в том, что верхняя часть фиксированного резистора 1 кОм подключена к контакту 1, а не к контакту 3V. Перед измерением влажности почвы программа сначала подает высокий уровень напряжения (3 В) на контакт 1, затем измеряет сопротивление почвы и выключает напряжение на контакте 1. Сделано это для того, чтобы электричество проходило через почву лишь в редкие и короткие периоды времени. Если бы резистор 1 кОм был подключен к контакту 3V, электрический ток постоянно протекал бы через почву, искажая показания и ускоряя коррозию гвоздей. Этот процесс известен как электролиз. Включая контакт 1 только на время измерений, мы устраняем эту проблему. ПОМЕшАтЕльСтВО НА экОлОГИИ

261

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

262

ГлАВА 9

10 РАДИОСВЯЗЬ

Н

еугомонный ученый нашел себе друга. Пообщавшись на конференции неугомонных ученых, они решили продолжить свои дискуссии, причем, конечно же, с помощью micro:bit. На плате micro:bit имеются встроенные радиопередатчик и радиоприемник, которые вместе называются трансивером. С их помощью можно связываться с другими устройствами посредством Bluetooth. Мы уже видели работу трансивера в проекте робота-вездехода в главе 6.

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

ЭКСПЕРИМЕНТ 12: ОПРЕДЕЛЕНИЕ ДАЛЬНОСТИ РАДИОСВЯЗИ Сложность: легкая Неугомонный ученый и его друг хотели бы знать, на каком максимальном расстоянии друг от друга они смогут общаться с помощью своих устройств micro:bit.

Что понадобится Для этого эксперимента вам понадобится пара устройств micro:bit с батарейными блоками. Вам также понадобится друг, с которым можно поговорить, и открытое пространство, например поле, где вы сможете отойти друг от друга подальше. 264

ГлАВА 10

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Experiment 12: Radio Range (Эксперимент 12: радиосвязь). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл на устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Файл с программой для этого проекта называется Experiment_12.py. 2. Подключите батарейки к обоим устройствам micro:bit, впрочем, упоминать об этом, наверное, излишне. Перед тем как выйти на улицу, проверьте, готовы ли к работе оба устройства, нажав кнопку A на одном из устройств. На этой плате micro:bit должна появиться стрелка вверх, а на другой плате – галочка. Повторите этот тест, нажав кнопку A на другом устройстве micro:bit (см. рис. 10.1).

Рис. 10.1. Проверка радиосвязи между двумя устройствами micro:bit 3. Отправляйтесь в такое место, где вы с другом сможете разойтись на достаточно большое расстояние. Встаньте на расстоянии метра друг от друга, лицом друг к другу. Одно РАДИОСВязь

265

устройство micro:bit должно быть у вас, а другое – у вашего друга. 4. Теперь вы нажмите кнопку A на своем устройстве, чтобы послать сигнал. Затем помахайте другу, чтобы дать знать, что сигнал был отправлен (на случай, если он не будет получен устройством). Если устройство друга уловило сигнал, то он должен помахать вам в ответ. Если сигнал был успешно передан, отступите друг от друга еще на несколько шагов и повторите тест. 5. В какой-то момент сообщение не будет получено! Отправитель должен еще раз нажать кнопку A и помахать. Если сообщение по-прежнему не получено, подойдите друг к другу на шаг ближе. 6. Определив максимальный радиус действия радиосвязи, отправитель должен подать заранее оговоренный знак, чтобы получатель подошел к нему, подсчитывая шаги. 7. Измерьте длину шага получателя и умножьте ее на количество шагов, которые он сделал. В результате вы получите дальность действия радиомодуля на плате micro:bit. Совет: чтобы максимально точно измерить длину шага, попросите человека пройти пять шагов, с помощью длинной рулетки измерьте пройденное расстояние и разделите это расстояние на 5. Неугомонный ученый проверил дальность радиосвязи двух своих устройств micro:bit и определил, что она составила 192 шага. Пять шагов покрыли расстояние 3,65 м, то есть длина одного шага составила 0,73 м. Таким образом, дальность радиосвязи получилась равной 192 × 0,73, или примерно 140 м. Другие, проводившие этот эксперимент, сообщали мне о дальности более 350 метров. Обратите внимание, что диапазон будет значительно меньше, если на пути радиоволн будет находиться ваше тело или тело вашего друга.

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

266

ГлАВА 10

Blocks Вот программа на языке Blocks.

Вы можете управлять мощностью радиопередатчика. Блок on start (при начале) выполняет вложенный блок radio set trans­ mit power (радио: задать мощность передачи), чтобы установить мощность равной 7 (это максимальная мощность) – чем больше мощность, тем больше дальность радиосвязи. Блок radio set

РАДИОСВязь

267

group (радио: задать номер группы) назначает группу для радиосвязи. В этом эксперименте используется группа 1, то есть все устройства micro:bit с этим номером группы смогут принимать радиосообщения. Из этого следует, что если вы решите провести данный эксперимент сразу с несколькими парами micro:bit, то каждая пара экспериментаторов должна выбрать и установить свой номер группы от 0 до 255, чтобы не мешать другим парам. Блок on button A pressed (кнопка A нажата) выполняет блок radio send (радио: отправить строку), чтобы передать простое тестовое сообщение. Затем на дисплее будет показан значок стрелки, направленной на север, чтобы вы могли видеть, что сообщение отправлено. Прием сообщений обрабатывается с помощью блока on re­ ceived (радио: при получении данных), где указывается имя переменной, в которую должно быть помещено входящее сообщение. В данном эксперименте принятое сообщение помещается в переменную receivedString. Если полученное сообщение совпадает с тестовым, то на экране на мгновение появится значок галочки.

MicroPython Далее приводится версия программы на MicroPython. Обратите внимание, что способ отправки сообщений в программе на MicroPython немного отличается от способа, используемого в программе на языке Blocks, поэтому в оба устройства micro:bit, используемые в эксперименте, должна быть записана программа на каком-то одном языке – либо на Blocks, либо на MicroPython. from microbit import * import radio radio.on() radio.config(power=7, group=1) while True: if button_a.was_pressed(): radio.send("test") display.show(Image.ARROW_N) sleep(1000)

268

ГлАВА 10

display.clear() message = radio.receive() if message == 'test': display.show(Image.YES) sleep(1000) display.clear()

Чтобы установить мощность радиопередатчика и номер группы в программе на MicroPython, нужно вызвать метод radio. config. Этот метод также позволяет управлять некоторыми другими параметрами. Более полную информацию по этой теме вы найдете по адресу: https://bbcmicrobitmicropython.readthedocs.io/ en/latest/radio.html. Основная работа в программе на языке Blocks выполняется обработчиками. В MicroPython нет обработчиков, поэтому приходится постоянно проверять нажатие кнопки или прием входящих сообщений. Это делается с помощью операторов if в цикле while True, который выполняется постоянно. Сначала программа проверяет, была ли нажата кнопка A. Если да, то программа отправляет тестовое сообщение и показывает стрелку вверх. Для проверки получения сообщения вызывается функция message.receive. Когда радиоприемник получает сообщения, он ставит их в очередь. Если после последней проверки не было получено новых сообщений, то message.receive возвращает None. Но если было получено одно или несколько сообщений, то message.receive возвращает самое старое сообщение и удаляет его из очереди. Нас интересует только совпадение текста полученного сообщения с тестовым, поэтому программа проверяет это условие, и если полученное сообщение совпадает с тестовым, то на дисплей выводится значок YES (галочка).

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

269

шие пакеты данных. В программе этого проекта роль таких пакетов играют короткие текстовые строки.

ПРОЕКТ: БЕСПРОВОДНОЙ ДВЕРНОЙ ЗВОНОК Сложность: средняя Погружаясь с головой в эксперименты или отвлекаясь на воспитание своих непослушных подчиненных, неугомонный ученый часто не слышит звонка в дверь, когда курьеры доставляют посылки. Чтобы исправить это положение, он задумался об установке в лаборатории дополнительного динамика, воспроизводящего звуковой сигнал при звонке в дверь. Мы поможем неугомонному ученому и доработаем проект дверного звонка из главы 2. В этой версии проекта мы используем две платы micro:bit: одну подключим к динамику, воспроизводящему звуковой сигнал, а вторая будет играть роль кнопки дверного звонка (рис. 10.2). Когда кто-то нажмет одну из кнопок на второй плате micro:bit, она отправит радиосооб-

Рис. 10.2. Беспроводной дверной звонок 270

ГлАВА 10

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

Что понадобится Для этого проекта вам понадобятся: ►► 2 платы micro:bit, одна будет играть роль кнопки дверного звонка, а вторая – воспроизводить звуковой сигнал; ►► 3 отрезка провода с зажимами типа «крокодил» для подключения динамика к плате micro:bit; ►► 2 блока питания с напряжением 3 В и с разъемами USB или 2 батарейных блока с выключателями для питания плат micro:bit; ►► динамик для воспроизведения звукового сигнала, я советую использовать динамик Monk Makes Speaker, созданный специально для micro:bit; ►► офисный пластилин Blu-Tack или двусторонний скотч для крепления одной из плат micro:bit к дверной коробке.

Конструирование 1. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Wireless Doorbell (Беспроводной дверной звонок). Скопируйте шестнадцатеричный файл в оба устройства micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit. Если вы предпочитаете использовать программу на MicroPython, загрузите ее с того же веб-сайта. Файл с программой для этого проекта называется ch_10_Wireless_Doorbell.py. 2. Подключите динамик к одной из плат micro:bit. Можете использовать динамик, который уже применяли в проекте простого дверного звонка из главы 2 (инструкции по подключению динамика вы найдете в том проекте). РАДИОСВязь

271

3. Проверьте динамик, нажав кнопку A на плате, которая будет играть роль кнопки дверного звонка. После этого динамик, подключенный к другой плате micro:bit, должен немедленно начать воспроизведение мелодии «Конферансье». Когда она закончится, попробуйте нажать кнопку B, и в динамике должен зазвучать «Похоронный марш». 4. С помощью офисного пластилина Blu-Tak или двустороннего скотча закрепите micro:bit без динамика на дверной коробке с внешней стороны.

Программа Принцип действия обеих версий программы основан на отправке по радио сообщения с текстом «db1» или «db2», в зависимости от нажатой кнопки. Приняв сообщение, плата micro:bit проигрывает одну из двух мелодий, в зависимости от полученного сообщения. Так же как в эксперименте 12, в обе платы должна быть прошита одна и та же версия программы – либо на языке Blocks, либо на языке MicroPython, поэтому решите, какую версию вы будете использовать.

Blocks Вот как выглядит программа для этого проекта в редакторе Blocks.

272

ГлАВА 10

Обратите внимание, насколько эта программа похожа на программу из эксперимента 12. Если нажать кнопку A, то она отправит строку «db1» (сообщая, что нажата кнопка 1) и отобразит на светодиодном дисплее стрелку, направленную вверх, чтобы показать, что сообщение отправлено. Если нажать кнопку B, то будет отправлено сообщение «db2». На принимающей стороне программа сравнивает полученное сообщение со строками «db1» и «db2» и проигрывает соответствующую мелодию.

MicroPython Вот версия программы на MicroPython: from microbit import * import radio, music radio.on() radio.config(power=7, group=1) def send_message(message): radio.send(message) display.show(Image.ARROW_N) sleep(1000) display.clear() while True: if button_a.was_pressed(): send_message("db1") if button_b.was_pressed(): РАДИОСВязь

273

send_message("db2") message = radio.receive() if message == 'db1': music.play(music.ENTERTAINER) elif message == 'db2': music.play(music.FUNERAL)

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

Что можно попробовать Попробуйте поменять мелодии местами. Также можно попробовать изменить программу так, чтобы при получении сообщения «db1» или «db2» мелодия воспроизводилась несколько раз. Тогда неугомонный ученый почти наверняка услышит ее!

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

ПРОЕКТ: РАДИОУПРАВЛЯЕМЫЙ РОБОТ-ВЕЗДЕХОД Сложность: высокая Ни одна секретная лаборатория не может обойтись без робота, который будет передавать инструкции лаборантам. В главе 6 мы создали робот-вездеход, которым можно было управлять че274

ГлАВА 10

рез Bluetooth с помощью телефона. В этом проекте мы создадим похожего робота, но управляться он будет не с помощью телефона и Bluetooth, а по радио, с помощью второй платы micro:bit. Неугомонный ученый будет управлять роботом, наклоняя управляющую плату micro:bit влево, вправо, вперед или назад. На рис. 10.3 показан проект в сборе, а его работу можно увидеть в видеоролике на YouTube (https://youtu.be/Qqr0fknoPQ4/).

Рис. 10.3. Радиоуправляемый робот-вездеход

РАДИОСВязь

275

Что понадобится Для этого проекта вам понадобятся: ►► 2 платы micro:bit; ►► плата расширения Kitronik Motor Driver Board для micro:bit (V2) для управления электромоторами; ►► недорогой конструктор для сборки шасси; включает два электромотора и батарейный блок на 4 батарейки AA; ►► 4 батарейки AA; ►► батарейный блок AAA для питания управляющей платы micro:bit; ►► разные отвертки для сборки шасси и подключения проводов к винтовым клеммам на плате контроллера мотора; ►► паяльное оборудование для припаивания проводов к электромоторам; ►► офисный пластилин Blu-Tack для крепления платы расширения и micro:bit на шасси.

Конструирование Используйте собранный робот-вездеход, построенный в главе 6. Если вы еще не собрали его, то вернитесь к главе 6 и выполните шаги 1–4 в разделе «Конструирование» в проекте «Робот-вездеход». Однако для управления роботом будет использоваться другая программа, поэтому после сборки корпуса выполните шаги, перечисленные ниже. Пока не вставляйте батарейки, иначе ваш робот может случайно соскользнуть с вашего стола! 1. Сначала запишите программу в устройство, закрепленное на шасси робота. Откройте в браузере страницу репозитория с примерами для этой книги (https://github.com/simonmonk/mbms/) и щелкните на ссылке Rover (Робот). Скопируйте шестнадцатеричный файл в устройство micro:bit. Если вы не помните, как это делается, вернитесь к главе 1, где в разделе «Программирование micro:bit» подробно обсуждается процесс загрузки программ в micro:bit.

276

ГлАВА 10

2. Затем запишите программу в устройство micro:bit, которое будет играть роль пульта управления. Откройте в браузере страницу репозитория с примерами для этой книги (https:// github.com/simonmonk/mbms/) и щелкните на ссылке Rover Con­ troller (Пульт управления роботом). Когда откроется страница с программой, щелкните на кнопке Download (Скачать) и скопируйте шестнадцатеричный файл в устройство micro:bit. 3. Перед тем как позволить роботу перемещаться по лаборатории, проверьте его работоспособность. Возможно, по результатам проверки вам придется поменять местами некоторые провода, идущие к двигателям, чтобы робот правильно выполнял ваши команды. Вставьте батарейки, а затем переверните робота вверх колесами, чтобы можно было видеть, как вращаются колеса, не опасаясь, что он уедет. Наклоните плату micro:bit, которая играет роль пульта управления, влево, и на светодиодных дисплеях обеих плат должна появиться стрелка, направленная влево. При этом оба колеса должны вращаться в одном направлении, но правое колесо, если смотреть сверху, должно вращаться быстрее, чем левое. Если одно из колес вращается в неправильном направлении, поменяйте местами на винтовой клемме контроллера красный и черный провода для этого электромотора. 4. Поставьте робота на пол и попробуйте сделать круг. Если робот застрянет, его можно остановить, повернув пульт управления micro:bit в горизонтальное положение.

Программа В этом проекте используются две программы: одна для пульта управления и другая для робота. Обе программы в этом проекте написаны только на языке Blocks.

Пульт управления Вот программа для платы micro:bit, играющей роль пульта управления.

РАДИОСВязь

277

Здесь в блоке on start (при начале) используется блок radio set group (радио: задать номер группы). Этот блок заставляет micro:bit принимать сообщения только от других устройств micro:bit, находящихся в той же группе. В данном проекте используется группа 1. Это предотвращает непредсказуемое поведение робота из-за случайного приема команд от других ученых, работающих поблизости, которые могут использовать такой же пульт управления, но с другим настроенным номером группы. Если вы решите построить несколько радиоуправляемых роботов с другими парами плат micro:bit, то для каждой такой пары замените номер в блоке radio set group (радио: задать номер группы) другим значением. После этого каждый робот будет выполнять команды только со своего пульта управления. Номер группы может быть любым числом от 0 до 255. Остальная часть программы состоит из блоков, определяющих жесты, которые посылают команды роботу. Например, под блоком on start (при начале) находится блок on tilt left (наклон влево), который при наклоне платы micro:bit влево передает строку «L» и отображает стрелку, направленную влево. Вот полный список команд, которые может отправлять пульт роботу: ►► «S» – Stop (стоп); ►► «L» – Left (влево); 278

ГлАВА 10

►► «R» – Right (вправо); ►► «B» – Backward (назад); ►► «F» – Forward (вперед).

Робот Вот программа для платы micro:bit, принимающей эти команды.

РАДИОСВязь

279

Так же как в программе для пульта управления, здесь есть блок on start (при начале), который устанавливает номер группы 1. Напомню, что если вы решите изменить номер группы, то должны сделать это на обеих платах micro:bit! Остальная часть программы находится в блоке on radio re­ ceived (радио: при получении данных). Внутри этого блока имеется несколько операторов if (если), которые проверяют строку команды и выполняют соответствующее действие. Например, если получена команда «L», на светодиодном дисплее отображается стрелка влево, а затем электромотор 1 запускается для движения вперед со скоростью, составляющей 50 % от максимальной, а электромотор 2 – для движения вперед с максимальной скоростью. В результате электромотор 2 (правый) будет крутиться быстрее, чем левый, и робот начнет поворачиваться по дуге влево.

Что можно попробовать Попробуйте добавить в программы пару дополнительных команд. Например, можно добавить команду «D» (Dance – танец), посылаемую при встряхивании пульта управления, получив которую, робот должен выполнить короткую последовательность каких-нибудь движений. Также можете добавить команду «C» (Circle – круг), посылаемую, например, при нажатии кнопки A или B, получив которую, робот должен развернуться на месте, запустив один электромотор для движения вперед на максимальной скорости, а другой – назад, тоже на максимальной скорости.

Как это работает: блоки управления электромотором В программе для робота появились новые для вас блоки, которые находятся в категории Motor Driver (Управление мотором). Эти блоки были созданы разработчиками использованного в проекте контроллера мотора из компании Kitronik. Если вы решите сконструировать новый проект и использовать эти блоки, то вам сначала нужно добавить их в свой проект. Для этого щелкните на пункте Extensions (Расширения) в конце списка категорий блоков. После этого откроется диа280

ГлАВА 10

лог, как показано на рис. 10.4. Выполните поиск нужного пакета. Если пакет не обнаружился, обновите страницу в браузере и попробуйте выполнить поиск еще раз.

Рис. 10.4. Управление расширениями в редакторе Blocks Например, в поле с текстом Search or enter project URL... (Поиск или ввод URL-адреса проекта...) введите следующий адрес: https://github.com/KitronikLtd/pxt-kitronik-motor-driver/. Чтобы убедиться, что URL-адрес указан правильно, сначала введите его в другой вкладке браузера. Когда страница откроется, скопируйте URL-адрес из адресной строки браузера и вставьте его в поле. После того как вы введете URL-адрес и нажмете клавишу Enter, вы должны увидеть значок проекта kitronik-motor-driver, как показано на рис. 10.5. Щелкните на нем, и вы обнаружите, что в редакторе Blocks появилась новая категория, содержащая блоки управления электромотором, которые вы можете использовать в своих программах.

Рис. 10.5. Результат поиска пакета в расширениях для редактора Blocks РАДИОСВязь

281

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

ИТОГИ В этой главе мы определили радиус действия радиомодуля в micro:bit, собрали усовершенствованный дверной звонок и сконструировали радиоуправляемого робота. Благодаря неплохому радиусу действия радиомодуля устройства micro:bit могут обмениваться сообщениями друг с другом, и эту особенность можно использовать в любых проектах, где требуется передача команд или сообщений на расстоянии. Это была последняя глава в книге. В приложении, которое следует далее, вы найдете дополнительную информацию о деталях и компонентах, которые вам понадобятся для создания проектов из этой книги, и где их можно приобрести. Сообщество micro:bit очень динамично и активно. Вы найдете множество интересных проектов и экспериментов с платой micro:bit на сайте https://microbit.org/ideas/, которые вдохновят вас новыми идеями и подскажут, что еще можно сделать с помощью micro:bit.

282

ГлАВА 10

ПРИЛОЖЕНИЕ

В

проектах, описанных в этой книге, используется множество деталей, принадлежностей и компонентов, и, к сожалению, ни один поставщик не продает их все вместе. Если вы найдете проект, который захотите реализовать, или эксперимент, который захотите попробовать, то внимательно прочитайте «Что понадобится» и запишите недостающие компоненты и принадлежности. Это будет ваш список покупок.

Таблицы в этом приложении помогут вам найти нужные принадлежности из вашего списка. Если вам не удастся что-то найти, поищите в интернете по названию или описанию предмета – обычно в таких случаях у дается быстро найти интернетмагазин, в котором можно купить этот предмет. В комплекте принадлежностей Monk Makes Electronics Starter Kit для micro:bit (https://monkmakes.com/mb_kit/) вы найдете провода с зажимами «крокодил», а также платы Monk Makes Speaker и Monk Makes Sensor, используемые в нескольких проектах этой книги.

ПОЛЕЗНЫЕ ИНСТРУМЕНТЫ Для реализации большинства проектов и экспериментов, описанных в данной книге, не требуется никаких дополнительных инструментов. Однако у каждого юного конструктора должен быть набор некоторых инструментов. Вероятно, многие из них уже есть у вас дома. Инструмент Описание Ножницы Двусторонний скотч Отвертки С плоским и крестовым жалом Дрель (для главы 6) Паяльное оборудо­ Вполне подойдет недорогой вание (для главы 6) набор. Не нужно пытаться приобрести что­то необычное

Где можно приобрести

https://amperka.ru/product/ soldering-starter-kit Недорогие альтернативы можно найти в списке по адресу https://amperka.ru/ collection/tools Канцелярский нож Для вырезания отверстий В магазинах хозяйственных в картоне и канцелярских товаров Плоскогубцы Универсальные плоскогубцы В магазинах инструментов среднего размера могут пригодиться для загибания проволоки Линейка В магазинах канцелярских товаров Офисный пластилин Удобная штука для времен­ В магазинах канцелярских Blu­Tack ного крепления micro:bit товаров к разным поверхностям

284

ПРИлОЖЕНИЕ

Только один проект в книге – проект робота-вездехода в главе 6 – требует пайки. Если вы не планируете собирать этот проект, то и паяльное оборудование вам не понадобится. Еще один проект – проект аниматронной головы в главе 6 – требует использования дрели для проделывания отверстий в шариках для настольного тенниса. Если вы не планируете собирать этот проект, то и дрель вам не понадобится.

ОБЩИЕ ПРИНАДЛЕЖНОСТИ Вот некоторые принадлежности, которые используются во многих проектах и экспериментах в этой книге. Многие наборы для micro:bit включают почти все эти детали, и некоторые из них также перечислены здесь. Принадлежности Описание USB­кабели Для питания и программирова­ ния micro:bit

Провода с зажимами «крокодил» Провода с зажимами «крокодил» и штекерами Комплект принадлежно­ стей Pimoroni micro:bit Комплект принадлеж­ ностей BBC micro:bit Go

Для подключения разных устройств к плате micro:bit Для подключения сервомоторов к плате micro:bit

Где можно приобрести Эти кабели часто используются для заряд­ ки сотовых телефонов, поэтому у вас дома почти наверняка найдется пара таких кабелей. Их также можно приобрести в магазинах, торгующих сотовыми теле­ фонами и компьютерами. Кроме того, кабели входят в комплекты micro:bit Go и Pimoroni micro:bit https://amperka.ru/mbit/alligator-clip-wires/

https://amperka.ru/product/wire-mm-15cm https://amperka.ru/mbit/alligator-clip-wires/ https://amperka.ru/product/wire-ff https://amperka.ru/product/wire-fm Содержит https://amperka.ru/product/battery-holder-2aa USB­кабель https://amperka.ru/mbit/connector-jst-ph-2-pin и батарейный блок https://amperka.ru/mbit/usb-cable-micro

В отечественных интернет­магазинах нет в продаже этого комплекта, но его содер­ жимое можно купить по отдельности: https://amperka.ru/mbit/bbc-microbit-v2 https://amperka.ru/mbit/battery-holder-2aa https://amperka.ru/mbit/connector-jst-ph-2-pin https://amperka.ru/mbit/usb-cable-micro Комплект Monk Содержит провода https://www.eduporium.com/store/monkMakes Electronics с зажимами makes-electronics-starter-kit-for-micro-bit.html Starter Kit «крокодил» https://thepihut.com/products/electronicsдля micro:bit и дополнительные starter-kit-for-micro-bit/ платы расширения Содержит плату micro:bit, USB­кабель и батарейный блок

ПРИлОЖЕНИЕ

285

ПИТАНИЕ MICRO:BIT Вот несколько способов организации электропитания для платы micro:bit. Источник электропитания Батарейный блок на 2 батарейки AAA

Описание

Где можно приобрести

Держатель на 2 батарейки https://amperka.ru/mbit/batteryholder-2aa https://amperka.ru/product/ microbit-batbit Блок электропитания Держатель для плоских https://amperka.ru/mbit/kitronikKitronik MI:power круглых аккумуляторов mipower-board Блок электропитания Источник постоянного https://amperka.ru/mbit/microbitMonk Makes Power тока с напряжением power для micro:bit 4,5–12 В. Может использоваться для организации долговременного электропитания micro:bit Зарядное устройство Комплект аккумуляторов https://amperka.ru/mbit/ для micro:bit и зарядное устройство, digicharger-d4 которые можно использо­ https://amperka.ru/mbit/batteryвать для питания micro:bit aa-robiton-rechargeable Резервный Удобное устройство https://www.chipdip.ru/product/ аккумулятор с перезаряжаемым gpfn03 с разъемом USB аккумулятором Резервные аккумуляторы (не подходит можно найти в магазинах, для проектов, где торгующих сотовыми требуется большая телефонами и компьютерами мощность)

286

ПРИлОЖЕНИЕ

ДОПОЛНИТЕЛЬНЫЕ ПРИНАДЛЕЖНОСТИ В этой книге широко используются дополнительные принадлежности для micro:bit, такие как динамики и датчики. Вот некоторые из этих принадлежностей. Принадлежности Описание Monk Makes Speaker Динамик для проектов, для micro:bit где требуется воспроизводить звук

Mini.Mu Speaker Monk Makes Sensor для micro:bit

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

Adafruit MEMS Датчик для измерения Microphone Breakout громкости звука (требуется пайка) Kitronik Motor Для проекта Driver Board для BBC робота­вездехода micro:bit (V2) в главе 6

Где можно приобрести https://www.eduporium.com/store/ monk-makes-speaker-for-micro-bit. html https://shop.pimoroni.com/products/ speaker-for-micro-bit/ https://www.kitronik.co.uk/46124powered-speaker-board-for-microbit.html https://shop.pimoroni.com/products/ mini-mu-speaker/ https://www.eduporium.com/store/ monk-makes-sensor-for-micro-bit. html https://www.kitronik.co.uk/46122sensor-board-for-microbit.html https://shop.pimoroni.com/products/ sensor-for-micro-bit/ https://www.adafruit.com/ product/2716 https://www.kitronik.co.uk/5620motor-driver-board-for-the-bbcmicrobit-v2.html

ПРИлОЖЕНИЕ

287

ПРОЧИЕ ПРИНАДЛЕЖНОСТИ Вам также понадобятся еще кое-какие принадлежности. Принадлежности Описание Неодимовые магниты Очень мощные магниты (плоской круглой формы) Сервомотор с напряжением питания 3 В Дозирующий насос для аквариумов с напряжением питания 12 В Резистор на 1 кОм

Маломощные сервомоторы, питающиеся напряжением 3 В Используется в проекте В зоомагазинах или по адресу автоматического полива https://amperka.ru/mbit/ в главе 9 immersible-water-pump

Используется в проекте автоматического полива в главе 9 Адаптер постоянного Используется в проекте тока с винтовыми автоматического полива клеммами в главе 9 Источник питания Используется в проекте 12 В для дозирую­ автоматического полива щего насоса в главе 9 для питания дозирующего насоса (при заказе в интернет­ магазине указывайте тип вилки подключения к сети переменного тока для вашей страны и выбирайте модель с выходным напряжением 12 В и силой тока 1 А)

288

Приложение

Где можно приобрести Их можно найти в хозяйственных магазинах, а также купить по адресу https://www.chipdip.ru/ product0/528275399 https://amperka.ru/mbit/servo-fs90

https://amperka.ru/product/resistor

https://amperka.ru/mbit/21mmscrew-jack https://amperka.ru/mbit/powersupply-adapter-robiton-tn1000s

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

B Blocks, среда программирования для  micro:bit, 30

M micro:bit акселерометр, 27, 129 аналоговые выходы, 26 верхняя сторона, 19 две версии платы, 21 дискретные и аналоговые входы, 26 кнопка сброса, 21 кнопки A и B, 19 компас, 27 контакты, 20 магнитометр, 27 нижняя сторона, 21 подключение аппаратуры к контактам, 25 подключение динамика, 61, 63 подключение наушников, 61 подключение питания, 21 подключение питания от батареек, 22 подключение питания через USB, 22 программирование, 29 светодиодный дисплей, 20 экскурсия, 19 MicroPython, язык программирования для micro:bit, 38 Monk Makes Speaker, 63 Mu, редактор Плоттер (Plotter), функция, 137 Plotter (Плоттер), функция, 137 Mu, редактор программ на MicroPython, 38

P Plotter (Плоттер), функция, 137

S speech, библиотека, 212

А

Автоматический ночник, 86 Автоматический полив растений, 250 Акселерометр, 27, 129 Аналоговые выходы, 26 Аниматронная голова, 168

Б

Бесконечные отражения, 95 Беспроводной дверной звонок, 270 Блоки управления электромотором, 280

В

Векторы, 140 Волшебный магнетизм, 109 Время, 197 Вывод времени в двоичном формате, 209

Г

Гальваническое сопротивление кожи, 229 Говорящие часы, 210 Гравитация, ускорение и сила, 134

Д

Датчики, 248 Датчик освещенности, 84 Две версии платы micro:bit, 21 Двоичные часы, 202 как читать показания, 202 Делитель напряжения, 234 Детектор лжи, 229 Дискретные и аналоговые входы, 26

Ж

Жесты, 130, 132

З

Звук и частота, 67

И

Измерение влажности почвы, 261 ПРЕДМЕтНый укАзАтЕль

289

времени реакции, 226 магнитных полей, 117 температуры, 237 Импульсы и сервомоторы, 165

К

Как это работает блоки управления электромотором, 280 выход микрофона, 81 датчики, 248 измерение влажности почвы, 261 измерение времени реакции, 226 обнаружение лжи по напряжению и сопротивлению, 233 почему греется процессор, 241 радиосигналы, 269 расчет суммарного ускорения, 140 сила магнитов, 123 сила, ускорение и гравитация, 134 частота и звук, 67 Калибровка магнитометра, 112 Кнопка сброса, 21 Кнопки A и B, 19 Компас, 27, 110 Коэффициент заполнения, 166

М

Магнетизм, 109 Магнитная сигнализация открывания двери, 124 Магнитное поле Земли, 111 Магнитные полюса Земли, 116 Магнитные поля, измерение, 117 Магнитометр, 27 калибровка, 112

О

Обнаружение лжи по напряжению и сопротивлению, 233 Определение дальности радиосвязи, 264

П

Период, 165 Пифагора теорема, 140 Плоттер (Plotter), функция, 137 Подключение аппаратуры к контактам, 25

290

ПРЕДМЕтНый укАзАтЕль

Подключение питания, 21 от батареек, 22 через USB, 22 Почему греется процессор, 241 Программирование micro:bit, 29 Программирование для micro:bit основные понятия, 45 арифметика, 48 массивы и списки, 53 переменные, 45 строки, 51 условный оператор if, 49 скачивание программ, 55 Проекты автоматический ночник, 86 автоматический полив растений, 250 акселерометр, 154 аниматронная голова, 168 бесконечные отражения, 95 беспроводной дверной звонок, 270 говорящие часы, 210 двоичные часы, 202 детектор лжи, 229 детектор тщательности чистки зубов, 142 компас, 110 магнитная сигнализация открывания двери, 124 музыкальный дверной звонок, 70 радиоуправляемый робот-вездеход, 275 регистратор температуры и освещенности, 241 робот-вездеход, 185 световая гитара, 88 шумомер, 77 Пульт управления, 277

Р

Рабочий цикл, 165 Радиосвязь, 263 определение дальности, 264 Радиосигналы, 269 Радиоуправляемый робот-вездеход, 275 Регистратор температуры и освещенности, 241

Робот-вездеход, 185

С

Световая гитара, 88 Светодиодная лента, 96 Светодиодный дисплей, 20 Сервомотор, 159 и импульсы, 165 Сила магнитов, 123 Сила, ускорение и гравитация, 134 Скачивание программ, 55 Скорость реакции, 218 Сопротивление кожи, 229 Строки комментариев, 205 Суммарный вектор, 140 Счет времени, 197

Т

Теорема Пифагора, 140 Термистор, 248 Терморезистор, 248

У

Ускорение, сила и гравитация, 134

Ч

Частота и звук, 67 Чтение температуры, 246 Чтение уровня освещенности, 247

Ш

ШИМ (широтно-импульсная модуляция), 164 Ширина импульса, 165 Широтно-импульсная модуляция (ШИМ), 164

Э

Экскурсия по micro:bit, 19 Эксперименты генерация звуков, 64 датчик освещенности, 84 жесты, 130 запись данных об ускорении в файл, 147 запуск сервомотора, 159 измерение магнитных полей, 117 измерение температуры, 237 оно говорит!, 69 определение дальности радиосвязи, 264 построение графика ускорения в реальном времени, 137 скорость реакции, 218 счет времени, 197 Электромоторы и поток электроэнергии, 194

ПРЕДМЕтНый укАзАтЕль

291

Книги издательства «ДМК Пресс» можно заказать в торгово-издательском холдинге «Планета Альянс» наложенным платежом, выслав открытку или письмо по почтовому адресу: 115487, г. Москва, 2-й Нагатинский пр-д, д. 6А. При оформлении заказа следует указать адрес (полностью), по которому должны быть высланы книги; фамилию, имя и отчество получателя. Желательно также указать свой телефон и электронный адрес. Эти книги вы можете заказать и в интернет-магазине: www.a-planeta.ru. Оптовые закупки: тел. (499) 782-38-89. Электронный адрес: [email protected].

Саймон Монк Micro:bit для неугомонных ученых Главный редактор

Мовчан Д. А.

[email protected]

Перевод Корректор Верстка Дизайн обложки

Киселев А. Н. Синяева Г. И. Чаннова А. А. Мовчан А. Г.

Формат 70×100 1/16. Гарнитура Century Schoolbook. Печать офсетная. Усл. печ. л. 23,73. Тираж 200 экз. Веб-сайт издательства: www.dmkpress.com