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:

Impressora térmica embarcada

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!

5/5 - (2 votos)

Related posts

RTC Arduino com LCD 16×2 e números grandes

by Arduino e Cia
12 anos ago

Como programar o STM32 via USB com IDE Arduino (e sem precisar do gravador)

by Arduino e Cia
3 anos ago

Contador com display 7 segmentos 3 dígitos

by Arduino e Cia
11 anos ago
Sair da versão mobile