Seite 1 von 3
#1 Bau einer Geschwindigkeitsmessanlage von Dominik B 05.05.2016 19:00

avatar

Ich grüße,

möchte euch eine kleine Feiertagsbastelei vorstellen. Zum Einmessen meiner Fahrzeuge bediente ich mich bisher einer Stoppuhr. Das hat natürlich den Nachteil, dass die Messung nicht ganz exakt wird, weil die Messstrecke nicht immer auf die Millisekunde genau gestoppt werden kann, hier ist der Mensch einfach nicht "hochauflösend" genug. Am besten ist also eine automatische Messstrecke, die über zwei Kontakte die Zeit misst, die das Fahrzeug für eine bestimmte Distanz benötigt.

Nach kurzem Suchen bin ich fündig geworden. Es kommen zwei TCRT5000 Infrarot Lichtschranken zum Einsatz. Diese bekommt man zum Stückpreis von etwa 30 Cent. Zum Anzeigen wird ein LC Display HD44780 mit 2 X 16 Zeichen verwendet. Diese Komponenten werden an ein Arduino Uno angeschlossen.

Nun muss natürlich noch ein Code geschrieben werden. Nach ein wenig probieren ist er fertig:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
 
#include <LiquidCrystal.h>
#include "TimerOne.h"
 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
 
int Sensor_A = A0;
int Sensor_B = A1;
int Sensor_1 = 900;
int Sensor_2 = 900;
int Zeitmesser = 0;
int Loeschen = 0;
int Start = 0;
int Stop = 0;
int Geschwindigkeit = 0;
 
void setup()
{
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");
 
Timer1.initialize(50000);
Timer1.attachInterrupt(Zeitkonstante);
 
Serial.begin(9600);
}
 
void Zeitkonstante()
{
// Start der Zeit
if (Start == 1 || Start == 2 && Stop == 0)
{
Zeitmesser++;
}
 
// Zeit zum Löschen des Displays auf Grundstellung
if (Loeschen > 0)
{
Loeschen++;
}
/*
// Ausgabe der Sensorwerte
Serial.println("Sensor_1");
Serial.println(Sensor_1);
Serial.println("Sensor_2");
Serial.println(Sensor_2);
*/
}
 
void loop()
{
Sensor_1 = analogRead(Sensor_A);
Sensor_2 = analogRead(Sensor_B);
 
// Messung wenn Zug aus Richtung 1 kommt
if (Sensor_1 < 500 && Sensor_2 > 500 && Start == 0)
{
Start = 1;
lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("Messung");
lcd.setCursor(3,1);
lcd.print("gestartet");
}
// Messung gestoppt
if (Sensor_2 < 500 && Start == 1)
{
Stop = 1;
}
 
// Messung wenn Zug aus Richtung 2 kommt
if (Sensor_2 < 500 && Sensor_1 > 500 && Start == 0)
{
Start = 2;
lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("Messung");
lcd.setCursor(3,1);
lcd.print("gestartet");
}
// Messung gestoppt
if (Sensor_1 < 500 && Start == 2)
{
Stop = 1;
}
 
// Ausgabe der Geschwindigkeit
if (Stop == 1 && Loeschen == 0)
{
// v = s / t; s = Streckenlänge (in cm) / 100 * Maßstab * 3,6 * 20 (Auflösung des Interrupts)
Geschwindigkeit = 3182 / Zeitmesser;
Zeitmesser = 0;
Loeschen = 1;
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Geschwindigkeit:");
if (Geschwindigkeit < 100)
{
lcd.setCursor(4,1);
lcd.print(Geschwindigkeit);
lcd.setCursor(7,1);
lcd.print("km/h");
}
else
{
lcd.setCursor(4,1);
lcd.print(Geschwindigkeit);
lcd.setCursor(8,1);
lcd.print("km/h");
}
}
 
// Displays löschen, Grundstellung
if (Loeschen > 150)
{
Start = 0;
Stop = 0;
Zeitmesser = 0;
Loeschen = 0;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");
}
 
// Ausgabe wenn beide Sensoren auslösen = Gleis ist belegt
if (Sensor_1 < 500 && Sensor_2 < 500 && Start == 0)
{
Start = 3;
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Gleis ist belegt");
}
 
// beide Sensoren wieder in Grundstellung = Gleis ist nicht mehr belegt
if (Sensor_1 > 500 && Sensor_2 > 500 && Start == 3)
{
Start = 0;
Zeitmesser = 0;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");
}
 
// wenn nach dem Auslösen des ersten Sensors eine Zeit von 40 Sekunden überschritten wird: Grundstellung und Ausgabe "Messung ungültig"
if (Zeitmesser > 800)
{
Zeitmesser = 0;
Loeschen = 1;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Ung");
lcd.setCursor(6,0);
lcd.print(char(245));
lcd.setCursor(7,0);
lcd.print("ltige");
lcd.setCursor(4,1);
lcd.print("Messung");
}
}
 
 



Der Programmablauf ist folgender:

Die Messung funktioniert in beide Richtungen. Sobald sich an eine der beiden Lichtschranken ein Objekt nähert (also ein Fahrzeug vorbei fährt), wird die Zeit gestartet. Wenn die zweite Lichtschranke befahren wird, wird die Zeit gestoppt und der Zeitwert in Form der Geschwindigkeit in km/h ausgegeben.

Für die Berechnung der Geschwindigkeit muss eine Formel angewendet werden. Die bekannte Formel v=s/t muss dazu angepasst werden. "s" wird in m/s angegeben und muss dadurch schon mal mit 3,6 multipliziert werden. Daher wird die Streckenlänge in cm durch 100 geteilt. Das Ergebnis wird mit dem Maßstab multipliziert und abschließend noch mit der Anzahl der Interrupts pro Sekunde multipliziert. Bei meinem Code sind es 20, was eine Auflösung von 50 ms ergibt. Daher lautet die Formal am Ende "s = Streckenlänge (in cm) / 100 * Maßstab * 3,6 * 20". Bei mir besitzt die Messstrecke eine Länge von 50,8 cm, so dass sich der Wert 3182 ergibt.

Dann sind noch ein paar zusätzliche Funktionen notwendig. Wenn beide Sensoren gleichzeitig von einem Fahrzeug verdeckt werden, gibt das Display "Gleis belegt" aus. Eine Messung ist dann erst wieder möglich, wenn beide Lichtschranken frei gefahren sind. Sollte nach dem Auslösen der ersten Lichtschranke eine Zeit von 40 Sekunden überschritten werden und ein Auslösen der zweiten Lichtschranke aus bleibt, wird die Grundstellung hergestellt und am Display erscheint die Anzeige "Ungültige Messung". Die Zeit entspricht in etwa einer Geschwindigkeit von 0,6 km/h.

Der Aufbau schaut schließlich wie folgt aus:

Die beiden Lichtschranken werden auf eine Platine gelötet und diese auf ein am Winkel befestigt Holzstück geklebt.



Ein Testaufbau:





Die beiden Sensoren werden schließlich im Schattenbahnhof am Durchfahrgleis montiert. Nach der Montage muss der Abstand exakt ausgemessen werden und gemäß obiger Formel der Faktor "s" berechnet werden.





Für das Display wird im Stellwerk auf der unteren Ebene eine Halterung gebaut.







Gruß

Dominik

#2 RE: Bau einer Geschwindigkeitsmessanlage von ruebchen 05.05.2016 19:07

avatar

Nette Bastelei aber braucht man das wirklich, ich für meinen Teil sicherlich nicht. Gefahren wird so schnell wie ich das mag also mit mäßiger Geschwindigkeit ob das nun 30,5 km/h sind oder 32,4 ist Wurscht.

#3 RE: Bau einer Geschwindigkeitsmessanlage von BR365 05.05.2016 19:09

avatar

Ich bevorzuge meinen Märklin Messwagen, für DC-Modellbahner gibt es etwas ähnliches inzwischen auch von Esu.



Märklin Einheitsmesswagen 49960 - Umbau auf DCC-Decoder

