ersten Ultraschallsensor Wert ausßer acht lassen

Hi Community,

ich bin ziemlicher Anfänger in der Arduino Welt.
so ich habe einen Ultraschallsensor, eine LED und einen Signalgeber. Wenn der Sensor einen Abstand unterschritten hat soll die Led blinken und der Signalgeber einen Ton abgeben und zwar solange bis er zurückgesetzt wird. so jetzt zum Problem: der erste Wert des Ultraschallsensors ist irgendwie bei 6 cm (muss er sich vielleicht erstmal hochfahren oder ähnliches ?) deswegen ist er schon direkt am Anfang am durchdrehen und macht das was er machen soll aber halt nicht so richtig. Hat jemand eine Idee wie ich den ersten Sensorwert außer acht lassen kann oder einen andren Vorschlag ? Danke :))

int led = 13;
int sound = 4;

int trigger = 9; 
int echo = 10; 

long dauer = 0; 
long entfernung = 0; 
boolean state = 0;

void setup()
{
  Serial.begin (9600); 
  pinMode(trigger, OUTPUT); 
  pinMode(echo, INPUT); 
  pinMode(2, OUTPUT);
  pinMode(sound, OUTPUT);
  digitalWrite(2, HIGH);
  
}
void loop()
{
  digitalWrite(trigger, LOW); 
  delay(5);
  digitalWrite(trigger, HIGH); .
  delay(10); 
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH); .
  entfernung = (dauer / 2) * 0.03432; 
  if (entfernung >= 500 || entfernung <= 0) …
  {
    Serial.println("Kein Messwert"); 
  }
  else 
  {
    Serial.print(entfernung); 
    Serial.println(" cm"); 

  }
  delay(100); .

  if ( entfernung < 40) {
    state = 1;
  }
  if (state == 1) {

    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);

    digitalWrite(sound, LOW);
    delay(500);
    digitalWrite(sound, HIGH);
    delay(500);

  }
  Serial.println(state); 


}

Du schreibst zwar nicht welchen Ultraschall-Sensor du verwendest, beim sehr viel verwendeten Ultraschall-Modul HC-SR04 ist es jedenfalls in der Tat so, dass das erste Messergebnis oft keinen "gültigen" Wert liefert (= es ergibt sich eine unrealistische kurze Distanz).
Dieses Problem lässt sich meist recht einfach beheben, indem eine kleine Verzögerung in setup eigebaut wird (z.B. 200 Millisekunden). Das reicht aus und das erste Messergebnis liefert dann einen gültigen und realistischen Wert.

In deinem Programm also etwa so:

int led = 13;
int sound = 4;
int trigger = 9;
int echo = 10;
long dauer = 0;
long entfernung = 0;
boolean state = 0;

void setup() {
  Serial.begin (9600);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(2, OUTPUT);
  pinMode(sound, OUTPUT);
  digitalWrite(2, HIGH);
  delay(200);    // <<------ 
 }

void loop() ...
und so weiter

Es gibt natürlich auch andere Methoden um den ersten Messwert zu "unterdrücken", aber die beschriebene ist in Verbindung mit dem erwähnten Ultraschall-Modul (zumindest meine) Methode der Wahl. :slight_smile:

Hi

Beim HC-SR04nutze ich den Median, seit ich Den hier kennen lernen durfte.
Eine Lib dazu versteckt sich in der Lib SharpDistSensor, dort allerdings fest auf INT 'verdrahtet'.

Meine Änderung besteht drin, daß ich den Datentyp der Messwerte per #define festlege und so jedes Vorkommen vom Ziel-Typ ersetze.

MfG

MedianFilter_Typ_anpassbar.zip (3.3 KB)

uxomm:
Dieses Problem lässt sich meist recht einfach beheben, indem eine kleine Verzögerung in setup eigebaut wird (z.B. 200 Millisekunden). Das reicht aus und das erste Messergebnis liefert dann einen gültigen und realistischen Wert.

gute idee aber nicht mehr nötig der Sensor ist nicht so toll wie ich dachte ich nehme jetzt eine lichtschranke mit IR-Diode und Fotodiode Danke ^^

seedey:
gute idee aber nicht mehr nötig der Sensor ist nicht so toll wie ich dachte ich nehme jetzt eine lichtschranke mit IR-Diode und Fotodiode Danke ^^

Na, ist kommt wohl darauf an, was man machen möchte und wie man es angeht.