Lichtschranke

Gast #3117012
Lesenswert?

Hallo liebe User

Ich habe eine Frage bezüglich einer Lichtschranke. Natürlich gibt es 
viele Schaltungen dafür, ich möchte es allerdings mit einem Attiny 
realisieren. Die Frage ist, mit welchem Bauteil/Teilschaltung realisiere 
ich das am besten?
LDR, Fotodiode oder Fototransistor? Ausgelöst werden soll sie durch die 
Unterbrechung eines roten Laserpointers (ich weiß, gefährlich). Um 
Umgebungslich abzuhalten werde ich den Empfänger in ein schwarzes Rohr 
verlegen, welches so lang seine wird, dass nur der Laserstrahl senkrecht 
draufscheinen kann.
Bei allen Schaltungen wird noch ein Widerstand benötigt, kann dieser 
auch ein Poti sein um die Empfindlichkeit einstellen zu können? Ich 
möchte möglichst ein High oder Low Signal auslesen können um dann eine 
Led zu schalten.

Vielleicht hat ja jemand ne Idee, ansonsten bleibt mir nur das "Try and 
Error" Prinzip.
Gast #3117018
Lesenswert?

Try and error ist Blödsin.

LDR sind langsam und träge.
Fototransistor mit OP als Verstärker ist wohl das beste.

Es gibt fertige Bausätze oder solls von Grund auf selbst gekauft, 
gelötet, geändert sein?
Gast #3117063
Lesenswert?

Ich möchte das schon gerne alles selber machen, sodass ich später auch 
noch was verändern kann (softwareseitig). Ich hab sowas schonmal für ein 
Mikrofonvorverstärker gebaut um eine Analoge Vu Anzeige ansteuern zu 
können. Das müsste eigendlich das selbe Prinzip sein.

Beitrag "analog vu meter"

Die Frage ist nur ob ich da einen festen Wert, also High und Low 
rausbekomme. Funktioniert sowas nicht mit einem Schmittrigger?
Gast #3117194
Lesenswert?

Ist es nicht auch möglich einfach eine Zehnerdiode oder zwei standart 
Dioden zwischen Phototransistor und Eingangspin zu schalten? Dann habe 
ich ja einen festen Spannungspunkt ab dem High erkannt wird.
Gast #3126274
Lesenswert?

Ich habe jetzt eine Schaltung gebaut, welche genau das tut was ich 
brauche. Jedoch funktioniert mein Programm nicht so wie es soll.

Mir scheint ich hab das mit den Eingängen des ATTINY noch nicht ganz 
verstanden. Untenstehend mein Programm. Wenn ich es einschalte fängt es 
sofort an zu blinken im 0.3 Hertz Takt. Sonst nichts. Das Programm ist 
teilweise aus Tutorials zusammengeschnippelt.

Wäre cool wenn ihr mal einen Blick drüber werfen könntet.

1
 ; Ports Setzen
2

3
     ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der Konstanten 0xFF
4
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
5
 
6
     ldi r16, 0b00000011 ; (LED/laser als Ausgang, Empfänger als Eingang) 
7
     out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben Laser/led on
8

9
     
10
Loop3:                   ; auf Unterbrechung warten
11

12
     in  r16,PINB        ; PINB lesen und Wert in r16 Laden
13
   
14
     SBRC R16,2          ;wenn bit 2 in r16 low ist(Empfänger unterbrochen)
15

16
  rjmp loop3             ; überspringen falls Empfänger nicht mehr high ist 
17

18

19
   
20

21
     ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der Konstanten 0xFF
22
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
23
 
24
     ldi r16, 0b00001000 ; (LED/laser gehen aus)
25
     out PORTB, r16      ;  und schaltet Pieper=pin 3 geht an) 
26
  
27

28
ende:
29

30
  rjmp ende
#3126350
Lesenswert?

Steffen schrieb:
> Hallo liebe User
>
> Ich habe eine Frage bezüglich einer Lichtschranke. Natürlich gibt es
> viele Schaltungen dafür, ich möchte es allerdings mit einem Attiny
> realisieren.

Also da solltest Du mindestens einen Vierkernprozessor mit 3GHz
oder noch besser ein komplettes Rechenzentrum
http://images.computerwoche.de/images/computerwoche/bdb/1840727/890.jpg
nehmen.
Gruss
Harald
Gast #3126417
Lesenswert?

Steffen schrieb:

> Ich habe eine Frage bezüglich einer Lichtschranke. Natürlich gibt es
> viele Schaltungen dafür, ich möchte es allerdings mit einem Attiny
> realisieren. Die Frage ist, mit welchem Bauteil/Teilschaltung realisiere
> ich das am besten?
> LDR, Fotodiode oder Fototransistor?

Empfänger für IR-Fernbedienungen. Z.B.:

www.reichelt.de/index.html?ACTION=3;ARTICLE=107208

> Ausgelöst werden soll sie durch die
> Unterbrechung eines roten Laserpointers (ich weiß, gefährlich). Um
> Umgebungslich abzuhalten werde ich den Empfänger in ein schwarzes Rohr
> verlegen, welches so lang seine wird, dass nur der Laserstrahl senkrecht
> draufscheinen kann.

Da brauchst du dann auch keinen Laser und keine aufwendigen 
Abschirmmaßnahmen gegen Fremdlicht. LED als Sender reicht, muß eben bloß 
moduliert werden, z.B. mit einem 555er oder dem kleinsten greifbaren 
ATtiny.

Übrigens kann man auch Laserpointer modulieren, aber das ist nicht so 
ganz einfach und nicht immer ohne Änderungen am Innenleben zu erreichen.
Gast #3126513
Lesenswert?

Wie schon gesagt, wüsste ich nicht wie ich einen Infrarotstrahl so stark 
bündeln kann, dass ich 100m überbrücken kann. Ansonsten hätte ich das 
wie von dir beschrieben gemacht.

Aber trotzdem danke für diese sinnvolle Antwort
Gast #3126617
Lesenswert?

Steffen schrieb:

> Wie schon gesagt, wüsste ich nicht wie ich einen Infrarotstrahl so stark
> bündeln kann, dass ich 100m überbrücken kann.

"Wie schon gesagt"? Wo? In diesem Thread jedenfalls nicht. Noch 
nirgendwo war da die Rede von der gewünschten Reichweite und schon 
garnicht davon, daß diese 100 m betragen soll.
Gast #3126686
Lesenswert?

Steffen schrieb:
> ldi r16, 0xFF       ;lade Arbeitsregister r16 mit der Konstanten 0xFF

So ein Kommentar ist ziemlich nutzlos, weil er genau das selbe sagt, wie 
der Assemblerbefehl. Viel interessanter wäre, wozu r16 benutzt wird und 
warum gerade die Konstante 0xFF geladen werden soll.

Steffen schrieb:
> Wie schon gesagt, wüsste ich nicht wie ich einen Infrarotstrahl so stark
> bündeln kann, dass ich 100m überbrücken kann.
Ein Infrarotstrahl läßt sich mit Spiegeln und Linsen genauso bündeln, 
wie sichtbares Licht.
Hast du deinen Laserpointer schon mal nach 100m angeguckt? Der wird auf 
die Enfernung auch nicht mehr ganz so punktförmig aussehen.
Persönliche Seite #3126710
Lesenswert?

> Hast du deinen Laserpointer schon mal nach 100m angeguckt? Der wird auf
> die Enfernung auch nicht mehr ganz so punktförmig aussehen.

Jetzt lass ihn doch.
er will Laserpointer, er bekommt Laserpointer.

Und ich diskutiere auch nicht, dass ein "Laser Klasse 2" dafuer nicht 
geeignet ist und warum.

Dies:

> Ich habe jetzt eine Schaltung gebaut, welche genau das tut was ich
> brauche. Jedoch funktioniert mein Programm nicht so wie es soll.

