/* Example code for TM1637 4 digit 7 segment display with Arduino. More info: www.www.makerguides.com */
/*
// Create array that turns all segments on:
const uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
// Create array that turns all segments off:
const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
// You can set the individual segments per digit to spell words or create other symbols:
const uint8_t done[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
// Create degree Celsius symbol:
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
// All segments on:
display.setSegments(data);
*/
#include <TM1637Display.h>
#define CLK 2 // TM1637 CLK
#define DIO 3 // TM1637 DIO
TM1637Display display(CLK, DIO);
#define pinterm A0 //Pino onde o termistor está ligado
#define termres 10500 //Valor do termistor, no caso estamos utilizando um termistor de 10k
#define tempnominal 25 //Temperatura nominal do ntc utilizado, esse dado deve ser pesquisado no datasheet
//do ntc que você está utilizando
#define numsamples 20 //Número de amostras
#define beta 3400 //Valor do beta, esse valor varia conforme ntc, você deve verificar o datasheet
#define res 10000
int amostra[numsamples];
int i;
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
};
//-----------------------------------------------------
void setup(void) {
Serial.begin(115200);
delay(20);
display.setBrightness(3);
display.showNumberDecEx(0, 0b01000000, true); // 00:00
}
//-----------------------------------------------------
void loop(void) {
float media;
for (i = 0; i < numsamples; i++) {
amostra[i] = analogRead(pinterm);
delay(10);
}
media = 0;
//quantidade de amostras
for (i = 0; i < numsamples; i++) {
media += amostra[i];
}
// Serial.print(amostra[4]); Serial.print (" ");
media /= numsamples;
// conversão do valor de tensão em resistência
media = 1023 / media - 1;
// Serial.print(media); Serial.print (" ");
media = res / media;
// Serial.print(media); Serial.print (" ");
//Faz o cálculo pela fórmula do Fator Beta
float temperatura;
temperatura = media / termres; // (R/Ro)
// Serial.print(temperatura, 2); Serial.print (" ");
temperatura = log(temperatura); // ln(R/Ro)
// Serial.print(temperatura, 2); Serial.print (" ");
temperatura /= beta; // 1/B * ln(R/Ro)
// Serial.print(temperatura, 2); Serial.print (" ");
temperatura += 1.0 / (tempnominal + 273.15); // + (1/To)
// Serial.print(temperatura, 2); Serial.print (" ");
temperatura = 1.0 / temperatura; // Inverte o valor
// Serial.print(temperatura, 2); Serial.print (" ");
temperatura -= 273.15; // Converte para Celsius
// Serial.print(temperatura, 2); Serial.print (" ");
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" ");
Serial.print(int(temperatura * 10) % 10);
Serial.println (" °C ");
if (temperatura >= -9.9) {
display.showNumberDecEx(int(temperatura), 0b11100000, false, 2, 0);
display.showNumberDecEx(int(int(temperatura * 10) % 10), 0b11100000, false, 1, 2);
display.setSegments(celsius, 1, 3);
}
else {
display.showNumberDec(temperatura, false, 3, 0);
display.setSegments(celsius, 1, 3);
}
delay(1000);
}