1. Introdução
O que você vai criar
Neste codelab, vamos aprender a usar o TensorFlow Lite para microcontroladores e executar um modelo de aprendizado profundo no Arduino Nano 33 BLE. O usuário transforma o microcontrolador em uma "varinha mágica" digital para acenar e lançar vários feitiços. À medida que o usuário move a varinha, esses dados complexos e multidimensionais do sensor, que seriam incompreensíveis para um humano, são transmitidos como entrada para o modelo, que gera uma classificação simples que nos alerta se um dos vários movimentos ocorreu.

Machine learning em microcontroladores
O aprendizado de máquina pode ser usado para criar ferramentas inteligentes que facilitam a vida dos usuários, como o Google Assistente. Mas, muitas vezes, essas experiências exigem muita computação ou recursos que podem incluir um servidor de nuvem ou um computador desktop. No entanto, agora é possível executar a inferência de machine learning em hardware pequeno e de baixa potência, como microcontroladores.
Os microcontroladores são extremamente comuns, baratos, exigem pouquíssima energia e são muito confiáveis. Eles fazem parte de todos os tipos de dispositivos domésticos, como eletrodomésticos, carros e brinquedos. Na verdade, cerca de 30 bilhões de dispositivos alimentados por microcontroladores são produzidos a cada ano.

Ao trazer o aprendizado de máquina para microcontroladores minúsculos, podemos aumentar a inteligência de bilhões de dispositivos que usamos em nossas vidas, sem depender de hardware caro ou conexões de Internet confiáveis. Imagine dispositivos inteligentes que podem se adaptar à sua rotina diária, sensores industriais inteligentes que entendem a diferença entre problemas e operações normais, e brinquedos mágicos que ajudam as crianças a aprender de maneira divertida e agradável.
TensorFlow Lite para microcontroladores (software)

O TensorFlow é o framework de machine learning de código aberto do Google para treinar e executar modelos. O TensorFlow Lite é um framework de software, uma versão otimizada do TensorFlow, projetada para executar modelos do TensorFlow em dispositivos pequenos e relativamente de baixa potência, como smartphones.
O TensorFlow Lite para microcontroladores é um framework de software, uma versão otimizada do TensorFlow, projetada para executar modelos do TensorFlow em hardware pequeno e de baixa potência, como microcontroladores. Ele obedece às restrições exigidas nesses ambientes incorporados, ou seja, tem um tamanho binário pequeno, não requer suporte a sistemas operacionais, bibliotecas C ou C++ padrão nem alocação de memória dinâmica etc.
Arduino Nano 33 BLE (hardware)

O Arduino é uma plataforma de código aberto muito usada para criar projetos eletrônicos. Ele consiste em:
- Uma placa de circuito programável física (geralmente um microcontrolador), como o Arduino Nano 33 BLE usado neste codelab.
- A IDE (ambiente de desenvolvimento integrado) do Arduino, um software usado para escrever e fazer upload de código de computador para a placa física.
O Arduino Nano 33 BLE é uma plataforma baseada em microcontrolador: um pequeno computador em uma única placa de circuito. Ele tem um processador, memória e hardware de E/S que permitem enviar e receber sinais digitais para outros dispositivos. Ao contrário de um computador, um microcontrolador não é potente e geralmente não executa um sistema operacional. Em vez disso, eles têm processadores pequenos, pouca memória e os programas que você escreve são executados diretamente no hardware. Mas, como são projetados para serem o mais simples possível, um microcontrolador pode usar muito pouca energia.
O que você aprenderá
- Configure o microcontrolador Arduino Nano 33 BLE e transforme-o em uma "varinha mágica" digital.
- Configure a IDE do Arduino e instale as bibliotecas necessárias.
- Implantar o programa no dispositivo
- Faça vários feitiços acenando com a varinha mágica e confira as previsões
O que é necessário
- Laptop Linux, MacOS ou Windows
- Arduino Nano BLE Sense 33 (sem conectores)
- Cabo micro USB. Se você estiver usando um laptop USB-C, compre um cabo USB-C para micro USB.
- (opcional) Um bastão de cerca de 30 cm de comprimento
- (opcional) Fita adesiva
2. Configurar o microcontrolador Arduino
Desembale o Arduino
Retire o dispositivo da caixa e puxe-o para fora da espuma de embalagem. Ele é condutor e pode causar problemas.

Conecte ao laptop
- Conecte o cabo micro USB ao conector no chip.
- Conecte a outra extremidade do cabo a um conector USB no laptop.
- O LED inferior esquerdo do Arduino (superior esquerdo na imagem abaixo) precisa acender.

Conheça o fluxo de trabalho