ist doch wohl klar....also entweder Du hilfst ihm dabei oder laesst es 
sein.

Gruss

Mcihael
Gast #3126730
Lesenswert?

Das euch das so fertig macht mit dem Laserpointer hätte ich ja nie 
gedacht. Und ja nach 100 metern ist der nicht mehr genau, das ist für 
mich mehr oder weniger ein max Wert.

Die Idee dahinter ist, den Strahl über Spiegel umzuleiten und mit 
Desinfektionsspray sichtbar zu machen und dann zu versuchen dadurch zu 
kommen ohne ihn zu berühren, deshalb auch das Abschalten als Schutz fürs 
Auge.

Ich mag halt Filme.

Offensichtlich hätte ich das vorher erläutern sollen.
Gast #3126798
Lesenswert?

Wie "spontan" schon ausgeführt hat, bietet sich ein Phototransistor mit 
Verstärkerteil an. Um ein "scharfes", eindeutiges HIGH-LOW-Signal für 
den Mikrocontroller zu erhalten, kann man zB einen Schmitt-Trigger (zB 
CD4093) verwenden.
Gast #3126834
Lesenswert?

Um noch mal zum Softwareproblem zurückzukommen:

Du hast anscheinend die Funktion von DDR, PORT und PIN noch nicht 
verinnerlicht.

Im Detail beschreiben ist das im Datasheet
http://www.atmel.com/Images/doc2543.pdf  (Hier für den ATTiny 2313)

DDR  : Data Direction. LOW steht für Input und HIGH für Output.

Da ich mir selbst nicht mehr sicher war, habe ich mir mal eine Übersicht 
der vier Zustände zusammengestellt.

Der Zustand des Pins (das Beinchen, nicht verwechseln mit PIN-Register) 
ist:

      | DDR    | DDR
      | LOW    | HIGH
------------------------
PORT  | hoch-  | LOW
LOW   | ohmig  |
------------------------
PORT  | Pullup | HIGH
HIGH  |        |


Grundsätzlich würde ich dir empfehlen, zuerst eine LED über einen Taster 
(oder auch eine Drahtbrücke) an einem Input-Pin zu kontrollieren, damit 
du sicher bist, den Code im Griff zu haben.
Dann kannst du den Taster durch deinen Detektor ersetzen und 
kontrollieren, ob du den Strahl zuverlässig erkennst. (Diesen Modus 
brauchst du sicher auch, wenn du deine Spiegel ausrichtest.)

Und dann kannst du anfangen, den Rest deines Codes zu stricken und 
Sirenen heulen zu lassen, wenn ein Einbrecher kommt :-)

Viel Spaß bei diesem Projekt!
Gast #3126884
Lesenswert?

spontan schrieb:
> Try and error ist Blödsin.

Das sagst du als Produkt einer Evolution, die auf "Trial und Error" 
beruht?

Es kostet halt seine Anzahl von Versuch. Aber wer nicht zielgerichteter 
arbeiten kann, kommt damit mit viel Glück innerhalb seiner Lebenszeit 
auch ans Ziel.
Gast #3126918
Lesenswert?

Ich habs jetzt abgeändert und am Simulator vom avr Studio funktioniert 
es genauso wie es soll, in der Schaltung jedoch nicht.
Mein Problem bei den Tutorials ist, dass die immer erläutern, PORTA als 
Ausgang und PORTB als Eingang. Der ATTiny hat aber nur einen PORT.
Kann es auch sein, dass der Microcontroller sich am Ende selbst zurück 
setzt? Aufgrund der Endlosschleife.
1
     ldi r16, 0b00000011      
2
     out DDRB, r16       ; Inhalt von r16 ins Register DDRB ausgeben
3
 
4
     ldi r16, 0b00000011 ;LED/laser als Ausgang,Empfänger als Eingang 
5
     out PORTB, r16     ;r16 ins IO-Register PORTB ausgeben Laser/ledon
6

7

8
Loop3:                   ; auf Unterbrechung warten
9

10
     in  r16,PINB        ; PINB lesen und Wert in r16 Laden
11
   
12
     SBRS R16,2       ;wenn bit 2 in r16 High (Empfänger unterbrochen)
13

14
  rjmp loop3             ; überspringen falls Empfänger nicht mehr high 
15

16
loop4:   
17

18
     ldi r16, 0b00001011
19
     out DDRB, r16
20

21
     ldi r16, 0b00001000 ; LED/laser gehen aus
22
     out PORTB, r16      ; und schaltet Pieper=pin 3 geht an) 
23
  
24

25
ende:
26

27
  rjmp ende
#3126925
Lesenswert?

Steffen schrieb:
> Ich habs jetzt abgeändert und am Simulator vom avr Studio funktioniert
> es genauso wie es soll, in der Schaltung jedoch nicht.
> Mein Problem bei den Tutorials ist, dass die immer erläutern, PORTA als
> Ausgang und PORTB als Eingang. Der ATTiny hat aber nur einen PORT.

Ja und?

Du setzt im DDRB das Bit 3 auf 1  und damit ist am Port B der Pin PB3 
auf Ausgang geschaltet.

Wo ist da jetzt das Problem?
Du hast doch Einzelbitbefehle. Ob die jetzt am Port A und Port B 
angewendet werden oder nur am Port B ist doch Jacke wie Hose.

AVR-Tutorial: IO-Grundlagen
#3126931
Lesenswert?

>      ldi r16, 0b00000011
>      out DDRB, r16       ; Inhalt von r16 ins Register DDRB ausgeben
>
>      ldi r16, 0b00000011 ;LED/laser als Ausgang,Empfänger als Eingang
>      out PORTB, r16     ;r16 ins IO-Register PORTB ausgeben Laser/ledon
>
>
> Loop3:                   ; auf Unterbrechung warten
>
>      in  r16,PINB        ; PINB lesen und Wert in r16 Laden
>
>      SBRS R16,2       ;wenn bit 2 in r16 High (Empfänger unterbrochen)

Ein auf Eingang geschalteter Portpin ist nicht automatisch auf 0.
Ein auf Eingang geschalteter Portpin, an dem nichts hängt, fängt sich 
jedes dahergelaufene elektromagnetische Feld ein und je nach Tageszeit, 
Sonnenstand, Höhe des Badewasser in der Wanne und Lauf der 
Kaffeemaschine nebenan ist der 0 oder 1, wie es ihm gefällt.

Also: Was hast du an den Pin angeschlossen?
#3126933
Lesenswert?

>     ldi r16, 0b00001011
>     out DDRB, r16


Tus nicht!
Damit beeinflusst du den kompletten Port.
Wenn du einen einzelnen Portpin schalten willst, dann benutze die
SBI bzw. CBI Befehle.
Damit verringerst du die Gefahr, dass du dir unabsichtlich irgendeinen 
anderen Portpin in einen Zustand schaltest, den du nicht haben willst 
und der von dir auch gar nicht beabsichtigt war.
#3126942
Lesenswert?

> loop4:
>
>     ldi r16, 0b00001011
>     out DDRB, r16

was fummelst du da schon wieder am DDR Register rum?

Die DDR Register werden typischerweise EINMALIG am Programmanfang 
korrekt eingestellt. Man legt am Anfang fest welcher Pin Ausgang ist, 
welcher Pin Eingang ist (eventuell noch, an welchem der Eingangspins man 
einen Pullup braucht) und dann bleibt diese Konfiguration für den Rest 
des Programms konstant. Im Regelfall gibt es da keinen Grund im 
nachhinein noch mal daran rumzupfriemeln.
#3126959
Lesenswert?

T.W. schrieb:
> Karl Heinz Buchegger schrieb:
>> Die DDR Register werden typischerweise EINMALIG am Programmanfang
>> korrekt eingestellt.
>
> Das kann man so allgemein nicht sagen.

Für einen kompletten Neuling kann man das so sagen.

Bis der auf dieses Fall stösst, hat er seine ersten 5000 Zeilen Code 
bereits geschrieben und weiß was da passiert.
(Ausserdem hab ich 'typischerweise' geschrieben und nicht 'immer')

Verwirre bitte Neulinge nicht mit Sonderfällen. Man kann durch 
übertriebene Genauigkeit gerade in den ersten Lernphasen mehr Verwirrung 
stiften als es gut ist.
Gast #3127016
Lesenswert?

So, jetzt habe ich die Finger vom DDR gelassen^^. Habe nur einzelne 
Portbits manipuliert und den Eingang direckt auf Plus, dann auf Minus 
gelegt um alles auszuprobieren und um den Detektor auszuschließen. Ich 
frage auch nur noch einen PIN ab. Ein neues IC ist auch getestet. Mit 
und ohne Internen Pullup macht kein Unterschied. Die LED blinkt einfach 
nur.
Ich habe zwar jetzt schon einiges geschnallt und das Programm ist viel 
kürzer geworden, die "Fehlfunktion" erschließt sich mir leider immer 
noch nicht. Im AVR Studio funktioniert die Simulation wunderbar.

    ldi r16, 0b11111011
    out DDRB, r16       ; Inhalt von r16 ins Register DDRB ausgeben

    ldi r16, 0b11110111 ; (LED/laser als Ausgang, Empfänger als Eingang)
    out PORTB, r16    ; r16 ins IO-Register PORTB ausgeben Laser/led on


Loop3:                   ; auf Unterbrechung warten

         SBIS pinb,2     ; wenn bit 2 in r16 High ist(Empfänger aus)

  rjmp loop3             ; überspringen falls Empfänger nicht mehr high

loop4:

   cbi portb, 0    ;Laser off
   cbi portb, 1    ;led off
   sbi portb, 3    ;Pieper=pin 3 geht an)
ende:

  rjmp ende
#3127028
Lesenswert?

>    sbi portb, 3    ;Pieper=pin 3 geht an)

Pieper?
Welcher Pieper?

Dir ist hoffentlich klar, dass solche Dinge des öfteren dir die 
versorgungsspannung versauen können. Was, wenn man es nicht 
berücksichtigt, genug Schmutz erzeugen kann, damit der µC abstürzt.

Womit wir wieder beim Thema 'Blinken' wären.


Also:
Aufbau. Wie ist der µC beschaltet? Wie ist deine Spannungsversorgung 
aufgebaut?
Gast #3127036
Lesenswert?

Karl Heinz Buchegger schrieb:
> oder du den Code gar
> nicht in den µC gebrannt hast

Daran dachte ich auch schon und habe das IC gelöscht und eingebaut-> 
nichts. Dann neu beschrieben und eingebaut->blinken.


Ich habe den ATTINY an Versorgungsspannung angeschlossen. Dann 3 LEDS 
mit Widerständen (LASER ist jetzt erstmal dadurch ersetzt worden) 
angeschlossen und den, als Eingang gesetzten PIN, auf Masse bzw auf Plus 
gelegt. Die Schaltung hat also nichts mit dem Detektor zu tun. Den Reset 
Pin Habe ich mal angeschlossen und mal nicht. Auch an Plus und Masse 
(nun doch als Trial and error) geschaltet.

Nach meinem Verständniss m
Gast #3127992
Lesenswert?

Kleines Update für die Zweifler:

Alles funktioniert wunderbar. Ich kann die Empfindlichkeit einstellen 
und trotz direktem Sonnenlicht (ohne Abschirmung) schaltet die 
Lichtschranke beim Unterbrechen des Laserpointers. Wenn man alles 
richtig ausrichtet, sind auch größere Entfernungen gut möglich.

Mein Dank gilt vor allem Karl Heinz Buchegger
für die geduldige Hilfe.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren