Boa noite, eu estou trabalhando em um projeto no qual estou usando o sensor de alcool (MQ-3) e um sensor de temperatura simples, no qual veio no kit de iniciante. Consegui montar ambos, e quando uso os codigos separados no programa do Arduino ele me da o valor da temperatura em ºC, porem quando uso o codigo de temperatura + codigo do sensor de alcool, a calibração da temperatura desconfigurar.
Gostaria de saber se alguém sabe aonde estou errando, Obrigado.
Este é o codigo que estou utilizando.
unsigned int val = 0;
unsigned char PIN = 0;
#include <math.h>
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; // Convert Kelvin to Celcius
return Temp;
}
void setup() {
Serial.begin(9600);
pinMode(PIN,INPUT);
}
void loop() {
Serial.print("Temperatura = ");
Serial.println(int(Thermister(analogRead(1)))); // display Fahrenheit
val = analogRead(0);
Serial.print("Valor Alcoolico = ");
Serial.println(val);
delay(5000);
}
Tags:
Permalink Responder até Ernane Alexandre Freitas em 20 outubro 2012 at 15:09
o bloco onde a cariavel temp recebe o calculo deve ficar dentro do loop acho o ddelay de 5s muito grande tb
Permalink Responder até Eduardo H. Marcondes em 20 outubro 2012 at 15:22
Normalmente os microcontroladores tem na verdade 1 (ou 2) ADs só. O que existe é uma "chave comutadora" para selecionar por qual pino será feita a leitura.
Assim sempre que vc troca a origem do sinal é necessário um pequeno delay até a proxima leitura. Se não precisa é pq o criador da biblioteca foi generoso e incluiu.
Como vc está lendo grandezas que não mudam rapidamente isso não vai te causar diferença alguma. Quando vc quer por ex digitalizar audio já seria necessário um AD dedicado por canal.
Enfim, acho que um delay entre a leitura do canal 0 e do canal 1 vai te resolver. 0,1s por ex. Só que esse delay deveria ficar depois que vc seleciona o canal e antes de ler... Por isso não acho exagero ler desprezando, dar um delay e ler novamente. Já que vc vai jogar fora tempo depois não custa.
Dependendo do microcontrolador já precisei inclusive ler umas 16 vezes e tirar a media das ultimas 8 leituras (desprezar as primeiras). Isso te da um valor mais "limpo" (media).
Digo pelo caso geral, não conheço esse detalhe especifico no ARM/Arduino, mas vale tentar.
Permalink Responder até Marcelo Mosczynski em 21 outubro 2012 at 14:22
É isso mesmo, tem que por um delay(10) entre cada analogread(), para o AD do ATMEGA estabilizar.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 150,00
Ou em até 18x de
R$ 10,00
Por: R$ 195,00
Ou em até 18x de
R$ 13,00
(ADS1102C) - 100MHz - 2 Canais
Por: R$ 1920,00
Ou em até 18x de
R$ 127,96
© 2013 Criado por Marcelo Rodrigues.