sensore tmp36 gz

Dal datasheet (http://www.analog.com/static/imported-files/data_sheets/TMP35_36_37.pdf) pare serva un condensatore ceramico da 0,1 uF tra GND e V+.

Note the 0.1 ?F bypass capacitor on the input. This capacitor should be a ceramic type, have very short leads (surface-mount is preferable), and be located as close as possible in physical proximity to the temperature sensor supply pin. Because these temperature sensors operate on very little supply current and may be exposed to very hostile electrical environments, it is important to minimize the effects of radio frequency interference (RFI) on these devices. The effect of RFI on these temperature sensors specifically and on analog ICs in general is manifested as abnormal dc shifts in the output voltage due to the rectification of the high frequency ambient noise by the IC. When the devices are operated in the presence of high frequency radiated or conducted noise, a large value tantalum capacitor (±2.2 ?F) placed across the 0.1 ?F ceramic capacitor may offer additional noise immunity

Poi questi:
float tempPin = 1; // pin analogico IN temperature sensor
int ledPintemp = 13; // pin led termistore
int outPin = 9; // pin attuatore
li puoi sostituire con dei #define

float tempPin = 1 non si può vedere. :astonished: :astonished:

intanto grazie delle risposte...

in questo pdf http://physics.gallaudet.edu/rov/Temperature_sensor_tutorial_temp36.pdf
viene spiegato bene come installare tmp36.

in merito al condensatore domani provo ma in vari tutorial in giro non lo mettono anche se il datasheet ne parla e funziona tutto alla grande. fista la grandezza della misura sembra non faccia la conversione in celsius.
per quando riguarda float tempPin = 1 non si può vedere, mi sta venendo un dubbio ..... non è che ho assegnato due variabili al pin 1 ???? :fearful: :fearful: :fearful:

adesso sono fuso domani faccio le prove

grazie grazie ancora ...

........................................ aspettaaaaaaaaaaaa

ho trovato un esempio con codice, montaggio e video che funziona ....
qui: http://tronixstuff.wordpress.com/2010/04/15/getting-started-with-arduino-chapter-two/

dimmi cosa ne pensi per cortesia.
notte

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

ho modificato testo di prima vedi appena sopra ..

   // 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:

celsius =  analogRead(pinTemp) * 0.4883 - 50;

e risolvo. :grin:

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

allora ...

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

STATUS SENSORI

TEMPERATURA = 377.26 C :fearful: :fearful:

CALDO

LUCE = 228

LUCE
AGGIORNA SENSORI: CHECK

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

CALDO

LUCE = 237

LUCE
AGGIORNA SENSORI: CHECK

quindi punto a capo.
ricontrollerò tutto.

questo e ultimo codice modificato:

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.

Prova a includere queste righe e vedi che valori restituisce

  // prova con sensor temp 36gz
  sensortemp = analogRead(inTemp); //lettura dei dati nel pin analogico 1 
  Serial.print("Lettura AnalogRead: ";
  Serial.println(sensortemp);
  voltage = (sensortemp*5000)/1024; // Conversione in millivolt
  Serial.print("Millivolt: ";
  Serial.println(voltage);
  voltage = voltage-500; //elimino offset
  Serial.print("Senza OffSet: ";
  Serial.println(voltage);
  celsius = voltage/10; // converto da millivolt a celsius
 Serial.print("Temperatura: ";
  Serial.println(celsius);
  temp = celsius; // assegno il valore alla variabile intemp

Usando quella formula, la temperatura di 377 C si ottiene col valore di AnalogRead pari a 875 che corrisponde a 4272mV che è fuori specifica perché il sensore dovrebbe erogare massimo 2000mV.
Presumo sia guasto.

proverò il tuo consiglio, nel fratempo ho modificato e :

/*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(){
  float inTemp = analogRead(1);   // pin analogico IN sensore temperatura 
  
   /*inizio calcolo temperatura*/
   // prova con unico calcolo con sensor temp 36gz. Aggiunto condens.ceram. 0,5 uF come da datasheet
   //celsius =  inTemp * 0.4883 - 50;
   //temp = celsius;
   
   //prova http://tronixstuff.wordpress.com/2010/04/15/getting-started-with-arduino-chapter-two/
   
   voltage = (inTemp*5000)/1024; // convert raw sensor value to millivolts
    voltage = voltage-500;        // remove voltage offset
     celsius = voltage/10;         // convert millivolts to Celsius
 
  /*fine calcolo temperatura*/

risultato soddisfacente. intanto e saltato fuori il decimale adesso devo capire come mai non legge il dato
STATUS SENSORI

TEMPERATURA = 0.00 C :slight_smile: :slight_smile: :slight_smile:

FREDDO

LUCE = 590

LUCE
AGGIORNA SENSORI: CHECK

Risultato tuo consiglio:

Lettura AnalogRead: 1023.00
Millivolt: Senza OffSet: 4495.12
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 917.00
Millivolt: Senza OffSet: 3977.54
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 889.00
Millivolt: Senza OffSet: 3840.82
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 919.00
Millivolt: Senza OffSet: 3987.30
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 940.00
Millivolt: Senza OffSet: 4089.84
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 905.00
Millivolt: Senza OffSet: 3918.95
Temperatura: OFF pin 13


ON pin 12


Vista nel browser
STATUS SENSORI

TEMPERATURA = 383.59 C

CALDO

LUCE = 574

LUCE
AGGIORNA SENSORI: CHECK

preso il tester e controllato circuito ...... tmp36gz non era colegato a massa.

nuovi risultati, tuttooooooo okkkkkkkkkkkkkkkkkkkk (un po altina la temperatura ma va bene)
Grazie @ PoloP

Lettura AnalogRead: 156.00
Millivolt: Senza OffSet: 261.72
Temperatura: OFF pin 13


ON pin 12


Lettura AnalogRead: 152.00
Millivolt: Senza OffSet: 242.19
Temperatura: ON pin 13


ON pin 12


Lettura AnalogRead: 153.00
Millivolt: Senza OffSet: 247.07
Temperatura: ON pin 13


ON pin 12


Lettura AnalogRead: 153.00
Millivolt: Senza OffSet: 247.07
Temperatura: ON pin 13


ON pin 12


Lettura AnalogRead: 151.00
Millivolt: Senza OffSet: 237.30
Temperatura: ON pin 13


ON pin 12


Lettura AnalogRead: 153.00
Millivolt: Senza OffSet: 247.07
Temperatura: ON pin 13


ON pin 12


Lettura AnalogRead: 153.00
Millivolt: Senza OffSet: 247.07
Temperatura: ON pin 13


ON pin 12
adesso creo in vb6 un'interfaccia che gestisca tutti questi dati che arrivano.

Prego. :wink:

Controlla il codice perché ho dimenticato di chiudere le parentesi tonde dopo il serial.print senza offset e in quello successivo della temperatura.

La Temperatura dovrebbe essere di 24.7 C.

si si avevo visto grazie ....

peccato che non ci sia il dabugin in linea col l'IDE di arduino, in modo da controllare il valore delle variabile "al volo"

grazie ancora

se ti va di rispondermi vedi il secondo quesito che chiedevo al primo post, riportato qui sotto.

......vorrei portare il progetto in un stabile dove ce un server amministratore che controlla altre stanze con altri PC server che controllano pc client e che qui VOGLIO COLLEGARE L'ARDUINO. se sino a quà vi è tutto chiaro, vengo alla domanda:
come faccio a impostare IP nell'arduino e nel router?

credo che nell'arduino non si debba toccare niente perche basta ricordarsi ip arduino impostato nello sketch che poi ho usato per aprire porta nel router per farlo entrare.
il problema vero e capire come accedere dall'esterno ad arduino e quindi che ip Riassegno nel sito host che mi ha dato un URL: dell'amministratore principale o dei server pc che anche loro hanno diritti di amministratore sui pc client? ............

Per capire questa cosa per cortesia se avete tempo, guardate lo sketck leggete i commenti nel sito del progetto iniziale Arduino con controllo remoto via HTTP | GianniFavilli.it.
ciao

arduinh3nk3r:
......vorrei portare il progetto in un stabile dove ce un server amministratore che controlla altre stanze con altri PC server che controllano pc client e che qui VOGLIO COLLEGARE L'ARDUINO. se sino a quà vi è tutto chiaro, vengo alla domanda: come faccio a impostare IP nell'arduino e nel router?
credo che nell'Arduino non si debba toccare niente perche basta ricordarsi ip arduino impostato nello sketch che poi ho usato per aprire porta nel router per farlo entrare.
il problema vero e capire come accedere dall'esterno ad arduino e quindi che ip Riassegno nel sito host che mi ha dato un URL: dell'amministratore principale o dei server pc che anche loro hanno diritti di amministratore sui pc client?

In rete locale è semplice: tramite browser digiti l'indirizzo di arduino e lui ti risponde.
Invece, per contattare Arduino da internet devi conoscere l'indirizzo ip del router che effettua il collegamento ad internet e programmarlo affinché rigiri la chiamata all'Arduino.
Quindi nel router dovrai impostare l'ip e la porta utilizzati da Arduino che dovranno essere conformi a quelli utilizzati nella rete locale dove lo installi.
Sul forum si è discusso della cosa in tanti altri post. fai una ricerca.

lui vuole automagicamente aggiornare l'ip in dydns in modo che sia raggiungibile attraverso un URL.
in pratica devi retroingenierizzare il funzionamento di dydns lato PC e simularne il funzionamento via arduino.
Se usa ssh (https o altre connessioni sicure) sei fregato :slight_smile:

Non ho capito se lui è l'amministratore del sistema o no.
Nel caso non lo fosse deve chiedere se gli ruotano una porta sull'ip di Arduino (sempre che abbiano un sistema ddns per essere rintracciati via internet).
Nel caso lo fosse deve attivare il DDNS e ruotare una porta sul router.
Per il DDNS su Arduino c'è: http://www.open-electronics.org/arduino-ddns-dynamic-dns/

grazie delle risposte....
@ PaoloP
non sono amministratore della Lan ma non ci sono problemi per farmi dare l'accesso.

@ lesto
si vorrei essere raggiungibile attraverso un URL, ma spero che la procedura di PaoloP di farmi ruotare una porta sull'IP di arduino sia solo una procedura di assegnazione e non di modifica con aggiunta di hardware.
certo è che dovro cambiare IP arduino e internet e sub mask nello sketch perche cambia la rete e quindi:

byte mac[] = { 0x??, 0x??, 0x??, 0x??, 0x??, 0x?? }; // mac Arduino
byte ip[] = { 192, 168, 0, 245 }; // ip arduino internet
byte gateway[] = { 192, 168, 0, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 255 }; //subnet mask
Server server(80); // porta del server

e poi impostare il servizio dydns in rete in modo che reindirizzi al nuovo ip della nuova Lan del mio lavoro.

spero sia come penso.

la soluzione di paoloP è una operazione obbligatoria da fare se possiedi una NAT (cioè al 99% dei casi), e rende l'arduino disponibile in remoto. Se poi il router è sempre acceso E hai un contratto con IP fisso, allora non ti serve nemmeno il servizio e puoi registrare direttamentete un dominio. Se invece hai un IP dinamico allora il link di paoloP per dydns è la soluzione, (ovviamente a piori bisogna settare la NAT)

arduinh3nk3r:
byte subnet[] = { 255, 255, 255, 255 }; //subnet mask

Con questa maschera di sotorete vedi solo te stesso e non riesci a raggiungere altri host.
Dovresti correggerla con:

byte subnet[] = { 255, 255, 255, 0 }; //subnet mask