ARDUINO UNO sensore temperatura e formula

Buongiorno
sono alle prime armi con ARDUINO UNO.
Dal libro “Arduino, il libro dei progetti” (trovato nel kit che acquistai), alla pag. 50 (progetto 03 Amorometro) paragrafo USALO, leggo un esempio di ciò che il monitor seriale dovrebbe mostrare:
Sensor: 200, Volts: .070, degrees C: 17.
Sul pin A0 è collegato il sensore di temperatura e, stando alla formula che trasforma il n. da 0 a 1024 in un valore in Volts ( x = sensorval * 5/1024),
con un sensorval = 200, dovrei ottenere
x = 200*5/1024 = 0,97 V
e non, come riportato dal libro, “.070 V” !
Infatti, se ricavo la temperatura in gradi C°: T = (Volts - 0,5)*100,
ottengo (0,97 - 0,5)100 = 47°
e non 17° !
Invece, per ottenere la temp di 17° C, la lettura del sensore dovrebbe essere, non 200, ma 137!
Infatti sarebbe:
x = 137
5/1024 = 0,67
da cui la Temp = (0,67 - 0,5)*100 = circa 17°.
Sbaglio io o è sbagliato quanto riportato dal libro?
Grazie !

Effettivamente pare anche a me un errore del libro starter kit. Ma anche io sono alle prime armi. L'unica cosa che posso rilevare è che la tua variabile di lettura del sensore di temperatura deve essere un numero float con virgola mobile. Hai provato a far girare uno sketch di test come il seguente, magari mettendo, come nel codice di seguito, un delay dopo ogni lettura?

const unsigned int TEMP_SENSOR_PIN = A0;
const float SUPPLY_VOLTAGE = 5.0;
const unsigned int BAUD_RATE = 9600;

void setup() {
  Serial.begin(BAUD_RATE);
}

void loop() {
  const float tempC = get_temperature();
  const float tempF = (tempC * 9.0 / 5.0) + 32.0;
  Serial.print(tempC);
  Serial.print(" C, ");
  Serial.print(tempF);
  Serial.println(" F");
  delay(1000);
}

const float get_temperature() {
  const int sensor_voltage = analogRead(TEMP_SENSOR_PIN); 
  const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024; 
  return (voltage * 1000 - 500) / 10; 
}

scusami ma il programma, elencato sul testo, funziona perfettamente! E' quell'esempio che poi cita che mi ha fatto venire dei dubbi. Quanto al tuo programmino, scusami ma io certo sono più neofita di te, per cui le tue costanti, con il trattino basso (_), mi confondono un po'...Io poi cerco di usare parole italiane come nomi di costanti e di variabili. Finora ho capito che il sensore collegato al piedino A0, rileva una certa temp, facendo variare la tensione da 0 a 5 V ma esprimendosi con un INT da 0 a 1024. Solo successivamente, con le due formule, si ottiene prima la tensione relativa (float V) e poi la temperatura (float T). Dunque la temperatura è già espressa con un valore FLOAT! Comunque ti ringrazio Francesco

Non ho quel libro. Non conosco l'esempio. Faccio solo un appunto, non sò se è quello il problema. Gli sketch Arduino si scrivono in C, il quale ha questo vincolo: le divisioni tra numeri interi NON hanno virgole. Quindi 5/1024 => ottieni 0 Devi usare 5/1024.0 aggiungendo/forzando il calcolo con le virgole. Poi alla fine il risultato di tutti i calcoli potrebbe anche essere sparato in un intero, ma i parziali bisogna "forzarli".

Per un tutorial chiaro (ma purtroppo in inglese) si può fare riferimento ad Adafruit, sezione learn. https://learn.adafruit.com/tmp36-temperature-sensor

Ci sono anche spiegate le formule, in questo esempio sensore TMP36 https://learn.adafruit.com/tmp36-temperature-sensor qui per il dht11 e dht22: https://learn.adafruit.com/dht

Grazie! Gentilissimi, alla prossima. Francesco

giacchè ci sono, qual è a vostro avviso il miglior libro in italiano (mi riferisco ad Arduino in generale)? Io ho anche "creare progetti con Arduino for dummies" che non è male, ma mi piacerebbe un ulteriore fonte che procedesse passo passo... Ciao