Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 66 - Display 4 dígitos (TM1637) como mostrador de temperatura - Arduino
Projeto 66 - Display 4 dígitos (TM1637) como mostrador de temperatura - Arduino
Angelo Luis Ferreira | 09/09/2019
Acessos: 11.445
Básico - Projeto 66
Usando o módulo TM1637 (display com 4 dígitos) como mostrador de temperatura
Objetivo
Neste projeto vamos mostrar como utilizar o módulo TM1637 para exibir a temperatura ambiente através de um sensor de temperatura termistor NTC 10K. Também neste projeto vamos adicionar um botão (push button) que quando acionado alterna a exibição de Celsius para Fahrenheit.
Definições
Módulo TM1637 é constituído por 4 displays de 7 segmentos em conjunto (4 dígitos). O módulo TM1637 é de fácil integração com o Arduino, pois sua tensão de alimentação é de 5V e seu controle é feito apenas por 2 conexões com o microcontrolador. Os outros 2 pinos são utilizados para a alimentação do componente. Ideal para projetos com relógio (possui uma identificação central com dois pontos) e contadores que necessitem de um display de fácil visualização.
Observação: Este projeto utilizará uma biblioteca específica para o módulo TM1637 que disponibilizaremos junto com o sketch.
Termistor é um semicondutor que dependendo da temperatura ao qual é submetido, sua resistência elétrica sofre variação. Cada tipo de termistor possui uma curva característica que mostra o aumento ou a diminuição da resistência elétrica em função da temperatura. Existem dois tipos de termistor: NTC e PTC. No tipo NTC (do inglês Negative Temperature Coefficient), o coeficiente de variação de resistência com a temperatura é negativo, ou seja, quanto maior a temperatura, menor é a resistência elétrica.
No nosso projeto utilizaremos um termistor NTC de 10k, ou seja, na temperatura de 25ºC sua resistência elétrica é de 10.000Ω (10KΩ). Para saber mais como utilizar o termistor NTC, leia Projeto 41 - Usando o sensor de temperatura termistor NTC 10K. Veja a baixo a curva típica de um termistor NTC 10K:
Obs.: Para obter dados mais precisos, acesse o datasheet do fabricante do componente que você irá utilizar no projeto.
Aplicação
Para fins didáticos e projetos com mostradores de temperatura.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Módulo TM1637 |
Módulo TM1637 - 4 dígitos
(anodo comum)
|
1 |
|
- Controlador TM1637 - Alimentação: 3.3 à 5V DC - Display 7 segmentos 4 dígitos anodo comum
datasheet
|
Push Button |
Push button 6X6X5mm |
1 |
|
|
Sensor de Temperatura - Termistor NTC 10K |
Sensor de Temperatura Termistor NTC 10K
|
1 |
|
Características do termistor NTC 10K:
Modelo: MF521033950 (NTC 10K)
Tipo: 103 (resistência elétrica de 10KΩ a 25ºC)
Faixa temperatura: -55ºC ~ 125ºC
Dissipação: > 2.0mw/ºC
Valor de Beta: 3.950K (+/- 2%)
dimensão: 3mm ou 5mm
datasheet
|
Resistor |
Resistor de 10KΩ
|
1 |
|
1 Resistor de 10KΩ (sensor NTC 10K) |
Potenciômetro |
Potenciômetro 1K |
1 |
|
Você poderá experimentar valores diferentes do potenciômetro, entre 1K a 100K
A tensão resultante do potenciômetro aumenta quando giramos o eixo do componente no sentido do polo negativo para o polo positivo.
|
Arduino UNO R3 |
Arduino UNO |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.
Atenção
1. Para a montagem do módulo TM1637 é necessário conhecer a disposição dos seus pinos. Olhando na parte traseira do módulo podemos observar 4 pinos, sendo eles: dois pinos de alimentação (Vcc e GND) e dois pinos de controle/comunicação: CLK (clock) e DIO (dados):
2. A tabela a seguir mostra as conexões do Arduino com o módulo TM1637 do nosso projeto.
Pinos do Arduino |
Pino do TM1637 |
2 |
CLK (4) |
3 |
DIO (3) |
3. Monte o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino) ou assista o vídeo Arduino: Botão e Resistor de Pull Up Interno
4. Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:
4.1. Desta forma o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino. Girando o eixo do polo negativo (GND) para o polo positivo (Vcc) aumentamos o valor, e ao contrário, diminuímos a intensidade do brilho dos leds do display.
5. Monte o thermistor NTC como um divisor de tensão de acordo com o esquema abaixo:
5.1. O sensor NTC varia sua resistência inversamente a temperatura ambiente, ou seja, quando a temperatura aumenta, a resistência diminui. Como pretendemos obter um circuito que forneça tensões mais altas quando aumentamos a temperatura, precisaremos criar um divisor de tensão com o termistor NTC na posição mostrada no esquema acima, ou seja, um terminal conectado ao positivo e o outro no nó entre a saída analógica do Arduino e o resistor de 10KΩ. Para saber mais sobre divisão de tensão, leia Utilizando um termistor NTC 10K ou Divisores de Tensão.
Atenção:
1. Se você inverter o circuito acima, o comportamento das leituras será também invertido, ou seja, o circuito irá fornecer tensões mais baixas quando aumentarmos a temperatura. Assim, quando utilizarmos o método Steinhart-Hart para calcularmos a temperatura real, os valores não serão corretos.
2. Em função dos tipos e fabricantes do sensor NTC, pode haver a necessidade de resistores superiores à 10K. Neste caso, teste o projeto com 47K e 100K.
Veja a montagem do circuito no protoboard:
Obs.: O sensor de temperatura termistor NTC 10K, assim como um resistor comum, não tem polaridade.
6. Veja abaixo como realizamos a montagem do nosso projeto utilizando um protoboard. Observe que utilizamos um display catodo comum e ligamos o pino 3 no GND do Arduino.
Baixando a biblioteca Thermistor
Para trabalharmos de forma mais fácil com o thermistor NTC através do método Steinhart-Hart, podemos baixar a biblioteca Thermistor que foi desenvolvida para os sensores de temperatura NTC 10K:
DOWNLOAD - Thermistor.zip
Para saber detalhes desta biblioteca clique aqui.
Baixando a biblioteca TM1637
Para criarmos os comandos para o módulo TM1637 é necessário instalarmos uma biblioteca específica para o componente:
Download dos arquivos da biblioteca TM1637
DOWNLOAD - TM1637-master.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando as bibliotecas Thermistor e TM1637 no IDE do Arduino
Após fazer o download dos arquivos Thermistor.zip e TM1637-master.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Para conhecer outras bibliotecas para módulos veja a Coletânea de bibliotecas para módulos.
Usando a biblioteca TM1637
Neste projeto vamos utilizar as seguintes funções (métodos) da biblioteca TM1637:
a) display.setBrightness(): Este serve para definir o brilho do display, onde o parâmetro de 0 define o brilho mais baixo e 7 para o mais alto.Ex.: display.setBrightness(7);
b) display.setSegments(): Cada um dos quatro dígitos tem 7 segmentos que podem ser endereçados individualmente. Cada segmento é representado por uma letra como mostrado abaixo, que é endereçado por um bit ou por uma variável:
c) showNumberDec() : Esta função serve para mostrar valores no display seguindo os seguintes parâmetros:
1º parâmetro: Número do tipo inteiro. Valores de 0 até 9999;
2º parâmetro: Verdadeiro ou falso. Serve para exibir zeros à esquerda pra valores até 999. O valor padrão é falso.
3º parâmetro: Opcional. Corresponde ao número de dígitos a serem exibidos
4º parâmetro: Opcional. Posição do dígito menos significativo (0 mais à esquerda, 3 - mais à direita).
Exemplos:
Sketch do projeto
1. Faça o dowload e abra o arquivo projeto66.ino no IDE do Arduino: DOWNLOAD - projeto66.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 66: Display TM1637 como mostrador de temperatura - Arduino
* Author: Angelo Luis Ferreira
* Date: 09/05/2019 (mm/dd/AA)
*
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <TM1637Display.h>
#include <Thermistor.h>
TM1637Display display(2,3); // define os pinos 2 com CLK e 3 com DIO
const byte pinBut =12;
const byte pinPot = A0;
Thermistor temp(1); // termistor conectado na porta A1 (cria o objeto)
byte controle = 0;
uint32_t temporizador = 0;
float displayTemp;
// - A
// | | F B
// - G
// | | E C
// - D
const uint8_t DEGREEC[] = {
0x0, 0x0,
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol
SEG_A | SEG_F | SEG_E | SEG_D, // C
};
const uint8_t DEGREEF[] = {
0x0, 0x0,
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol
SEG_A | SEG_F | SEG_E | SEG_G, // F
};
void setup(){
pinMode(pinBut, INPUT_PULLUP);
Serial.begin(9600);
display.setBrightness(7);
}
void loop() {
brilho(); // ajusta brilho dos leds do display
float temperature = temp.getTemp(); //calcula a temperatura lida no sensor
float tempC = temperature; // Celsius
float tempF = ((temperature * 1.8)+32); // Converte para Fahrenheit
// verifica se o botão foi pressionado e muda o controle
if(!digitalRead(pinBut)) {
controle = !controle;
while (!digitalRead(pinBut)) { } //esperera soltar o botão
delay(50);
}
switch (controle) {
case 0:
displayTemp = tempC;
showTemperature(0);
break;
case 1:
displayTemp = tempF;
showTemperature(1);
}
}
void showTemperature(byte x) {
if ((millis() - temporizador) >=1000) {
Serial.println(displayTemp);
if (x==0) {
display.setSegments(DEGREEC); //Exibe o valor da variável
} else {
display.setSegments(DEGREEF); //Exibe o valor da variável
}
display.showNumberDec(displayTemp,false,2,0);
temporizador = millis();
}
}
void brilho() {
// Lê valor do potenciômetro (0 a 1023)
int valor = analogRead(pinPot);
// Converte valor do potenciêmtro para valor de 0 a 7
int potVal = map(valor, 0, 1023, 0, 7);
// Ajusta o brilho dos leds (segmentos) entre 0 e 7
display.setBrightness(potVal);
}
ATENÇÃO: Se o display não acender verifique todas as conexões do módulo e do potenciômetro.
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, o display irá exibir a temperatura ambiente lida no termistor em graus Celsius.
2. Ao clicarmos o botão (push button), a temperatura passa ser exibida em Fahrenheit.
3. Girando o eixo do potenciômetro, aumentamos ou diminuímos a intensidade dos leds do display.
4. Acessando o monitor serial do IDE do Arduino, podemos visualizar as temperaturas em ºC ou em ºF.
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 53
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários