Pilaroid: Câmera Instantânea com Raspberry Pi
Você já deve ter ouvido falar da câmera instantânea Polaroid que teve seu auge no século 20. São câmeras que tiram uma foto e imprimem instantaneamente utilizando um tipo de revelação química.
Como toda moda fica esquecida por um tempo mas volta com tudo, a Polaroid hoje tem diversos modelos de câmeras instantâneas, com impressão colorida, tecnologia touch e muito mais.
Mas como nós da FILIPEFLOP temos o espírito maker e gostamos de projetos DIY, decidimos fazer a nossa versão de câmera instantânea utilizando uma Raspberry Pi e uma mini impressora térmica e a batizamos de Pilaroid. E o que é melhor, disponibilizamos todas as instruções neste post para você também desenvolver sua câmera instantânea.
Material Utilizado
- Raspberry Pi 3
- Fonte DC 5V 3A para Raspberry Pi 3
- Impressora Térmica Embarcada
- Fonte 5V 2A para Impressora Térmica
- Câmera Raspberry Pi v2 8MP
- Botão Arcade Fliperama 60mm
- Led alto brilho
O sistema Linux utilizado na Raspberry foi o Raspbian Jessie Lite. As instruções de instalação do sistema podem ser encontradas no site da Raspberry Pi ou siga os primeiros passos com Raspberry Pi.
A impressora térmica embarcada nos possibilita a impressão em rolo comum de papel térmico de 57mm de largura, facilmente encontrado em papelarias. É possível imprimir dados de log, textos, gráficos, fotos, código de barras e etc. Sua comunicação via Serial/TTL facilita a integração dessa impressora com diversas plataformas como Arduino ou Raspberry Pi.
Veja também como utilizar a impressora térmica com Arduino.
A câmera utilizada é da própria Raspberry Pi e pode ser facilmente conectada na entrada CSI usando um cabo flat. É uma câmera de 8MP que faz fotos e vídeos utilizando a aplicação raspistill já instalada no Raspbian. Veja o funcionamento da câmera em detalhes aqui.
Configuração do Sistema
Antes de montar e conectar os componentes na Raspberry Pi vamos fazer a configuração do sistema.
Para que a impressora funcione corretamente na UART é necessário desabilitar o Bluetooth da Raspberry Pi 3 que também utiliza a mesma porta. Para isso, adicione no final do arquivo:
/boot/config.txt
A seguinte linha:
dtoverlay=pi3-disable-bt
Use um editor de texto de sua preferência como vi ou nano.
Então, desabilite o serviço de bluetooth, para que não haja interferência na porta UART:
sudo systemctl disable hciuart
Usando a aplicação raspi-config, habilite a câmera e desabilite o terminal serial
sudo raspi-config
Vá em Interfacing Options -> Camera -> Yes para habilitar a câmera.
Para desabilitar o terminal serial vá em Interfacing Options -> Serial -> No -> Yes -> Ok
Instalação dos Programas Necessários
Primeiramente vamos instalar o CUPS (Common UNIX Printing System) e alguns pacotes de dependência.
sudo apt update sudo apt install git cups wiringpi build-essential libcups2-dev libcupsimage2-dev
Então instale o raster-filters para CUPS, um programa que processa formatos bitmap para o formato nativo de impressora térmica.
git clone https://github.com/adafruit/zj-58 cd zj-58 make sudo ./install
Para adicionar a impressora térmica ao programa CUPS e utilizá-la como impressora padrão execute os seguintes comandos:
sudo lpadmin -p ZJ-58 -E -v serial:/dev/ttyAMA0?baud=19200 -m zjiang/ZJ-58.ppd sudo lpoptions -d ZJ-58
Código Shell Script da Câmera Instantânea
O repositório clonado do github nos passos anteriores já acompanha um script que é responsável por fazer a leitura do botão, tirar a foto e enviar para a impressora térmica. Você encontra esse script em ‘zj-58/extras/camera.sh’.
Para nosso projeto, foram feitas algumas mudanças e o resultado foi o seguinte:
#!/bin/bash SHUTTER=16 LED=5 # Initialize GPIO states gpio -g mode $SHUTTER up gpio -g mode $LED out # Pisca o LED ao iniciar o sistema for i in `seq 1 10`; do gpio -g write $LED 1 sleep 0.1 gpio -g write $LED 0 sleep 0.1 done while : do # Verifica se o botão foi pressionado if [ $(gpio -g read $SHUTTER) -eq 0 ]; then sudo cancel -a ZJ-58 sudo cupsenable ZJ-58 gpio -g write $LED 1 /usr/bin/raspistill -n -br 65 -t 200 -w 512 -h 384 -o - | /usr/bin/lp /usr/bin/lp /home/pi/zj-58/extras/cartao.jpg sleep 1 # Espera o usuário liberar o botão antes de terminar while [ $(gpio -g read $SHUTTER) -eq 0 ]; do continue; done gpio -g write $LED 0 fi done
As linhas mais importantes do programa são:
/usr/bin/raspistill -n -br 65 -t 200 -w 512 -h 384 -o - | /usr/bin/lp /usr/bin/lp /home/pi/zj-58/extras/cartao.jpg
A primeira linha tira a foto em um formato 512×384 e joga via pipe para o programa lp.
A segunda imprime logo em seguida um pequeno cartão que fizemos especialmente para o evento TDC Florianópolis 2017.
Para que o programa inicie automaticamente edite com um editor de texto(vi ou nano) o arquivo ‘/etc/rc.local’, adicionando antes da linha “exit 0” o script camera.sh
sh /home/pi/zj-58/extras/camera.sh
Faça o reboot do sistema para que as mudanças tenham efeito.
Montagem do Circuito
Já que a impressora se comunica via UART, precisamos conectá-la nos pinos 6, 8 e 10 da Raspberry Pi da seguinte maneira:
O LED de indicação pode ser conectado nos pinos 29 e 25 como na tabela a seguir:
Lembre-se de usar um resistor com o LED. Pode ser de um valor pequeno como 220 ohms.
O botão é ligado em uma GPIO e Ground como na tabela a seguir:
Veja a montagem do circuito completo na figura a seguir:
Teste Final da Câmera Instantânea
Ligue o circuito nas fontes de energia. Quando o sistema iniciar você verá o LED piscar. Aperte o botão e veja sua foto sendo impressa:
Abaixo temos o vídeo da câmera em ação:
As instruções técnicas deste post e programa shell script são baseadas no projeto original de Phillip Burgess, engenheiro de criação da Adafruit. O post original em inglês pode ser encontrado aqui.
Gostou ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!
Site: Blog FILIPEFLOP