• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Reaktives Licht mit Atmel AVR

chr2k

Geomaster
waste1 schrieb:
Wie schon stonewood geschrieben hat, Polung beachten. Den Kollektor an + und den Emitter an den Vorwiderstand. Ansonsten alles wie gehabt. Ich verwende einen Vorwiderstand von 2.7MOhm, aber es geht auch 4.7MOhm, damit ist es sogar noch empfindlicher.

Habe mir verschiedene (die hier erwähnten (von Conrad und Reichelt) Fototransistoren besorgt.

Habe nun einen von Conrad im Reaktivlicht verbaut mit dem neuen Programm von Windi (Danke dafür!).
 

chr2k

Geomaster
Wäre jemand so nett und würde ein Code schreiben, mit dem man das reaktivlicht auch mit einem Morsecode triggern kann. Der Code der hier irgendwo im Thread zu finden ist, ist für die LED Variante des reaktivlichts gestrickt und funktioniert nicht mti der LDR/Fototransistor variante.

Was das Programm noch können könnte :)

Morsecode eingabe für eine Morsecode ausgabe oder ein so langes schalten der LED (oder eines anderen verbrauchers) wie das licht ansteht (natürlich nicht bei tag).

Es ist wohl generell nicht möglich den Tiny so zu programmieren das man einen potentialfreien schaltkontakt hat? Momentan ist es ja so das man von der Tiny versorgungsspannung abhängig ist.

Vielen Vielen Dank!
Gruß Christian
 

radioscout

Geoking
chr2k schrieb:
Es ist wohl generell nicht möglich den Tiny so zu programmieren das man einen potentialfreien schaltkontakt hat?
Mit Software dürfte das nicht möglich sein. Wie auch?

Du kannst einen PNP-Transistor über einen Vorwiderstand mit einem Ausgang verbinden und damit ein Relais steuern.

Oder da, wo Du eine LED anschließt, einen Optokoppler anschließen.
 

Lazybone

Geocacher
Moin

reicht es eigentlich wenn ich den Parallelen Stecker mit R2 und R3 an einen IC Sockel löte? Oder brauche ich auch die 3V?
 
Nachdem wir unsere Reaktivlichter erst diskret in C-MOS aufbauen wollten siegte dann doch die Neugier - oder war es die Vernunft :wink:

Dank diesem excellenten und umfangreichen Thread (uff - das Lesen haben wir dann auf zwei Abende verteilt) war der Aufbau von Programmieradapter und letztendlich den Schaltungen ein "Kinderspiel" - inklusive so einiger hier besprochenen Fehlern :lol:

Vier Prototypen mit jeweils anderer Charakteristik sind nun auf dem Testfeld - unser Favorit ist bisher der Reaktivblinker mittels A/D-Wandler und LDR.(allerdings ohne Prüfblitz alle 70 Sekunden und mit einer geringeren Empfindlichkeit - Schwellwert=200)

Versorgt mit einer 2000mAh starken 3,6 Volt Lithium-Zelle paßt das ganze problemlos in ein nur 8cm langes "Stuhlprobenröhrchen" mit 2cm Durchmesser.

1280_6333336165343133.jpg


Perfekt!

Nochmals vielen herzlichen Dank an die Community für die Beiträge und das "open source"-Wissen.

So sind wir unserem Nachtcache wieder einen entscheidenden Schritt näher.

Team Ubique Terrarum

PS: @Lazybone: Ja, der Programmieradapter an LPT muß den ATtiny über eine extra angeschlossene Spannungsquelle über die Pins 4 und 8 mit ebendieser versorgen.
 

thomas_st

Geowizard
Bin in letzter Zeit etwas schlampig hinsichtlich des Verfolgens dieser Thread gewesen, daher kommen meine Kommentare erst jetzt.

waste1 schrieb:
Nachdem ich jetzt einen LDR in die Finger bekam, habe ich mal Vergleichsmessungen zum Fototransistor durchgeführt, den ich in meinen Reaktivlichtern verwende. Die Ergebnisse will ich euch nicht vorenthalten.
Sehr schöne Messungen. Was ich mich aber frage: du hattest festgestellt, das bei relativer Dunkelheit (kannst Du die definieren?) in einem 125ms Messintervall nur ein Anstieg von 5 erreicht werden kann. Dann würde ja ein Wert von 6 und größer das Auslösen des RL effektiv verhindern. Konntest Du das feststellen?

Ich bin nämlich auf der Suche nach dem Grund, warum windi mit einem Wert von 30 bei der Auslösschwelle noch Fehlauslösungen beobachtet hat und ich mit einem Wer von 5 so gut wie keine (Eine in 12 Nächten).

