Hc sr04 compensazione temperatura

Buongiorno a tutti,
ho da poco iniziato con Arduino e già mi trovo davanti il primo problema "serio".
Vorrei rendere il sensore a ultrasuoni HC sr04 ancora più preciso considerando
anche la temperatura dell'aria.
Però, dal seguente codice ottengo solo valori incoerenti.

 void loop(){
  //porta bassa l'uscita del trigger
  digitalWrite( triggerPort, LOW );
    
  //invia un impulso di 10microsec su trigger
  digitalWrite( triggerPort, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( triggerPort, LOW );
  
  tempo = pulseIn(echoPort, HIGH) / (2*10^6); //tempo di viaggio espresso in secondi
  T = Get_Temperature(); // restituisce la temperatura in °C
  s = ((331,4 + 0,62* T) * tempo) * 10^2; spazio in cm
Serial.println(s);
 }

Quale potrebbe essere il problema?
Grazie

Anelito:
Buongiorno a tutti,
ho da poco iniziato con Arduino e già mi trovo davanti il primo problema "serio".
Vorrei rendere il sensore a ultrasuoni HC sr04 ancora più preciso considerando
anche la temperatura dell'aria.
Però, dal seguente codice ottengo solo valori incoerenti.

void loop(){
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );

//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );

tempo = pulseIn(echoPort, HIGH) / (210^6); //tempo di viaggio espresso in secondi
T = Get_Temperature(); // restituisce la temperatura in °C
s = ((331,4 + 0,62
T) * tempo) * 10^2; spazio in cm
Serial.println(s);
}

Quale potrebbe essere il problema?
Grazie

Da dove prelevi la temperatura?

Da un LM35DT(LM35DT Datasheet(PDF) - National Semiconductor (TI)), sensore di temperatura

  float GetTemperature() {
   float aRead = 0;
   for (int i = 0; i < 20; i++) 
    aRead = aRead+analogRead(Pin);
    aRead /= 20;
  float temperature = ((100*1.1*aRead)/1024)*10;
   return temperature/10;
  }

edit: per favore includi il codice usando gli appositi tag

questa cosa era nella seconda prova dell'esame di maturità per gli ITIS nei corsi di elettronica, informatica e telecomunicazioni l'hanno scorso, prova a cercare le soluzioni in internet magari trovi qualcosa di interessante :slight_smile:

quel codice te lo compila? hai messo i numeri decimali con la virgola anzi che mettere i punti, forse è lì il problema :cold_sweat:

Anelito:

s = ((331,4 + 0,62* T) * tempo) * 10^2; spazio in cm

E mancano anche i caratteri dei commenti //
Come fa a compilartelo?

s = ((331.4 + 0.62* T) * tempo) * 10^2;  // spazio in cm

Grazie a tutti per le risposte.

Sì, ho provato a sostituire le virgole con i punti e il commento mancato è un errore di battitura non presente nel codice che uso.
Questo è l'intero listato.

//variabili d'ambiente
  float t, s, Temperatura;

  //sensore ultrasuoni  
  int trigger = 7;
  int echo = 8;
 
//sensore temperatura
 int Pin = 0;

  void setup() {
  pinMode( trigger, OUTPUT );
  pinMode( echo, INPUT );
  pinMode(4, OUTPUT);
  Serial.begin(9600);
  Serial.flush();
  analogReference(INTERNAL);
  }
  
  void loop()
  {
  digitalWrite( trigger, LOW );
  
  digitalWrite(trigger, HIGH );
  delayMicroseconds( 10 );
  digitalWrite(trigger, LOW );
  
  t = pulseIn(echo, HIGH );
    Temperatura = Get_Temperature();
    s = ((331.4 + 0.62* Temperatura) * t) * 10^2;  // spazio in cm
    Serial.println(s);
delay(1000);
}

float Get_Temperature() {
 float temperature, aRead = 0;
 for (int i = 0; i < 10; i++) 
  aRead = aRead+analogRead(Pin);
 aRead /= 10;
 temperature = ((100*1.1*aRead)/1024);
 return temperature;
}

PulseIn restituisce un tempo in microsecondi mentre la formula che usi tu vorrebbe un tempo in secondi.
Inoltre credo manchi un ritardo tra
digitalWrite( trigger, LOW );
e
digitalWrite(trigger, HIGH );

Per un efficace debugging però io stamperei anche la temperatura e la durata dell'impulso.