Sonnenbrandwarner
von Johannes Schmitz
Der Tiny13 soll den Anwender warnen, wenn er insgesamt zwei
Stunden lang die volle Sonne gesehen hat. Die rote LED2 ist der Lichtsensor und
dient zugleich als Warnanzeige. Nach insgesamt 120 Minuten Sonnenschein gehen
beide LEDs an. Höchste Zeit für etwas Schatten! Und ein kühles Bier.
Dass die rote LED auch als Lichtsensor taugt wurde ja schon
gezeigt. Im Leerlauf nimmt die Fotospannung allerdings logarithmisch zu. Da ist
es nicht ganz einfach, zwischen indirekter Beleuchtung und voller Sonne zu
unterscheiden. Besser ist eine Messung des Fotostroms. Und dazu braucht man
einen sehr hochohmigen Widerstand. Dieser kann programmiert werden! Wenn der
AD-Wandler immer abwechselnd ADC2 (an GND geschaltet) und ADC3 (die
LED-Spannung) misst, wird effektiv Ladung von ADC3 nach ADC2 übertragen. Der
geschaltete Kondensator entspricht einem Widerstand. Wie groß der Widerstand
ist bestimmt die Wartezeit (2 µs) zwischen den Messungen. Die LED wird also
immer wieder etwas entladen. Nun braucht man schon volle Sonne, damit die
Spannung etwa 1,1 V übersteigt. Die gemessene LED-Spannung wird übrigens einmal
pro Sekunde seriell übertragen, was während der Entwicklung hilfreich war aber
im tatsächlichen Einsatz nicht mehr gebraucht wird.
Man sieht nur noch ein kurzes Blinken an der grünen LED, was den aktiven Betrieb anzeigt.
Download: Sparrow_Sunlight.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Sonnenbrandwarner.html
'Sparrow_Sunlight.bas
'Warning after two hours of bright sunshine
'Red LED as light sensor
$regfile = "attiny13.dat"
$crystal = 1200000
Baud = 9600
$hwstack = 8
$swstack = 4
$framesize = 4
Dim D As Word
Dim Dummy As Word
Dim N As Byte
Dim Suntime As Word
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start
Adc
'Ref 1,1 V
Ddrb.4 = 1
Portb.4 = 0
Suntime = 0
Do
D = 0
For N = 1 To 50
Dummy =
Getadc(2)
'discharge
Waitus 2
D = D +
Getadc(3)
'LED voltage
Next N
D = D / 50
If D > 1020 Then Suntime = Suntime + 1
Wait 1
If Suntime > 7200
Then
'2 hours maximum
Ddrb.3 = 1
Portb.3 =
1
'LED red
Ddrb.1 = 1
Portb.1
=
1
'LED green
Do
Loop
End If
Print #1 ,
D
'debugging only
Loop
End