O autor deste blog é fascinado por sinais analógicos, principalmente aqueles vindos de sensores ou transdutores. Um dos tipos de transdutores mais acessíveis ao maker/hobbista é o de temperatura, pois a grandeza literalmente "está no ar" e em qualquer objeto (e se chama calor!).
Afim de converter a grandeza temperatura em tensão elétrica (legível por microcontroladores) são utilizados sensores; alguns dos sensores conhecidos são o
DHT11, o
LM35, o
KTY81 e também
termistores NTC/PTC.
Recentemente eu estive brincando um pouco com LED's RGB (vermelho, verde, azul) do modelo WS2812b "Neopixel", sobre o qual escrevi um
artigo aqui. Foi aí que me surgiu a ideia de juntar um sensor de temperatura e um LED RGB e
criar um Termômetro de LED!.
A ideia: Basicamente a ideia é
ler a temperatura ambiente através de um sensor qualquer e então mostra-la através da variação de cor de um LED RGB. A primeira coisa que eu fiz foi pesquisar sobre o "espectro" de cores RGB; para isso eu entrei no site RapidTables, que me apresentou a tabela da imagem abaixo (clique
aqui para ir ao RapidTables).

Clique na imagem para ampliar
Olhando a imagem acima você percebe que a "variação RGB" vai de #FF0000 (255,0,0 vermelho) até #0000FF (0,0,255 azul), passando por #00FF00 (0,255,0 verde). Isto me fez então escolher a faixa de cores do termômetro da seguinte forma: A menor temperatura possível seria azul (#0000FF) e a maior temperatura possível seria vermelha (#FF0000), passando por todas as cores do espectro na correspondência das temperaturas intermediárias.
Para resumir o parágrafo acima, eu fiz uma tabela de correspondências entre cor e temperatura ambiente, onde eu decidi que a menor temperatura possível seria zero (0) graus Celsius e a maior temperatura possível seria quarenta e cinco (45) graus Celsius. Veja tabela abaixo.
Clique na tabela para ampliar
O hardware: recentemente eu estive brincando bastante com o Digispark ATtiny85, um microcontrolador de 6 pinos compatível com Arduino e programável via USB.
Leia aqui o meu artigo sobre esta plaquinha. Ela é perfeita para o trabalho pois vamos utilizar apenas uma entrada analógica para o sensor de temperatura e um pino digital para controlar o LED RGB.
O diagrama esquemático do termômetros é visto na imagem abaixo. Observe a simplicidade da montagem (todo o segredos está no código).
A lista de materiais contém:
- Um resistor de 10k ohm 1/4W (5%)
- Fio rígido, estanho
O circuito foi montado de forma a ficar com o menor tamanho possível. Observe na imagem abaixo a solução que eu encontrei: a parte de "trás" da placa Digispark ATtiny85 é um plano de terra isolado, então o LED RGB vai simplesmente apoiado (encostado) ali. Agora vem a parte desafiadora, o código em Arduino.
Detalhes da montagem
Utilizei a IDE oficial do Arduino para programar o Digispark ATtiny85. O código está abaixo, e também no repositório do GitHub (link aqui).
Abaixo eu reproduzi a parte mais importante do código, o mecanismo que converte a temperatura ambiente em cor RGB. Observe que dentro do primeiro "if" está a temperatura de 20 graus: qualquer temperatura abaixo de 20 graus fará acender a cor azul com "força total" (255) e quanto mais próximo de 20 graus a cor verde será acesa com cada vez mais intensidade. E assim por diante.
if (sensorValue < 20){ //from total blue to green
Blue = 255;
Green = map(sensorValue, 0, 19.99, 0, 255); Red = 0;
}
if ((sensorValue >= 0) &&(sensorValue < 30)) { // from green to yellow
Green = 255;
Red = map(sensorValue, 20, 29.99, 0, 255);
Blue = 0;
}
if (sensorValue >=30){ // yellow and up to red
Red = 255;
Green = map(sensorValue, 30, 45, 255, 0);
Blue = 0;
}
Outro detalhe bem importante é como foi feita a conversão de tensão sobre o termistor NTC para temperatura. A equação abaixo foi obtida através de calibração utilizando um sensor de temperatura DHT11.
sensorValue = (analogRead(sensorPin)- 194.3197) / 13.2447;
A variável "sensorValue" armazena uma valor de temperatura já em graus Celsius, enquanto a variável "sensorPin" é a entrada analógica da placa Digispark ATtiny85. A título de curiosidade, a imagem abaixo mostra a curva de calibração que obtive para o termistor.
Clique na imagem para ampliar
Observação: cada sensor tem um tipo de interface e uma curva/equação própria, portanto a linha de código acima (sensorValue) pode e VAI variar conforme o sensor utilizado.
____________________________________________________________
Montagem e testes: após compilar o código e grava-lo no ATtiny85 eu passei à parte de integração do circuito e conexão com uma fonte de alimentação. Eu utilizei uma fonte de alimentação de 5V feita por mim mesmo, sobre a qual eu já expliquei
neste artigo aqui. Observe a imagem abaixo.
Conexão do termômetro á fonte de 5V
Ao conectar a fonte de 5V ao circuito do termômetro, eu observei um consumo de corrente de 24mA (0,024 A). Nada mal para um LED de três cores ligando todos ao mesmo tempo. Obviamente qualquer fonte de 5V vai servir, bastando conecta-la á porta USB ou aos pinos +5V e GND do Digispark ATtiny85.
Abaixo você vê algumas imagens do termômetro funcionando. Observe as cores amarelo-esverdeada dos LEDs.
________________________________________
No artigo de hoje você aprendeu como criar um termômetro que mostra a temperatura ambiente através da variação da cor de um LED RGB; mostrei como é possível aplicar criatividade à um circuito simples com apenas um microcontrolador, um sensor e um LED.
Toda a documentação, código, imagens e fotos utilizados neste artigo estão disponíveis
neste link, um repositório do GitHub.
Marcadores: adafruit neopixel, arduino attiny85, attiny85, led rgb, neopixel, temperatura ambiente, termistor ntc, termômetro, termômetro com arduino, ws2812b