Go Down

Topic: ersten Ultraschallsensor Wert ausßer acht lassen (Read 277 times) previous topic - next topic

seedey

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 :))
Code: [Select]
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);


}

uxomm

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:
Code: [Select]
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. :)
Always decouple electronic circuitry.

postmaster-ino

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
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

seedey

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 ^^

HotSystems

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.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up