Pagina 2 di 2 PrimaPrima 12
Risultati da 11 a 17 di 17
  1. #11
    Brezza tesa L'avatar di tommy2760
    Data Registrazione
    30/08/08
    Località
    Rimini(RN)
    Età
    35
    Messaggi
    675
    Menzionato
    4 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    #include "SHT21.h"
    #include <Wire.h>


    SHT21 SHT21;

    unsigned int EchoPin = 13;
    unsigned int TrigPin = 12;
    unsigned long currentMillis = 0;
    unsigned long previousMillis = 0;
    unsigned long interval = 50;
    float c;
    float t;
    float temp;
    float RH;
    float TimeOfFlight;


    volatile boolean flag = 0;
    volatile boolean started = 0;
    volatile boolean gotTime = 0;


    int counter = -1;
    unsigned long startTimeArray[19];
    unsigned long endTimeArray[19];
    unsigned long timeOfFlightArray[19];
    int MAXCOUNTERVALUE = 19;



    ICACHE_RAM_ATTR void ToF()
    {

    if (started){
    endTimeArray[counter] = ESP.getCycleCount();
    if (endTimeArray[counter] <startTimeArray[counter]){
    flag=1;
    endTimeArray[counter] =endTimeArray[counter] +4294967295;
    }
    gotTime=1;
    }
    else{
    startTimeArray[counter] = ESP.getCycleCount();
    }
    started = !started;

    }


    void setup()
    {
    Serial.begin(115200);
    Wire.begin();
    SHT21.begin();
    pinMode(EchoPin, INPUT);
    pinMode(TrigPin, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(EchoPin),ToF,CHANGE);

    }
    void loop()
    {

    currentMillis = millis();
    if (currentMillis-previousMillis>= interval) {
    counter ++;
    //Serial.print("Iterazione numero ");
    //Serial.println(counter);
    if(counter<MAXCOUNTERVALUE){
    digitalWrite(TrigPin, LOW);
    delayMicroseconds(5);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(30);
    digitalWrite(TrigPin, LOW);
    }
    else{
    //Serial.println("Iterazione di 10 completata, effettuo i miei calcoli ");
    //calcola tutto e resetta
    RH=0.1*(int((SHT21.getHumidity() *10+5)));
    temp=0.1*(int(SHT21.getTemperature()) *10+5);
    for(int i = 0; i < MAXCOUNTERVALUE;i++){
    timeOfFlightArray[i] = endTimeArray[i] - startTimeArray[i];
    //Serial.print("tempo volo di ");
    //Serial.println(i);
    // Serial.println(timeOfFlightArray[i]);
    }
    bubbleSortArray();
    TimeOfFlight=(timeOfFlightArray[9]-7150) *0.00625; //7150 è una "costante di calibrazione"
    // Serial.print("Tempo di volo ");
    // Serial.println(TimeOfFlight);

    c=(0.3-0)/((TimeOfFlight) *0.000001);

    t=0.1*(int(((c-331.296-(0.0124*RH))/0.606) *10+5));

    Serial.print("Velocità del suono ");
    Serial.print(c);
    Serial.println("m/s");
    Serial.print("Umidità SHT21 ");
    Serial.print(RH,1);
    Serial.println("%");
    Serial.print("Termometro SHT21 ");
    Serial.print(temp,1);
    Serial.println("°C");
    Serial.print("Termometro Ultrasonico ");
    Serial.print(t,1);
    Serial.println("°C");
    //Serial.println(flag);
    flag=0;
    gotTime = 0;
    counter = -1;
    delay(30000);
    }

    previousMillis = currentMillis;
    }

    }


    void bubbleSortArray() {
    unsigned long out, in, swapper;
    for(out=0 ; out < MAXCOUNTERVALUE; out++) { // outer loop
    for(in=out; in<(MAXCOUNTERVALUE-1); in++) { // inner loop
    if( timeOfFlightArray[in] > timeOfFlightArray[in+1] ) { // out of order?
    // swap them:
    swapper = timeOfFlightArray[in];
    timeOfFlightArray [in] = timeOfFlightArray[in+1];
    timeOfFlightArray[in+1] = swapper;
    }
    }
    }
    }
    Ultima modifica di tommy2760; 23/03/2020 alle 21:21
    "La natura ride davanti alle difficolta' di integrazione" (Pierre Simon Laplace)
    http://www.wunderground.com/weathers...?ID=IEMILIAR42

  2. #12
    Burrasca
    Data Registrazione
    18/09/19
    Località
    Catania
    Messaggi
    5,059
    Menzionato
    151 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    Devi includerlo tra i tag code #


    Ok, ora si!
    Ultima modifica di zoomx; 23/03/2020 alle 21:28

  3. #13
    Brezza tesa L'avatar di tommy2760
    Data Registrazione
    30/08/08
    Località
    Rimini(RN)
    Età
    35
    Messaggi
    675
    Menzionato
    4 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    si lo faccio subito, l'ho fatto di fretta e non ho controllato
    "La natura ride davanti alle difficolta' di integrazione" (Pierre Simon Laplace)
    http://www.wunderground.com/weathers...?ID=IEMILIAR42

  4. #14
    Burrasca
    Data Registrazione
    18/09/19
    Località
    Catania
    Messaggi
    5,059
    Menzionato
    151 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    Citazione Originariamente Scritto da tommy2760 Visualizza Messaggio
    si lo faccio subito, l'ho fatto di fretta e non ho controllato
    Com'é finita?

    Io ho fatto delle prove usando un Arduino e con il metodo a riflessione su una distanza di circa 3 m che diventano sei con andata e ritorno.
    Quello che ho riscontrato è che il cono di emissione è ampio per cui la superficie riflettente credo debba essere sopra i 2 metri di diametro almeno.
    Inoltre la misura dell'umidità diviene il prossimo punto debole.
    Buoni risultati in una terrazza a nord, pessimi in quella a sud forse perché la superficie riflettente è piccola o becca riflessi da altri oggetti, di fatto è come se la distanza fosse inferiore di parecchio ai 3m

    Ho poi notato che nello sketch non hai indicato chiaramente quale è la distanza fra i sensori o non l'ho trovata io.
    Dovrebbe essere in questa linea
    c = (0.3 - 0) / ((TimeOfFlight) * 0.000001);
    quindi 30 cm.

    Vedo anche che prendi 10 valori e scegli quello più alto. HAi provato anche con una media dei valori?

  5. #15
    Brezza tesa L'avatar di tommy2760
    Data Registrazione
    30/08/08
    Località
    Rimini(RN)
    Età
    35
    Messaggi
    675
    Menzionato
    4 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    Ciao zoomx! Scusa la latitanza ma è un periodo un po' pieno e non ho potuto dedicare molto tempo alla sperimentazione ne al forum: allora, avevo fatto un upgrade con la mediana, non con la media, venivano risultati un po' migliori. Ovviamente condizione quasi necessaria per avere dei risultati buoni è la assenza di vento, in caso contrario è facile avere problemi (sostanzialmente è un pezzo di un anemometro ultrasonico alla fine).
    Ultimamente mi sono concentrato più sull'aspetto più teorico, in quanto effettivamente il sistema ha parecchi punti deboli:
    1- il tempo di volo è la variabile fondamentale da monitorare ma è difficile misurarlo in maniera accurata, soprattutto con chip economici: ho visto recentemente che per una misura ultra precisa utilizzano una particolare configurazione di un interferometro laser (appena torno in Italia magari te lo mando) che permette di avere risultati strepitosi, ovviamente con un costo più importante.

    2-onde evitare interferenze del vento importanti converrebbe costruire un interferometro ultrasonico (stile NCTAH costruito dal NPL) solo che anche qui la faccenda non è così semplice in quanto sarebbe necessario fare uno sweep in frequenza con una risoluzione molto elevata(o avvicinare/allontanare i microfoni, ma c'è bisogno di una meccanica precisa, inoltre la meccanica sarebbe meglio evitarla all'esterno), il che, da quanto so attualmente, non costa proprio pochissimo, servono schede molto potenti a meno che non so utilizzi un PC dedicato con le opportune schede di acquisizione.

    Sto cercando di studiare il più possibile questi aspetti e la componentistica più idonea per creare qualcosa di più robusto ed affidabile rispetto al tempo di volo. Magari più avanti possiamo anche sentirci per scambiarci qualche idea e boh, collaborare così a tempo perso!

    Inviato dal mio Redmi Note 7 utilizzando Tapatalk

  6. #16
    Brezza tesa L'avatar di tommy2760
    Data Registrazione
    30/08/08
    Località
    Rimini(RN)
    Età
    35
    Messaggi
    675
    Menzionato
    4 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    PS
    Si la distanza era 30cm!

    Inviato dal mio Redmi Note 7 utilizzando Tapatalk

  7. #17
    Burrasca
    Data Registrazione
    18/09/19
    Località
    Catania
    Messaggi
    5,059
    Menzionato
    151 Post(s)

    Predefinito Re: Termometro ultrasonico lowcost - funzionamento a tempo di volo

    Citazione Originariamente Scritto da tommy2760 Visualizza Messaggio
    Ciao zoomx! Scusa la latitanza ...
    Ma figurati!

    Anche io ho iniziato a cercare articoli, casomai qualcuno già avesse effettuato un prototipo decente e invece nessuno tra gli amatoriali è abbastanza avanti. Poi c'è la roba specialistica come la misura di altissime temperature, la misura in ambiente radioattivo, nei liquidi e così via.

    Io ho adottato i 6m di apertura proprio per minimizzare i problemi di misura del tempo e perché ho un tetto a 3m di altezza. Questa configurazione è comoda per me ma non lo sarà per altri. Arduino UNO ha un risuonatore ceramico (tranne alcuni cloni cinesi) mentre il mini e il nano usano un cristallo di quarzo però non compensato termicamente.
    Se avessi una strumentazione decente mi metterei anche a misurare lo scostamento in frequenza del clock ma non ce l'ho. Forse troverò qualcosa di alternativo.
    Penso di usare anche altre MCU oltre all'ESP8266, ho l'ESP32 e alcune Nucleo ST.
    Avevo già notato che il sensore ultrasonico alimentato a tensioni più basse come 3.3V funziona ma ha portata ridotta, devo vedere con un'alimentazione robusta o quanta influenza ha l'alimentazione.
    Poi aspetto un sensore ultrasonico Mobotix che dovrebbe essere migliore. Vedremo.

    Io mi ci sono buttato proprio perché sto in città e ho influenza sui sensori in ombra perfino da palazzi lontani 30 metri.

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •