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);
}
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.
//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);
}
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
quel codice te lo compila? hai messo i numeri decimali con la virgola anzi che mettere i punti, forse è lì il problema
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.