Arduino Forum

International => Italiano => Software => Topic started by: hyuma on Dec 09, 2015, 06:22 pm

Title: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 06:22 pm
Ho questo problema, vorrei fare in modo che se questo sensore individua un ostacolo davanti a sè per 5 secondi succede una cosa, mentre se l'ostacolo resta solo un secondo ne succede un'altra... Non so se l'HC-SR04 riesce a calcolare il tempo, avete qualche esempio da mostrarmi? grazie mille!

Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: gpb01 on Dec 09, 2015, 06:30 pm
Il HC-SR04 è un sensore ad ultrasuoni che ti permette di misurare la distanza di un ostacolo (... e quindi la sua presenza o meno) ... STOP.

Tutto il resto dei farlo tu da codice ...
... vedi che c'è un ostacolo, ti segni il tempo
... verifichi se c'è ancora l'ostacolo e guardi quanto tempo è passato
... se c'è ancora ed è passato il tempo X fai quello che devi fare per tempo X
... se c'è ancora ed è passato il tempo Y ... fai quello che devi fare per il tempo Y

Guglielmo
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 06:34 pm
come faccio a salvare in una variabile se ho un'ostacolo?
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: gpb01 on Dec 09, 2015, 07:26 pm
Hyuma, dalla tua presentazione vedo che all'università hai fatto informatica ...
... NON puoi chiedermi "come faccio a salvare in una variabile se ho un'ostacolo" ... perché mi preoccupi  :smiley-twist:

Guglielmo

P.S.: Occorrendo, una rinfrescatina ... QUI  (http://cabestano.altervista.org/alterpages/files/TizianaMarsella-ProgrammareArduino.pdf)  ;)
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 07:28 pm
va be, non c'era bisogno di fare i saccenti, comunque ok risolvo da solo
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: gpb01 on Dec 09, 2015, 07:29 pm
:o :o :o ... saccenti ? ? ?

Ohi, ma ti rendi conto di quello che scrivi ? ? ?

Ti presenti, dici che hai fatto informatica, ti spiego cosa devi fare da programma ... e mi chiedi "come salvare in una variabile" ? ? ? ... credo che siano le basi non ti pare ?

Guglielmo
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 07:34 pm
Questa cosa di usare il grassetto è alquanto fastidiosa, comunque pensavo di salvarlo con un booleano, ritornando true se detecto un ostacolo
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: gpb01 on Dec 09, 2015, 07:38 pm
... bhe, prima decidi a che distanza consideri un qualche cosa un ostacolo, visto che quel sensore ti permette di misurare la distanza.  O qualsiasi cosa hai davanti, a qualsiasi distanza, è da considerare ostacolo ?

Guglielmo

P.S.: Frequenta il forum e vedrai che faccio sempre abbondante uso della formattazione ... grassetti, italici, sottolineati ... servono ad evidenziare alcuni aspetti ... né più né meno.
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 09:47 pm
Code: [Select]

int led = 12;
int trigger = 5;
int echo = 4;
unsigned long previousMillis = 0;
int interval = 1000;

void setup() {

  pinMode(led, OUTPUT);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);

  // put your setup code here, to run once:

}

void loop() {

  unsigned long currentMillis = millis();

  digitalWrite(trigger, LOW);

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

  long duration = pulseIn(echo, HIGH);
  long distance = 0.034 * duration / 2;

  if (currentMillis - previousMillis >= interval) {

    if (distance < 10)
    {
      previousMillis = currentMillis; // current time
      ...
    }
  }
}



sono bloccato con la logica, come faccio a sapere se ho ancora un'ostacolo?
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 09, 2015, 10:06 pm
Code: [Select]

ho fatto un po' di modifiche usando un tempo iniziale:

int led = 12;
int trigger = 5;
int echo = 4;

void setup() {

  pinMode(led, OUTPUT);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);

  // put your setup code here, to run once:

}

void loop() {

  unsigned long startTime = 0;

  digitalWrite(trigger, LOW);

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

  long duration = pulseIn(echo, HIGH);
  long distance = 0.034 * duration / 2;

  if (distance < 10)
  {
    startTime = millis();
  }
  else {

    if (millis() - startTime > 5000) {
      digitalWrite(led, HIGH);
      delay(250);
      digitalWrite(led, LOW);
    }
  }
}



ho fatto qualche modifica ma ho ancora problemi
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: gpb01 on Dec 09, 2015, 10:19 pm
Guarda, secondo me devi affrontare la cosa diversamente ...

Scrivi una funzione che si occupa esclusivamente di misurare la distanza con il sensore ad ultrasuoni e fai ritornare a questa funzione il valore "true" se c'è un oggetto, "false" se non c'è.

Poi, nel loop(), la chiami e se ti ritorna "true" prendi il tempo (millis()) e continui a chiamarla fino a quando non ritorna "false" o fino ad un tempo massimo da te deciso (... timeout).

Hai così la misura del tempo che l'oggetto è stato davanti al sensore ...

E' un'idea eh ... poi vedi tu ...

Guglielmo
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: uwefed on Dec 10, 2015, 01:46 am
sono bloccato con la logica, come faccio a sapere se ho ancora un'ostacolo?
Forse quando il tempo del eco e percui la distanza del oggetto rilevato é sotto un certo valore??

Ciao Uwe
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 10, 2015, 11:54 am
dovrei quasi esserci:

Code: [Select]

  if ( distance < 10 ) {
    if ( startTime == 0 ) {
      // set startTime
      startTime = millis();
      digitalWrite(led1, HIGH);
    } else {
      if ( millis() - startTime > interval ) {  // check if longer than interval
        digitalWrite(led1, LOW);
        digitalWrite(led, HIGH);
      }
    }
  } else {
    // reset startTime = 0
    startTime = 0;
    digitalWrite(led, LOW);
    digitalWrite(led1, LOW);
  }
}
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: hyuma on Dec 10, 2015, 01:16 pm
riuscite a dirmi cosa sto sbagliando?

Code: [Select]

int led = 12;
int led1 = 9;
int trigger = 5;
int echo = 4;
long interval = 5000;
long curTime = 0;
unsigned long startTime = 0;


void setup() {

  pinMode(led, OUTPUT);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(led1, OUTPUT);


  // put your setup code here, to run once:

}

void loop() {

  digitalWrite(trigger, LOW);

  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);

  long duration = pulseIn(echo, HIGH);
  long distance = 0.034 * duration / 2;

  if (distance < 5) {

    if (startTime > 0) {
      curTime = millis();

      if (curTime - startTime > interval) {

        digitalWrite(led1, LOW);
        digitalWrite(led, HIGH);
      } else {

        Serial.println(startTime);
        digitalWrite(led, LOW);
      }
    } else {

      startTime = millis();
    }
  } else {
    startTime = 0;
    if (distance < 10) {

      digitalWrite(led1, HIGH);
      digitalWrite(led, LOW);
    } else {

      digitalWrite(led1, LOW);
      digitalWrite(led, LOW);
    }
  }
}
Title: Re: Sensore HC-SR04 e ostacolo davanti a sè per n-secondi
Post by: uwefed on Dec 10, 2015, 08:16 pm
riuscite a dirmi cosa sto sbagliando?
Sí, potrei dirtelo, ma non Ti piacerá. Decidi Tu cosa vuoi che faccia.
Ciao Uwe