PIC do Zero

Programação em C para Microcontroladores PIC

Aula 26 – Projeto Final 1: Controlador de Temperatura Industrial

Nesta aula vamos construir o primeiro projeto completo do curso: um controlador de temperatura industrial usando PIC, sensor LM35, LCD 16x2, teclado matricial, EEPROM, relé de controle e Watchdog Timer.

1. Objetivo do projeto

O sistema irá medir a temperatura, comparar com um setpoint configurado pelo usuário e acionar um relé conforme a lógica de controle.

Sensor LM35 → PIC → LCD
                 ↓
            Comparação
                 ↓
             Relé de saída

2. Recursos utilizados

  • ADC para leitura do sensor LM35.
  • LCD 16x2 para exibir temperatura e status.
  • Teclado matricial 4x4 para configurar setpoint.
  • EEPROM para salvar parâmetros.
  • Saída digital para acionamento do relé.
  • Watchdog Timer para aumentar a confiabilidade.

3. Componentes necessários

  • PIC16F877A ou similar.
  • Sensor LM35.
  • Display LCD 16x2.
  • Teclado matricial 4x4.
  • Relé 5V ou 12V.
  • Transistor BC547 ou equivalente.
  • Diodo 1N4007 para proteção da bobina.
  • Resistores e fonte adequada.

4. Funcionamento do LM35

O LM35 fornece uma tensão proporcional à temperatura. Em geral:

10 mV por °C

25 °C → 250 mV
50 °C → 500 mV
100 °C → 1000 mV

5. Leitura pelo ADC

O PIC lê a tensão analógica do LM35 através do ADC.

ADC = (Vin × 1023) / Vref

Com Vref de 5V, cada passo do ADC representa aproximadamente 4,88 mV.

6. Conversão para temperatura

tensao = adc * 5.0 / 1023.0;
temperatura = tensao * 100.0;

7. Setpoint ajustável

O setpoint é o valor desejado de temperatura. O usuário poderá alterar esse valor pelo teclado matricial.

Setpoint = 60 °C

Se temperatura >= setpoint:
    desliga aquecimento

Se temperatura < setpoint:
    liga aquecimento

8. Salvando setpoint na EEPROM

Para que o setpoint não seja perdido ao desligar o equipamento, ele será gravado na EEPROM.

EEPROM_Write(10, setpoint);
setpoint = EEPROM_Read(10);

9. Controle do relé

O relé não deve ser ligado diretamente no PIC. Devemos usar transistor e diodo de proteção.

PIC → Resistor → Base BC547
Coletor → Relé
Diodo 1N4007 em paralelo com a bobina

10. Lógica principal do controle

if(temperatura < setpoint)
{
    rele = 1;
}
else
{
    rele = 0;
}

11. Histerese

Para evitar que o relé fique ligando e desligando rapidamente próximo ao setpoint, usamos histerese.

Setpoint = 60 °C
Histerese = 2 °C

Liga aquecimento abaixo de 58 °C
Desliga aquecimento acima de 60 °C

12. Lógica com histerese

if(temperatura <= (setpoint - histerese))
{
    rele = 1;
}

if(temperatura >= setpoint)
{
    rele = 0;
}

13. Tela principal do LCD

TEMP: 55 C
SET : 60 C

14. Tela de status

RELE: LIGADO
MODO: AUTO

15. Menu de configuração

A - Entrar no menu
B - Voltar
C - Aumentar setpoint
D - Diminuir setpoint
# - Salvar
* - Cancelar

16. Estrutura profissional do software

Para organizar o projeto, o código deve ser dividido em funções.

void inicializar_sistema();
unsigned int ler_adc();
float ler_temperatura();
void atualizar_lcd();
void ler_teclado();
void controlar_rele();
void salvar_parametros();
void carregar_parametros();

17. Fluxograma geral

Início
  ↓
Inicializa sistema
  ↓
Carrega setpoint da EEPROM
  ↓
Lê temperatura
  ↓
Lê teclado
  ↓
Atualiza LCD
  ↓
Controla relé
  ↓
Limpa Watchdog
  ↓
Repete

18. Código base do projeto

#include <xc.h>

#define RELE PORTBbits.RB0

unsigned char setpoint = 60;
unsigned char histerese = 2;
float temperatura = 0;

void inicializar_sistema()
{
    TRISAbits.TRISA0 = 1; // LM35 no AN0
    TRISBbits.TRISB0 = 0; // Relé como saída

    ADCON1 = 0x80;
    ADCON0 = 0x41;

    RELE = 0;
}

unsigned int ler_adc()
{
    GO_nDONE = 1;
    while(GO_nDONE);
    return ((ADRESH << 8) + ADRESL);
}

float ler_temperatura()
{
    unsigned int adc;
    float tensao;

    adc = ler_adc();
    tensao = adc * 5.0 / 1023.0;

    return tensao * 100.0;
}

void controlar_rele()
{
    if(temperatura <= (setpoint - histerese))
    {
        RELE = 1;
    }

    if(temperatura >= setpoint)
    {
        RELE = 0;
    }
}

void main()
{
    inicializar_sistema();

    while(1)
    {
        temperatura = ler_temperatura();

        controlar_rele();

        CLRWDT();
    }
}

19. Melhorias futuras

  • Adicionar alarme de temperatura alta.
  • Adicionar modo manual/automático.
  • Adicionar comunicação Modbus RTU.
  • Adicionar registro de falhas na EEPROM.
  • Adicionar senha de acesso ao menu.

20. Aplicações industriais

Esse projeto pode ser adaptado para controle de:

  • Estufas.
  • Tanques aquecidos.
  • Painéis elétricos.
  • Ambientes climatizados.
  • Processos térmicos simples.

21. Exercícios

Exercício 1: Para que serve a histerese?

Para evitar chaveamento rápido do relé próximo ao setpoint.

Exercício 2: Por que salvar o setpoint na EEPROM?

Para manter o valor configurado mesmo após desligar o equipamento.

Exercício 3: Por que usar transistor para acionar o relé?

Porque o pino do PIC não suporta a corrente da bobina do relé.

22. Laboratório prático

Monte o circuito com LM35, LCD, teclado e relé. Configure o setpoint, observe a leitura de temperatura e teste o acionamento da saída.

23. Resumo do projeto

  • LM35 fornece sinal analógico.
  • ADC converte tensão em valor digital.
  • LCD exibe temperatura e setpoint.
  • Teclado altera parâmetros.
  • EEPROM salva configurações.
  • Relé controla a carga.
  • Watchdog aumenta a confiabilidade.

Próxima Aula – Aula 27

Na próxima aula vamos estudar Projeto Final 2 – Sistema de Monitoramento com Comunicação Serial, integrando sensores, UART, alarmes e envio de dados para computador ou supervisório.