Como Automatizar a Leitura de Dados de Balança via Porta Serial com Python
Conectar equipamentos industriais ao computador é uma tarefa comum no chão de fábrica e em centros de distribuição. No entanto, desenvolvedores e integradores frequentemente enfrentam comportamentos instáveis ao tentar ler o peso de uma balança via porta serial RS-232 ou adaptadores USB-Serial: em ferramentas como HyperTerminal ou PuTTY, uma leitura aparece correta, mas a subsequente vem truncada, concatenada ou vazia.
Essa falha quase nunca decorre de defeito no hardware da balança. O problema reside no gerenciamento do buffer serial e na falta de sincronização entre o envio contínuo de caracteres pelo dispositivo e o momento de leitura da aplicação. Neste artigo, você entenderá como controlar o fluxo de dados e implementar um coletor robusto em Python.
O Problema: Descompasso de Buffer e Delimitadores
Balanças industriais transmitem dados em dois modos principais:
- Contínuo: O hardware envia strings de texto (ex:
ST,GS,+0012.50kgrn) dezenas de vezes por segundo. - Por comando (Poll): O sistema envia um comando (como
PouW) e a balança responde com o peso estável.
Quando um software lê a porta sem esvaziar o buffer de entrada (input buffer) ou sem aguardar o caractere terminador (n ou r), os bytes de leituras antigas se misturam com a leitura atual. O resultado são dados corrompidos como 2.50kgST,GS,+001.
Passo a Passo para uma Leitura Serial Estável com Python
A solução exige três etapas fundamentais: parametrização correta da porta, limpeza de buffer residual e extração com validação regex.
1. Configuração da Conexão com pyserial
Instale a biblioteca padrão de comunicação serial em Python:
bash
pip install pyserial
Em seguida, instancie o objeto de porta serial definindo taxa de transmissão (baudrate), bits de dados, paridade e, crucialmente, um timeout de leitura para evitar travamentos do processo:
python
import serial
import re
import time
def configurarconexao(porta=”COM3″, baudrate=9600):
return serial.Serial(
port=porta,
baudrate=baudrate,
bytesize=serial.EIGHTBITS,
parity=serial.PARITYNONE,
stopbits=serial.STOPBITS_ONE,
timeout=1.0
)
2. Esvaziando o Buffer e Lendo Linhas Completas
Para garantir que o dado lido reflita o estado atual da balança e não um pacote acumulado segundos atrás, force o descarte de bytes pendentes antes de registrar a medição:
python
def lerpesobalanca(conexao):
# Limpa dados acumulados na fila de recepção
conexao.resetinputbuffer()
# Lê até encontrar o delimitador de fim de linha
linha_bruta = conexao.readline().decode('ascii', errors='ignore').strip()
if not linha_bruta:
return None
# Expressão regular para isolar o valor numérico do peso
padrao_peso = r'([+-]?d+.d+|[+-]?d+)'
resultado = re.search(padrao_peso, linha_bruta)
if resultado:
return float(resultado.group(1))
return None
3. Loop Resiliente de Captura
Em ambientes de produção, falhas de conexão física ou ruídos elétricos acontecem. A estrutura de repetição deve prever reconexão sem interromper o serviço:
python
def iniciarmonitoramento(porta=”COM3″, baudrate=9600):
while True:
try:
with configurarconexao(porta, baudrate) as balanca:
print(f”Conectado à balança em {porta}.”)
while True:
peso = lerpesobalanca(balanca)
if peso is not None:
print(f”Peso capturado: {peso} kg”)
time.sleep(0.5)
except (serial.SerialException, OSError) as erro:
print(f”Falha de conexão: {erro}. Tentando novamente em 3 segundos…”)
time.sleep(3)
if name == “main“:
iniciar_monitoramento()
Arquitetura e Integração em Alto Nível
Como especialista em IA e automação aplicada à engenharia de dados, costumo estruturar essas integrações separando a camada de I/O de hardware da camada de processamento de regras de negócio.
Em arquiteturas industriais robustas, o script serial atua como um worker assíncrono (ou serviço de mensageria local via MQTT/ZeroMQ). Isso permite que modelos de aprendizado de máquina para detecção de anomalias no envase, classificação automática de pacotes ou predição de desgaste mecânico consumam esses dados sem introduzir latência no ciclo de leitura da porta.
Próximos Passos para a sua Operação
Automatizar a captura de dados elimina erros manuais de digitação, acelera etapas logísticas e viabiliza relatórios de auditoria precisos.
Se você precisa integrar balanças, sensores industriais ou criar softwares sob medida para controle de dispositivos seriais com Python e Inteligência Artificial, entre em contato para uma consultoria técnica especializada com o Thiago Programador e construa uma solução estável para sua infraestrutura.


