Forum: Mikrocontroller und Digitale Elektronik Blinkende Lichtschranke


von Niklas (Gast)


Lesenswert?

Hallo alle zusammen,

Ich und ein Kumpel wollen für unsere Facharbeit in der Schule eine 
Lichtschranke bauen, die in einer hohen Frequenz blinken soll, um 
Störungen durch Fremdlicht zu vermeiden. Und da kommen wir nicht weiter.
Ich habe schon in einem anderem Thread gesehen, dass es so manche gibt, 
die nicht so die Fans von BASIC sind, allerdings ist es mir leichter 
gefallen, in BASIC einzusteigen, als in Assembler. Da wir so ziemlich 
keine Ahnung vom Programmieren eines Mikrocontrollers haben - und wir 
benutzen zwi ATtiny12s - haben wir uns auf eine simple Methode geeinigt:

Der eine tiny steuert ein Senderprgramm, der andere ein das 
Empfängerprogramm.

Eine LED soll in einem gleichmäßigen Takt blinken, wobei An- und 
Auszeiten gleich lang sind.

Das Empfängerprogramm soll warten, bis es einen ersten Input bekommt, 
sodass es sich mit der Blink-LED syncrhonisieren kann. Dann soll es in 
dem Takt, in dem die LED umschaltet, deren Status abfragen. D.h. es 
weiß, wann die LED an sein sollte und wann aus. Ist kein Licht 
vorhanden, obwohl die LED an ist, dann soll eine neue LED leuchten, die 
signalisiert, dass etwas den Lichstrahl blockiert. Genauso soll diese 
LED leuchten, wenn Licht vorhanden ist, obwohl die Blink-LED aus ist. So 
soll darauf hingewiesen werden, dass zuviel Störlicht vorhanden ist.

Alles in allem recht simpel. Das Senderprogramm funktioniert. Die 
Blinkfrequenz ist uns momentan egal, Hauptsache es läuft. Gelötet ist 
der Sender bereits und eine Möglichkeit, das analoge Signal in ein 
digitales umzuwandeln haben wir auch.

Was uns fehlt, ist ein funktionierender Code in BASIC. Ich habe schon 
versucht, einen zu schreiben, aber der scheint nicht zu funktionieren 
und ich glaube er ist so schlecht, dass ich ihn hier besser nicht poste.

Könnt ihr uns irgendwie helfen?

von Karl H. (kbuchegg)


Lesenswert?

> haben wir uns auf eine simple Methode geeinigt:
>
> Der eine tiny steuert ein Senderprgramm, der andere ein das
> Empfängerprogramm.

Merke:

2 Prozessoren in einem Projekt einzusetzen, in dem einer schon 
unterfordert ist, ist NIEMALS simpler, als alles nur auf einem Prozessor 
zu machen.
Mehrere Prozessoren VERKOMPLIZIEREN die Dinge normalerweise, weil die 
beiden Prozessoren dann auch noch miteinander reden müssen!

> Dann soll es in dem Takt, in dem die LED umschaltet, deren Status
> abfragen.

Woher weiß er den exakten Takt?

> D.h. es weiß, wann die LED an sein sollte und wann aus.

Trugschluss: Genau das weiß er eben nicht. Denn die beiden µC werden 
nicht exakt genau gleich schnell arbeiten. Noch nicht einmal dann, wenn 
beide einen Quarz spendiert bekommen.

von Karl H. (kbuchegg)


Lesenswert?

Wenn ihr von Tuten und Blasen keine Ahnung habt, solltet ihr tunlichst 
davon Abstand nehmen, die Aufgabenstellung aus Coolness heraus 
komplizierter zu machen als unbedingt notwendig.

Fremdlicht ist zwar ein Problem, aber wenn ihr das mit einer 
Modulationsfrequenz nicht hinbekommt, dann lasst das fürs erste weg.
Kommt halt der Empfänger in ein Rohr mit einer Blende, so dass er 
tatsächlich nur den Sender sieht, und schon ist Femdlicht auch kein 
Problem mehr.

(Hinweis: es gibt aber auch Infrarotempfänger, die haben die notwendigen 
Filter schon in Hardware eingebaut. Dieser Empfänger liefert nur dann 
eine 1, wenn Licht mit der richtigen Modulationsfrequenz drauf fällt)

von Niklas (Gast)


Lesenswert?

Ok, sowas ähnliches hatte ich schon fast befürchtet. Dann ändern wir mal 
die Bedingungen: Es soll alles über einen Prozessor laufen und nicht 
über zwei. Ich hoffe, da lässt sich schon mehr machen. Und die 
Blinkfunktion hätten wir aber trotzdem gerne drin.^^ Wie sieht das Ganze 
jetzt aus?

