Go Down

Topic: sensore tmp36 gz (Read 3 times) previous topic - next topic

PaoloP

Probabilmente è anche sbagliata la formula.
Nel datasheet c'è scritto che questo sensore ha un passo di 10mV/°C con un valore di 25 °C a 750 mV e quindi -40 a 100mV e +125 a 1750mV

quindi avremo:
millivolt = 5 * analogRead(pinTemp)/1024 * 1000 =  analogRead(pinTemp) * 4.883
temperatura = millivolt/10 - 50

Con un solo passaggio --> Temperatura = analogRead(pinTemp) * 0.4883 -50
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

arduinh3nk3r

ho modificato testo di prima vedi appena sopra ..

PaoloP

#7
Apr 28, 2012, 01:48 am Last Edit: Apr 28, 2012, 01:50 am by PaoloP Reason: 1
Code: [Select]
  // let's get measurin'
sensor = analogRead(0);
voltage = (sensor*5000)/1024; // convert raw sensor value to millivolts
voltage = voltage-500;        // remove voltage offset
celsius = voltage/10;         // convert millivolts to Celsius


E' lo stesso risultato che ho ottenuto io, ma usando più variabili. In questo modo è più legibile e si capiscono i passaggi ed è meglio debuggabile.
Ma io lo so che scrivo programmi incasinati, quindi metterei:
Code: [Select]
celsius =  analogRead(pinTemp) * 0.4883 - 50;
e risolvo.  :smiley-mr-green:
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

arduinh3nk3r

grazie grazie provo e poi t'informo.  :) :)

arduinh3nk3r

#9
Apr 28, 2012, 05:15 pm Last Edit: Apr 28, 2012, 05:40 pm by arduinh3nk3r Reason: 1
allora ...

risultato con condens. + modifica celsius =  analogRead(inTemp) * 0.4883 - 50;
                                                          temp = celsius;

STATUS SENSORI

TEMPERATURA = 377.26 C  :smiley-eek-blue: :smiley-eek-blue:

CALDO

LUCE = 228

LUCE
AGGIORNA SENSORI: CHECK

risultato con solo modifica celsius =  analogRead(inTemp) * 0.4883 - 50;
                                                temp = celsius;
TEMPERATURA = 346.01 C  :smiley-eek-blue: :smiley-eek-blue: :smiley-eek-blue:

CALDO

LUCE = 237

LUCE
AGGIORNA SENSORI: CHECK

quindi punto a capo.
ricontrollerò tutto.

questo e ultimo codice modificato:
Code: [Select]

int outPin = 9; // pin attuatore
//char link[]="http://www.itisarighi.com/html/home.htm"; //link
String readString; //string
boolean LEDON = false; // flag status attuatore

/*termistore*/ //variabili con sensor MCP9700A
float temp =0; // variabile da calcolare
float volt; // variabile da calcolare sul sensore di temperatura
float inTemp = 1;   // pin analogico IN temperature sensor
int ledPintemp = 13; // pin led termistore
float tempreg = 25.0; // temperatura di controllo in celsius

//variabili con sensor TMP 36GZ
 float sensortemp = 0;
 float voltage = 0;
 float celsius = 0;
/*end termistore*/

/*fotoresistore*/
int light; // variabile da calcolare
int ledPinlux = 12; // pin led fotoresistenza
int photoresistor = 0; // pin analogico IN fotoresistore

/*end fotoresistore*/

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(outPin, OUTPUT);
pinMode(ledPinlux, OUTPUT);
Serial.begin(9600);
}

void loop(){

 /*inizio calcolo temperatura*/ //prova con sensor MCP9700A
 // prova 1 dati non validi
 //temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50; // Codice ottimizzato
 // altra possibilità ( ( 5 * analogRead(PIN) * 100.0  ) /  1024 ) * 0.325;
 
 // prova con sensor temp 36gz
 //sensortemp = analogRead(inTemp); //lettura dei dati nel pin analogico 1
 //voltage = (sensortemp*5000)/1024; // Conversione in millivolt
// voltage = voltage-500; //elimino offset
 //celsius = voltage/10; // converto da millivolt a celsius
 //temp = celsius; // assegno il valore alla variabile intemp

 // prova con unico calcolo con sensor temp 36gz aggiunto condens.ceram. 0,5 uF come da datasheet
  celsius =  analogRead(inTemp) * 0.4883 - 50;
  temp = celsius;


sempre grazie.

Go Up