Você está na página 1de 4

27/04/2019 Alteração 35.

1 – Termômetro com display de 7-segmentos – Eletrônica para artistas

ELETRÔNICA PARA ARTISTAS


Coisas criativas para fazer com elétrons

S E P T E M B E R 7 , 2 0 1 7 B Y E TA C A R I N A E

Alteração 35.1 – Termômetro com display


de 7-segmentos
Este experimento é uma mistura do experimento anterior, que demonstra o uso de um
display de 7 segmentos com Arduino, e do experimento 29, que implementa um
termômetro com o LM35DZ.

Material adicional:

Circuito integrado LM35DZ (termômetro digital analógico).

O esquema consiste apenas em acrescentar o LM35, que será conectado a uma


entrada analógica. Mudamos para a entrada A3, já que o display está usando as
primeiras três entradas analógicas como saídas digitais:

eletronicaparaartistas.com.br/alteracao-35-1-termometro-com-display-de-7-segmentos/ 1/4
27/04/2019 Alteração 35.1 – Termômetro com display de 7-segmentos – Eletrônica para artistas

Uma possível implementação com o protoboard está ilustrada abaixo:

Para simpli car o programa e facilitar o reuso, transferimos o mapeamento dos dígitos
e segmentos para uma biblioteca local (chamamos de seven_segment_display.h)
contendo o código abaixo:

static int digit[10][7] = {


{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,LOW},
{LOW, HIGH,HIGH,LOW, LOW, LOW, LOW},
{HIGH,HIGH,LOW, HIGH,HIGH,LOW, HIGH},
{HIGH,HIGH,HIGH,HIGH,LOW, LOW, HIGH},
{LOW, HIGH,HIGH,LOW, LOW, HIGH,HIGH},
{HIGH,LOW, HIGH,HIGH,LOW, HIGH,HIGH},
{HIGH,LOW, HIGH,HIGH,HIGH,HIGH,HIGH},
{HIGH,HIGH,HIGH,LOW, LOW, LOW, LOW},
{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH},
{HIGH,HIGH,HIGH,HIGH,LOW, HIGH,HIGH}
};

const int DISPLAY_LEDS = 7;


const int DISPLAY_DIGITS = 10;

void showNumber(int* disp, int dig) {


for(int i = 0; i < DISPLAY_LEDS; i++) {
digitalWrite(disp[i], digit[dig][i]);
}
}

eletronicaparaartistas.com.br/alteracao-35-1-termometro-com-display-de-7-segmentos/ 2/4
27/04/2019 Alteração 35.1 – Termômetro com display de 7-segmentos – Eletrônica para artistas

Para criar o arquivo, clique na seta que ca abaixo do ícone do monitor serial(canto
superior direito do IDE do Arduino) e selecione “New Tab”, depois escolha o nome
(seven_segment_display.h) e grave.

Para usar é preciso apenas incluir o arquivo no código-fonte principal usando #include,
e chamar a função showNumber() passando como argumento o display e o dígito a
exibir. No programa abaixo criamos uma função exibir que recebe o número e mostra
nos dois displays. Chamamos a função exibir assim que lemos a temperatura a cada 2
segundos:

#include "seven_segment_display.h"

#define TERMOMETRO A3

int unidades[] = {14, 15, 2, 3, 4, 5, 6};


int dezenas[] = {7, 8, 9, 10, 11, 12, 16};

void setup() {
for(int i = 0; i < DISPLAY_LEDS; i++) {
pinMode(dezenas[i], OUTPUT);
pinMode(unidades[i], OUTPUT);
}
// Usando a referência interna de 1,1V para maior precisão
analogReference(INTERNAL);
}

void exibir(int numero) {


showNumber(unidades, numero % 10);
showNumber(dezenas, numero / 10);
}

void loop() {
int leitura = analogRead(TERMOMETRO);
float volts = (leitura / 1024.0) * 1.1;
float celsius = (volts) * 100.0;

int temperatura = (int) round(celsius); // arredonda


exibir(temperatura);

delay(2000);
}
eletronicaparaartistas.com.br/alteracao-35-1-termometro-com-display-de-7-segmentos/ 3/4
27/04/2019 Alteração 35.1 – Termômetro com display de 7-segmentos – Eletrônica para artistas

Este programa possui uma diferença em relação ao utilizado no experimento 29. Em


vez de usar a referência padrão de 5V para leituras analógicas (via analogRead),
usamos a referência interna calibrada do Arduino através do comando

analogReference(INTERNAL);

Isto signi ca que o valor 0 a 1024 não corresponde mais a 0 a 5V, mas a 0 a 1,1V. Isto
permite maior precisão na leitura. Assim, para obter a tensão entre o terminal central e
GND, dividimos o valor lido por 1024 e depois multiplicamos por 1,1V. Cada grau Celsius
corresponde a 0,01 V de diferença, então multiplicamos por 100 para obter a
temperatura.

eletronicaparaartistas.com.br/alteracao-35-1-termometro-com-display-de-7-segmentos/ 4/4