1. Введение
Что вы построите
В этом практическом занятии мы научимся использовать TensorFlow Lite для микроконтроллеров, чтобы запустить модель глубокого обучения на Arduino Nano 33 BLE . Пользователь превращает микроконтроллер в цифровую «волшебную палочку», взмахивая которой и произнося различные заклинания. Когда пользователь перемещает палочку, эти сложные многомерные данные с датчиков, непонятные человеку, передаются на вход модели, которая выдает простую классификацию, оповещающую нас о том, что произошло одно из нескольких движений.

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

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

TensorFlow — это открытая платформа машинного обучения от Google, предназначенная для обучения и запуска моделей. TensorFlow Lite — это программная платформа, оптимизированная версия TensorFlow, разработанная для запуска моделей TensorFlow на небольших, относительно маломощных устройствах, таких как мобильные телефоны.
TensorFlow Lite For Microcontrollers — это программная платформа, оптимизированная версия TensorFlow, предназначенная для запуска моделей TensorFlow на миниатюрном, маломощном оборудовании, таком как микроконтроллеры. Она соответствует требованиям, предъявляемым к встроенным системам, а именно: имеет небольшой размер исполняемого файла, не требует поддержки операционной системы, каких-либо стандартных библиотек C или C++, динамического выделения памяти и т. д.
Arduino Nano 33 BLE (аппаратное обеспечение)

Arduino — популярная платформа с открытым исходным кодом, используемая для создания электронных проектов. Она состоит из:
- В данной практической работе используется физическая программируемая плата (часто микроконтроллер), например, Arduino Nano 33 BLE.
- Arduino IDE (Integrated Development Environment) — это программное обеспечение, используемое для написания и загрузки компьютерного кода на физическую плату.
Arduino Nano 33 BLE — это платформа на базе микроконтроллера: крошечный компьютер на одной печатной плате. Он имеет процессор, память и аппаратное обеспечение ввода-вывода, позволяющее отправлять и принимать цифровые сигналы на другие устройства. В отличие от компьютера, микроконтроллер не обладает большой мощностью и обычно не работает под управлением операционной системы. Вместо этого он имеет небольшие процессоры, небольшой объем памяти, а написанные вами программы выполняются непосредственно на аппаратном обеспечении. Но поскольку он разработан максимально простым, микроконтроллер потребляет очень мало энергии.
Что вы будете делать
- Настройте микроконтроллер Arduino Nano 33 BLE и превратите его в цифровую «волшебную палочку».
- Настройте среду разработки Arduino IDE и установите необходимые библиотеки.
- Разверните программу на устройстве.
- Произносите различные заклинания взмахом волшебной палочки и смотрите предсказания.
Что вам понадобится
- Ноутбук на базе Linux, MacOS или Windows
- Arduino Nano BLE Sense 33 (без разъемов)
- Кабель Micro USB (если у вас ноутбук с разъемом USB-C, приобретите кабель USB-C — Micro USB ).
- (по желанию) Палочка длиной около 30 см (12 дюймов)
- (необязательно) Скотч
2. Настройка микроконтроллера Arduino
Распакуйте вашу плату Arduino.
Достаньте его из коробки и вытащите из упаковочного пенопласта. Он проводит электричество, иначе могут возникнуть проблемы!

Подключите его к своему ноутбуку
- Вставьте кабель MicroUSB в разъем на микросхеме.
- Подключите другой конец кабеля к USB-разъему на вашем ноутбуке.
- Нижний левый светодиод на плате Arduino (верхний левый на изображении ниже) должен загореться.

Ознакомьтесь с рабочим процессом.

Как показано на приведенной выше схеме, интерпретатор TFLite на Arduino периодически выполняет вывод данных из модели. Модель использует обработанные данные акселерометра в качестве входных данных и выдает прогноз, который указывает на наиболее вероятное выполненное движение. Кроме того, выводится желаемый результат, и загораются соответствующие светодиоды.
3. Настройте среду разработки Arduino IDE.
1. Скачайте Arduino IDE.
Для развертывания программы на микроконтроллере Arduino мы используем среду разработки Arduino IDE.
После загрузки установите и откройте Arduino IDE, щелкнув по значку приложения, который выглядит так: 
Начальная страница откроется следующим образом:

2. Настройка менеджера плат
- В меню Arduino выберите
Tools -> Board: "Arduino .." —> Boards Manager - Найдите
"Arduino Nano 33 BLE"и установитеArduino nRF528x Boards (Mbed OS). Это обеспечит поддержку нашего микроконтроллера Arduino Nano 33 BLE средой разработки Arduino IDE.
- В меню Arduino выберите
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

- Наконец, убедитесь, что в правом нижнем углу IDE выбрана плата "Arduino Nano 33 BLE".

3. Настройка порта
В меню Arduino выберите Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE) . Вы должны увидеть что-то похожее на это:

4. Проверьте подключение платы.
В меню Arduino выберите Tools -> Get Board Info . Вы должны увидеть что-то подобное:

4. Установите библиотеки.
1. Библиотека TensorFlow для Arduino
Эта библиотека содержит все примеры TensorFlow Lite для микроконтроллеров, включая исходный код "волшебной палочки", необходимый для выполнения этого практического задания.
- В меню Arduino выберите
Sketch -> Include Library -> Add .ZIP Library... - Добавьте загруженный вами архив TensorFlow Arduino Library
.zip.
2. Библиотека Arduino LSM9DS1
Эта библиотека позволяет считывать значения акселерометра, магнитометра и гироскопа с инерциального измерительного блока LSM9DS1 на вашем Arduino Nano 33 BLE Sense.
- В меню Arduino выберите
Sketch -> Include -> Manage Libraries... - Найдите и установите
"Arduino_LSM9DS1".
5. Загрузите и соберите пример.
1. Загрузите пример.
В меню Arduino выберите File -> Examples -> Arduino_TensorFlowLite -> magic_wand чтобы загрузить пример кода.

Это загрузит исходный код волшебной палочки.

2. Создайте пример.
Нажмите кнопку Upload в окне эскиза.

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

6. Демонстрация
В настоящее время волшебная палочка может распознавать 3 жеста, как показано ниже: 
- Крыло : Начните с верхнего левого угла и аккуратно обведите букву «W» в течение двух секунд.
- Кольцо : Встаньте вертикально, вращайте стержень по часовой стрелке в течение одной секунды.
- Наклон : Начните с того, что держите палочку направленной вверх, светодиодами к себе. Перемещайте палочку вниз под наклоном влево, а затем горизонтально вправо в течение одной секунды.
На следующем изображении показаны два жеста. Сначала наклон, а затем крыло (используйте это как образец для вашей демонстрации).

Для запуска демоверсии следуйте приведенным ниже инструкциям:
- Подключив USB-кабель, выберите в меню Arduino
Tools -> Serial Monitor. Первоначально откроется пустой экран без какого-либо вывода.

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

- Из вывода в последовательный монитор видно, что волшебная палочка действительно обнаружила все фигуры! Вы также заметите, что загорелся правый светодиод.
7. Дальнейшие шаги
Поздравляем, вы успешно создали свою первую «волшебную палочку» с функцией распознавания жестов на микроконтроллере Arduino!
Надеемся, вам понравилось это краткое введение в разработку с использованием TensorFlow Lite для микроконтроллеров. Идея глубокого обучения на микроконтроллерах нова и интересна, и мы призываем вас экспериментировать!
Справочная документация
- Теперь, когда у вас есть опыт работы с базовой программой, обучите свою собственную модель .
- Узнайте больше о TensorFlow Lite для микроконтроллеров ( веб-сайт , GitHub ).
- Попробуйте другие примеры и запустите их на Arduino, если это поддерживается.
- Попробуйте другой практический семинар: Искусственный интеллект на микроконтроллере с TensorFlow Lite и SparkFun Edge.
- Обратитесь к книге издательства O'Reilly «TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers» , которая знакомит с машинным обучением на миниатюрных устройствах и описывает несколько интересных проектов. Данная практическая работа основана на главе 11 этой книги.

Спасибо, и приятного строительства!