Leitura da porta A0: A leitura da Porta A0 é uma medida de temperatura, mas por causa das caracteristicas do termistor não é linear e nem está em graus centigrados. Uma conversão para graus centigrados deve ser realizada.
Conversão para °C: Como falta uma fórmula matemática para esta conversão para graus centígrados, a maneira de realizá-la é utilizando uma tabela de valores aferidos e depois calcular a medida interpolando valores de duas linha da tabela.
Criação da Tabela. Alguém precisa criar uma tabela, que normalmente é levantada por aferição da tempertura com termometro preciso. Na construção da tabela, para cada leitura da porta analógica do Arduino, deve-se registrar a temperatura no termõmetro. Tem uma tabela pronta lá embaixo que foi contruída para termistores de 100k bastante utilizados nas medições de temperatura de impressoras 3D open source e serve para o circuito do projeto. Se o seu termistor é diferente, você terá que obter a tabela.
Exemplo 1 de conversão: Se a leitura da porta A0 for 205, conforme a tabela abaixo a temperatura corrrespondente é 165°C.
Exemplo 2 de conversão: Se a leitura da porta A0 for 135, conforme a tabela abaixo a temperatura deve estar entre 190°C e 185°C. O valor exato será:
190 + (135-131)*(185-190)/(143-131) = 188,33 °C
Cálculo: O cálculo do valor foi realizado por interpolação na tabela. Se você se interessar pesquise sobre como interpolar.
Tabela de conversão Leitura digital na porta A0 para °C
A0 | °C | A0 | °C | A0 | °C | ||
23 | 300 | 109 | 200 | 591 | 100 | ||
25 | 295 | 120 | 195 | 628 | 95 | ||
27 | 290 | 131 | 190 | 665 | 90 | ||
28 | 285 | 143 | 185 | 702 | 85 | ||
31 | 280 | 156 | 180 | 737 | 80 | ||
33 | 275 | 171 | 175 | 770 | 75 | ||
35 | 270 | 187 | 170 | 801 | 70 | ||
38 | 265 | 205 | 165 | 830 | 65 | ||
41 | 260 | 224 | 160 | 857 | 60 | ||
44 | 255 | 245 | 155 | 881 | 55 | ||
48 | 250 | 268 | 150 | 903 | 50 | ||
52 | 245 | 293 | 145 | 922 | 45 | ||
56 | 240 | 320 | 140 | 939 | 40 | ||
61 | 235 | 348 | 135 | 954 | 35 | ||
66 | 230 | 379 | 130 | 966 | 30 | ||
71 | 225 | 411 | 125 | 977 | 25 | ||
78 | 220 | 445 | 120 | 985 | 20 | ||
84 | 215 | 480 | 115 | 993 | 15 | ||
92 | 210 | 516 | 110 | 999 | 10 | ||
100 | 205 | 553 | 105 | 1004 | 5 | ||
1008 | 0 |
Sketch A sketch Arduino abaixo realiza a leitura, converte e envia para o computador via monitor serial 1 vez a cada segundo.
\\ tabela de conversão AD para graus centígrados
const short temptable[][2] = {
{ 23 , 300 },
{ 25 , 295 },
{ 27 , 290 },
{ 28 , 285 },
{ 31 , 280 },
{ 33 , 275 },
{ 35 , 270 },
{ 38 , 265 },
{ 41 , 260 },
{ 44 , 255 },
{ 48 , 250 },
{ 52 , 245 },
{ 56 , 240 },
{ 61 , 235 },
{ 66 , 230 },
{ 71 , 225 },
{ 78 , 220 },
{ 84 , 215 },
{ 92 , 210 },
{ 100 , 205 },
{ 109 , 200 },
{ 120 , 195 },
{ 131 , 190 },
{ 143 , 185 },
{ 156 , 180 },
{ 171 , 175 },
{ 187 , 170 },
{ 205 , 165 },
{ 224 , 160 },
{ 245 , 155 },
{ 268 , 150 },
{ 293 , 145 },
{ 320 , 140 },
{ 348 , 135 },
{ 379 , 130 },
{ 411 , 125 },
{ 445 , 120 },
{ 480 , 115 },
{ 516 , 110 },
{ 553 , 105 },
{ 591 , 100 },
{ 628 , 95 },
{ 665 , 90 },
{ 702 , 85 },
{ 737 , 80 },
{ 770 , 75 },
{ 801 , 70 },
{ 830 , 65 },
{ 857 , 60 },
{ 881 , 55 },
{ 903 , 50 },
{ 922 , 45 },
{ 939 , 40 },
{ 954 , 35 },
{ 966 , 30 },
{ 977 , 25 },
{ 985 , 20 },
{ 993 , 15 },
{ 999 , 10 },
{ 1004 , 5 },
{ 1008 , 0 }
};
void setup() {
Serial.begin(9600);
}
void loop() {
short a = 0 ;
int i;
float celsius;
a = analogRead(A1) ;
for (i=1; i<sizeof(temptable)/(2*sizeof(short)); i++) {
if ( temptable[i][0] > a){ // calculo interpolação
celsius = temptable[i-1][1] + (a - temptable[i-1][0]) * (
(float)(temptable[i][1] - temptable[i-1][1]) /
(float)(temptable[i][0] - temptable[i-1][0]));
break;
}
}
Serial.print( a ); // enviando medidas de temperatura para monitor
Serial.print( " - ");
Serial.print(celsius);
Serial.println( " C");
delay(1000);
}
Visualizaçao do resultado: Visualização da saída do programa no monitor é conforme a figura abaixo:
Nenhum comentário:
Postar um comentário