Das schöne ist, dass man damit auch mal eben die Strecke messen kann, die ein Zug gefahren ist, in echten Zentimetern oder in maßstäblich umgerechneten Kilometern oder auch die Fahrzeit oder absolut die vergangene Zeit.

#4 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 05.05.2016 19:18

avatar

Hallo Stephan,

da hast du was falsch verstanden. Es geht nicht darum zu wissen, ob ein Fahrzeug gerade 74,9 oder 78,1 km/h fährt. Die Anlage ist zum Einmessen der Fahrzeuge. Meine Digitalzentrale besitzt eine Tachoanzeige, die linear bis zur maximalen Fahrstufe mitläuft. Wenn ich also die Maximalgeschwindigkeit einer Lok auf z.B. vorbildliche 120 km/h einstelle, so kann ich bei Druck auf z.B. 53 km/h davon ausgehen, dass das Fahrzeug mit vielleicht +- 2 km/h exakt 53 km/h fährt. Stichprobenhaft probiere ich das immer mal aus und bin erstaunt, wie exakt das wirklich funktioniert. Ich persönlich finde das sehr komfortabel. Ich wähle ein Fahrzeug an, wähle die Geschwindigkeit mit der es fahren soll und mit der fährt es dann auch. Geht dann etwas mehr ins vorbildliche. Nach Gefühl fahren kann man zwar auch - aber muss man nicht... Ich habe mir für meine Anlage auch sinnvolle Maximalgeschwindigkeiten, z.B. im Schattenbahnhof, bei Weichenstraßen, Einfahrten in Bahnhöfe überlegt und die fahre ich dann auch. Zudem sind alle Loks gemäß dem Vorbild unterschiedlich eingestellt. Da wüsste ich nicht sofort wenn ich den Regler aufdrehe, wie schnell das Fahrzeug dann auch fahren wird.

Hallo Moritz,

das ist natürlich auch eine schicke Sache und ich hatte vor einem Jahr auch überlegt mir den ESU Messwagen zu holen. Aber was kostet der? 180 Euro? Für hin und wieder Einmessen von Fahrzeugen? Der Spaß hat mich jetzt etwa 12 Euro gekostet, das war es mir dann doch eher wert. Ansonsten wäre ich bei meiner Stoppuhr geblieben. Schön ist zwar die Funktion die Streckenlänge zu ermitteln, aber ich habe es mal vor paar Jahren Pi mal Daumen mit einem Zollstock ausgemessen und weiß das nun auch. Daher wäre mir so ein Messwagen einfach zu teuer.

Gruß

Dominik

#5 RE: Bau einer Geschwindigkeitsmessanlage von H0bahner 05.05.2016 19:36

avatar

Hallo Dominik,

das ist eine super Idee, werde ich nachbauen.
Kann man gut verwenden um die CV 5 und 6 im Decoder anzupassen.
Lässt sich dann auch gut verwenden um die Lok´s in Traincontroller einzumessen.

Bei Fragen melde ich mich, Danke.

#6 RE: Bau einer Geschwindigkeitsmessanlage von ruebchen 05.05.2016 19:38

avatar

Hallo Dominik

ich fahre wie gesagt meine Güterzüge mit ca 30 km/h die Personenzüge ein wenig schneller alles nach Gefühl. Da ich mit der Multimaus fahre geht das so ganz gut. So eine Zentrale wie Du hab ich ja nicht, die sind mir einfach noch zu teuer. Gefahren wird Digital, alles andere läuft bei mir Analog. Das Digitalzeug von Roco habe ich günstig bei 321 meis gekauft aus geschlachteten Startpackungen. Der Messwagen von ESU würde mich auch reizen aber wie Du schon sagst 180 Euro da bekomme ich eine nagelneue Soundlok für das Geld.

#7 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 05.05.2016 19:42

avatar

Hallo Stephan,

na klar, mit der Multimaus geht das natürlich nicht. Daher musst du deine Loks zwangsläufig auch nicht einmessen.

Hallo Uwe,

gerne doch.

Gruß

Dominik

