Construa um Cilindro POV Incrível com Arduino Due – Guia Passo a Passo
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Due | 1 |
| Módulo Bluetooth HC-06 | 1 |
| Fita LED RGB LPD8806 1m (60 LEDs/m, 30 ICs/m, IP20) | 1 |
| Regulador Linear com Saída Ajustável (LM317) | 1 |
| Amplificador Operacional Dual de Uso Geral (Texas Instruments) | 1 |
| Resistor 20k Ω | 3 |
| Resistor 220 Ω | 1 |
| Resistor 1k Ω | 2 |
| Transistor NPN de Uso Geral | 1 |
| Capacitor 1000 µF | 1 |
| Capacitor 100 nF | 1 |
| Capacitor 1 µF | 1 |
| Resistor 240 Ω | 1 |
| Resistor Ajustável 1k Ω | 1 |
| Transmissor IR (genérico) | 1 |
| Receptor IR (genérico) | 1 |
| Protoboard (genérica) | 1 |
| Cilindro de Isopor (Diâmetro: 20cm, Altura: 10cm) | 2 |
| Motor Elétrico 12V (XDRIVE 545-1) | 1 |
| Coroa Dentada 60 Dentes 8mm | 1 |
| Coroa Dentada 12 Dentes 3.2mm | 1 |
| Correia Dentada 80 Dentes 6x200mm | 1 |
| Barra Rosqueada M8 125mm | 3 |
| Barra Rosqueada M8 330mm (usada como eixo) | 1 |
| Anel de Contato ASL9017 | 1 |
| Fita Adesiva Preta 48mm | 1 |
| Disco de Compensado (Ø 150mm, Espessura: 10mm) | 2 |
| Disco de Alumínio (Ø 200mm, Espessura: 2.5mm) | 2 |
Ferramentas Necessárias
- Ferro de Solda
- Serra Tico-tico
- Furadeira de Bancada
- Fonte de Alimentação de Laboratório
- Notebook com Windows 10
Aplicativos e Serviços Online
- Microchip Studio – Para desenvolvimento de software Arduino
- Arduino IDE – Alternativa ao Microchip Studio
- Cygwin – Fornece funcionalidade similar a Linux no Windows. Usado para o Programa de Controle do PC
- Microsoft Visual Studio 2015 – Usado para a Interface Gráfica do Usuário
Sobre o Projeto
Introdução
Este é meu primeiro projeto com Arduino. O trabalho foi inspirado por vários projetos de makers que criaram displays de Persistência de Visão (POV) [2,3,4].
Persistência de visão (POV) refere-se à ilusão óptica pela qual múltiplas imagens discretas se fundem em uma única imagem na mente humana, sendo considerada a explicação para a percepção de movimento no cinema e filmes animados [1].
Os projetos [2,3,4] implementam displays globulares POV, usando LEDs discretos e registradores de deslocamento discretos. Em vez disso, meu dispositivo utiliza um cilindro rotativo e fitas LED RGB prontas como display POV.
Principais Características
- Display POV (Persistência de Visão)
- Exibe imagens GIF animadas em um cilindro rotativo
- As imagens GIF são armazenadas na RAM ou Flash do Arduino
- Comunicação com PC via Bluetooth
Visão Técnica
- Diâmetro do cilindro: 200 mm
- Altura do cilindro: 200 mm
- Material do cilindro: Isopor
- Peso do cilindro: 420 g
- 4 Fitas LED RGB baseadas no LPD8806
- Tamanho da tela: 151 x 40 pixels
- Baseado no Arduino Due
- Inclui módulo Bluetooth HC-06
- Controlado via Bluetooth a partir de um PC
Construção Mecânica
A construção mecânica é mostrada no desenho abaixo.
O dispositivo compreende um chassi e um rotor. O chassi consiste em dois discos circulares de compensado conectados por três barras roscadas. A distância entre os discos é de 120 mm. No meio há dois mancais de esferas e o eixo. Para o eixo, também é usada uma barra roscada. O eixo é acionado por um motor elétrico através de duas coroas dentadas e uma correia dentada. A velocidade de rotação chega a 1300 RPM (22 Hz).
O rotor consiste em dois cilindros de isopor e dois discos circulares de alumínio. Os cilindros de isopor são colados no disco inferior. O disco superior pode ser removido e é usado para fixar o rotor ao eixo.
A eletrônica fica na parte superior do rotor e inclui:
- Placa Arduino Due
- Shield feito sob medida para o Arduino Due
- Placa de Fonte de Alimentação (PS)
- Módulo Bluetooth HC-06
A alimentação (7.5V) é fornecida à placa de fonte através de contatos deslizantes e um anel de contato.
Quatro fitas LED com total de 40 LEDs RGB são usadas. Elas são conectadas com cabos ao Shield do Arduino.
As quatro fitas LED são posicionadas conforme mostrado no desenho abaixo. Ao usar quatro fitas deslocadas, a distância no eixo Y entre os LEDs é dividida por 4. A distância no eixo X é tratada pelo software. O software atualiza todos os 40 LEDs 151 vezes por revolução. A grade no desenho corresponde aos pixels visíveis.
Circuitaria Eletrônica
A circuitaria eletrônica está mostrada no esquema em PDF anexo.
Há uma placa de fonte com regulador de tensão LM317. A tensão de entrada é 7.5V e a saída é 4.6V. O regulador alimenta a placa Arduino Due e as fitas LED.
Também há um shield feito sob medida para o Arduino. Ele contém os cabos conector para as fitas LED e uma circuitaria para o receptor IR. O receptor IR detecta a posição do rotor e está conectado a uma entrada de timer/interrupção do Arduino.
Existem quatro fitas LED chamadas STRIP0 a STRIP3. Cada fita tem 5 drivers LPD8806 e 10 LEDs RGB. STRIP0 conecta à USART0 e STRIP1 à USART1. Ambas USARTs operam em modo SPI. STRIP2 e STRIP3 são conectadas em série e acionadas pela interface SPI do Arduino.
Para comunicação com PC, um módulo Bluetooth HC-06 é conectado à USART3. O módulo é alimentado pelos 3.3V fornecidos pela placa Arduino.
Software do Arduino
O software consiste no programa principal (mpc.ino) e nas seguintes bibliotecas:
- bt – Driver para módulo Bluetooth
- LDP8806 – Driver para fitas LED
- MemoryFree – Funções para detectar RAM livre disponível
- mpcgif – Reprodução de arquivos GIF na RAM ou Flash
- pictures – Imagens GIF internas armazenadas na Flash
- trace – Funções para depuração de software
A saída periódica das imagens para as fitas LED é feita por interrupção. Existem dois buffers de frame alternados. Cada buffer armazena uma imagem de 40 x 151 pixels. Cada pixel é um índice de paleta de cores de um byte. Enquanto um buffer é enviado às fitas LED via interrupção e DMA, o outro é preparado pelo programa principal (ex: decodificação de GIFs). A alternância dos buffers é feita pela rotina de interrupção de frame.
Há uma interrupção de frame por revolução, acionada pelo sensor IR. A rotina mede a velocidade de rotação (via timer de hardware) e programa interrupções periódicas de coluna (uma por coluna, ou seja, 150 interrupções por revolução) com um timer de hardware. A rotina de interrupção de coluna envia a coluna atual às fitas LED. Por desempenho, a saída usa três canais DMA que operam totalmente em paralelo.
O código fonte completo do Arduino está disponível no GitHub.
Programa de Controle do PC
O Programa de Controle do PC (pccp) é uma ferramenta de linha de comando em C++. Roda sob Cygwin e comunica com o Arduino via Bluetooth. O pccp permite controlar o Cilindro POV com comandos de caractere único:
- 0-7 – Preencher tela com cor (preto, vermelho, amarelo, verde, ciano, azul, violeta, branco)
- t – Desenhar curva triangular (como imagem de teste)
- s – Ativar/desativar rotação da imagem exibida
- r – Desenhar linha única
- c – Desenhar coluna única
- y – Reproduzir GIF interno armazenado na Flash
- f – Baixar arquivo GIF externo do PC via BT
- x – Reproduzir GIF externo baixado
O pccp também fornece interface para uma interface gráfica. Além disso, exibe a velocidade de rotação atual (em Hz e µs) e um contador de frames.
O código fonte completo está disponível no GitHub.
Interface Gráfica do Usuário
A interface gráfica é um App Universal Windows. Permite selecionar o arquivo GIF a ser exibido pelo Cilindro POV. O app foi derivado do app FilePicker dos "Microsoft Windows Universal Samples" [5].
O código fonte completo está disponível no GitHub.
Referências
- https://en.wikipedia.org/wiki/Persistence_of_vision
- RGB LED GLOBE - POV - 40 x 200
- POV Globe Display RGB
- POV Globe Display RGB - Descrição do projeto (em alemão)
- https://github.com/Microsoft/Windows-universal-samples
Código
- Código fonte Arduino para Cilindro POV: https://github.com/hanoba/povc-arduino
- Programa de Controle do PC para Cilindro POV: https://github.com/hanoba/povc-pccp (C++ rodando sob Cygwin)
- Interface Gráfica para Cilindro POV: https://github.com/hanoba/povc-win-app (App Universal Windows)
Esquemáticos
Este é o esquema.
Processo de manufatura
- Relógio POV com Arduino: Construa um Display LED de Persistência de Visão
- Construa um Osciloscópio Arduino de 20 kHz em LCD Nokia 5110 – Guia DIY Fácil
- Persianas Inteligentes: Controle Automático de Luz com Arduino e Energia Solar
- Construa um Jogo da Velha Touchscreen no Arduino Due
- Mealheiro Inteligente: Controlar Aceitador de Moedas com Arduino Nano
- Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Construa um Sensor de Obstáculos Simples com Arduino – Tutorial Fácil com LED IR e Fotodiodo
- Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
- Circuito de Entrada Analógica Isolada para Arduino