Hallo,
ich habe eine Lichtschranke mit einem LDR und einer Laserdiode gebaut.
Gesteuert wird das ganze über einen Attiny 84.
Damit soll verzögert eine Kamera ausgelöst werden.
Hier ist der Code:
Hi
>Woran kann das liegen?
daran
>ich habe eine Lichtschranke mit einem LDR und einer Laserdiode gebaut.
Als Empfänger solltest du mindestens einen Fototransistor nehme. LDRs
sind zu langsam.
MfG Spess
Georg M. schrieb:> Dieser sollte dafür passen oder?
der SFH 300 FA-3/4 ist dank tageslichtfilter für lichtschranken wohl
besser geeignet.
als lichtquelle dann natürlich ne ir led/laser.
Georg M. schrieb:> sodass kurze Unterbrechungen> nicht erkannt werden.
Was sind "kurze Unterbrechungen"?
Wie kurz wird noch erkannt und wie kurz soll erkannt werden?
Ein LDR kann durchaus Unterbrechungen im ms-Bereich erkennen (z.B.
10ms). Nur für die Übertragung höherfrequenter Signale ist er nicht
geeignet.
Wenn du die Laserdiode mit einer höheren Frequenz modulieren würdest, um
unabhängig vom Umgebungslicht zu sein, dann wäre ein Fototransistor
zwingend notwendig, um die Frequenz auch empfangen zu können. Wenn du
aber einen gleichmäßigen Lichtstrom aussendest, reicht ein LDR mit
seiner typ. Ansprechzeit von ein paar ms aus.
Es sein denn, du willst die Lichtschranke für die Zählung von sehr
schnellen Ereignissen (mehr als 100 Ereignisse pro Sekunde) benutzen.
Dann ist auch wieder ein Fototransistor angesagt.
Georg M. schrieb:> Kurze Unterbrechungen erzeuge ich, wenn ich so schnell ich kann mit> meiner flachen Hand durch die Lichtschranke "haue".
Kannst du das auch mal in Zahlenwert+Einheit fassen?
Weil: wir wissen nicht, ob du ein trainierter KungFu-Kämpfer mit einer
schmalen asiatischen Hand bist oder eine Coach-Potato mit Griffeln wie
Klodeckel. Der Unterschied zwischen diesen beiden Extremen dürfte
bezüglich der Unterbrechungszeit eine ganze Größenordnung ausmachen.
Um dir das mal zu erklären: Das SI-System der Maßeinheiten wurde
eingeführt, weil Ellen, Füße, Höfe, Kerzen, Pferde und ähnliches halt
nicht genügen, um einen Sachverhalt hinreichend genau zu beschreiben.
Das sollte eigentlich auch bis zu Arduino-Benutzern schon durchgedrungen
sein...
c-hater schrieb:>> Kurze Unterbrechungen erzeuge ich, wenn ich so schnell ich kann mit>> meiner flachen Hand durch die Lichtschranke "haue".>> Kannst du das auch mal in Zahlenwert+Einheit fassen?
Informationen verlangen ist ja schön und gut... aber man kanns auch
durchaus übertreiben.
Meine Güte, beweg deine Hand ein bisschen hin und her und schätz die
Zeit. Wie soll dir der TO das in Zahlen + Einheit ausdrücken? Denkst du
er hat eine Messeinrichtung für sowas zuhause? Ein bisschen den Kopf
einschalten genügt hier...
Wird das hier im Forum langsam zum Trend, dieses ständige verlangen nach
Informationen welche man sich mit ein bisschen Menschenverstand auch
selbst erdenken kann?
Mit der Hand schnell durch die Lichtschranke bekommt man schon recht
kurze Zeiten im Bereich 1/100 Sekunde. Mit 1 Finger wären auch unter
1/1000 s drin.
Je nachdem wie die Empfindlichkeit eingestellt ist, kann das für einen
LDR zu langsam sein. Das Signal vom LDR geht halt nicht gleichmäßig
zurück, sondern erst relativ schnell und dann immer langsamer. Es kommt
auch auf die LDR Type. Ein Fototransistor kann da schon gut als 1:1
Ersatz dienen.
Das Programm ist zwar wegen fehlender externer Teil nicht so ganz zu
verstehen, aber es sieht sehr langsam aus. Da sind massive Pausen drin
wo nichts reagiert - da kann noch fast eine Schildkröte durch laufen
ohne das die Anspricht.
Georg M. schrieb:> delay(verzoegerung);> ..> delay(ausloesezeit);> ..> delay(1000);
Also wenn ich sowas sehe, sträuben sich mir die Nackenhaare hoch.
Da braucht man nicht zu fragen, warum was zu langsam ist.
Peter Dannegger schrieb:> Also wenn ich sowas sehe, sträuben sich mir die Nackenhaare hoch.> Da braucht man nicht zu fragen, warum was zu langsam ist.
Nachdem das Programm im Auslöseblock ist, dürfte es schnurz-piep-egal
sein, wie viele Delays da folgen. Nachdem die Bedingung
W.M. schrieb:> Die Frage war doch, warum kurze Unterbrechungen nicht erkannt werden.
Wäre mal interessant, wie lange das dauert:
1
lcd.setCursor(0,1);
2
lcd.print((verzoegerung/10)*10);
3
lcd.print(" mSekunden");
Sicher länger als ...
>>> ... wenn ich so schnell ich kann mit>>> meiner flachen Hand durch die Lichtschranke "haue".
So "durchzuhauen" schaffe ich locker in weniger als 20ms. Das habe ich
gerade mal ausprobiert mit einen LDR. Ein Oszilloskop, und sei es noch
so schäbig (hier war es mein altes Hameg HM307, weil das Tektronix
gerade anderweitig beschäftigt ist), ist hier Gold wert...
W.M. schrieb:> Die Frage war doch, warum kurze Unterbrechungen nicht erkannt werden.
Wo in dem Code sollen denn die Unterbrechungen erkannt werden?
Kommentare sollen nicht die Operation nochmal nennen, sondern warum man
etwas macht.
Z.B. was soll diese Zeile bewirken:
Georg M. schrieb:> if((millis()-potimillis) > potieinleseintervall){
"potimillis" wird nirgends geschrieben, ist aber vermutlich vom Compiler
mit 0 initialisiert.
Peter Dannegger schrieb:> "potimillis" wird nirgends geschrieben, ist aber vermutlich vom Compiler> mit 0 initialisiert.
Das ist vermutlich nicht beabsichtigt, stört aber auch nicht. Sobald der
µC länger als potieinleseintervall Millisekunden läuft, wird er sich
mit der Analogeingabe beschäftigen. Aber wer weiß wie lange der ganze
Skalierungszirkus mit /map()/, die Berechnung von verzoegerung und die
LCD-Ausgabe dauern.
Schon mit einem kleiner LA für unter 20 Euro aus der Bucht ließen sich
diese Fragen beantworten.
Erstmal Danke für die vielen Antworten!
An c-hater:
siehe Beitrag von San Lue
An Ulrich:
Auf jeden Fall werde ich den LDR durch einen Phototransistor ersetzen
An Peter Dannegger:
Sobald die delays ausgeführt werden hat die Lichtschranke auch schon
ausgelößt und soll dann auch wirklich für eine Sekunde garnicht mehr
auslösen daher stört delay da nicht
Wie W.M. es auch erkannt hat.
An Lothar Miller:
Interessant, dass du die Möglichkeit hast, dies zu messen. 20 ms ist
schon flott. Den LC-Display hätte ich halt schon gerne zur
Zeiteinstellung.
Ich aktuallisiere den aber nur jede fünftel Sekunde um möglichst freie
"Zeitfenster" für die Auslösung zu haben
An Peter Dannegger und W.M.:
Danke! da habe ich ein potimillis = millis(); vergessen
Was ist ein LA ?
Georg M. schrieb:> Was ist ein LA ?
Sowas:
https://www.google.de/search?q=Logic+analyzerGeorg M. schrieb:> ich habe eine Lichtschranke mit einem LDR und einer Laserdiode gebaut.
Eins noch: wie ist der LDR am uC angeschlossen?
Wenn ich du wäre, dann würde ich (weil ich ja ein Oszilloskop habe)
einmal pro Durchlauf einen Pin auf high und sofort wieder auf low
togglen. Dann könnte ich sehen, wie lange so ein Programmzyklus dauert.
Das ist eine extrem wichtige Information, man sieht auf jeden Fall
sofort, wenn da lange Ausreisser drin sind...
Siehe Anschluss des LDR im Anhang.
Dort wo Sensor ist, habe ich den LDR angeschlossen.
Diesen würde ich dann durch einen Phototransistor ersetzen.
Vielleicht noch VCC und GND tauschen.
132 schrieb:> Es gibt auch LDRs die einige Sekunden brauchen bis sie reagieren ... nur> für die Größenordnung.
Das hängt meist ganz entscheidend von der Grundhelligkeit ab.