#8 RE: Bau einer Geschwindigkeitsmessanlage von BR365 05.05.2016 20:42

avatar

Hallo Dominik,
interessant wäre Deine Messeinrichtung aber dennoch für die Messung der Vmin, denn die lässt sich mit dem Messwagen nicht zuverlässig messen, dafür löst der Radsensor nicht fein genug auf.

Der Preis ist in der Tat ein Manko, den Märklin habe ich relativ günstig gebraucht bekommen und dann auf DCC umgebaut. Und so ist er es mir dann schon wert gewesen.

Gruß
Moritz

#9 RE: Bau einer Geschwindigkeitsmessanlage von elbmarschbahn 06.05.2016 00:01

Tolle Idee, Dominik. Sowas erleichtert die Einstellung der Decoder.

Da du den Code eingestellt hast, erlaube ich mir mal die Frage, ob du auch einen Anschlußlan einstellen könntest ?

Ich würde mir solch eine Anlage gerne nachbauen.

#10 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 06.05.2016 07:42

avatar

Grüß dich,

schön, dass dir die Idee gefällt. Anschlussplan kann ich erstellen.

Gruß

Dominik

#11 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 06.05.2016 18:43

avatar

Ich mache es mir mal einfacher:

Wie man die IR Diode anschließt steht hier:
http://blog.huntgang.com/2014/06/17/ardu...uild-ir-sensor/

Und wie man das Display anschließt steht hier:
https://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

Einziger Unterschied zu meinem Anschluss: Ich habe LCD RS an Pin 7 und LCD Enable an Pin 6 angeschlossen. Die beiden Sensoren liegen auf A0 und A1.

Gruß

Dominik

#12 RE: Bau einer Geschwindigkeitsmessanlage von elbmarschbahn 07.05.2016 21:26

Danke dir.

#13 RE: Bau einer Geschwindigkeitsmessanlage von BJA 08.05.2016 12:45

avatar

Hallo Dominik und Alle,

die "Bastelei" inkl. C-Code gefällt mir

Als MoBahner der mit PC-steuert, habe ich das eingebaut über S88-Kontakte (Punkt und/oder Belegtmelder) und Einmessen macht der TrainController oder WinDigiPet.

Was ist mit Einmessen gemeint, Vmax am Decoder einstellen?

#14 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 08.05.2016 14:36

avatar

Hallo Bernhrad,

richtig, Vmax am Decoder einstellen. Den Vmax Wert bekommt dann auch die ECoS eingetragen und schon kann man mit richtigem Tacho fahren.

Gruß

Dominik

#15 RE: Bau einer Geschwindigkeitsmessanlage von BJA 08.05.2016 15:12

avatar

#16 RE: Bau einer Geschwindigkeitsmessanlage von dr iv 31.05.2016 21:50

Hallo Dominik,

vielen Dank für die Idee.
Mein Testnachbau funktioniert. Ich habe das Progamm noch etwas nachbaufreundlicher gemacht, damit man die im Nachbau gegebenen Werte nur als Konstanten angeben muss und das Programm berechnet dann alles. Auch habe ich die Schwellwerte für die Sensoren, die Zeiten als Konstanten angelegt, so dass man sie einfacher an die Bedürfnisse anpassen kann.
Ich will die Anlage und das Programm aber noch etwas unter realen Bedingungen testen und optimieren.

Viele Grüße
Manfred

#17 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 01.06.2016 09:18

avatar

Hallo Manfred,

na klar, gerne doch. Wenn du das Programm überarbeitet hast und es gut tut stelle es doch hier ein.

Gruß

Dominik

#18 RE: Bau einer Geschwindigkeitsmessanlage von dr iv 01.06.2016 10:24

Hallo Dominik,

das hatte ich vor, will es aber noch weiter bearbeiten, da es noch etwas Kraut und Rüben ist. Meine letzten beruflichen Aktivitäten bzgl. C sind auch schon wieder mehr als 16 Jahre her. Mir fehlte auch noch die Genehmigung des Autors .

