Hallo zusammen
Ich bin neu hier und möchte mich erst Mal für die vielen tollen Artikel
bedanken, welche mir seit Monaten schon viele Hilfe geboten hatten.
Nun habe ich ein Problem, dessen Lösung ich nirgends gefunden hatte.
Ich will via Infrarot (nicht mit Laser, denn dann kann es mit
Kinderaugen Probleme geben) eine Lichtschranke bauen, welche über die
Straße und zurück (Katzenauge) senden kann (für ein Seifenkistenrennen).
Ich habe mich für eine 38kHz Frequenz entschieden, da diese auf große
Distanz von "Störgeräuschen" gefiltert werden kann.
Dazu habe ich mit dem OS-0038K-K 940nm IR-Empfänger versucht ein
kontinuierliches Signal zu empfangen. Leider bricht der Empfänger nach
einer gewissen Zeit ab (was für Fernbedienungen mit NEC oder RC5) auch
erwünscht ist. Das kontinuierliche Signal erzeuge ich einfach mit einem
NE555 und einer 940nm IR-Sendediode, dies scheint auch problemlos zu
klappen. PS: Der Empfänger ist auch ganz in Ordnung (also nicht defekt),
denn ein Signal der Fernseh-Fernbedienung kann ich via Arduino
problemlos empfangen und auch decodieren.
Ich habe nun verschiedene Optionen für meine Lichtschranke, welche ich
einschlagen könnte, doch wäre ich um Ideen froh, welche jemand schon
umgesetzt hatte.
Hier einige Optionen, welche ich mir ausgedacht habe:
* einen IR-Empfänger zu suchen, welcher ein kontinuierliches 38kHz
Signal empfangen kann. Evtl. dann mit dem Arduino (welchen ich sowieso
für die Zeitmessung benötige) das Signal zu "decodieren".
* Einen IR-Empfänger zu suchen, welcher einfach 940 nm (oder 950 nm)
empfangen kann und dann via Schaltung die Trägerfrequenz (ca. 38kHz)
selbst herausfiltern (wäre hier mit Schaltung oder mit dem Arduino
einfacher?) Hat hierzu jemand Erfahrung?
* Den Sender oder den Empfänger via Multivibrator kontinuierlich zu
unterbrechen, damit das Signal im OS-0038K-K neu gestartet wird. Das hat
dann aber eine Messungenauigkeit der Lichtschranke zur Folge (?).
Hat jemand Erfahrungen oder alternative oder ganz unkonventionelle
Vorschläge?
PS: Die Zeitmessung mit dem Arduino habe ich berits umgesetzt. Fehlt mir
also nur noch die Lichtschranke.
Hier der Arduino-Code, den ich für die Anzeig auf dem LCD-Display
verwende:
1
/**
2
* Stoppuhr
3
* 3. Mai 2015.
4
* Autor: loetwasser@gress.ly
5
*
6
*
7
* Original aus der "LiquidCrystal Library: hello world"
8
* Originalautoren: Davis A. Mellis, Limor Fried und Tom Igoe
9
* Ergänzung zu einer Stoppuhr (philipp gressly freimann)
10
*
11
* Zwei Buttons: Start (PIN 7) und Stopp (PIN 8) steuern
12
* das verhalten.
13
14
LCD-Pins (rechts Arduino Leonardo):
15
LCD
16
1 GND
17
2 5V (aus Arduino)
18
3 zur Mitte eines 5k Ohm Drehreglers (= Kontrast)
19
4 zu Arduino PIN 12
20
5 GND
21
6 zu Arduino PIN 11
22
7-10 leer
23
11 zu Arduino PIN 5
24
12 zu Arduino PIN 4
25
13 zu Arduino PIN 3
26
14 zu Arduino PIN 2
27
15 GND
28
16 via 390 Ohm zur 5V Quelle des Arduino.
29
30
Start und stopp sind mit
31
Arduino PIN 7 bzw 8 verbunden, dahinter ein klassischer
32
Pulldown Widerstand (33k gewählt)
33
*/
34
35
#define BUTTON_START_PIN 7
36
#define BUTTON_STOPP_PIN 8
37
38
// include the library code:
39
#include<LiquidCrystal.h>
40
41
42
/* SONDERZEICHEN */
43
#define SAND1_CHAR 0
44
bytesanduhr1[8]={
45
B11111,
46
B11111,
47
B01110,
48
B00100,
49
B01010,
50
B10001,
51
B10001,
52
};
53
54
#define SAND2_CHAR 1
55
bytesanduhr2[8]={
56
B10001,
57
B11111,
58
B01110,
59
B00100,
60
B01010,
61
B10001,
62
B11111,
63
};
64
65
#define SAND3_CHAR 2
66
bytesanduhr3[8]={
67
B10001,
68
B10001,
69
B01110,
70
B00100,
71
B01010,
72
B11111,
73
B11111,
74
};
75
76
#define SAND4_CHAR 3
77
bytesanduhr4[8]={
78
B10001,
79
B10001,
80
B01010,
81
B00100,
82
B01110,
83
B11111,
84
B11111,
85
};
86
87
// initialize the library with the numbers of the interface pins
88
LiquidCrystallcd(12,11,5,4,3,2);
89
90
booleanisRunning=false;
91
longstarttime=0;
92
longmesszeit=0;
93
94
/* Umlaute ä, ü und ö des DEM 16216 aus dem Datasheet */
95
constcharae=225;
96
constcharue=245;
97
constcharoe=239;
98
99
100
voidsetup(){
101
pinMode(BUTTON_START_PIN,INPUT);
102
pinMode(BUTTON_STOPP_PIN,INPUT);
103
// Der DEM16216 (in Barcelona bei der DIOTRONIC gekauft)
104
// ist ein zweizeiliges Display mit je 16 Zeichen.
105
lcd.begin(16,2);
106
lcd.print("Dr"+(String(ue))+"cke Start");
107
108
lcd.createChar(SAND1_CHAR,sanduhr1);
109
lcd.createChar(SAND2_CHAR,sanduhr2);
110
lcd.createChar(SAND3_CHAR,sanduhr3);
111
lcd.createChar(SAND4_CHAR,sanduhr4);
112
113
//lcd.write(byte(0));
114
115
}
116
117
118
// Ist start gedrückt?
119
booleanbuttonStart(){
120
returndigitalRead(BUTTON_START_PIN);
121
}
122
123
124
// Ist stopp gedrückt?
125
booleanbuttonStopp(){
126
returndigitalRead(BUTTON_STOPP_PIN);
127
}
128
129
voidzeile0Print(Stringausgabe){
130
lcd.setCursor(0,0);
131
lcd.print(ausgabe);
132
}
133
134
135
voidloop(){
136
if(buttonStart()){
137
isRunning=true;
138
if(0==starttime){
139
zeile0Print("Dr"+(String(ue))+"cke stopp");
140
starttime=millis();
141
messzeit=0;
142
}
143
}
144
145
if(buttonStopp()){
146
isRunning=false;
147
if(0==messzeit){
148
messzeit=millis()-starttime;
149
starttime=0;
150
zeile0Print("Dr"+(String(ue))+"cke start");
151
}
152
}
153
154
lcd.setCursor(0,1);
155
Stringout;
156
if(isRunning){
157
lcd.setCursor(1,1);
158
out=makeMSZHString(millis()-starttime);
159
}elseif(buttonStart()&&buttonStopp()){
160
out="Sensorfehler";
161
}else{
162
lcd.setCursor(1,1);
163
out=makeMSZHString(messzeit);
164
}
165
lcd.print(out);
166
delay(4);// Die Genaigkeit der 100stel stimmt somit nicht ganz, dennoch
167
// wirkt das Display nun ruhiger.
168
}
169
170
// füge für einstellige Zahlen eine führende Null ein.
Lophi Kolbenbrenner schrieb:> Ich will via Infrarot (nicht mit Laser, denn dann kann es mit> Kinderaugen Probleme geben) eine Lichtschranke bauen, welche über die> Straße und zurück (Katzenauge) senden kann (für ein Seifenkistenrennen).
Was spricht gegen Laser?
Die Dinger sind sehr praktisch, wenn man sie richtig anwendet. Für eine
augensichere Lichtschranke muss man nur dafür sorgen, dass der Laser
augensicher ist. Für kleine Strecken von ein paar Metern, reicht ein
Lasermodul der Laserklasse (1 .. 2M).
Bei IR darfst du allerdings nur Laserklasse 1/1M verwenden, weil der
Lidschlussreflex nicht funktioniert.
Erst für größere Entfernungen (Kilometer) wird man den Strahl eines
etwas kräftigern Lasers aufweiten müssen, so dass die Bestrahlungsstärke
trotzdem niedrig genug bleibt.
> Dazu habe ich mit dem OS-0038K-K 940nm IR-Empfänger versucht ein> kontinuierliches Signal zu empfangen.
Das funktioniert nicht, weil die Module eine automatisch Pegelanpassung
besitzen, um sich an die Signalstärke anzupassen. Um sie als
Lichtschranke zu verwenden, darfst man immer nur kurze Pulspakete (typ.
600µs lang) senden und muss dazwischen eine vergleichbar lange Pause
machen (s. Datenblatt).
Lophi Kolbenbrenner schrieb:> * Den Sender oder den Empfänger via Multivibrator kontinuierlich zu> unterbrechen, damit das Signal im OS-0038K-K neu gestartet wird. Das hat> dann aber eine Messungenauigkeit der Lichtschranke zur Folge (?).
p.s.
Die 1/1000 Sekunde werden die Kinder verschmerzen können.
Lophi Kolbenbrenner schrieb:> Ich will via Infrarot (nicht mit Laser, denn dann kann es mit> Kinderaugen Probleme geben) eine Lichtschranke bauen, welche über die> Straße und zurück (Katzenauge) senden kann (für ein Seifenkistenrennen).> Ich habe mich für eine 38kHz Frequenz entschieden, da diese auf große> Distanz von "Störgeräuschen" gefiltert werden kann.
Hallo Lophi,
für diese Distanz benötigst Du ziemlich sicher eine zusätzliche Optik
zumal die Verluste über das Katzenauge ziemlich hoch sind. Selbst mit
Spiegel werden hin und zurück 5+5m nicht einfach. Wenn Du ein bischen
mehr investieren kannst ist sowas Dein Freund:
http://www.conrad.de/ce/de/product/507163/Reflexions-Lichtschranke-CY-100-Panasonic-CY-192B-P-Y-C-Reflexions-Lichtschranke-Reichweite-4-m?ref=list
rgds
6A66 schrieb:> Lophi Kolbenbrenner schrieb:>> Ich will via Infrarot (nicht mit Laser, denn dann kann es mit>> Kinderaugen Probleme geben) eine Lichtschranke bauen, welche über die>> Straße und zurück (Katzenauge) senden kann (für ein Seifenkistenrennen).>> Ich habe mich für eine 38kHz Frequenz entschieden, da diese auf große>> Distanz von "Störgeräuschen" gefiltert werden kann.>> Hallo Lophi,>> für diese Distanz benötigst Du ziemlich sicher eine zusätzliche Optik> zumal die Verluste über das Katzenauge ziemlich hoch sind. Selbst mit> Spiegel werden hin und zurück 5+5m nicht einfach. Wenn Du ein bischen> mehr investieren kannst ist sowas Dein Freund:> http://www.conrad.de/ce/de/product/507163/Reflexions-Lichtschranke-CY-100-Panasonic-CY-192B-P-Y-C-Reflexions-Lichtschranke-Reichweite-4-m?ref=list>> rgds
Besten Dank für die Antwort. Mit dem Katzenauge haben wir noch nicht
rumgespielt. Wir haben jedoch mit Kartonröhren über 5m geschafft.
Eventuell muss ich den Sender dann separat an einer 9V-Batterie am
anderen Ende der Straße platzieren. Vielleicht geht es ja auch, die
Ziellinie mit Strohballen auf 2.5m zu beschränken...
Die Panansonic Reflexions-Lichtschranke sieht jedoch vielverprsechend
aus. Doch im Moment will ich nicht viel investieren. Wenn die Kinder
löten dürfen, sind alle "happy". Wenn es jedoch wegen der Distanz
Probleme gibt, komme ich natürlich nicht darum herum und etwas zu Löten
finden wir dann ja wohl auch noch ;-)
Ich melde mich wieder, wenn wir mit den Kartonröhren und dem Katzenauge
nicht weiterkommen.
Wolfgang schrieb:> Lophi Kolbenbrenner schrieb:>> * Den Sender oder den Empfänger via Multivibrator kontinuierlich zu>> unterbrechen, damit das Signal im OS-0038K-K neu gestartet wird. Das hat>> dann aber eine Messungenauigkeit der Lichtschranke zur Folge (?).>> p.s.> Die 1/1000 Sekunde werden die Kinder verschmerzen können.
Müsste ich ausprobieren, ob eine 0.001s Unterbruch wirklich reichen, um
den Empfänger "zu resetten". Doch das stimmt natürlich. Bis zu 0.01
Sekunden kann nicht mal die Stoppuhr, die ich für Arduino geschrieben
habe unterscheiden. Somit kommt diese Lösung tatsächlich auch in Frage.
Besten Dank.
Wolfgang schrieb:> Lophi Kolbenbrenner schrieb:>> Ich will via Infrarot (nicht mit Laser, denn dann kann es mit>> Kinderaugen Probleme geben) eine Lichtschranke bauen, welche über die>> Straße und zurück (Katzenauge) senden kann (für ein Seifenkistenrennen).>> Was spricht gegen Laser?> Die Dinger sind sehr praktisch, wenn man sie richtig anwendet. Für eine> augensichere Lichtschranke muss man nur dafür sorgen, dass der Laser> augensicher ist. Für kleine Strecken von ein paar Metern, reicht ein> Lasermodul der Laserklasse (1 .. 2M).
Danke für die Antwort. Hatte genau wegen der Augen der Kinder (welche
beim Löten und Ausrichten des Lasers helfen wollen) keinen Laser
gewählt.
Habe mir aber mal den folgenden auf den Merkzettel gelegt:
http://www.conrad.ch/ce/de/product/816476/Lasermodul-Punkt-Rot-1-mW-Laserfuchs-LFD650-1-129x20#>> Bei IR darfst du allerdings nur Laserklasse 1/1M verwenden, weil der> Lidschlussreflex nicht funktioniert.
Hoppla, daran hatte ich gar nicht gedacht. Besten Dank!
>> Erst für größere Entfernungen (Kilometer) wird man den Strahl eines> etwas kräftigern Lasers aufweiten müssen, so dass die Bestrahlungsstärke> trotzdem niedrig genug bleibt.>>> Dazu habe ich mit dem OS-0038K-K 940nm IR-Empfänger versucht ein>> kontinuierliches Signal zu empfangen.>> Das funktioniert nicht, weil die Module eine automatisch Pegelanpassung> besitzen, um sich an die Signalstärke anzupassen. Um sie als> Lichtschranke zu verwenden, darfst man immer nur kurze Pulspakete (typ.> 600µs lang) senden und muss dazwischen eine vergleichbar lange Pause> machen (s. Datenblatt).
Als Erstes werde ich doch mal versuchen, mit einem Multivibrator Lücken
in den Sender oder in die Empfängerschaltung zu bauen ... eine
Möglichkeit sehe ich gerade noch, den Empfänger doppelt an den Arduino
anzuschließen. Einmal um das Signal zu empfangen (klar), aber zusätzlich
einmal, um vor dem Empfang den IR-Detector während einer kleinen Pause
auszuschalten. Leider "verbrauche" ich dann weitere zwei PINS am Arduino
(einen für die Start-Linie und einen für die Ziellinie), doch wenn das
funktionieren kann, dann wäre ich schon fast am Ziel...
Danke jedenfalls allen für die konkreten und prompten Antworten.
Loφ
Lophi Kolbenbrenner schrieb:> Müsste ich ausprobieren, ob eine 0.001s Unterbruch wirklich reichen, um> den Empfänger "zu resetten".
Im Datenblatt des OS-0038K-K ist unter "Test method" das Signal mit den
600µs Bursts gezeigt. Warum sollten die dort irgendwelchen Mist
reinschreiben? Viele andere Fernsteuerempfänger benehmen sich genauso
(z.B. TSOP31238 o.ä.) Auch ist das kein Reset, sondern die Pulspakete
sorgen dafür, dass die Schaltschwelle nicht zu hoch rutscht.
> Als Erstes werde ich doch mal versuchen, mit einem Multivibrator Lücken> in den Sender oder in die Empfängerschaltung zu bauen ...
Den Job, also die ganze Signalerzeugung, kannst du locker dem µC mit
aufs Auge drücken (38kHz über Timer, Paketlängen z.B. durch Mitzählen im
Interrupt). Du brauchst nur einen Transistor/MOSFET der den
LED-/Laserstrom steuert.
Lophi Kolbenbrenner schrieb:> * Den Sender via Multivibrator kontinuierlich zu> unterbrechen, damit das Signal im OS-0038K-K neu gestartet wird.
Das ist die sinnvollste Methode. Der Empfänger mag zwar 1msec zu spät
reagieren, aber das ist nicht wichtig.
Wolfgang schrieb:> Mini Laser Dot Diode Module
Was willst du mit dem Quatsch, wenn der Empfänger ein gepulste 38kHz
Signal haben will ? Die Billigmodule haben keinen Modulationseingang und
es ist unbekannt, ob man sie so schnell über die Versorgungsspannung
modulieren kann.
Wolfgang schrieb:> Im Datenblatt des OS-0038K-K ist unter "Test method" das Signal mit den> 600µs Bursts gezeigt. Warum sollten die dort irgendwelchen Mist> reinschreiben? Viele andere Fernsteuerempfänger benehmen sich genauso> (z.B. TSOP31238 o.ä.) Auch ist das kein Reset, sondern die Pulspakete> sorgen dafür, dass die Schaltschwelle nicht zu hoch rutscht.
Die TSOP sind im Datenblatt mit einer Mindestlänge von 10 Träger-Zyklen
je Burst und Pause angegeben, die Maxima liegen deutlich über 1000.
Mit 19 Pulsen Burst und 19 Pulsen Pause ergibt das bei 38kHz exakt 1ms
Auflösung.
Man kann die Frequenz eines üblichen Quarzes zwar nicht exakt auf 38kHz
herunterteilen, der systematische Fehler von 125PPM bei 16MHz dürfte für
diesen Zweck aber vernachlässigbar sein.
Genauer geht es, wenn man pro Millisekunde jeweils zwei Pulse oder
Pausen um jeweils einen Takt verlängert. Noch besser wäre eine
Trägerfrequenz von 40kHz (20/20 Zyklen), weil man die ganzzahlig aus
einem Quarz mit glatter Frequenz herunterteilen kann.
Moin Moin
Ich habe die Stoppuhr nun fast fertig. Fehlen mir noch ein IR-Sender und
ein Empfänger, die ich noch bestellen muss. Und natürlich ein langes
langes Kabel, um die Start-Messung gleich mit der End-Messung zu
verkabeln ;-)
Den Empfänger habe ich nun so programmiert, dass er innerhalb des
Arduino-loop()-Zyklus erst die IR-Diode einschaltet (s. Quellcode).
Etwas wartet und dann 100 Lesevorgänge tätigt (dann den Empfänger sofort
wieder vom Strom nehmen). Erreicht er innerhalb der 100 Lesezyklen vier
oder mehr Signale, so gehe ich davon aus, dass der IR-Sender immer noch
sendet.
Mit einem Katzenauge habe ich es auch probiert, doch mit sehr schlechtem
Erfolg. Hier wäre ein solches, wie es die Geometer zur Straßenvermessung
brauchen sinnvoll. Ich habe nun den Weg gewählt, dass ich den Sender
komplett vom Empfänger trenne und mit einer 9V-Batterie am anderen
Straßenende betreibe. Mit einem Kartonrohr kann ich relativ genau auf
den Sender zielen und erhalte ein beinahe kontinuierliches Signal.
Allen also nochmals besten Dank!
Loφ
Lophi Kolbenbrenner schrieb:> Hier wäre ein solches, wie es die Geometer zur Straßenvermessung> brauchen sinnvoll.
Du meinst einen Tripelspiegel? Sowas sollte man mit etwas
mechanischem Geschick auch selber bauen können.
Harald Wilhelms schrieb:> Lophi Kolbenbrenner schrieb:>>> Hier wäre ein solches, wie es die Geometer zur Straßenvermessung>> brauchen sinnvoll.>> Du meinst einen Tripelspiegel? Sowas sollte man mit etwas> mechanischem Geschick auch selber bauen können.
Ja genau: ein Tripelspiegel. Glasschneider sollte ich irgendwo noch
haben ;-)
Lophi Kolbenbrenner schrieb:> Mit einem Katzenauge habe ich es auch probiert, doch mit sehr schlechtem> Erfolg. Hier wäre ein solches, wie es die Geometer zur Straßenvermessung> brauchen sinnvoll.Harald Wilhelms schrieb:> Du meinst einen Tripelspiegel? Sowas sollte man mit etwas> mechanischem Geschick auch selber bauen können.
Die sogenannten Katzenaugen sind Tripelspiegel. Allerdings aus Kosten-
gründen nicht aus Glas, sondern aus Kunststoff. Und ich halte es für
illusorisch, die notwendige Präzision durch manuelles Verkleben von
"Spiegelscherben" zu erreichen. Über den Daumen gepeilt muß man die
rechten Winkel jeweils mit ca. 0,03° (respektive 1,7 Bogenminuten)
Toleranz treffen, damit man auf 1m Abstand maximal 1mm Seitenabweichung
beim reflektierten Strahl hat.
Wenn es mit "Katzenaugen" nicht funktioniert, dann wahrscheinlich weil
welche aus ungeeignetem Material verwendet wurden. Entweder ist die
Reflexion für IR nicht gut genug oder das Material schluckt selber schon
IR. Aber da es IR-Lichtschranken mit Reflektoren nach dem Katzenaugen-
Prinzip gibt, muß es auch passendes Material geben.