Neste projeto vamos projetar um circuito para medição de temperatura. Este circuito é desenvolvido usando “ LM35 ”, um sensor de tensão linear. A temperatura é geralmente medida em “Centígrados” ou “Faraheite”. O sensor “LM35” fornece saída com base na escala centígrada.
LM35 é um dispositivo semelhante a um transistor de três pinos. Possui VCC, GND e OUTPUT. Este sensor fornece tensão variável na saída com base na temperatura.
Conforme mostrado na figura acima, para cada aumento de +1 centígrado na temperatura, haverá uma saída + 10mV maior. Portanto, se a temperatura for 0 ° centígrados a saída do sensor será 0V, se a temperatura for 10 ° centígrados a saída do sensor será + 100mV, se a temperatura for 25 ° centígrados a saída do sensor será + 250mV.
Por enquanto, com o LM35, obtemos a temperatura na forma de voltagem variável. Esta tensão dependente da temperatura é fornecida como entrada para ADC (Conversor Analógico para Digital) de ATMEGA32A. O valor digital obtido após a conversão é mostrado no LCD 16x2 como temperatura.
Componentes necessários
Hardware: Microcontrolador ATMEGA32, fonte de alimentação (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), capacitor 100uF (duas peças), capacitor 100nF, Sensor de temperatura LM35.
Software: Atmel studio 6.1, progisp ou flash magic.
Diagrama de Circuito e Explicação
No circuito, a PORTB do ATMEGA32 é conectada à porta de dados do LCD. Aqui, deve-se lembrar de desabilitar a comunicação JTAG em PORTC ou ATMEGA alterando os bytes do fusível, caso se queira usar o PORTC como uma porta de comunicação normal. No LCD 16x2, existem 16 pinos ao todo, se houver uma luz de fundo, se não houver luz de fundo, haverá 14 pinos. Pode-se ligar ou deixar os pinos da luz de fundo. Agora, nos 14 pinos, há 8 pinos de dados (7-14 ou D0-D7), 2 pinos de fonte de alimentação (1 e 2 ou VSS e VDD ou gnd e + 5v), 3º pino para controle de contraste (VEE-controla a espessura dos caracteres mostrado), 3 pinos de controle (RS & RW e E).
No circuito, você pode observar que peguei apenas dois pinos de controle, pois isso dá a flexibilidade de um melhor entendimento. O bit de contraste e READ / WRITE não são usados com frequência, portanto, podem entrar em curto com o aterramento. Isso coloca o LCD em maior contraste e modo de leitura. Precisamos apenas controlar os pinos ENABLE e RS para enviar caracteres e dados de acordo.
As conexões que são feitas para LCD são fornecidas abaixo:
PIN1 ou VSS ------------------ terra
PIN2 ou VDD ou VCC ------------ + 5v de potência
PIN3 ou VEE --------------- aterrado (oferece contraste máximo, melhor para um iniciante)
PIN4 ou RS (Seleção de Registro) --------------- PD6 de uC
PIN5 ou RW (leitura / gravação) ----------------- aterramento (coloca o LCD em modo de leitura facilita a comunicação para o usuário)
PIN6 ou E (Ativar) ------------------- PD5 de uC
PIN7 ou D0 ----------------------------- PB0 de uC
PIN8 ou D1 ----------------------------- PB1 de uC
PIN9 ou D2 ----------------------------- PB2 de uC
PIN10 ou D3 ----------------------------- PB3 de uC
PIN11 ou D4 ----------------------------- PB4 de uC
PIN12 ou D5 ----------------------------- PB5 de uC
PIN13 ou D6 ----------------------------- PB6 de uC
PIN14 ou D7 ----------------------------- PB7 de uC
No circuito você pode ver que usamos comunicação de 8 bits (D0-D7) porém não é obrigatória, podemos usar comunicação de 4 bits (D4-D7) mas com o programa de comunicação de 4 bits torna-se um pouco complexo, então escolhi o de 8 bits comunicação.
Portanto, pela mera observação da tabela acima, estamos conectando 10 pinos do LCD ao controlador, em que 8 pinos são pinos de dados e 2 pinos para controle. A saída de tensão fornecida pelo sensor não é completamente linear; será barulhento. Para filtrar o ruído, um capacitor precisa ser colocado na saída do sensor, conforme mostrado na figura.
Antes de prosseguir, precisamos falar sobre o ADC de ATMEGA32A. Em ATMEGA32A, podemos dar entrada analógica a qualquer um dos oito canais da PORTA, não importa qual canal escolhermos, pois todos são iguais. Vamos escolher o canal 0 ou PIN0 da PORTA. Em ATMEGA32A, o ADC tem resolução de 10 bits, então o controlador pode detectar uma mudança mínima de Vref / 2 ^ 10, então se a tensão de referência é 5V, obtemos um incremento de saída digital para cada 5/2 ^ 10 = 5mV. Portanto, para cada incremento de 5mV na entrada, teremos um incremento de um na saída digital.
Agora precisamos definir o registro do ADC com base nos seguintes termos:
1. Em primeiro lugar, precisamos habilitar o recurso ADC no ADC.
2. Como estamos medindo a temperatura ambiente, não precisamos realmente de valores além de cem graus (saída de 1000mV do LM35). Portanto, podemos definir o valor máximo ou referência do ADC para 2,5V.
3. O controlador tem um recurso de conversão de gatilho, o que significa que a conversão de ADC ocorre somente após um gatilho externo, uma vez que não queremos que seja necessário definir os registros para o ADC funcionar em modo de execução livre contínua.
4. Para qualquer ADC, a frequência de conversão (valor analógico para valor digital) e a precisão da saída digital são inversamente proporcionais. Portanto, para uma melhor precisão da saída digital, temos que escolher uma frequência menor. Para um menor relógio ADC, estamos configurando a pré-venda do ADC para o valor máximo (128). Como estamos usando o clock interno de 1MHZ, o clock do ADC será (1000000/128).
Essas são as únicas quatro coisas que precisamos saber para começar a usar o ADC. Todos os quatro recursos acima são definidos por dois registradores.
VERMELHO (ADEN): Este bit deve ser definido para habilitar o recurso ADC de ATMEGA.
AZUL (REFS1, REFS0): Esses dois bits são usados para definir a tensão de referência (ou a tensão máxima de entrada que forneceremos). Como queremos ter a tensão de referência 2,56 V, REFS0 e REFS1 devem ser ajustados, pela tabela.
VERDE CLARO (ADATE): Este bit deve ser definido para que o ADC funcione continuamente (modo de execução livre).
PINK (MUX0-MUX4): Esses cinco bits são para informar o canal de entrada. Visto que vamos usar ADC0 ou PIN0, não precisamos definir nenhum bit como na tabela.
BROWN (ADPS0-ADPS2): esses três bits são para definir o pré-escalar para ADC. Visto que estamos usando um pré-escalar de 128, temos que definir todos os três bits.
DARK GREEN (ADSC): este bit definido para o ADC para iniciar a conversão. Este bit pode ser desabilitado no programa quando precisamos parar a conversão.
Para fazer este projeto com Arduino, veja este tutorial: Termômetro Digital usando Arduino
Explicação de programação
O funcionamento da MEDIÇÃO DE TEMPARATURA é melhor explicado passo a passo do código C fornecido abaixo:
#include // cabeçalho para habilitar o controle do fluxo de dados sobre os pinos
#define F_CPU 1000000 // dizendo a frequência de cristal do controlador conectado
#incluir
#define E 5 // dando o nome “habilitar” ao 5º pino do PORTD, já que está conectado ao pino de habilitação do LCD
# define RS 6 // dando o nome de “ seleção de registros” ao 6º pino do PORTD, já que está conectado ao pino RS do LCD
void send_a_command (comando unsigned char);
void send_a_character (caractere sem sinal);
void send_a_string (char * string_of_characters);
int main (vazio)
{
DDRB = 0xFF; // colocando portB e portD como pinos de saída
DDRD = 0xFF;
_delay_ms (50); // dando atraso de 50ms
DDRA = 0; // Tomando portA como entrada.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}