Ich hatte mich z.B. über den Wert 500 im Programm gewundert. Wo kommt der her. Momentan habe ich alles auf einem Experimentierbrett aufgebaut und Simuliere den Zug mit den Fingern. Da mir ein 100Ohm wiederstand fehlte habe ich einen 180 Ohm genommen.
Nun weiss ich, dass die 500 die Ansprechschwelle der Lichtschanke ist. Da das vom Widerstand, Einbauort mit dem Umweltlicht, Abstand der Fahrzeugen zur Lichtschranke abhängen kann, möchte ich das noch real testen und vergleichen, ob sich der Wert bei mir auch so ergibt.
Kann also noch ein kleines Weilchen dauern.
Muss mir wohl auch noch paar Prozessorplatinen besorgen. Hat jemend die mal aus China bezogen? Für 1 € kann man ja einen ganzen Sack bestellen.

Was hast Du denn zur Spannungsversorgung verwendet? Zuerst hing es am PC. Dann habe ich das USB-Laderät meines Handy ausprobiert. Momentan habe ich nur 15V Gleichspannung auf der Anlage, was zuviel sein dürfte.

Hatte auch mal den Ultraschallsensor dran. Zum Spielen sah es richtig gut aus. Da werde ich auch mal weitermachen.

Viele Grüße
Manfred

#19 RE: Bau einer Geschwindigkeitsmessanlage von dr iv 01.06.2016 13:58

Hallo Dominik,

ich habe die jetzige Version mal noch etwas bereinigt.
Ich mag keine globalen Variable, da man bei gößeren Sachen schnell den Überblick verliert und sich u.U. Fehler einbaut, die man so leicht vermeiden kann. das geht dann los, wenn man vielleicht noch mas mit dem DCC Schalten macht und dann die Programme zusammenmischt. Hier spielen natürlich jetzt auch einige subjektive Vorlieben und Erfahrungen eine Rolle.

Ich habe am Anfang des Programms alle Konstanten gesammlt. So kann man jetzt leicht die Länge der Messstrecke, den Massstab, die Ports oder den Schwellwert für die Sensoren einstellen.

Ich möchte beide Dinge noch ausbauen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 

#include <LiquidCrystal.h>
#include "TimerOne.h"

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
 
#define MessstreckeMm 508 // Länge der Messstrecke in mm
#define Massstab 87 // Massstab
#define Konstante 36 // Umrechnungsfaktor m/s in km/h 3,6 * 10
#define Interrups 20 // Anzahl Interrups pro s
 
#define SensorA A0 // Port Sensor A
#define SensorB A1 // Port Sensor A
#define SchwellwertSensor 500 // Schwellwert Sensor A uns B für Belegtmeldung
#define MaxZeitMessen 800 // maximale Zeitdauer einer Messung -> ungültig 40 s * Interrups
#define MaxZeitLoeschen 150 // Maximale Zeitdauer bis zum Löschen wenn belegt
 
int Sensor_1 = 900;
int Sensor_2 = 900;
int MessstreckeKm;
int Zeitmesser = 0;
int Loeschen = 0;
int Start = 0;
int Stop = 0;

void setup()
{
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");

Timer1.initialize(50000);
Timer1.attachInterrupt(Zeitkonstante);

// 1000 Massstab * 10 für Konstante als int; bei 508mm MessstreckeMn = 3182
MessstreckeKm = long( long( MessstreckeMm ) * long( Massstab ) * long( Konstante ) * long( Interrups ) ) / 10000;
 
Serial.begin(9600);

// Ausgabe Messstrecke
// Serial.println("MessstreckeKm");
// Serial.println(MessstreckeKm);
}

void Zeitkonstante()
{
// Start der Zeit
if (Start == 1 || Start == 2 && Stop == 0)
{
Zeitmesser++;
}

// Zeit zum Löschen des Displays auf Grundstellung
if (Loeschen > 0)
{
Loeschen++;
}
 
// Ausgabe der Sensorwerte
// Serial.println("Sensor_1");
// Serial.println(Sensor_1);
// Serial.println("Sensor_2");
// Serial.println(Sensor_2);
}