Viele Grüße,
Thomas(_st)
 

thomas_st

Geowizard
chr2k schrieb:
Es ist wohl generell nicht möglich den Tiny so zu programmieren das man einen potentialfreien schaltkontakt hat? Momentan ist es ja so das man von der Tiny versorgungsspannung abhängig ist.
Nöp. Dafür müsste der Attiny ja von vorherein eine Potentialtrennung beinhalten, die dann aber auch noch abschaltbar sein sollte. Das hat er nicht; da muss der Bastler selber für sorgen.
Bzgl. Potentialtrennung, will ich auch darauf hinweisen, dass die Eingangsspannung an den Port-Eingängen maximal 0,5V höher sein darf als Vcc.

Viele Grüße,
Thomas(_st)
 

thomas_st

Geowizard
Ubique Terrarum schrieb:
Was mir auffällt ist die relative Nähe von LED und LDR. Hast Du keine Probleme mit einer Rückwirkung LED->LDR? Ich habe beide absichtlich auf Vorder- und Rückseite der Platine verbannt und so etwas die Rückwirkung zu minimieren (geht natürlich nur, wenn man nach "unten" strahlt) sowie ein paar Leerzyklen nach dem letzten Blinkimpuls bis zum Neustart der Messung einprogrammiert.

Viele Grüße,
Thomas(_st)
 
Hi thomas_st,

mit Platinenvor- und rückseite hatten wir das zuerst auch ausprobiert - dann kann die Auslösung und das Erkennen aber nur durch den "Boden" des Röhrchens gehen.

Die gezeigte Version war einfach ein Versuch - und funktioniert einwandfrei - keinerlei Rückwirkung der LED-Blitzer auf den LDR :) , selbst bei der voreingestellten Schwelle von 50 nicht.

Viele Grüße
Team Ubique Terrarum
 

thomas_st

Geowizard
Ubique Terrarum schrieb:
mit Platinenvor- und rückseite hatten wir das zuerst auch ausprobiert - dann kann die Auslösung und das Erkennen aber nur durch den "Boden" des Röhrchens gehen.
Das meinte ich mit meinem Einschub in der Klammer.
Ubique Terrarum schrieb:
Die gezeigte Version war einfach ein Versuch - und funktioniert einwandfrei - keinerlei Rückwirkung der LED-Blitzer auf den LDR :) , selbst bei der voreingestellten Schwelle von 50 nicht.
Danke. Dann ist vermutlich eine Pause zwischen letztem Blinker und der nächsten Messung programmiert, denn sonst kann ich mir nicht vorstellen, dass das ohne Rückwirkung geht.

Viele Grüße,
Thomas(_st)
 

waste1

Geocacher
thomas_st schrieb:
Sehr schöne Messungen. Was ich mich aber frage: du hattest festgestellt, das bei relativer Dunkelheit (kannst Du die definieren?) in einem 125ms Messintervall nur ein Anstieg von 5 erreicht werden kann. Dann würde ja ein Wert von 6 und größer das Auslösen des RL effektiv verhindern. Konntest Du das feststellen?
Ja, das konnte ich feststellen. Der AD-Wert von 105 entspricht bei meinen Taschenlampen ungefähr einem Anleuchten aus 500m. Bei Schwellwert 10 war da keine Auslösung mehr.
 

waste1

Geocacher
thomas_st schrieb:
Ubique Terrarum schrieb:
mit Platinenvor- und rückseite hatten wir das zuerst auch ausprobiert - dann kann die Auslösung und das Erkennen aber nur durch den "Boden" des Röhrchens gehen.
Das meinte ich mit meinem Einschub in der Klammer.
Ubique Terrarum schrieb:
Die gezeigte Version war einfach ein Versuch - und funktioniert einwandfrei - keinerlei Rückwirkung der LED-Blitzer auf den LDR :) , selbst bei der voreingestellten Schwelle von 50 nicht.
Danke. Dann ist vermutlich eine Pause zwischen letztem Blinker und der nächsten Messung programmiert, denn sonst kann ich mir nicht vorstellen, dass das ohne Rückwirkung geht.

Viele Grüße,
Thomas(_st)
Softwaremäßig ist da vorgesorgt. Nach dem Blinken wird der Alt-Wert auf 1023 gestellt, um eine Doppelauslösung zu verhindern.
 

stonewood

