В этой части нашего обзора мы будем исследовать стандартную для Raspberry Pi плату расширения Sense HAT (Hardware attached on top, HAT) и применять полученные ранее знания по языкам Scratch и Python для программирования требуемых функций. Материал не самый простой, но следуя за нами и выполняя пошагово все инструкции, вы неожиданно обнаружите, что даже самые сложные вещи, которые вы и не представляли как  можно сделать, окажутся реализованными вами, просто следуя простым инструкциям! 

Оборудованный интерфейсами ввода-вывода, и в том числе универсальным GPIO, этот микрокомпьютер создан для работы со множеством внешних устройств и плат расширения, существенно дополняющих его начальный функционал. Мы же начнём с универсальной платы расширения, подключаемой к интерфейсу GPIO и оборудованной различными устройствами ввода и вывода: всевозможными датчиками, а также панелью со светодоидами для вывода световой и графической информации — Sense HAT. Она была разработана специально для космической миссии Astro Pi. В рамках совместного проекта Raspberry Pi Foundation, Космического агентства Великобритании и Европейского космического агентства, Astro Pi позволил доставить платы Raspberry Pi и Sense HAT на Международную космическую станцию на борту грузовой ракеты Orbital Science Cygnus. С момента безопасного достижения орбиты высоко над Землей, Sense HAT, прозванные астронавтами Эд (Ed) и Иззи (Izzy), уже много раз использовались для запуска кода и проведения научных экспериментов, предоставленных школьниками со всей Европы.

Хотя Эд и Иззи достаточно далеки от вас, чтобы вы могли использовать их самостоятельно, но абсолютно такуе же плату Sense HAT можно найти здесь, на планете Земля, во всех розничных магазинах Raspberry Pi — и в том числе в нашем интернет-магазине: Плата расширения Raspberry Pi Sense HAT!

 

РЕАЛЬНАЯ ПЛАТА ИЛИ СИМУЛЯТОР?
Если у вас нет возможности приобрести эту плату расширения, но есть желание изучить её работу — не проблема. Raspberry Pi поддерживает работу как с физической платой расширения, так и с её эмулированной виртуальной версией. В этом случае нет необходимости подключать плату к разъему GPIO Raspberry Pi, а также можно будет пропустить раздел под названием «Установка Sense HAT» и просто попробовать проекты в эмуляторе Sense HAT — они тоже будут работать!

 

Обзор Sense HAT

Sense HAT — это мощное многофункциональное дополнение для Raspberry Pi. Помимо матрицы 8×8 из 64 программируемых красных, зеленых и синих (RGB) светодиодов, которыми можно управлять для получения любого цвета из диапазона в миллионы оттенков, Sense HAT включает в себя пятипозиционный джойстик-контроллер и шесть встроенных датчиков.

 

Gyroscope sensor (датчик гироскопа): используется для определения изменений угла во времени, больше известного как технический термин угловая скорость, путем отслеживания направления гравитационного поля Земли — силы, которая притягивает предметы к центру планеты. Проще говоря, гироскопический датчик может определить, когда вы поворачиваете Sense HAT относительно поверхности Земли и насколько быстро он вращается.

 

Accelerometer (Акселерометр): похож на датчик гироскопа, но вместо того, чтобы отслеживать угол относительно гравитационного поля Земли, он измеряет значение ускорения в нескольких направлениях. В совокупности показания (данные) двух датчиков могут помочь вам отслеживать, куда указывает Sense HAT и как он перемещается.

 

Magnetometer (Магнитометр): измеряет силу магнитного поля и является еще одним датчиком, который может помочь отслеживать движения Sense HAT. Измеряя естественное магнитное поле Земли, магнитометр может определить направление магнитного севера. Этот датчик также можно использовать для обнаружения металлических предметов и даже электрических полей. Все три этих датчика встроены в один чип, помеченный «ACCEL / GYRO / MAG» на печатной плате Sense HAT.

 

Humidity sensor (Датчик влажности): измеряет количество водяного пара в воздухе, известное как относительная влажность. Относительная влажность может варьироваться от 0%, если вода отсутствует, до 100%, если воздух полностью насыщен. Данные о влажности могут в том числе использоваться для определения вероятности дождя!

 

Barometric pressure sensor (Датчик атмосферного давления): также известный как барометр (barometer), он измеряет давление воздуха. Хотя большинство людей знакомы с барометрическим давлением из прогноза погоды, у барометра есть секретное второе применение: он может отслеживать, когда вы поднимаетесь или спускаетесь с холма или горы, поскольку давление воздуха изменяетсяв по мере продвижения вверх от уровня моря.

 

Temperature sensor (Датчик температуры): измеряет, насколько жарко или холодно в окружающем его пространстве, хотя на него также влияет и то, насколько горячей или холодной является сама плата Sense HAT: если вы используете чехол или внешний корпус — ваши показания могут оказаться выше, чем вы ожидаете. Sense HAT не имеет отдельного дискретного датчика температуры — вместо этого он использует датчики температуры, встроенные в датчики влажности и атмосферного давления. Программа может использовать один или оба этих датчика — это зависит от вашего решения.

 

 

Установка Sense HAT

Если у вас есть физическая плата Sense HAT, начните с ее распаковки и убедитесь, что у вас есть все детали: у вас должна быть сама плата Sense HAT, четыре металлических или пластиковых стойки, известные как распорки (проставки, спейсеры, spacers), и восемь винтов. У вас также могут быть металлические контакты на черной пластиковой полосе, похожей на контакты GPIO на Raspberry Pi. В этом случае, защёлкните её пинами вверх на нижней части платы Sense HAT до характерного звука-щелчка.

Распорки предназначены для предотвращения изгиба платы Sense HAT при использовании джойстика. В принципе, плата Sense HAT будет работать и без их установки, но их использование поможет защитить от повреждения все элементы: Sense HAT, Raspberry Pi и разъем GPIO.

 

ВНИМАНИЕ!

Любые платы расширения (HAT) следует подключать и извлекать из разъема GPIO только тогда, когда Raspberry Pi выключен и отсоединен от источника питания. Всегда будьте осторожны и держите плату ровно при её установке, а также внимательно проверьте, выровнена ли она со штырьками разъема GPIO, прежде чем нажимать ее вниз для фиксации.

 

Установите распорки, протолкнув четыре винта из-под нижней части Raspberry Pi через четыре монтажных отверстия в каждом углу, затем закрутите распорки на винты. Наденьте Sense HAT на разъем GPIO Raspberry Pi, убедившись, что он правильно совмещен с контактами внизу. Наконец, вверните последние четыре винта через монтажные отверстия на Sense HAT в распорки, которые вы установили ранее. При правильной установке Sense HAT должна быть ровной и не изгибаться или колебаться при нажатии на джойстик.

Подключите питание к Raspberry Pi, и вы увидите, как светодиоды на Sense HAT загорятся радужным светом, а затем снова выключатся. Ваша плата расширения Sense HAT установлена!

Если вы захотите снять Sense HAT, просто открутите верхние винты и снимите плату — будьте осторожны, чтобы не погнуть штыри на разъеме GPIO, так как плата держится довольно плотно (вам может потребоваться аккуратно подковырнуть ее с помощью маленькой отвертки) — затем снимите распорки с Raspberry Pi.

 

 

Первая программа традиционно: «Hello, Sense HAT!»

Как и во всех проектах по программированию, создадим классическое приветствие и для Sense HAT: прокрутим «Hello, Sense HAT!» на его светодиодном дисплее. Если вы используете эмулятор Sense HAT, загрузите его сейчас, щелкнув значок меню Raspbian, затем выберите категорию «Программирование» (Programming) и нажмите на «Sense HAT Emulator».


В этой части нашего обзора предполагается наличие опыта работы с Scratch 3 или Python и интегрированной средой разработки (IDE) Thonny, в зависимости от того, работаете ли вы с примерами кода Scratch или Python — или с обоими! Если вы еще этого не сделали, обратитесь к разделам «Изучаем Raspberry Pi. Часть 4. Программирование на Scratch 3» или к «Изучаем Raspberry Pi. Часть 5. Программирование на Python» и сначала поработайте над проектами в них.

 

Приветствие на Scratch

Загрузите Scratch 3 из меню Raspbian, затем нажмите кнопку «Добавить расширение» в нижнем левом углу окна Scratch. Щелкните расширение Raspberry Pi Sense HAT.

При этом загрузятсят блоки, необходимые для управления различными функциями Sense HAT, включая его светодиодный дисплей. Когда они вам понадобятся, вы найдете их в категории Raspberry Pi Sense HAT.

Начните с перетаскивания  блока событий (Events block) (при нажатии) в область сценария, затем перетащите блок отображения текста «Hello!»  прямо под ним. Отредактируйте текст так, чтобы блок отображал текст «Hello, World!» .

Программа теперь выглядит так:

Щелкните зеленый флаг в области сцены и наблюдайте за Sense HAT или эмулятором Sense HAT: сообщение будет медленно прокручиваться по светодиодной матрице Sense HAT. Загораясь, светодиодные пиксели образуют по очереди каждую букву. Поздравляем: ваша программа успешно работает!

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

Перетащите блок  (установить поворот на 0 градусов) из палитры блоков  и вставьте его ниже и над , затем щелкните стрелку вниз рядом с 0 и измените ее на 90. Щелкните зеленый флаг, и вы увидите то же сообщение, что и раньше, но вместо прокрутки слева направо оно будет прокручиваться снизу вверх. Теперь вам придётся повернуть голову или саму плату Sense HAT, чтобы прочитать его!

Теперь измените поворот обратно на 0, затем перетащите блок  (установит цвет) между и . Щелкните цвет в конце блока, чтобы открыть палитру цветов Scratch и найти красивый ярко-желтый цвет, затем щелкните зеленый флаг, чтобы увидеть, как изменился вывод вашей программы.

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

Помимо возможности прокручивать сообщения целиком, вы можете отображать отдельные буквы. Перетащите блок  (отображение текста) за пределы области сценария, чтобы удалить его, затем перетащите блок   (отобразить символ А) на его место в области сценария. Щелкните зеленый флаг, и вы увидите разницу: в этом блоке отображается только одна буква за раз, и буква остается на Sense HAT, пока вы не укажете иное, не прокручиваясь и не исчезая. К этому блоку применяются те же блоки управления цветом, что и к : попробуйте изменить цвет буквы на красный.

