Anfänger frage Ultraschall Distanzmessung

Hallo zusammen

Ich habe neu Angefangen und benötige etwas Hilfe.

ich möchte beim Einfahren in die Garage dass im Abstand zwischen 50 und 20 cm zur Wand eine LED für Ca. 1 Minute leuchtet. Die Led soll dann solange aus bleiben bis das Auto wieder aus und erneut einfährt.

Die Distanz Messung habe ich hinbekommen, die LED leuchtet. Leider geht sie nicht aus, der loop läuft durchgehend weiter.

Hat jemand Vorschläge wie ich das programmieren kann ?

tobi1981:
Hat jemand Vorschläge wie ich das programmieren kann ?

Ja.

Wenn Du Deinen Sketch zeigst, kann Dir besser geholfen werden.

Ansonsten meine allgemeine Antwort:
Mit dem Einschalten der LED merke Dir das in einer variablen und lösche diese, erst dann wenn das Fahrzeug wegfährt.

Danke werde es heute Abend nach Feierabend posten . Deine Variante mit der Variablen hatte ich schon überlegt, leider weiß ich nicht wie ich das programmiere, hat bei mir net geklappt. Vielen Dank für die Antwort.

Ich nehme an der Arduino läuft Tag und Nacht durch.

Es gibt eine function namens millis() die Millisekunden hochzählt. Der Zähler startet beim Einschalten des Stroms und zählt dann hoch bis ca 4 Milliarden Millisekunden. Das entspricht etwa 49,7 Tagen. Dann spring der Zähler wieder auf null so wie ein Tacho wenn er bei 999.999 km ankommen (würde)
Das zurückspringen auf null ist aber überhaupt kein Problem. Es gibt eine trickreiche Berechnung von Zeitunterschieden die sogar dann funktioniert wenn der Millisekundenzähler auf Null zurückgesprungen ist.

Die Zeitmessung wird gestartet wenn Abstand kleiner 50 cm.
Deine LED leuchtet bis die Zeitmessung 1 Minute ergibt. Dann LED ausschalten.
Das Einschalten soll erst wieder dann erfolgen wenn das Auto aus- und wieder eingefahren ist.

Dazu müsstest du jetz mal im Detail beschreiben wann der Ultraschallsensor wann welchen Abstand misst
fährt das Auto komplett am Sensor vorbei? = Sensor misst voll eingeparkt wieder Abstand größer 50cm?

viele Grüße Stefan

tobi1981:
Deine Variante mit der Variablen hatte ich schon überlegt, leider weiß ich nicht wie ich das programmiere, hat bei mir net geklappt.

Auch hier meine Standardantwort:
Denke abstrakt und schreibe auf, wie Du das willst.
Etwa so:

initialisiere Erkennungsvariable = FALSE
initialisiere Zeitvariable
initialisiere LED = OFF

im loop:
ist das Auto eingefahren UND ist Erkennungsvariable == FALSE
Ja?
   Zeitvariable = millis()
   Erkennungsvariable = TRUE
// hier ist der Teil beendet

ist Erkennungsvariable == TRUE UND millis()-Zeitvariable < Leuchtdauer 
Ja?
  LED = ON
Nein?
  LED = OFF
// hier ist der Teil beendet


ist Auto ausgefahren UND Erkennungsvariable == TRUE
Ja?
  Erkennungsvariable = FALSE

Dabei berücksichtige ich nicht, das das Auto ggfls. nach 30 sek ausfährt und die LED noch leuchten Soll, bis 60 sek um sind.
Grüße

``int trigger=7; //Trigger-Pin des Ultraschallsensors an Pin7
int echo=6; // Echo-Pim des Ultraschallsensors an Pin6
int LED=5; //Das Wort „LED“ steht für den Wert 5.

long dauer=0;
long entfernung=0;

void setup()
{
pinMode(LED, OUTPUT);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
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 >= 50 || entfernung <= 20)
{
digitalWrite(LED, LOW);
}
else

{
digitalWrite(LED, HIGH);
delay (60000);
}
delay(1000);

soweit bin ich gekommen.

tobi1981:
soweit bin ich gekommen.

geh mal auf deine Nachricht - unten auf modify und dann markiere den Code - oben links im Edior dann auf </> kliken und speichern. Dann ist der Code auch selektierbar und besser zu lesen.

So ungefähr?

int trigger = 7; //Trigger-Pin des Ultraschallsensors an Pin7
int echo = 6; // Echo-Pim des Ultraschallsensors an Pin6
int LED = 5; //Das Wort „LED" steht  für den Wert 5.

long dauer = 0;
long entfernung = 0;

// neu:
boolean Erkennung = false;
unsigned long lasttime;
unsigned long Einschaltzeit = 60000; // 60 sek

void setup()
  {
  pinMode(LED, OUTPUT);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  }
void loop()
  {
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH);
  entfernung = (dauer / 2) * 0.03432;
  // bis hierhin unverändert
  // Setzen der Variablen für nächste Bedingungen
  if ((entfernung < 50 && entfernung > 20) && (Erkennung == false))
    {
    lasttime = millis();
    Erkennung = true;
    }
  // LED schalten
  if ((Erkennung == true) && (millis() - lasttime < Einschaltzeit))
    {
    digitalWrite(LED, HIGH);
    }
  else
    {
    digitalWrite(LED, LOW);
    }
  // Auto fährt weg
  if (entfernung > 50)
    {
    Erkennung = false;
    }
  }

Vielen Dank für die Lösungsvorschläge, werde es heute Abend probieren.

@Stefan_L38
das Auto fährt beim Parken vorwärts auf den Sensor zu. d.h. wenn das Auto steht ist der Abstand zwischen 50 und 20 cm. Vielen Dank.

@my_xy_projekt
du hast boolean und unsigned benutzt was bedeuten bzw. bewirken diese ?

tobi1981:
du hast boolean und unsigned benutzt was bedeuten bzw. bewirken diese ?

bool / boolean hat zwei Zustände und kann dargestellt werden als false/true bzw. 0/1 bzw. low/high
unsigned ist ohne Vorzeichen - geht also nur mit positiven Zahlen.
Schau mal in die Referenz - Arduino IDE - unter Hilfe.
oder Online: Arduino-Referenz - Arduino-Referenz

Da Du offensichtlich noch ganz neu dabei bist, ein sehr gutes deutschsprachiges .pdf, das sich wegliest wie "geschnitten Brot"https://www.arduinoforum.de/code-referenz

Vielen lieben Dank. Ich melde mich wenn es funktioniert, bzw. wenn nicht. :slight_smile: