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.

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.

Módulo TM1637 com display 4 dígitos

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

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

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 Módulo TM1637 com display 4 dígitos - 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 10K 1    1 Resistor de 10KΩ para o sensor NTC 10K
Potenciômetro Potenciômetro 1K 1 Resultado de imagem para potenciômetro

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):

TM1637 - Pinagem

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
3 DIO

 

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:

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:

Resultado de imagem para ligação termistor como divisão de tensão

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 , leia Usando um termistor NTC ou NTC como parte de um divisor de tensão.

Atenção.: 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.

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:

 

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

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 Tabela Biblioteca para Módulos.

Usando a biblioteca TM1637

Neste projeto vamos utilizar apenas duas 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:

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:

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Compartilhe: