Sensor infra-vermelho com Raspberry

RPi3 com infra-vermelho
RPi3 com infra-vermelho

Sensor infra-vermelho

“Por que utilizar um sensor infra-vermelho com Raspberry 3, sendo que ele tem WiFi, Bluetooth LE e ethernet?” – Talvez você se pergunte isso, mas tudo tem sua razão. E posso afirmar seguramente; é mais um protocolo disponível e isso aumenta a convergência digital, de modo que você poderá concentrar diversos dispositivos com diferentes protocolos em um único hardware. Estou me apoiando nessa opinião com segurança porque estou certo de que não é só minha, já que a Orange Pi e a Banana Pi vem com o sensor IR nativo na board.

Sensor infrared na Raspberry

Eu gostei bastante da RPi 3, fiz dois artigos a respeito para configurar o Bluetooth em modo beacon (e escreverei outras configurações de beacon com outros dispositivos), mas depois que recebi minha Banana Pi M3, confesso que senti falta do IR na RPi.

Kit infrared (infra-vermelho) para Raspberry

Obviamente não existe um kit especifico para Rasbperry, qualquer um serve e isso você encontra aos montes no Mercado Livre (onde tenho 112 compras efetuadas até a data desse artigo). Mas eu peguei um com um “pequeno” diferencial e, pra ver, os detalhes fazem toda a diferença! Eu comprei esse kit (recomendo esse vendedor, já fiz várias compras com ele e é rápido e confiável) que vem os jumpers fêmea-fêmea, o controle, o receptor (e ótima qualidade, como você pode ver. É igual ao da BPi) e um LED infra-vermelho extra justamente para fazer interface com dispositivos inteligentes.

Eu já escrevi um artigo sobre como fazer controle remoto com Arduino e eu só tinha o emissor do controle remoto, que desmontei para poder fazer o artigo. Dessa vez não preciso “destruí-lo”!

Wiring do infra-vermelho com o Raspberry Pi

Primeiro, estou utilizando o RPi 3, mas obviamente serve para qualquer RPi e o GPIO pode variar conforme a sua vontade, já que isso é configurável via software. No exemplo tentei utilizar o GPIO do pino 40 porque fica na borda e assim fica mais visível o wiring. Estratégico não é, porque a alimentação fica do outro lado:

Raspberry e infra-vermelho
Raspberry e infra-vermelho

O módulo que aí está é um exemplo porque não achei o módulo real no Fritzing, mas o módulo real não vem devidamente marcado para o wiring. Na verdade, tem um sinalzinho “escondido” de “+” e no lado oposto, um “S”. Para não haver dúvidas, o wiring do sensor é o oposto disso, ou seja, vire-o de cara para os sinais e tudo estará certo. Eu conectei desse modo que está no desenho e queimei o sensor e o dedo:



Pinout do sensor
Pinout do sensor

Por sorte eu tinha aqui um outro receptor para poder continuar com o artigo, mas confesso que fiquei triste de queimar o receptor, tão bonito que é.

Configurando o LIRC

O programa LIRC é o nosso antigo herói para manipulação de comunicação por infra-vermelho em Linux, não seria diferente em Linux embarcado. A grande vantagem de sua utilização é que dependendo do conjunto utilizado, você poderá escolher tanto o controle quanto o receptor IR, que já terão os drivers e protocolos devidamente especificados.

Como estamos tratando aqui de um controle e receptor genéricos comunicando através do GPIO, obviamente teremos que mapear os controles. Não fique desanimado por isso, é muito mais simples do que fazê-lo em Arduino.

Primeiro passo, instale o programa e as recomendações adjuntas:

Não faça nenhuma configuração prévia nem orientada pelo post-install do pacote, apenas confirme no “Ok” se algo lhe for perguntado.

Se desejar (ou se for necessário), você pode consultar a documentação oficial aqui. Vou deixar um diagrama sem muita explicação e deixarei comentários dentro do script de configuração, pra você não esquecer mais os detalhes.

Diagrama de decisões - lirg.org
Diagrama de decisões – lirg.org

Após instalado, você já pode editar o arquivo de configuração (/etc/lirc/hardware.conf), deixando-o no seguinte formato:

Você pode fazer em qualquer ordem, mas sempre que instalo um programa que depende de carga de módulo, mesmo que o primeiro load seja automático, eu confirmo se ele foi inserido em /etc/modules e se não foi, faço a inserção manualmente em seguida, porque depois é fácil acreditar que houve algum problema em um próximo reboot (ou sabe-se lá quando, da próxima utilização do programa).

Módulos do infrared
Módulos do infrared

Perceba que o primeiro módulo é o lirc_dev e na segunda linha aponto o GPIO que será utilizado, fácil assim; só que não. Por alguma razão, não carregou o módulo no pino 40 (GPIO21), mas sim no GPIO18 (terceiro pino após o ground do desenho mais acima). Vou falar disso um pouco mais adiante.

/boot/config.txt

Apenas desça até a última linha desse arquivo e inclua o seguinte parâmetro:



/lib/udev/rules.d/85-lircd.rules

Aqui você pode ter (ou não) um arquivo de configuração do lirc para udev. No meu caso, substitui o conteúdo de 85-lircd.rules por isso:

…e após reiniciar o sistema…

Já podemos então fazer um teste inicial, mas somente “se” tudo deu certo “e” nada deu errado (redundância ciclica para afirmar que “tem” que seguir sem problemas).

Infelizmente o serviço LIRC não tem um status, portanto, exceto deseje ver como estão as coisas através de um comando ‘ps aux’, parta direto para o seguinte processo:

É um charme bobo, mas a condicional que antecede os comandos verifica previamente a existência do dispositivo de caractere lirc0 e só então permite a execução dos próximos dois comandos. Bem, como você poderá  ver no video (que publicarei posteriormente com todos os passos), o primeiro momento o comando não funcionou porque o dispositivo não existia. É isso que acontecerá se você não inserir o parâmetro de overlay no config.txt. Também, de nada adiantou apontar para o GPIO21 no arquivo /etc/modules, o default ficou sendo o GPIO18, como eu consegui descobrir analisando o log com o comando ‘dmesg’:

GPIO 18
GPIO 18

O comando mode2 fará a leitura do dispositivo e gerará uma sequência dessa leitura no formato ‘pulse/space’. Se você chegar a esse ponto, comece a sorrir e vamos caminhar para a etapa final dessa configuração. Confesso que sequer procurei algum modo de selecionar o pino desejado, tamanha foi minha preguiça unida à ansiedade de concluir esse artigo (porque para os próximos dias virão outros bastante interessantes).

Mapear o controle remoto com o irrecord

Reiniciado o serviço lirc (sudo service lirc start), podemos agora iniciar o mapeamento do controle. Eu filmei por uma conexão SSH porque desse modo eu faço screencast a partir do notebook.

Para iniciar a captura,  digite o comando:

O processo será guiado, mas não é tão claro, então prefiro detalhar, apesar de que você pode ver no video também (que será publicado posteriormente no canal no youtube). Primeiro, quando chegar na tela para iniciar a captura, vcê deve segurar um botão até que apareça a mensagem de que o comprimento foi mapeado. Seguidamente, você deverá apertar todos os botões (um por vez, obviamente) por um intevalo de até 1 segundo, para que apareça um ponto na tela. Quando terminar, aguarde. O próximo passo será identificar os botões. Para tal, será solicitado o nome do botão, conforme o namespace. Se quiser ver os nomes padrão (e claro que você precisará), use esse comando em outro terminal:

Você pode capturar um nome específico pelo início do nome. Por exemplo, POWER:

Isso deverá retornar entre as opções, a KEY_POWER. Então você digita esse nome, pressiona enter e será solicitado que você pressione o botão power para seu mapeamento. Seguidamente ele solicita outro nome e então o processo se repete até que todo o controle esteja devidamente mapeado. Ao término, apenas pressione Enter e o programa finalizará, deixando o arquivo de mapeamento no mesmo nível de diretório em que o comando foi executado (porque ‘cd’ sem parâmetros te leva de volta ao home do usuário em questão).

Se você comprar o kit desse vendedor, poderá poupar o trabalho do mapeamento pegando o meu:

Como o mapeamento foi um sucesso, agora basta copiá-lo para o diretório de configuração do lirc e reiniciar o serviço para que o arquivo seja lido:

Interagindo com o comando IR





Apenas para exemplificar, crie um arquivo .lircrc em /root/ e coloque o seguinte conteúdo:

Esse arquivo rc irá definir que a saída do botão KEY_POWER será enviada para o programa irexec. O comando enviado será um echo dizendo “ligado”. Em segunda, também enviando para irexec, mas dessa vez o botão 9, ecoando o número do botão. Isso é ótimo para interagir com shell script, como pode ser visto no video que será publicado posteriormente no canal.

Agora façamos um script shell chamado ‘action.sh’ para testar isso:

E dá-se então o modo de execução para o script:

Você pode ver a execução do processo no video que será publicado no canal, não se preocupe. Após fazer isso, em um terminal execute:

E em outro terminal, execute:

Isso executará o receptor em segundo plano. Agora você pode executar o action.sh nesse segundo terminal:

E pressionando os botões ‘power’ e ‘9’, os resultados correspondentes serão exibidos pelo script action.sh:

saida do script action.sh
saida do script action.sh

Esse script é uma porquice só para prova de conceito; poderia ser pipe, arquivo em memória, leitura de banco de dados e tudo o que você imaginar, só depende do tempo que você está disposto a dispensar  fazendo a tarefa. Gostou? Então leia as linhas abaixo e veja quais dessas opções podem lhe interessar.

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Agregador de Links - Loucuras da Net

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta