Hallo, es geht um einen Parkplatzzähler mit Ultraschallsensoren. Mit einem counter soll die Anzahl der freien Parkplätze angezeigt werden. Wenn ein Auto reinfährt soll 0 angezeigt werden und 1 wenn das Auto rausfährt.
Das Problem ist das nach jedem Durchgang die ein Parkplatz addiert wird. Wie könnte ich das lösen?
sketch:
int trigger1 = 10;
int echo1 = 9;
long dauer = 0;
long entfernung = 0;
int State = 0;
int Puls = 0;
int currentState = 0;
int previousState = 0;
bool counter = 0;
void setup()
{
Serial.begin (9600);
pinMode(trigger1, OUTPUT);
pinMode(echo1, INPUT);
}
void loop()
{
digitalWrite(trigger1, LOW);
delay(5);
digitalWrite(trigger1, HIGH);
delay(10);
digitalWrite(trigger1, LOW);
dauer = pulseIn(echo1, HIGH);
entfernung = (dauer / 2) * 0.03432;
Serial.print("Anzahl freie P: ");
Serial.println(counter);
if (entfernung >= 7 || entfernung <= 0)
{
Serial.println("Parkplatz 1 frei");
if (currentState != previousState) {
if (currentState == 1) {
counter = counter + 1;
Serial.println(counter);
}
}
}
else
{
Serial.println("Parkplatz 1 besetzt");
}
delay(1000);
}
Um die Richtung eines Gegenstands zu erfassen braucht es 2 Sensoren. Der zeitliche Ablauf der Erfassung ergibt die Richtung.
In deinem Fall da Du einen Sensor verwendest, der den Abstand erfaßt könntest Du in einer Parkbucht erfassen ob das Fahrzeug einfährt (Distanz wird kleiner) oder ausfährt( Distanz wird größer) Dementsprechend weißt Du ob der Parkplatz frei oder besetzt ist. Andererseits kannst Du den sensor auch als Präsenzsensor verwenden. Ist etwas im vernünftigen bereich da dann ist der Platz besetzt ansonsten nicht.
nur erläuterst du nicht, mit welcher Hardware du hoch zählst und mit welcher Hardware du runterzählst.
Wie Uwe schon angeregt hast, brauchst du entweder zwei Sensoren um eine Fahrtichtung zu erkennen, oder eine ausgeklügelte Programmlogik um ein Ein-/Ausfahren zu erkennen, oder drittens: zwei Separate sensoren - der eine bei der Einfahrt, der andere Bei der Ausfahrt.
Zeitnah beantworten kann man das nur wenn du eine schematische Zeichnung der Umgebungsbedingungen erstellst.
Ich wollte das nicht so kompliziert machen. Es soll raufzählen wenn der parkplatz frei ist. Also muss einfach die Bedingung (entfernung >= 7) erfüllt werden. Also gibt es einen Parkplatz und sobald der besetzt ist wird auf 0 runtergezählt.
Nicht zwingend. Wenn die Gesamtanzahl Plätze bekannt ist und klar Einfahrt und Ausfahrt von Fahrzeugen erfasst werden können, dann ist das reines Zählen. Das eigentliche Problem dürfte die Erfassung von Fahrzeugen und nicht Personen und deren Richtung sein.
Evtl. sollte man sich noch Gedanken um Speicherung bei Stromausfall (z.B. FRAM) machen.
Wie schnell soll es zählen? Selbst wenn "es" nur jede Sekunde zählt, hast du in einer Stunde 3600 freie Plätze. Was ich eigentlich meine: Mit deiner Aufgabenbeschreibung ist es schwierig. Wohl auch für dich, die Tipps zu verstehen.
Der TO will nicht reinfahren.
Er will wissen, wieviele seiner (7) Parkplätze noch frei sind.
Dazu gibt es die Variante mit den US-Sensoren.
Stelle ich ein Auto auf einen der (7) Stellplätze, ist die gemessene Entfernung recht kurz und der Platz belegt.
Ist das Auto weg ist der Platz frei, weil eben ganz weit weg gemessen wird...
Jetzt:
Summe aller Sensoren.
Und darüber alle Messwerte.
Alles ganz einfach - aber der TO hat mich ignoriert. Las ich andere machen
ah ok ich dachte echt es geht um einen großen Parkplatz . mit so 50-200 autos . na da kannst das echt mit US- sensoren machen sind ja nur 7 . meine frage wäre was ist wenn jemand dort steht und eine raucht .... mhh
#include <HCSR04.h>
HCSR04 hc(2, new int[6]{5, 6, 7, 8, 9, 10}, 6); //initialisation class HCSR04 (trig pin , echo pin, number of sensor)
void setup()
{
Serial.begin(9600);
}
void loop()
{
for (int i = 0; i < 6; i++)
Serial.println(hc.dist(i)); //return curent distance in serial for sensor 1 to 6
delay(60); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
}