void loop()
{
int Geschwindigkeit = 0;

Sensor_1 = analogRead(SensorA);
Sensor_2 = analogRead(SensorB);

// Messung wenn Zug aus Richtung Sensor 1 kommt
if (Sensor_1 < SchwellwertSensor && Sensor_2 > SchwellwertSensor && Start == 0)
{
Start = 1;
lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("Messung");
lcd.setCursor(3,1);
lcd.print("gestartet");
}

// Messung stoppen, wenn Zug Sensor 2 erreicht hat
if (Sensor_2 < SchwellwertSensor && Start == 1)
{
Stop = 1;
}

// Messung wenn Zug aus Richtung Sensor 2 kommt
if (Sensor_2 < SchwellwertSensor && Sensor_1 > SchwellwertSensor && Start == 0)
{
Start = 2;
lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("Messung");
lcd.setCursor(3,1);
lcd.print("gestartet");
}

// Messung stoppen, wenn Zug Sensor 1 erreicht ha
if (Sensor_1 < SchwellwertSensor && Start == 2)
{
Stop = 1;
}

// Ausgabe der Geschwindigkeit
if (Stop == 1 && Loeschen == 0)
{
// v = s / t; s = Streckenlänge angepasst an Modellbahndedingungen ; t Anzahl Zeitabschnitte
Geschwindigkeit = MessstreckeKm / Zeitmesser;

Zeitmesser = 0;
Loeschen = 1;
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Geschwindigkeit:");
if (Geschwindigkeit < 100)
{
lcd.setCursor(4,1);
lcd.print(Geschwindigkeit);
lcd.setCursor(7,1);
lcd.print("km/h");
}
else
{
lcd.setCursor(4,1);
lcd.print(Geschwindigkeit);
lcd.setCursor(8,1);
lcd.print("km/h");
}
}

// Displays löschen, Grundstellung
if (Loeschen > MaxZeitLoeschen)
{
Start = 0;
Stop = 0;
Zeitmesser = 0;
Loeschen = 0;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");
}

// Ausgabe wenn beide Sensoren auslösen = Gleis ist belegt
if (Sensor_1 < SchwellwertSensor && Sensor_2 < SchwellwertSensor && Start == 0)
{
Start = 3;
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Gleis ist belegt");
}

// beide Sensoren wieder in Grundstellung = Gleis ist nicht mehr belegt
if (Sensor_1 > SchwellwertSensor && Sensor_2 > SchwellwertSensor && Start == 3)
{
Start = 0;
Zeitmesser = 0;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bereit f");
lcd.setCursor(11,0);
lcd.print(char(245));
lcd.setCursor(12,0);
lcd.print("r");
lcd.setCursor(2,1);
lcd.print("eine Messung");
}

// wenn nach dem Auslösen des ersten Sensors eine Zeit von 40 Sekunden überschritten wird: Grundstellung und Ausgabe "Messung ungültig"
if (Zeitmesser > MaxZeitMessen)
{
Zeitmesser = 0;
Loeschen = 1;
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Ung");
lcd.setCursor(6,0);
lcd.print(char(245));
lcd.setCursor(7,0);
lcd.print("ltige");
lcd.setCursor(4,1);
lcd.print("Messung");
}
}

 
 



Das Programm ist getestet und ist lauffähig.

Viele Grüße
Manfred

#20 RE: Bau einer Geschwindigkeitsmessanlage von Dominik B 01.06.2016 14:31

avatar

Hallo Manfred,

richtig, 500 sind der Schwellwert bis der Sensor auslöst. Wenn er weiter weg steht, muss der Wert natürlich vergrößert werden. Ich habe den Wert natürlich so gewählt, dass Züge auf dem Nachbargleis nicht erkannt werden. Das muss man je nach Örtlichkeit austesten. Dein Programm schaut auf den ersten Blick gut aus. Mit den Defines zu Beginn macht es das übersichtlicher oder zumindest für Nachahmungen einfacher verständlich. Toll gemacht!

Gruß

Dominik

Xobor Einfach ein eigenes Forum erstellen
Datenschutz