Como mostrado no diagrama acima, o intérprete do TFLite no Arduino executa inferências periodicamente no modelo. O modelo usa os dados processados do acelerômetro como entrada e gera uma previsão que sugere o gesto mais provável. Além disso, uma saída desejada seria impressa e os LEDs certos acenderiam.
3. Configurar o ambiente de desenvolvimento integrado do Arduino
1. Faça o download da IDE do Arduino
Para implantar o programa no microcontrolador Arduino, usamos a IDE do Arduino.
Depois de fazer o download, instale e abra a IDE do Arduino clicando no aplicativo cujo ícone é assim: 
A página de destino inicial seria aberta da seguinte forma:

2. Configurar o Board Manager
- No menu do Arduino, selecione
Tools -> Board: "Arduino .." —> Boards Manager. - Pesquise
"Arduino Nano 33 BLE"e instale oArduino nRF528x Boards (Mbed OS). Isso garante que o microcontrolador Arduino Nano 33 BLE seja compatível com a IDE do Arduino.
- No menu do Arduino, selecione
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

- Por fim, verifique se a placa selecionada é "Arduino Nano 33 BLE" no canto inferior direito da IDE.

3. Configurar a porta
No menu do Arduino, selecione Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Você verá algo como:

4. Verificar a conexão do quadro
No menu do Arduino, selecione Tools -> Get Board Info. Você verá algo como:

4. Instalar bibliotecas
1. Biblioteca do TensorFlow Arduino
Essa biblioteca contém todos os exemplos do TensorFlow Lite para microcontroladores, incluindo o código-fonte da varinha mágica necessário para este codelab.
- No menu do Arduino, selecione
Sketch -> Include Library -> Add .ZIP Library.... - Adicione a biblioteca do TensorFlow Arduino
.zipque você baixou.
2. LSM9DS1 Arduino Library
Essa biblioteca permite ler os valores do acelerômetro, do magnetômetro e do giroscópio da IMU LSM9DS1 no Arduino Nano 33 BLE Sense.
- No menu do Arduino, selecione
Sketch -> Include -> Manage Libraries.... - Pesquise e instale o
"Arduino_LSM9DS1".
5. Carregar e criar o exemplo
1. Carregar o exemplo
No menu do Arduino, selecione File -> Examples -> Arduino_TensorFlowLite -> magic_wand para carregar o código de exemplo.

Isso vai carregar o código-fonte da varinha mágica.

2. Criar o exemplo
Clique no botão Upload na janela do esboço.

Depois de alguns minutos, um texto vermelho vai indicar que a atualização foi concluída. Durante o upload, o LED direito deve piscar e depois ficar apagado.

6. Demonstração
No momento, a varinha mágica detecta três gestos, conforme mostrado abaixo: 
- Asa: comece no canto superior esquerdo e trace cuidadosamente a letra "W" por dois segundos.
- Toque: comece na posição vertical e mova a varinha em um círculo no sentido horário por um segundo.
- Inclinação: comece segurando a varinha para cima, com os LEDs voltados para você. Mova a varinha para baixo em uma inclinação para a esquerda e depois horizontalmente para a direita por um segundo.
A imagem a seguir demonstra dois gestos. Primeiro, uma inclinação e depois uma asa (use isso como referência para sua demonstração).

Para executar a demonstração, siga as instruções abaixo:
- Com o USB conectado, selecione
Tools -> Serial Monitorno menu do Arduino. Inicialmente, ela vai abrir uma tela em branco sem saída.

- Mova o microcontrolador Arduino para traçar cada uma das formas acima com cuidado e verifique se o monitor serial detecta o gesto.

- Na saída do monitor serial, notamos que a varinha mágica detectou todas as formas. O LED à direita também vai acender.
7. Próximas etapas
Parabéns! Você criou sua primeira "varinha mágica" que reconhece gestos em um microcontrolador Arduino.
Esperamos que você tenha gostado desta breve introdução ao desenvolvimento com o TensorFlow Lite para microcontroladores. A ideia de aprendizado profundo em microcontroladores é nova e interessante. Recomendamos que você teste essa tecnologia.
Documentos de referência
- Treine seu próprio modelo agora que você tem experiência com o programa básico.
- Saiba mais sobre o TensorFlow Lite para microcontroladores ( site, GitHub).
- Teste outros exemplos e execute-os no Arduino, se houver suporte.
- Confira o outro codelab: IA em um microcontrolador com o TensorFlow Lite e o SparkFun Edge
- Consulte o livro da O'Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers (em inglês), que apresenta o machine learning em dispositivos pequenos e mostra vários projetos divertidos. Este codelab é baseado no capítulo 11 do livro.

Agradecemos a atenção e divirta-se criando!