ЗАДАНИЕ:

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

 

 

Приветствие на Python

Загрузите Thonny, щелкнув значок меню Raspbian, выбрав Программирование и щелкнув Thonny. Если вы используете эмулятор Sense HAT и он перекрывается окном Thonny, нажмите и удерживайте кнопку мыши в области заголовка любого из окон вверху (синего цвета) и перетащите его по рабочему столу. Добейиесь удобного расположения обоих окон.

 

Изменение в коде PYTHON для различных режимов запуска программы.
Код Python, написанный для физической платы расширения Sense HAT, работает и на эмуляторе Sense HAT, но с одним изменением. Если вы используете эмулятор Sense HAT с Python, вам необходимо заменить строку с sense_hat import SenseHat во всех программах из этого раздела на from sense_emu import SenseHat. Если вы захотите снова запустить их на физической плате Sense HAT, просто верните эту строку обратно!

 

Чтобы использовать Sense HAT или эмулятор Sense HAT в программе Python, вам необходимо импортировать библиотеку Sense HAT (Sense HAT library). Введите следующее в область сценария, не забывая использовать sense_emu (вместо sense_hat), если вы используете эмулятор Sense HAT:

В библиотеке Sense HAT есть простая функция для приема сообщения, его форматирования для отображения на светодиодном дисплее и его плавной прокрутки. Введите следующее:

Сохраните свою программу как Hello Sense HAT, затем нажмите кнопку «Выполнить» (Run). Вы увидите, как ваше сообщение медленно прокручивается по светодиодной матрице Sense HAT, загораются светодиодные пиксели, образуя по очереди каждую букву. Поздравляем: ваша программа успешно работатет!

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

Эти дополнительные инструкции, разделенные запятыми, известны как параметры (parameters), и они управляют различными аспектами функции show_message (). Самый простой параметр — scroll_speed = (), который изменяет скорость прокрутки сообщения на экране. При значении «0,05» скорость прокрутки примерно в два раза выше обычной. Чем больше число, тем ниже скорость.

Параметры text_colour = () и back_colour = (), написанные на британском английском языке, в отличие от большинства инструкций Python, устанавливают цвет текста и фона соответственно. Однако они не принимают названия цветов; вы должны указать желаемый цвет в виде трех чисел. Первое число представляет количество красного в цвете, от «0», если красный цвет отсутствует, до «255», если красный цвет является максимально ярким; второе число — это количество зеленого в цвете; и третье число — количество синего. Вместе они известны как RGB — для красного, зеленого и синего каналов суммарного цвета.

Щелкните значок «Выполнить» и посмотрите на Sense HAT: на этот раз сообщение будет прокручиваться значительно быстрее и будет ярко-желтым на синем фоне.

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

Если вы хотите использовать понятные имена вместо значений RGB для установки цветов, вам нужно будет создать переменные. Над строкой sense.show_message () добавьте следующее:

Вернитесь к строке sense.show_message () и отредактируйте ее так, чтобы она соответствовала:

Снова нажмите на значок «Выполнить», и вы увидите, что ничего не изменилось: ваше сообщение по-прежнему отображается желтым на синем фоне. Однако на этот раз вы использовали имена переменных, чтобы сделать код более читабельным: вместо строки чисел в коде объясняется, какой цвет установлен. Вы можете определить столько цветов, сколько захотите: попробуйте добавить переменную под названием «red» (красный) со значениями 255, 0 и 0; переменную под названием «white» (белый) со значениями 255, 255, 255; и переменную под названием «black» (черный) со значениями 0, 0 и 0.

Помимо возможности прокручивать сообщения целиком, вы можете отображать отдельные буквы. Полностью удалите строку sense.show_message () и введите вместо нее следующее:

Нажмите «Выполнить», и на дисплее Sense HAT появится буква «Z». На этот раз она останется там и не исчезнет: отдельные буквы, в отличие от сообщений, не прокручиваются автоматически. Вы также можете управлять sense.show_letter () с теми же цветовыми параметрами, что и sense.show_message (): попробуйте изменить цвет буквы на красный.

 

ЗАДАНИЕ:

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

 

 

Следующий шаг: Рисование светом

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

В каждой строке дисплея имеется восемь светодиодов, и в каждом столбце — по восемь. Однако при задании номеров светодиодов вы, как и большинстве языков программирования, должны начинать с «0» и заканчивать «7». Первый светодиод находится в верхнем левом углу, последний — в правом нижнем углу. Используя числа в строках и столбцах, вы можете найти координаты (coordinates) любого светодиода на матрице. Синий светодиод на изображенной матрице находится в координатах (0, 2); красный светодиод находится в координатах (7, 4). Сначала идет ось X, вдоль матрицы, а затем ось Y вниз вертикально по матрице.

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

 

 

Картинки в Scratch

Начните новый проект в Scratch, предварительно сохранив существующий проект. Если вы работали над проектами в этой главе, Scratch 3 сохранит загруженным расширение Raspberry Pi Sense HAT; если вы закрыли и снова открыли Scratch 3 с момента вашего последнего проекта, загрузите расширение с помощью кнопки «Добавить расширение». Перетащите блок в область кода, затем перетащите и под ним блок . Отредактируйте оба, чтобы установить цвет фона на черный и основной цвет на белый. Сделайте черным, сдвинув ползунки Яркости и Насыщенности на «0»; сделайте белый цвет, сдвинув Яркость до «100» и Насыщенность до «0». Вам нужно будет делать это в начале каждой программы Sense HAT, иначе Scratch просто будет использовать последние цвета, которые вы выбрали, даже если вы выбрали их в другой программе. Наконец, перетащите блок в нижнюю часть программы:

Щелкните зеленый флаг: вы увидите, что светодиоды Sense HAT отобразять символ малинки.

Вы также не ограничены предустановленной формой малины. Щелкните стрелку вниз рядом с малиной, чтобы активировать режим рисования: вы можете щелкнуть любой светодиод на шаблоне, чтобы включить или выключить его, в то время как две кнопки внизу включают все светодиоды. Попробуйте нарисовать свой собственный узор, затем щелкните зеленую стрелку, чтобы увидеть его на Sense HAT. Также попробуйте изменить цвет рисунка и цвет фона, используя блоки выше.

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

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

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

Поздравляем: теперь вы можете управлять отдельными светодиодами!

Отредактируйте существующий набор блоков пикселей следующим образом и перетащите их вниз, пока не получите следующую программу:

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

 

ЗАДАНИЕ:

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

 

 

Картинки на Python

Запустите новую программу в Thonny и сохраните ее как Sense HAT Drawing, затем введите следующее (не забывая использовать sense_emu (вместо sense_hat), если вы используете эмулятор):

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

Не глядя прямо на светодиоды Sense HAT, щелкните значок «Выполнить»: вы должны увидеть, как все они станут ярко-белыми — вот почему вы не должны смотреть прямо на них при запуске программы!

Sense.clear () предназначен для очистки светодиодов от любого предыдущего программирования, но принимает цветовые параметры RGB — это означает, что вы можете изменить отображение на любой цвет, который вам нравится. Попробуйте отредактировать строку так:

Нажмите Run, и Sense HAT станет ярко-зеленым.

Поэкспериментируйте с разными цветами или добавьте переменные названия цвета, которые вы создали для своей программы Hello World, чтобы упростить чтение. Чтобы очистить светодиоды, вам необходимо использовать значения RGB для черного: 0 красный, 0 синий и 0 зеленый. Но есть способ попроще. Отредактируйте строку вашей программы, чтобы она читалась:

Sense HAT погаснет. Для функции sense.clear () пустые скобки равносильны тому, что ей нужно переключить все светодиоды на черный, т.е. выключить их.

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

Чтобы создать свою собственную версию светодиодной матрицы, изображенной ранее, с двумя специально выбранными светодиодами, горящими красным и синим, добавьте следующие строки в свою программу после sense.clear ():

Первая пара чисел — это положение пикселя на матрице, ось X (поперек), за которой следует ось Y (вниз). Третья часть параметра, во внутреннем  наборе скобок, — это значения RGB для цвета пикселя. Нажмите кнопку «Выполнить», и вы увидите эффект: на Sense HAT загорятся два светодиода, как показано на рисунке:

Удалите эти две строки и введите следующее:

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

Однако рисование подробного изображения с использованием отдельных функций set_pixel () происходит медленно. Чтобы ускорить процесс, вы можете изменять несколько пикселей одновременно. Удалите все строки set_pixel () и введите следующее:

Начните с нажатия кнопки «Выполнить», чтобы понять, узнаете ли вы в нем маленького крипера (little creeper). Первые две строки создают две переменные для хранения цветов: зеленый и черный. Чтобы код для рисунка было легче писать и читать, переменные представляют собой отдельные буквы: «g» для зеленого цвета и «b» для черного.

Следующий блок кода создает переменную, которая содержит значения цвета для всех 64-х пикселей светодиодной матрицы, разделенных запятыми и заключенных в квадратные скобки. Однако вместо чисел он использует цветовые переменные, которые вы создали ранее: посмотрите внимательно, помните, что «g» означает зеленый, а «b» - черный, и вы уже можете видеть изображение, которое появится.

Наконец, sense.set_pixels (creeper_pixels) принимает эту переменную и использует функцию sense.set_pixels () для одновременного рисования всей матрицы. Намного проще, чем пытаться рисовать пиксель за пикселем!

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

Начните с редактирования вашей переменной creeper_pixels, чтобы закрыть его левый глаз, заменив четыре пикселя «b», начиная с первых двух в третьей строке, а затем первых двух в четвертой строке, на «g»:

Нажмите «Выполнить», и вы увидите, что левый глаз крипера будет закрыт. Чтобы сделать анимацию, перейдите в начало программы и добавьте строку:

Затем перейдите в самый низ и введите:

Нажмите «Выполнить» и посмотрите, как крипер будет раз за разом закрывать и открывать глаза!

Функция flip_h () переворачивает изображение по горизонтальной оси; если вы хотите перевернуть изображение по вертикальной оси, замените sense.flip_h () на sense.flip_v (). Вы также можете повернуть изображение на 0, 90, 180 или 270 градусов с помощью sense.set_rotation (90), изменяя число в зависимости от того, на сколько градусов вы хотите повернуть изображение. Попробуйте использовать это, чтобы крипер вращался, а не моргал!

 

ЗАДАНИЕ:

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

 

 

Исследование окружающего пространства

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

 

ЭМУЛИРОВАНИЕ ДАТЧИКОВ

Если вы используете эмулятор Sense HAT Emulator, вам необходимо включить имитацию инерционного датчика и датчика окружающей среды: в эмуляторе нажмите «Изменить», затем «Настройки» и отметьте их галочкой. В том же меню выберите «180 ° ..360 ° | 0 ° ..180 °» под «Масштаб ориентации», чтобы убедиться, что числа в эмуляторе совпадают с числами, сообщаемыми Scratch и Python, затем нажмите кнопку «Закрыть».

 

 

Исследование окружающего пространства в Scratch

Запустите новую программу в Scratch, сохранив старую, если хотите, и добавьте расширение Raspberry Pi Sense HAT, если оно еще не загружено. Перетащите блок в область кода, затем блок  и установите под ним . Затем добавьте блок  и используйте ползунки Яркость и Насыщенность, чтобы выбрать правильный цвет. Всегда рекомендуется делать это в начале ваших программ, так как это позволит убедиться, что Sense HAT не показывает ничего из старой программы, при этом гарантируя, какие цвета вы используете.

Перетащите  прямо под вашими существующими блоками. Чтобы снять показания датчика давления, найдите блок давления в категории «Raspberry Pi Sense HAT» и перетащите его на слово «Hello!» В вашем блоке .

Щелкните зеленый флаг, и Scratch покажет вам текущее показание датчика давления в миллибарах. Через две секунды сообщение исчезнет. Попробуйте подуть на Sense HAT (или переместите ползунок давления вверх в эмуляторе) и щелкните зеленый флаг, чтобы снова запустить программу. На этот раз вы должны увидеть более высокое значение.

 

ИЗМЕНЕНИЕ ЗНАЧЕНИЙ

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

 

Чтобы переключиться на датчик влажности, удалите блок давления  и замените его на датчик влажности . Запустите программу еще раз, и вы увидите текущую относительную влажность в вашей комнате. Опять же, вы можете попробовать запустить его еще раз, подув на Sense HAT (или перемещая ползунок Humidity эмулятора вверх), чтобы изменить показания — ваше дыхание гораздо более влажное, чем воздух в окружающем вас пространстве!

 

Для датчика температуры это так же просто: надо всего лишь удалить блок влажности  и заменить его на блок с температурой , а затем снова запустить программу. Вы увидите температуру в градусах Цельсия. Однако это может быть не точная температура вашей комнаты: Raspberry Pi все время генерирует тепло, что является причиной нагрева платы расширения Sense HAT и его датчиков, благодаря чему показания температуры могут отличаться от реальных в большую сторону.

 

ЗАДАНИЕ:

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

 

 

Исследование окружающего пространства с Python

Чтобы начать снимать показания с датчиков, создайте новую программу в Thonny и сохраните ее как Sense HAT Sensors. Введите следующее в область сценария, и не забудьте использовать sense_emu, если вы используете эмулятор:

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

Чтобы снять показания датчика давления, введите:

Нажмите «Выполнить», и вы увидите число, напечатанное в оболочке (shell) Python в нижней части окна Thonny. Это показание давления воздуха в миллибарах, измеренное датчиком барометрического давления. Попробуйте подуть на Sense HAT (или переместите ползунок давления вверх в эмуляторе), снова щелкнув значок «Выполнить»; на этот раз число должно быть больше.

 

ИЗМЕНЕНИЕ ЗНАЧЕНИЙ

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

 

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

Нажмите Run, и вы увидите другое число, напечатанное в оболочке Python: на этот раз это текущая относительная влажность вашей комнаты в процентах. Опять же, вы можете подуть на Sense HAT (или переместить ползунок влажности эмулятора вверх), и вы увидите, как значение влажности поднимается, когда вы снова запустите свою программу!

 

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

Снова нажмите «Выполнить», и вы увидите температуру в градусах Цельсия. Однако это может быть не точная температура вашей комнаты: причину этого явления мы описали только что чуть выше.

Обычно Sense HAT сообщает температуру на основе показаний датчика температуры, встроенного в датчик влажности; если вы хотите вместо этого использовать показания датчика давления, вы должны использовать sense.get_tempera_from_pressure (). Также можно объединить два показания для получения среднего значения, которое может быть более точным, чем использование одного датчика отдельно. Удалите последние две строки вашей программы и введите:

Щелкните значок «Выполнить», и вы увидите показание, выведенное на консоли Python. На этот раз оно основано на показаниях обоих датчиков, которые вы сложили вместе и разделили на два — среднее арифметическое — чтобы получить среднее значение обоих. Если вы используете эмулятор, все три параметра — влажность, давление и среднее значение покажут одно и то же число.

 

