Sonnenbrandwarner         

von Johannes Schmitz                     
      
Elektronik-Labor  Projekte  AVR  Sparrow  Contest          



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



Elektronik-Labor  Projekte  AVR  Sparrow Contest