Geowizard
thomas_st schrieb:
Ubique Terrarum schrieb:
Die gezeigte Version war einfach ein Versuch - und funktioniert einwandfrei - keinerlei Rückwirkung der LED-Blitzer auf den LDR :) , selbst bei der voreingestellten Schwelle von 50 nicht.
Danke. Dann ist vermutlich eine Pause zwischen letztem Blinker und der nächsten Messung programmiert, denn sonst kann ich mir nicht vorstellen, dass das ohne Rückwirkung geht.
Die Rückkopplung ist doch schon im Programm berücksichtigt - nicht umsonst steht da:
Alt = 1023 'Doppelauslösung verhindern
Ich hab bei meinen Varianten auch LED und Lichtsensor auf der gleichen Seite - funktioniert ohne Probleme, auch im Petling. Mit einer Variante hatte ich Probleme, da ist Reaktivlicht und Dauerblinker in 2 LEDs kombiniert. Mußte halt nach dem Dauerblinken 1s warten, dann ging aber auch das. Alternativ hätte ich das aber auch wie oben machen können.

Übrigens erklären die Messungen von waste1 auch genau das: Der LDR braucht ca. 1s bis er wieder 'dunkel' anzeigt. Ein Fototransistor ist da wesentlich schneller.

Ach ja, könnte das auch das Problem mit der Morsecode-Eingabe erklären? Damit ist ja 'Dit' quasi 'Dit' + Abklingzeit, das gleiche eben auch für 'Dah' - und damit paßt dann vielleicht 'Dah'=3x'Dit' nicht?
 

Windi

Geoguru
waste1 schrieb:
Softwaremäßig ist da vorgesorgt. Nach dem Blinken wird der Alt-Wert auf 1023 gestellt, um eine Doppelauslösung zu verhindern.
Das hatte bei der Entwicklung des Programmes lustige Effekte.
Die LED hatte damals den LDR nicht direkt angestrahlt aber die Zimmerdecke.
Diese hat dann so stark reflektiert dass der LDR "hell" erkannt hat und die Schaltung wieder angetriggert hat. Das hat dann gar nicht mehr zu Blinken aufgehört. Glücklicherweise bin ich relativ schnell darauf gekommen woran es liegt. Seitdem wird per Software eine Doppelauslösung verhindert.
Lustig ist es aber wenn man eine Sammelbestellung fertiger Reaktivlichter rumliegen hat und eines geht los. Die triggern sich dann alle gegenseitig an und hören gar nicht mehr auf zu blinken.
 

thomas_st

Geowizard
[Softwareseitige Verhinderung der Rückkopplung LED->LDR]
stonewood schrieb:
Die Rückkopplung ist doch schon im Programm berücksichtigt - nicht umsonst steht da:
Alt = 1023 'Doppelauslösung verhindern
Ich bekenne mich dahingehend schuldig, dass ich gestern Abend nicht nochmal in windis Programm geschaut habe :oops:.
Ich mache die softwareseitige Sicherung übrigens über eine zusätzliche Pause am Ende des Blinkens.
stonewood schrieb:
Ich hab bei meinen Varianten auch LED und Lichtsensor auf der gleichen Seite - funktioniert ohne Probleme, auch im Petling.
Ok, danke. Aber doppelt hält besser - will heißen, ich werde wohl bei meinem Aufbau bleiben.

Gruß,
Thomas(_st)
 

waste1

Geocacher
Windi schrieb:
Lustig ist es aber wenn man eine Sammelbestellung fertiger Reaktivlichter rumliegen hat und eines geht los. Die triggern sich dann alle gegenseitig an und hören gar nicht mehr auf zu blinken.
Wenn da mehrere gleichzeitig auf Reise gehen, musst Du die gut isoliert verpacken. Nicht dass die auf dem Versand die große Party feiern. :lol:
 

waste1

Geocacher
Nachdem hier eine Nachfrage für die Morseerkennung besteht, stell ich mal mein Programm rein, so wie es ist. Es ist speziell auf meine Bedürfnisse, also nicht auf Universalität ausgelegt, kann aber trotzdem für den ein oder anderen nützlich sein. Das Programm ist leider nicht mehr mit der Schaltung nach Abb.6 aus dem Kochbuch kompatibel. Ich musste den ATtiny45 nehmen, weil das Programm nicht mehr in den ATtiny13 passte. Außerdem habe ich anstatt des LDRs einen Fototransistor genommen, weil der schneller reagiert und zudem den Vorwiderstand und Fototransistor vertauscht. So ist jetzt der AD-Wert bei hell = 0 und bei dunkel = 1023 ist. Damit kann ich dann den internen Pullup softwaremäßig zum Vorwiderstand parallel schalten, um die Erkennung unempfindlicher zu machen, so dass im Nahfeld der Lichtsensor nicht übersteuert wird. Bei meinen Reaktivlichtern steht man nämlich beim Morsen sehr nahe. Das Programm ist eine Erweiterung von Windis Programm aus dem Kochbuch Kap. 5.2. Zum Teil sind noch Variablennamen vorhanden, obwohl sie keinen Bezug mehr haben, z.B. LDR . Wen es stört, darf sie ersetzen.

Das Programm erkennt eingegebene Morsezeichen und vergleicht sie mit den Symbolen, die in der Variable „Ein“ gespeichert sind. Bei Übereinstimmung wird dann das in der Variable „Aus“ gespeicherte Losungswort ausgegeben. Bei einem Fehler werden sofort 8 dits (Irrung) ausgegeben. Die Erkennung funktioniert im Bereich von 1.2 bis 20 WPM. Die Geschwindigkeit wird beim 1. Symbol gemessen und daraus der Grenzwert Bx für dit/dah bestimmt. In meinem Beispiel ist das 1. Symbol ein dit. Bei einem dah als 1. Symbol müsste Bx dementsprechend anders berechnet werden. Die Erkennung unterscheidet nicht zwischen Symbol-, Buchstaben- und Wortpausen. Deshalb gibt es auch keine eigene Zeichen für Buchstaben- oder Wortpausen. Das Morsen mit der Taschenlampe ist schon so schwer genug, da braucht es nicht auch noch diese Unterscheidung. Die Fehlermeldung wird immer mit konstanter Geschwindigkeit ausgegeben, während das Losungswort mit der Geschwindigkeit der eingegeben Zeichen wiedergegeben wird. Während der Morseerkennung wird der Watchdog auf 32ms umgestellt, damit man auch schnelleres Morsen erkennen kann.

Ach ja, noch etwas. Für mein Programm müssen die Fusebits unverändert sein, also wie ab Werk.
Nun viel Spaß beim Nachbauen!

Code:
'=============================================================
'
' ************************************************************
' ***                                                      ***
' ***            Reaktivlicht mit Morseerkennung           ***
' ***            Fototransistor und A/D-Wandler            ***
' ***     Watchdog-Energiesparmodus und Tagabschaltung     ***
' ***                                                      ***
' ************************************************************
'
' µC: ATtiny45V
' Fusebits bleiben wie ab Werk
' +Ub: 3,00 V
' I: 6 µA im Leerlauf (Nachtbetrieb)
' I: 5 µA bei Tagabschaltung
' Reichweite:
'
'=============================================================

$regfile = "ATtiny45.DAT"
$crystal = 500000                                           'Frequenz des internen Oszillators

$hwstack = 32

Config Clockdiv = 16                                        'ergibt 500kHz Clock

Config Adc = Single , Prescaler = 2
Admux = &B00000010                                          'Channel 2 für ADC
Config Portb = &B00001000                                   'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100111                                          'Pullups zuschalten, außer für Pinb.3 und .4
Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
Set Didr0.4                                                 'Digital Buffer für ADC2 abschalten
Set Portb.4                                                 'Pullup für PORTB.4 zuschalten

Wdtcr = &B11010011                                          'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts                                           'Interrupts freigeben

Const Tagschwelle = 100                                     'Schwellwert für Schlafmodus

Dim Abfrage As Byte
Dim Hell As Byte
Dim Vhell As Byte
Dim Ok As Byte
Dim B As Byte
Dim Bx As Byte
Dim Z As Byte
Dim I As Byte
Dim Lb As Byte
Dim Aus As Byte
Dim Ein As Long
Dim Count As Word
Dim Tagzaehler As Integer
Dim Schwelle As Integer
Dim Ldr As Integer                                          '0 = Hell, 1023 = Dunkel
Dim Alt As Integer
Dim Merker As Integer
Dim D1 As Integer
Dim B2 As Integer

Z = 0
Ein = &B11100100010100000                                   'Eingabezeichen: ".... .- .-.. .-.. ---" = HALLO
Schwelle = 90                                               'je größer der Schwellwert, desto unempfindlicher

Portb.3 = 1                                                 ' LED an
Waitms 300
Portb.3 = 0                                                 ' LED aus