ЗАДАНИЕ:

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

 

 

Инерционное зондирование (получение данных с инерционных датчиков)

Гироскопический датчик, акселерометр и магнитометр вместе образуют так называемый инерциальный измерительный блок (inertial measurement unit, IMU). Хотя, технически говоря, эти датчики производят измерения из окружающей среды точно так же, как датчики окружающей среды — например, магнитометр измеряет напряженность магнитного поля — они обычно используются для определения данных о перемещении самой Sense HAT. IMU — это сумма показаний нескольких датчиков; некоторые языки программирования позволяют снимать показания с каждого датчика независимо, в то время как другие дают только комбинированные показания.

Однако, прежде чем вы сможете разобраться в IMU, вам нужно понять, как все движется. Sense HAT и ваш Raspberry Pi, к которому он прикреплен, могут перемещаться по трем пространственным осям:

  • из стороны в сторону по оси X;
  • вперед и назад по оси Y;
  • вверх и вниз по оси Z.

Они также могут вращаться по этим трем осям, и эти параметры соответственно изменятся на:

  • вращение по оси X называется креном (Roll),
  • вращение по оси Y называется тангажем (Pitch),
  • вращение по оси Z называется рысканием (Yaw).

Когда вы вращаете Sense HAT вдоль его длинной оси (X), вы регулируете его крен.

Думайте о плате как о самолете в момент взлета, она буквально вращается вокруг своей короткой оси (Y), как самолёт в момент поворота руля высоты — это тангаж.

Поверните или вращайте его вдоль перпендикулярной плоскости платы оси (Z), удерживая на столе — и вы регулируете его рыскание.

 

Инерционное зондирование в Scratch

Запустите новую программу в Scratch и загрузите расширение Raspberry Pi Sense HAT, если оно еще не загружено. Запустите свою программу так же, как и раньше: перетащите блок в область кода, затем перетащите под него блок  и установите под ним . Затем добавьте блок  .

Затем перетащите блок в нижнюю часть существующих блоков и заполните его блоком . Чтобы отобразить показания для каждой из трех осей IMU — тангажа, крена и рыскания — вам нужно добавить блоки оператора соединения  плюс соответствующие блоки Sense HAT. Не забудьте включить пробелы и запятые, чтобы вывод был легко читаем.

Щелкните зеленый флаг, чтобы запустить программу, и попробуйте переместить Sense HAT и Raspberry Pi — будьте осторожны, чтобы не отсоединить кабели! Когда вы наклоните Sense HAT по трем осям, вы увидите, что значения тангажа, крена и рыскания соответственно изменяются.

 

 

Инерционное зондирование в Python

Запустите новую программу в Thonny и сохраните ее как Sense HAT Movement. Заполните обычные начальные строки, не забывая использовать sense_emu, если вы используете эмулятор Sense HAT:

Чтобы использовать информацию от IMU для определения текущей ориентации Sense HAT по его трем осям, введите следующее:

Нажмите Run, и вы увидите показания ориентации Sense HAT, разделенные по трем осям. Попробуйте повернуть Sense HAT и снова нажать Run; вы должны увидеть, как числа меняются, отражая его новую ориентацию.

Однако IMU может не только измерять ориентацию: он также может обнаруживать движение. Чтобы получить точные показания для движения, IMU необходимо часто их считывать в цикле: в отличие от ориентации, когда дело доходит до обнаружения движения, снятие одного показания не даст вам никакой полезной информации. Удалите все после sense.clear () и введите следующий код:

Теперь у вас есть переменные, содержащие текущие показания акселерометра для трех пространственных осей: X или левой и правой; Y, или вперед и назад; и Z или вверх или вниз. Цифры с датчика акселерометра могут быть трудночитаемыми, поэтому введите следующий код, чтобы их было легче понять, округляя их до ближайшего целого числа:

И, наконец, выведите на печать три значения, набрав следующую строку:

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

Возможно, вы заметили, что акселерометр сообщает вам, что одна из осей — ось Z, если ваш Raspberry Pi лежит на столе — имеет значение ускорения гравитации =1,0 (1G), но Sense HAT не движется. Это потому, что он обнаруживает гравитационное притяжение Земли — силу, притягивающую Sense HAT к центру Земли, являющейся причиной того, что предмет в случае если вы сбиваете его со стола, упадет на пол.

Когда ваша программа запущена, попробуйте осторожно поднять Sense HAT и Raspberry Pi и повернуть их, но не смещайте их кабели! Когда сеть и USB-порты Raspberry Pi направлены к полу, вы увидите, что значения изменились, поэтому по оси Z отображается 0 (0G), а по оси X теперь 1 (1G). Поверните его снова, чтобы порты HDMI и питания были направлены в пол, и теперь по оси Y отображается 1G. Если вы сделаете обратное и порт HDMI будет направлен в потолок, вместо этого вы увидите -1G на оси Y.

Зная, что сила притяжения Земли составляет примерно 1G, и свои знания о пространственных осях, вы можете использовать показания акселерометра, чтобы выяснить, какая из сторон идет вниз, а какая — вверх. Вы также можете использовать его для обнаружения движения: попробуйте осторожно встряхнуть Sense HAT и Raspberry Pi и следите за числами. При этом заметьте, что чем сильнее вы встряхиваете, тем больше ускорение.

