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!