Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

quinta-feira, 9 de agosto de 2012

No Parque, 5/8/12, leitor de código de barras com o Arduino


Dia desses o Rafael Galeanu, de Suzano entrou em contato comigo querendo ajuda num projeto que consistia basicamente em comandar um leitor de código de barras pelo Arduino. Ele já tinha o leitor, um modelo handheld da Bematech , o BR310, e também já tinha comprado um shield de USB, necessário para fazer o Arduino conversar com o leitor.

Sugeri a ele que comparecesse ao Arduino no Parque, mas ele está trabalhando no fim de semana, então mandou o William Silva, que trouxe os “equipamentos”.

Sábado foi um pouco complicado, tive que sair no meio da diversão para uma reunião de início de semestre na Anhanguera. Só depois do meio dia me encontrei com o William, só que havia outras pessoas por ali esperando, então tive que deixar ele apanham sozinho por um tempo. Ainda por cima tinha um aniversário de criança pelas 16h, então meu alvará arduínico nesse sábado iria somente até às 15h30min.

Esse é o leitor BR310. O modelo que usamos é mais antigo, portanto mais feinho.
Quanto tive como colocar a mão na massa, vi que o orifício era bem inferior ao que tinha pensado. Prá começar a plaquinha USB que ele tinha era da SparkFun. Quando fui pesquisar o software, drivers etc no site, o dito tinha um link para uma outra placa, como se o driver da outra placa servisse na deles. Achei esquisito, baixei, rodei e..., não funcionou, o único sinal devida que o shield deu foi acender o LED. 

Plaquinha da SparkFun. Link:  https://www.sparkfun.com/products/9947

Pesquisa dali e daqui, vi que a plaquinha da SparkFun tinha uma diferença da placa do cara, que era que o pino D7 do shield deveria ser conectado ao pino de reset, e na plaquinha da SparkFun isso não acontecia. Ao conectar um no outro, o shield já entrou no ar.

Ligo então o BR310 na plaquinha e... nada, de novo. Nem acendeu. Ligo no PC e acende, então deve ser algo com o Arduino e/ou o shield. Google de novo, e surge a dica: o Arduino, qdo alimentado pelo PC, muitas vezes não disponibiliza ao shield USB energia suficiente para acionamento dos equipamentos a ele (shield) conectados. Desmonta-se o multímetro, pega-se a bateria de 9V e... leitor aceso! Sinal que havia terminado a parte fácil...


Plaquinha com o jumper conectando o pino 7 digital ao reset. O ideal é depois fazer isso com solda, por baixo da placa, prá não ficar essa alça voando sobre o shield.


Conjunto acoplado ao leitor, com o cartão de testes.

Agora vinha destrinchar a comunicação entre o Arduino e o Bematech. Acontece que o protocolo USB é o ó do boró. Isso não quer dizer que ele seja ruim, longe disso, aliás eu acho que ele é a interface mais chique que apareceu nos últimos anos. É rápido, confiável e flexível e por isso a indústria embarcou nele com força. Acontece que... ele é complicado, do ponto de vista da implementação. Tanto assim que o povo do Arduino preferiu transformar, através de driver, a porta USB dos nossos micros em uma porta serial, protocolo esse muito mais limitado e consequentemente muito mais simples de se lidar. O driver que o Arduino usa cuida de toda a complexidade do USB para nós. No nosso caso, isso não era uma opção...

Uma vez que o hardware funcionou (ou pareceu funcionar), agora é o software. Baixei do site http://www.circuitsathome.com, o tal que a SparkFun indica, uma lib para lidar com a parte "baixo nível". Em seguida, estudamos a respeito de como interagir com os dispositivos conectados à USB. Um rolo total. Tenta dali e daqui, desconfiei que o leitor poderia simular um teclado, que é um device hoje USB. Cheguei então na interface USB tipo HID (Human Interface Device), que é a dos teclados.

Carreguei o programa no Arduino, apontei o leitor para um cartão com um código e atirei (apertei o gatilho do bicho). Olha que belezinha:


A saída são os códigos lidos do cartão em diversos formatos. Ou seja... mais um leão morto!

Eu não vou postar o código aqui, contrariando a regra de ouro desse site, porque de fato eu não escrevi nem uma linha, ou seja, o programa e as libs são do sujeito do Circuits@Home. É "só" fazer o download, instalar e adivinhar o resto...

Dessa vez não tem filminho no YouTube, porque o alvará acabou antes, tive que me mandar para a festa da Rafaela. Mas o William e o Rafael prometeram trazer a tralha de novo dia desses prá gente terminar o projeto, aí eu filmo.