Pilaroid: Câmera Instantânea com Raspberry Pi

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.

Pilaroid Câmera Instantânea com Raspberry Pi

Material Utilizado

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.

Detalhes câmera

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.

raspi-config Interfacing Options

raspi-config Camera

raspi-config Camera Enable Yes

Para desabilitar o terminal serial vá em Interfacing Options -> Serial -> No -> Yes -> Ok

raspi-config Serial

raspi-config Login Shell No

raspi-config Hardware Serial Yes

raspi-config Serial No

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:

Pinagem Raspberry Impressora Térmica

O LED de indicação pode ser conectado nos pinos 29 e 25 como na tabela a seguir:

Pinagem Raspberry LED

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:

Pinagem Raspberry Botão

Veja a montagem do circuito completo na figura a seguir:

Circuito Completo da Câmera Instantânea

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:

Resultado da Impressão

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!

3
Pilaroid: Câmera Instantânea com Raspberry Pi
4 votos, 5.00 classificação média (100% pontuação)

Técnico em Mecatrônica pelo SENAI, onde teve os primeiros contatos com microcontroladores, eletrônica e programação. Graduação em Engenharia de Controle e Automação. Integrante do Depto. técnico da FILIPEFLOP.

Compartilhe este Post

3 Comentários

  1. lays - 16 de maio de 2017

    Opa, achei foda demais!
    Só recomendo mudar as cores dos blocos de código, por serem muito claras, fica difícil ler!
    té +

Deixe uma resposta