Termômetro com NTC, LED RGB e ATtiny85

Posted by

Olá pessoal, este artigo é parte de uma série de postagens antigas aqui do blog, que quero re-publicar para não deixar se perder. Hoje vamos criar um termômetro com ATtiny85 que mostra a temperatura através da cor de um LED RGB, utilizando como controlador um ATtiny85 programado via IDE do Arduino.

Attiny85 com termistor
Attiny85 com termistor

A ideia pode ser vista abaixo, onde cada cor representa uma temperatura diferente; veja que é algo linear, uma mudança em alguns décimos de grau muda a de acordo. As cores em hexadecimal (para WEB) são mostradas para comparação.

O circuito eletrônico é visto abaixo, já o código completo é acessado aqui neste link. O repositório completo com fotos, código e tabelas é acessado aqui.

diagrama esquemático termômetro RGB
Circuito do termômetro montado com NTC e LED RGB

Abaixo é vista a linearização da curva para obtenção da equação de temperatura.

Curva para obtenção da tempertura do NTC para o termômetro RGB

O código está abaixo, completo:

#include <Adafruit_NeoPixel.h>  //
 #ifdef __AVR__  
  #include <avr/power.h>  
 #endif  
   
 // Which pin on the Arduino is connected to the NeoPixels?  
 #define PIN      0  
   
 // How many NeoPixels are attached to the Arduino?  
 #define NUMPIXELS   1  

 int sensorPin = A1;
 int sensorValue = 0;
 int Red, Green, Blue = 0;
   
 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);  
   
 int delayval = 333; // delay  
   
 void setup() {  
   pixels.begin(); // This initializes the NeoPixel library.  
   pixels.setBrightness(60);
 }  
   
 void loop() {  
   
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.  
   
  //for(int i=0;i<NUMPIXELS;i++){  

     sensorValue = (analogRead(sensorPin)- 194.3197) / 13.2447;
      
     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;      
     }
            
   
   // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255  
   pixels.setPixelColor(0, pixels.Color(Red,Green,Blue)); // Moderately bright green color.  
   pixels.show(); // This sends the updated pixel color to the hardware.  
   delay(delayval); // Delay for a period of time (in milliseconds).  

   
  //}  
 }  

Uma sugestão de montagem do circuito é com duas pilhas AA e um conversor elevador (boost), conforme visto abaixo.

Sugestão de montagem do termômetro com NTC e LED RGB

E agora vamos a dois testes que fiz, com dias diferentes e temperatura diferentes. Coloquei a cor RGB correspondente para comparação.

Termômetro RGB mostrando 28 graus
Termômetro RGB mostrando 20-22 graus

Durante minhas pesquisas na internet eu não consegui achar nada igual a este projeto, pareceu ser uma ideia bem original. A curva de calibração (e consequentemente seu código do Arduino) pode e vai mudar conforme você altera o sensor utilizado.

Já que estamos falando de sensores e processamento de sinais analógicos, veja também este outro projeto que fiz, um capacímetro com Arduino.

2 respostas

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *