Ligue uma impressora térmica no Arduino
Não seria ótimo se você pudesse imprimir à partir do Arduino? Não, não estou falando de impressora 3D com Arduino, que futuramente vamos abordar aqui, mas sim de uma impressora que possa imprimir letras, números, códigos de barra e imagens, entre outras coisas. Isso tudo pode ser feito com uma impressora térmica serial embarcada como essa:
A impressora funciona por impressão térmica direta, ou seja, não precisa de tinta para funcionar. O rolo de papel é facilmente encontrado em papelarias e possui largura de 57mm. É o mesmo papel utilizado em máquinas de cartão de crédito/débito.
A impressora tem um tamanho compacto, sendo ideal para utilização em projetos embarcados, e vem com cabos de dados (comunicação serial) e energia, e vamos mostrar como a ligação dessa impressora térmica no Arduino é bem simples.
Conexões da impressora térmica embarcada
Essa impressora funciona com tensões entre 5 e 9 volts, mas você não deve tentar ligá-la nos 5V da USB, por exemplo, pois ela exige uma fonte de alimentação de pelo menos 1,5A.
Na parte de baixo da impressora, temos os conectores DC (energia) e TTL (comunicação). No conector DC, vamos conectar o cabo de alimentação que vem junto com a impressora (vermelho e preto):
O cabo de comunicação (Serial/TTL) possui 3 fios nas cores preta (GND), amarelo (Data Out ou TX) e verde (Data In ou RX) e deve ser conectado conforme a imagem acima.
O cabo de energia deve ser ligado na fonte de alimentação externa (5 à 9V), respeitando a polaridade. Eu utilizei um conversor P4 com parafusos para facilitar a conexão:
Para testar as funções básicas da impressora, abra a tampa superior e coloque uma bobina de papel com a parte sensível à temperatura virada para a frente.
O botão na parte de cima da impressora, que serve para ejetar papel, serve também para realizar um processo de “auto teste”. Para isso, ligue a fonte de alimentação da impressora ao mesmo tempo que mantém esse botão pressionado. Serão impressas várias informações referentes á configuração, como lista de caracteres, versão de firmware, baud rate, etc.
Na parte final da impressão, verifique o “baud rate” com o qual a impressora vêm configurada. Isso é importante para o processo de impressão que faremos adiante, utilizando o Arduino.
Note que enquanto a impressora estiver conectada na fonte de alimentação, o led verde na parte superior pisca em intervalos de 1 segundo.
Conexão da impressora térmica no Arduino
Como mencionamos anteriormente, a impressora se comunica com o Arduino utilizando interface serial/TTL, e vamos utilizar os pinos digitais 5 e 6 para fazer essa comunicação.
Isso é possível pois vamos utilizar no programa a biblioteca SoftwareSerial, que permite criar uma nova porta serial no Arduino utilizando os pinos digitais.
A conexão então fica assim: o fio GND ligado à uma das portas GND do Arduino, o fio verde ligado à porta 5, e o fio amarelo ligado à porta 6:
Vamos agora testar a impressão pelo Arduino.
Imprimindo à partir do Arduino
Para imprimir, vamos usar a biblioteca Adafruit Thermal Printer, que você encontra neste link.
Faça o download da biblioteca, descompacte e renomeie a pasta para algo como Adafruit_Thermal_Printer e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.
O jeito mais simples de testar essa impressora é usando o exemplo A_Printertest da própria biblioteca.Esse exemplo você encontra no menu Arquivo => Exemplos => Adafruit Thermal Printer Library:
Carregue esse exemplo e transfira para o Arduino. Em pouco segundos a impressora começa a imprimir uma série de informações sobre fontes, código de barras e outras coisas que você pode fazer com esta biblioteca:
Criamos um programa de exemplo para mostrar como você pode imprimir uma informação de acordo com o estado de uma porta.
Nesse exemplo, vamos utilizar um potenciômetro ligado à porta analógica A0, e um botão tipo push-button ligado à porta analógica A1. O esquema de ligação desses componentes adicionados ao circuito anterior fica assim:
Carregue agora o programa abaixo no Arduino. O programa utiliza as funções do programa A_Printer_Test citado anteriormente, e monitora o estado das portas analógicas A0 e A1.
Na linha 19 do programa temos a definição da taxa de transmissão serial, o baudrate, que deve estar de acordo com o valor que foi impresso no autoteste da impressora. No caso, a taxa é de 19200:
//Programa: Mini Impressora termica com Arduino //Autor: Arduino e Cia #include "Adafruit_Thermal.h" #include "SoftwareSerial.h" //Ligacao no RX (fio amarelo) da impressora #define TX_PIN 6 //Ligacao no TX (fio verde) da impressora #define RX_PIN 5 SoftwareSerial mySerial(RX_PIN, TX_PIN); Adafruit_Thermal printer(&mySerial); void setup() { Serial.begin(9600); //Inicializa SoftwareSerial mySerial.begin(19200); //Inicializa impressora printer.begin(); pinMode(A0, INPUT); pinMode(A1, INPUT); //Imprime informacoes iniciais //Texto centralizado printer.justify('C'); //Negrito printer.inverseOn(); printer.println(F(" www.arduinoecia.com.br ")); printer.inverseOff(); //Avanca uma linha printer.feed(1); //Altura dupla printer.doubleHeightOn(); //Negrito printer.boldOn(); printer.println(F("Ajuste o potenciometro")); printer.println(F("e pressione o botao!")); printer.boldOff(); printer.doubleHeightOff(); printer.justify('L'); printer.feed(2); } void loop() { //Le os valores do potenciometro e do botao int valor_pot = analogRead(A0); int valor_botao = digitalRead(A1); if (valor_botao == 1) { //Caso botao seja pressionado, envia para a impressora //as informacoes e o valor do potenciometro printer.print(F("Botao Pressionado! Valor: ")); printer.println(valor_pot); printer.feed(1); //Coloca a impressora em modo sleep printer.sleep(); delay(300L); //Executar antes de imprimir novamente printer.wake(); printer.setDefault(); } while (digitalRead(A1) == 1) { delay(10); } delay(10); }
Gire o potenciômetro e pressione o botão para que o valor da porta analógica A0 seja enviado para a impressora:
Interessante, não? Explore as demais funções da biblioteca e veja como imprimir caracteres com fundo invertido, gráficos, imagens, código de barras, qrcode e muito mais!
Gostou deste post sobre impressora térmica com Arduino? Confira outros posts com Arduino aqui mesmo no Arduino e Cia!
Bom dia, como não tenho conhecimento nesta placa, posso imprimir usando essa placa com cabo de impressora no note ou pc? Obrigado.
Oi Myro,
Com um cabo de impressora comum não. A tensão da serial dessa impressora é de 5V, ideal para ligar em placas como o Arduino. A serial do seu PC trabalha com tensão de 12V, se não me engano. Ligando diretamente, iria queimar a sua impressora.
Nesse caso, o que você pode fazer é usar um cabo conversor serial/ttl e conectar na impressora.
Abraço!
Estou utilizando arduino mega com o pino 0 e 1 como rx e tx, troquei no programa porém a minha impressora está imprimindo chinês, no teste ela imprime em ASCII. Porque será?
Legal….
Com este código consegui funcional a impressora DP-Q802P, parabéns!!!
Só não consegui localizar no manual e nem na biblioteca.
Alguém saberia me informar?
Quero imprimir os dados de um cartão SD. Uma lista, porém, um a um por click. Há como
Seria possivel imprimir através do celular ????
Oi Benedito,
Diretamente eu creio que não, mas você pode, por exemplo, enviar as informações via Bluetooth, receber no Arduino e mandar imprimir pela serial.
Abraço!
Olá amigos, alguem sabe que linguagem essa impressora fala? Se é epl?
Como faço para ligar um sensor de gas junto e imprimir o que ele medir?
Bom dia,
Você pode usar o exemplo do botão para conectar o sensor de gás no circuito e imprimir o valor do sensor de tempos em tempos.
Abraço!
Saberia informar se consigo rodar essa impressora no raspbarry pi?
Teria algum exemplo?
Agradeço desde já.
Boa noite,
Por favor dê uma olhada nesse link, tem um tutorial sobre como usar essa impressora com Raspberry Pi: http://blog.filipeflop.com/embarcados/camera-instantanea-com-raspberry-pi.html
Abraço!
Adilson
Boa tarde….
eu tenho pic18f e uso o mikroC esta impresso funciona???
[email protected]
Olá amigo! você poderia postar como conectar um receptor bluetooth para imprimir através do celular.
Boa noite,
Interessante a sua ideia. O que pensa em imprimir?
Abraço!
Adilson
Seria possível criar um receptor bluetooth para imprimir em uma HP, por exemplo, para imprimir em folhas A4? Poderia abordar o assunto? Desde já agradeço!
Como é uma mine impressora pra teste, poderia ser usada para imprimir pequenos lembretes, seria legal.
Bacana.. vou pensar em algo… 😉
Abraço e obrigado!
Adilson
Dá para adaptar para imprimir numa multifuncional HP J4660?
Ola Amigo obrigado pelo artigo. É possível eu mandar a impressão de dados do arduino diretamente pela porta USB de qualquer impressora térmica ?
é possivel imprimir etiqueta com o código QR ?
Oi Gersio,
Se for uma etiqueta com papel termico, não vejo problemas (não sei se isso existe). 🙂
Abraço!
Adilson
é possivel atravez do arduino enviar comandos para uma impressora
Zebra ?
Ola, vc pode ajudar em um projeto como gerar no programa o seguinte:
Toda vez que se apertar o botão de impressão ele gera uma impressão (Qrcode) com os seguintes dados um numero XXX, data dia/mes/ano, hora xx:xx.
Consigo imprimir etiquetas ?
Bom dia,
Não tentei, mas se a etiqueta for própria para impressora térmica, não vejo problemas.
Abraço!
Adilson
ola tem como buscar os dados com o arduino no mysql, tipo teclado display e impressora conectado no arduino, e efetuar um registro no arduino e ele ir buscar os dados no mysql e imprimir?
Boa noite,
Tranquilamente. 🙂
Abraço!
Adilson
tem como me passar um programa para impressora a tinta? ou este mesmo pode ser utilizado?
Oi Lucas,
Nesse caso seria um esquema totalmente diferente, nem sei se seria possível em um Arduino Uno, por causa da quantidade de memória disponível.
Abraço!
Adilson
Quero imprimir os dados de um cartão SD. Uma lista, porém, um a um por click. Há como ???
Estou fazendo projeto para medir peso, altura, batimentos cardíacos e pressão arterial do paciente, posso imprimir os valores lidos pelos sensores ?
Boa tarde,
Pode sim. Perfeitamente. 🙂
Abraço!
Adilson
Parabéns pelo Artigo, cara como faço para conectar uma Impressora térmica usb?
Boa tarde,
Depende da impressora, mas você teria que desenvolver toda a parte de drivers e softwares para realizar essa comunicação.
Abraço e obrigado!
Adilson
Há alguma possibilidade de ligar a placa arduino com uma cabeça de impressão térmica sem precisar da placa da impressora?
Oi Gilson,
Teoricamente sim, vai dar um trabalho, principalmente a parte elétrica, mas não vejo grandes empecilhos.
Abraço!
Adilson
Parabéns pelo post! Muito obrigado!
Valeu Giovani! 🙂
abraço.
Adilson
Muito bom esse post. Ainda atual. Como foi feita a impressão do QR Code mostrado na primeira imagem?
Oi Edelson,
O QR Code é um pouco mais complicado. É gerado um arquivo com extensão .h com o bitmap do QRCode. Aí vc inclui essas linhas no código para imprimir o bitmap, com as informações de largura (width), altura (height) e os dados que serão impressos e que estão no arquivo .h (adaqrcode_data):
printer.printBitmap(adaqrcode_width, adaqrcode_height, adaqrcode_data);
Abraço!
Adilson
Amigo. Post top, estou planejando utilizar a impressora deste anuncio logo abaixo, se puder da um confere pra mim se com essas lib e exemplo que vc apresentou seria possível. Muito Obrigado
https://www.amazon.com.br/Baugger-impressora-Impress%C3%A3o-Impressora-Interface/dp/B0963NSSDV
Oi Filipe,
Com essa nunca usei, mas parece que existem drivers/bibliotecas pra usar com Arduino. Vou pesquisar.
Abraço!
Adilson
Ola, gostaria de saber se há uma maneira viável para imprimir informações externas vindas de uma rede por exemplo. p que eu preciso é acoplar ela na cnc e quando ela chegar em uma coordenada ela imprimira uma etiqueta e seguira para a próxima.