Do
Reset Watchdog
Powerdown                                                   'prozessor bremsen da sonst lichtänderung nicht erkannt wird
'Start Adc                                                   'A/D-Wandler starten
'Ldr = Getadc(2)                                             'geht nicht
Adcsra = &B11000000                                         'startet ADC und Messung
Do
Loop Until Adcsra.6 = 0                                     'warte bis Messung fertig
Stop Adc                                                    'A/D-Wandler zum Stromsparen wieder stoppen
Lb = Adcl                                                   'Helligkeitswert einlesen
Ldr = Adch
Shift Ldr , Left , 8
Ldr = Ldr + Lb

If Abfrage = 1 Then
   If Ldr < Schwelle Then
      Hell = 1
   Else
      Hell = 0
   End If
Else
   Merker = Alt - Ldr
   If Schwelle < Merker Then
      Abfrage = 1
      Ok = 1
      B = 0
      Schwelle = Alt + Ldr
      Shift Schwelle , Right , 1                            'Schwelle = Schwelle / 2
      Hell = 1
   Else
      Abfrage = 0
      Schwelle = 90
   End If
End If
Alt = Ldr

If Abfrage = 1 Then
   If Hell = 1 Then
      If Vhell = 0 Then B = 0                               ' Übergang zu Hell
      Vhell = 1
   End If
   If Hell = 0 Then
      If Vhell = 1 Then                                     ' Übergang zu Dunkel
         If Z = 0 Then
            Bx = B + B                                      ' B * 2, Grenze für dit/dah
            B2 = 3 * Bx                                     'Grenze für Pause = 6 dit
         End If
         If B < Bx Then
            If Ein.z = 1 Then Ok = 0
         Else
            If Ein.z = 0 Then Ok = 0
         End If
         Z = Z + 1
         B = 0
      End If
      Vhell = 0
      If B > B2 Then Ok = 0                                 ' zu lange dunkel
   End If
   B = B + 1
   If B > 90 Then Ok = 0                                    ' zu langsam
   If Count = 0 Then Ok = 0                                 ' beim 1.Mal blinken
   Count = 2400                                             'macht Erkennung scharf, Pull up
   If Ok = 1 Then
      If Z = 17 Then                                        ' dann morsen
         Waitms 500                                         ' Pause
         Aus = &B00011                                      'Bits von rechts n. links = Ausgabezeichen: "--..." = 7
         Z = 4
         D1 = Bx
         Shift D1 , Left , 4                                'Bx * 16, D1 = B * 32ms
         Gosub Morsen
      End If
   Else
         Aus = &B00000000                                   'Fehler: Ausgabezeichen: "........" = Irrung
         Z = 7
         D1 = 120
         Gosub Morsen
   End If
End If

If Count > 0 Then                                           'Pullup für schnellere Detektion zuschalten
   If Count = 1 Then
      Reset Portb.4                                         'Pullup für PORTB.4 ausschalten
      Alt = 0                                               'Auslösung wegen Abschalten des Pullups vermeiden
      Portb.3 = 1                                           ' LED kurz an
      Waitms 5
      Portb.3 = 0                                           ' LED aus
   Else
      Set Portb.4                                           'Pullup für PORTB.4 zuschalten
   End If
   Decr Count
End If

If Ldr < Tagschwelle Then                                   'prüfen ob helligkeit über tagschwelle liegt
   If Tagzaehler < 2500 Then
      Incr Tagzaehler
   End If
Else
   Tagzaehler = 0                                           'wenn wieder dunkel tagzähler löschen
End If

If Tagzaehler < 2400 Then                                   ' entspricht 5min
   If Count = 0 Then
      Wdtcr = &B11010011                                    'Watchdog auf 0,125 Sekunden stellen
   Else
      Wdtcr = &B11010001                                    'Watchdog auf 0,032 Sekunde stellen
   End If
Else
   Wdtcr = &B11110001                                       'Watchdog auf 8 Sekunden stellen
End If

Loop

Morsen:
   For I = 0 To Z
      Portb.3 = 1                                           ' LED an
      Waitms D1                                             ' dit
      If Aus.i = 1 Then                                     ' dah
         Waitms D1
         Waitms D1
      End If
      Portb.3 = 0                                           ' LED aus
      Waitms D1                                             ' 1 dit Pause
   Next I
   Abfrage = 0
   Z = 0
   Schwelle = 90
Return

End
 

thomas_st

Geowizard
waste1 schrieb:
[RL mit Morsecode-Erkennung]
Vielen Dank für das Programm. Ich habe es mir zwar noch nicht durchgesehen, aber einige der genannten Überlegungen / Lösungen sind sehr interessant und werden sicherlich in Projekte einfließen. Nun muss ich aber erst mal den Cache mit dem jetzigen RL erstellen und online bekommen.

Viele Grüße,
Thomas(_st)
 
Oben