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.
Sensacional o artigo!
ResponderExcluirDia complicado esse em...
Mas aos 44 do segundo tempo, depois de ter driblado vários mistérios chegamos a um ótimo resultado.
Vamos continuar o projeto, agora a missão será integrar o shield Ethernet ao sistema, vamo que vamo!
William,
ExcluirCorrido e divertido, complicado nada ... ;)
Sim, boralá divertir com o shield Ethernet!
Abracadabraço!
Mauro
Este comentário foi removido pelo autor.
ResponderExcluircara estou precisando muito do codigo do programa para trabalho academico, tem possiblidade de postar ou enviar por e-mail
ResponderExcluirO código do link http://www.circuitsathome.com/mcu/usb-host-shield-library-version-2-0-released
ResponderExcluirnão te ajudou?
Por favor vejam se podem me ajudar:
ResponderExcluirComprei a placa USB da sparkfun pela robocore: http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=167#comentarios
Estou tentando coletar o código de barras deste dispositivo:
http://www.automatizando.com.br/sistema/listaprodutos.asp?IDLoja=4351&IDProduto=1456765&q=leitor-de-codigo-de-barras-laser-fixo-honeywell-metrologic-solaris-mk-7820
Já fiz testes usando a lib 1.0 e 2.0 do Oleg, inclusive fazendo o jumpeamento do pino d7 ao reset ao usar a lib 1.0.
Meu arduino é o Mega e estou usando uma fonte externa 9v (e não a energia do USB).
Mesmo assim, não consigo fazer funcionar, alguém pode me ajduar?
Abs,
Rafael
Huummm... a porta USB é meio enjoada mesmo, acho que só com o equipamento na mão para testar.
ExcluirConsultando a especificação, lá fala em "múltiplas interfaces", sem dizer quais. Talvez vc devesse tentar uma outra porta, serial, ou PS/2.
Eu fiz um post ontem nesse blog falando sobre outro tipo de interface, vc viu?
Vi sim, achei muito interessante a solução, mas o nosso só veio com USB mesmo. Você menciona que algumas pessoas o contratam para alguns trabalhos, gostaria de ter seus contatos para esta possibilidade pode ser?
ResponderExcluirGrato,
Rafael (www.cricketdesign.com.br)
Na verdade ele possui também uma porta AUX e uma EAS mas sem cabos. Acho que eles te enviam o cabo de acordo com o que você solicita na hora da compra ( eu escolhi USB achando que seria mais fácil =])
ExcluirSegue o manual se for ajudar a entender o problema: http://www.kalischgmbh.de/doku/ms7820guide.pdf
Mais uma vez obrigado pela ajuda!
Rafael, vc pode me escrever no assismauro_AT_hotmail.com.
ExcluirObrigado pelo contato! Eu descobri o pq não funcionava a plaquinha comigo, aparentemente ela não funciona com o Mega, usamos um arduino UNO e também não funcionou, aí testamos com um arduino UNO original e funcionou =]
ExcluirObrigado pela ajuda, e como temos diversos projeto malucos aqui, entrarei em contato em breve para conversarmos.
Grato,
Rafael
Putz, que pena, funcionou... :)
ExcluirEssa plaquinha USB é enjoada mesmo. Tudo bem não funcionar com o Mega até a gente desculpa, mas esse troço de Uno e Uno original...
Estou às ordens, aqui. Aliás, muito legal o trabalho da Cricket!
olá tenho um leitor bematech e estou usando arduino mega e Arduino shield host coloquei a biblioteca HID mais nao quer funcionar não, o leitor acende a luz mais quando passa um codigo de barras ele nao bipa... estranho no pc funciona normal quando ligava na porta serial sem o usb host ele funcionava bipava mais dava aquela string gigande com um monte de espaço e travava td... comprei ai o usb host "shield" so que estoucom esse probleminha alguem pod me dar um help ?
ResponderExcluirOlá amigo, estou desenvolvendo um trabalho acadêmico com leitor de código de barras no arduino. Consegui chegar na mesma situação aonde você chegou acima, gostaria de saber como faço para interpretar o código que o leitor captou e jogou para a seria? Obg.
ResponderExcluirse puder me ajudar agradeço muito. Email:
premail2010-cd@yahoo.com.br
Bom, o meu programa já joga para a serial, não?
ExcluirOla, tentei usar esse mesmo leitor Bemattech BR310, mas nao obtive sucesso. Quando eh feito uma leitura de um codigo o leitor fica num estado morto e em seguida volta a operar novamente. Você poderia informar a saida do seu USB_Desc? Gostaria de ver como ficou seu Usage Page do seu leitor.
ResponderExcluirAbs