von Karl H. (kbuchegg)


Lesenswert?

Niklas schrieb:
> Ok, sowas ähnliches hatte ich schon fast befürchtet. Dann ändern wir mal
> die Bedingungen: Es soll alles über einen Prozessor laufen und nicht
> über zwei. Ich hoffe, da lässt sich schon mehr machen. Und die
> Blinkfunktion hätten wir aber trotzdem gerne drin.^^ Wie sieht das Ganze
> jetzt aus?

Programm schaltet LED ein
Programm sieht nach ob der Empfänger das Licht auch sieht
Programm schaltet LED wieder aus
Programm sieht nach ob der Empfänger jetzt kein Licht sieht

und alles wieder von vorne

(und natürlich nocht entsprechende Ausgaben bzw. Fehlerausgaben wenn das 
erwartete Ergebnis nicht vorhanden ist)


Wo ist da jetzt das Problem?


(Und ehe du jetzt antwortest: Du wirst hier im Forum niemanden finden, 
der euch das Programm schreibt. Die Spielregeln lauten: Ihr legt vor, 
das Forum korrigiert oder erläutert unklare Punkte)


Ehe es ans Coden geht, solltet ihr euch einen Ablaufplan zurecht legen.
Dann stellt sich nämlich raus, das die umgekehrte Reihenfolge besser 
ist, weil die Erkennung einer Störung dann einfacher ist. Nur dann wenn 
keine Störung vorliegt, muss überhaupt nachgesehen werden, ob die 
Lichtschranke unterbrochen wurde.

1
 LED ausschalten        <-----------------------------+<--+<--+
2
 Empfänger abfragen                                   |   |   |
3
 Licht vorhanden?     Ja ----------> Störung! --------+   |   |
4
       |                                                  |   |
5
      Nein                                                |   |
6
       |                                                  |   |
7
 LED eischalten                                           |   |
8
 Empfänger abfragen                                       |   |
9
 Licht vorhanden?     Ja ----- LS nicht unterbrochen!-----+   |
10
       |                                                      |
11
      Nein                                                    |
12
       |                                                      |
13
       +---------------> Lichtschranke unterbrochen! ---------+

von dingbert (Gast)


Lesenswert?

Meiner Meinung nach ist das Konzept nicht ganz durchacht. Der Trick bei 
der Modulationsfrequenz ist ja der, daß erkannt wird, ob die Beleuchtung 
jetzt durch den Sender oder durch Fremdlicht kommt.

Wenn ihr jetzt eine einfache Fotodiode als Empfänger nehmt und nicht 
schon auf der analogen Ebene die Modulationsfrequenz als Nutzsignal 
herausfiltert passiert folgendes: Ohne Fremdlicht kommt tatsächlich die 
Modulationsfrequenz als Ausgangssignal raus. Mit Fremdlicht kommt ein 
Dauersignal mit überlagerter Frequenz heraus. Dieses Signal wird am 
Digitaleingang eines Mikrocontrollers nur einen dauerhaften 
Schaltzustand auslösen. Er erkennt: Licht da, aber keine Frequenz. Das 
kann nur noch als Störung ausgewertet werden, da jetzt nicht mehr 
erkennbar ist ob die Schranke unterbrochen ist.

Empfehlung: Verwendet einen Empfänger, der bereits intern die 
Modulationsfrequenz ausfiltert wie z. B. SFH5110. Das Teil ist ziemlich 
unempfindlich gegen Fremdlicht. Da kann man dann ziemlich sehr sicher 
sein, daß ein Ausgangssignal nur noch dann vorhanden ist, wenn die 
Lichtschranke nicht unterbrochen ist.

von Niklas (Gast)


Lesenswert?

Sooo..

$regfile = "attiny12.dat"
$crystal = 8000000
$tiny

Blinker Alias Portb.0
Eingang Alias Pinb.1
Status Alias Portb.2

Config Blinker = Output
Config Eingang = Input
Config Status = Output

Do

Ausphase:
  Blinker = 0
  If Eingang = 1 Then
    Status = 1
    Goto Ausphase
  Else
    Status = 0
    Goto Anphase
  End If

Anphase:
  Blinker = 1
  If Eingang = 0 Then
    Status = 1
    Goto Anphase
  Else
    Status = 0
    Goto Ausphase
  End If


End


Da ich meinen Computer neu starten müsste, damit ich BASCOM zum Laufen 
bringe und ich darauf keine Lust habe, weiß ich nicht, ob vor dem End 
noch ein "Loop" fehlt. Laut meiner Logik sollte es aber sonst das tun, 
was ich möchte, aber funktioniert es auch so?

PS: Falls der Code schon zu lang ist, um ihn im Text zu posten, dann 
sagt es mir bitte.

von Route_66 (Gast)


Lesenswert?

Hallo!

Das Froblem des Fremdlichts ist ja nicht bei Gleichlicht oder 
Wechsellicht mit 50 oder 100 Hz zu Ende. EVGs (elektronische 
Vorschaltgeräte) oder LED-Dimmer erzeugen unter Umständen Wechsellicht 
im Modulationsbereich der Lichtschranke. Auch mehrere Lichtschranken an 
einer Maschine können sich manchmal, über spiegelnde Metallteile, 
gegenseitig "sehen". Eine geeignete Codierung des eigenen Senders, mit 
(quasi-)zufälligem Wechsel, ist ja für den Prozessor normalerweise kein 
Problem.

von Ich (Gast)


Lesenswert?

würde Euch jede Unterstützung verweigern, wenn Ihr schon zu faul seid, 
den
Computer neu zu starten um ein Programm zu testen. Nur so, aus 
pädagogischen Gründen und weil ihr mal für unsere Rente zuständige sein 
sollt usw....

von Optiker (Gast)


Lesenswert?

Das einfachste ist, eine komplette, fertige Lichtschrankge zu kaufen.

Aber was wollt ihr mit dem Projekt lernen?

Zwischen "Kaufen" und "Rad neu erfinden" gibt es diverse Abstufungen. 
Bei einer Lichtschranke, die ein bisschen mehr als eine 
Gabellichtschranke kann, gibt es diverse Baustelle: Optik, 
Analogelektronik, Auswertung, Steuerung usw. Je besser die Signale sind, 
um so einfacher ist die Auswertung. Also würde ich nicht ganz hinten 
anfangen sondern erstmal einen Plan machen, wie die Anforderungen genau 
sind, wo die Knackpunkte liegen, was fertig gelauft werden soll und wo 
selber Erfahrungen gemacht und Arbeit reingesteckt werden soll.

Gruß Optiker

von Paul Baumann (Gast)


Lesenswert?

Ja, es fehlt noch das "Loop". Das Programm ist doch auch im Simulator 
von
Bascom gut zu testen. Damit kannst Du schon mal "trocken" testen, ob es 
das
tu, was Du erwartest.

Entrümpele mal Deinen Rechner, wenn das Booten so lange dauert, daß Du
Dich 2x rasieren kannst, bevor er benutzbar ist.
;-)
MfG Paul

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Paul Baumann schrieb:
> wenn das Booten so lange dauert, daß Du Dich 2x rasieren kannst
LOL...
Erst mal so alt werden... ;-)

Niklas schrieb:
> Ich und ein Kumpel wollen für unsere Facharbeit in der Schule eine
> Lichtschranke bauen, die in einer hohen Frequenz blinken soll, um
> Störungen durch Fremdlicht zu vermeiden.
Ich würde da einfach einen Pin mit einer PWM-Frequenz von 10kHz vor sich 
hin toggeln/"blinken" lassen und damit die LED ansteuern.

Auf der Emfpängerseite reicht dann ein Phototransistor/-diode, ein 
Kondensator und ein Verstärker mit anschliessender 
Dioden-Gleichrichtung. Mit dem resultierenden Signal auf einen 
AD-Eingang und fertig ist die Laube.

Warum macht ihr euch nicht erst mal schlau, wie Andere diese Aufgabe 
gelöst haben?
Für einen Ideenklau auf nicht allzu hohem Niveau immer gut:
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/

von (Gast) (Gast)


Lesenswert?

Hm, ATtiny12 ist natürlich auch eine 'alte' Gurke, hat kein ADC.

Ein ATtiny13 hat nen ADC, mit dem könnte man in Software einen einfachen 
digitalen Lock-in realisieren. Nette Idee, muss ich mir merken :)

Wenn's unbedingt der ATtiny12 sein soll, klingt Lothars Vorschlag gut 
(vielleich noch mit nem Filter gene 50Hz?), oder eben die Benutzung von 
Standard-Fernbedienungskomponenten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

(Gast) schrieb:
> vielleich noch mit nem Filter gene 50Hz?)
50Hz ist Gleichspannung verglichen mit 10kHz.
Ein billiger Hochpass (aka. Kondensator) reicht da idR. schon aus...

Und für die ganz Ausgefuchsten darf es dann ein Bandpass (aka. 
Schwingkreis) sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.