Когда вы используете sense.get_accelerometer_raw (), вы приказываете Sense HAT выключить два других датчика в IMU — гироскопический датчик и магнитометр — и вернуть данные только с акселерометра. Естественно, вы можете сделать то же самое и с другими датчиками. Найдите строку acceleration = sense.get_accelerometer_raw () и измените ее на:

Измените слово acceleration во всех трех строках под ним на orientation. Нажмите Run, и вы увидите ориентацию Sense HAT по всем трем осям, округленную до ближайшего целого числа. Однако, в отличие от прошлой проверки ориентации, на этот раз данные поступают исключительно с гироскопа без использования акселерометра или магнитометра. Это может быть полезно, если вы хотите узнать ориентацию движущейся платы расширения Sense HAT на задней части робота, например, чтобы движение не сбивало с толку, или если вы используете Sense HAT вблизи сильного магнитного поля.

Остановите свою программу, нажав красную кнопку остановки. Чтобы использовать магнитометр, удалите из своей программы все, кроме первых четырех строк, затем введите следующее под строкой while True:

Запустите вашу программу, и вы увидите направление магнитного севера, многократно напечатанное в области оболочки Python. Осторожно поверните Sense HAT, и вы увидите, как меняется курс по мере изменения ориентации Sense HAT относительно севера: вы построили компас! Если у вас есть магнит — подойдет магнит на холодильник — попробуйте переместить его вокруг Sense HAT, чтобы посмотреть, как он влияет на показания магнитометра.

 

ЗАДАНИЕ:

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

 

 

 

Управление джойстиком

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

 

ВНИМАНИЕ!

Джойстик Sense HAT следует использовать только в том случае, если вы установили проставки-распорки, как было описано выше. Без распорок нажатие на джойстик может согнуть плату Sense HAT и повредить как Sense HAT, так и разъем GPIO Raspberry Pi.

 

Управление джойстиком в Scratch

Запустите новую программу в Scratch с загруженным расширением Raspberry Pi Sense HAT. Как и раньше, перетащите блок в область кода, затем блок  и установите под ним . Затем добавьте блок .

В Scratch джойстик Sense HAT выполняет те же функции, что и клавиши курсора на клавиатуре: нажатие джойстика вверх эквивалентно нажатию клавиши со стрелкой вверх, нажатие на него вниз — то же самое, что нажатие клавиши со стрелкой вниз, нажатие ее влево соответствует нажатию клавиши «стрелка влево» и нажатие вправо — «стрелка вправо».  А нажатие джойстика внутрь, как кнопочного переключателя, эквивалентно нажатию клавиши ENTER.

 

ВНИМАНИЕ!

Управление джойстиком доступно только на физической плате Sense HAT. При использовании эмулятора Sense HAT Emulator, используйте соответствующие клавиши на клавиатуре для имитации нажатия джойстика.

 

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

Поднимите джойстик вверх, и вы увидите, как Скретч-кот радостно восклицает: «Hello!». 

Затем отредактируйте блок , скажем на  (скажи «Джойстик вверх! в течение 2 секунд»), и продолжайте добавлять блоки Events и Looks, пока не получите что-то подобное для каждого из пяти способов нажатия джойстика.

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

 

ЗАДАНИЕ:

  • Попробуйте использовать джойстик Sense HAT для управления спрайтом Scratch на сцене.
  • Можете ли вы сделать так, чтобы если спрайт собирал другой спрайт, представляющий объект, светодиоды Sense HAT отображали радостное сообщение?

 

 

Управление джойстиком в Python

Запустите новую программу в Thonny и сохраните ее как Sense HAT Joystick. Начните с трех обычных строк, которые устанавливают Sense HAT и очищают светодиодную матрицу:

Далее задайте бесконечный цикл:

Затем укажите Python прослушивать ввод от джойстика Sense HAT с помощью следующей строки, которую Thonny автоматически сделает для вас с отступом:

И наконец, добавьте следующую строку (которую Thonny опять сделает с отступом) чтобы действительно что-то делать при обнаружении нажатия джойстика:

Нажмите «Выполнить» и попробуйте передвигать джойстик в разных направлениях. Вы увидите направление, которое вы выбрали, напечатанное в области оболочки Python: вверх, вниз, влево, вправо и в середине («up», «down», «left», «right» и «middle»), когда вы нажимали джойстик вниз, как кнопочный переключатель.

Вы также увидите, что каждый раз, когда вы нажимаете джойстик, вам дается два события: одно событие — нажато (pressed), когда вы впервые нажимаете соответствующее направление; другое событие — отпущено (released), когда джойстик возвращается в центр. Вы можете использовать это в своих программах: подумайте о персонаже в игре, которого можно заставить двигаться, когда джойстик нажимается в определенном направлении, а затем останавливаться, как только его отпустят.

Вы также можете использовать джойстик для запуска функций, вместо того, чтобы ограничиваться использованием цикла for. Удалите все, что находится ниже sense.clear (), и введите следующее:

Эти функции изменяют всю светодиодную матрицу Sense HAT на один цвет: красный, синий, зеленый или желтый, что значительно упростит работу вашей программы! Чтобы на самом деле запускать их, вам нужно указать Python, какая функция соответствует входу джойстика. Введите следующие строки:

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

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

 

ЗАДАНИЕ:

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

 

 

 

Проект на Scratch: Бенгальский огонь (Sparkler)

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

Запустите новый проект Scratch и добавьте расширение Raspberry Pi Sense HAT, если оно еще не загружено. Как всегда, начните с четырех блоков: в область кода, затем блок  и установите под ним . Затем добавьте блок , помня, что вам придется изменить цвета по умолчанию.

Начните с создания простого, но художественного бенгальского огня. Перетащите блок в область кода, затем заполните его блоком . Вместо того, чтобы использовать заданные числа, заполните каждую из секций x, y и colour этого блока блоком операторов  (взять случайноечисло от 1 до 10).

Значения от 1 до 10 здесь не очень полезны, поэтому вам нужно немного его отредактировать. Первые два числа в заданном блоке  — это координаты X и Y пикселя на светодиодной матрице, что означает, что они должны быть числами от 0 до 7, поэтому измените первые два блока на . Следующий раздел — это цвет, который должен быть присвоен пикселю. Когда вы используете селектор цвета, выбранный вами цвет отображается непосредственно в области скрипта. Однако внутри все цвета представлены числами, и мы будем использовать эту инфомацию. Измените последний блок случайного выбора так, чтобы он выглядел как  (случайный выбор от 0 до 16777215) — для определения кода цвета из возможных 16 миллионов оттенков цвета.

Щелкните зеленый флаг, и вы увидите, что светодиоды на Sense HAT начнут загораться случайным цветом.

Поздравляем: вы сделали электронный бенгальский огонь!

Пока ещё бенгальский огонь не очень интерактивен. Чтобы изменить это, перетащите блок ожидания в 1 секунду , чтобы он оказался под блоком , но внутри блока «навсегда» . Перетащите блок «Операторов» на цифру 1, затем введите 10 во втором месте. Наконец, перетащите блок температуры на первое место в разделенном блоке операторов.

Щелкните зеленый флаг, и вы заметите (если вы не живете в очень холодном месте), что бенгальский огонь работает значительно медленнее, чем раньше. Это потому, что вы создали зависящую от температуры задержку: теперь программа ожидает текущую температуру, разделенную на 10 секунд перед каждым циклом. Если температура в вашей комнате 20°C, программа подождет 2 секунды перед повторением цикла; если температура 10°C, подождет 1 секунду; если ниже 10°C, подождет меньше секунды.

Если ваша плата Sense HAT определяет отрицательную температуру (ниже 0°C, т.е. точки замерзания воды), она будет пытаться подождать менее 0 секунд, но это невозможно! Во всяком случае, без изобретения путешествия во времени. В этом случае вы увидите тот же эффект, как если бы она ждала 0 секунд. Поздравляем: теперь вы можете посмотреть на интеграцию различных функций Sense HAT в свои собственные программы!

 

 

Проект на Python: Трикодер на Sense HAT

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

Запустите новый проект в Thonny и сохраните его как Tricorder, затем начните с традиционных строк, необходимых для создания программы Sense HAT:

Затем вам нужно начать определять функции для каждого из различных датчиков Sense HAT. Начните с инерциального измерительного модуля IMU, набрав:

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

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

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

Внимательно посмотрите на строку, которая выводит результат на светодиоды: % s известен как заполнитель (placeholder) и заменяется содержимым переменной temp. Используя это, вы можете красиво отформатировать вывод с помощью метки «Temperature» (Температура) и единицы измерения «degrees Celsius» (градусы Цельсия), что делает вашу программу намного более удобной.

Затем определите функцию для датчика влажности:

И для датчика давления:

И, наконец, показания компаса с магнитометра:

Короткий цикл «for» в этой функции берет 10 показаний с магнитометра, чтобы гарантировать, что у него достаточно данных, чтобы предоставить вам точный результат. Если вы обнаружите, что сообщаемое значение продолжает смещаться, попробуйте расширить его до 20, 30 или даже 100 циклов, чтобы еще больше повысить точность.

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

Введите следующее:

Эти строки назначают по одному датчику для каждого из пяти возможных направлений на джойстике: вверх — и данные считываются с датчика ориентации; вниз — получаем показания магнитометра; влево — считывается датчик влажности; вправо —  датчик температуры; а нажатие на ручку посередине считывает показания датчика давления.

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

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

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

Чтобы просмотреть больше проектов для Sense HAT, найдите в нашем Дополнении 4. Что ещё пригодится для изучения Raspberry Pi   раздел «Проекты Raspberry Pi» или перейдите напрямую по ссылке: rpf.io/projects.

 

Мы уже практически в одном шаге от полного раскрытия всех тайн и возможностей Raspberry Pi. В следующей части обзора мы рассмотрим подключение и использование модуля камеры. Пора применять полученные знания для реализации ваших интерактивных проектов с распознаванием объектов!