Blitzimpuls-Auswertung          


Elektronik-Labor  AVR  HF  Projekte 



Download: Blitzwarner32EE.zip

Durch ein erweitertes Programm soll nun versucht werden, eine sinnvolle Warnung auszugeben. Es ist eine erweiterte Version des bisherigen Impulsloggers mit EEPROM-Speicherung. Man kann also beides mit demselben Controller erledigen: Aufzeichnung einzelner Impulse und Testen eines Warn-Algorithmus. Bei diesem ersten Versuch wird folgendes Verfahren getestet: Ein einzelner Blitz erzeugt noch keine Warnung, wohl aber mehr als einer in kurzem Abstand. Die Warnstufe 1 wird an einer LED angezeigt, wenn im Schnitt ein Blitz in zehn Minuten kommt. Vier Blitze in Folge schalten die LED für die zweite Warnstufe ein. Sie wird gehalten, wenn mindestens ein Blitz pro Minute erkannt wird.

 I = I + 1
Sta = 0
Trigger = 0
Level = Level + 600 'ca. 10 Blitze für maximalen Level 6000
If Level > 6000 Then Level = 6000 'max. 10 Blitze in der Auswertung

Eine interne Variable Level enthält einen Wert für die momentane Blitzhäufigkeit. Jeder Blitz erhöht den Level um 600 Punkte. Weiter unten im Programm gibt es einen Abschnitt, der etwa einmal pro Sekunde durchlaufen wird. Hier wird der Level jedesmal um eine Stufe verkleinert. Nach 600 Sekunden (zehn Minuten) ist also ein Blitz vergessen.  Bei hohen Leveln oberhalb der Warnstufe 2 werden die Blitze zehnmal schneller abgebaut.

 Ticks = Ticks + 1
If Ticks >= 22000 Then 'ca. 1 s
If Level > 0 Then '1 Blitz in 10 min vergessen
Level = Level - 1
If Level > 2000 Then Level = Level - 9 '1 Bltz in 1 min vergessen
End If
Locate 2 , 1
Lcd Level
Lcd " "
If Level > 2000 Then Out2 = 1 Else Out2 = 0 '> 1 Blitz pro Minute
If Level > 1000 Then Out1 = 1 Else Out1 = 0 '> 0,1 Blitz pro Minute
End If

Ab einem Level von 1000 wird die LED am Ausgang Out1 eingeschaltet, ab 2000 zusätzlich die LED am Ausgang Out2. Bei einem Test mit dem Blitzgenerator wurden mehrere Impulse hintereinander geschickt bis die zweite Warnstufe angezeigt wurde. Nach ein paar Minuten, abhängig von der Anzahl der Blitze, fällt die Warnung auf Stufe 1 zurück. Wenn dann kein weiterer Blitz mehr kommt dauert es 1000 Sekunden (17 Minuten) bis auch diese Warnung gelöscht wird. Ich bin gespannt, ob sich das bei einem realen Gewitter bewährt. 

 J = Ischarwaiting(#1)
If J > 0 Then
Get #1 , J
If J = 100 Then
B = 0
For N = 0 To 1023
Writeeeprom B , N
Next N
End If
Eeadr = J * 128
For N = 1 To 128
Readeeprom B , Eeadr
Put #1 , B
Eeadr = Eeadr + 1
Next N
End If

Das Programm hat übrigens noch eine zweite Erweiterung bekommen. Man kann jetzt das EEPROM löschen. Das ist sinnvoll wenn man bei einer längeren Messreihe die Grenze der neuen Daten von älteren Daten unterscheiden will.



Download: LoggerVB2.zip

Das VB-Programm wurde entsprechend erweitert und hat nun eine Löschtaste. Außerdem wurde der Plotterbereich in vier Abteilungen für die vier Einzelmessungen unterteilt.


Arduino-Blitzwarner



Download: BlitzloggerF3.zip

Dank an Fabian, der mir auch dieses Programm auf den Arduino umgesetzt hat.  Die Warn-LEDs werden über Pin2 und Pin3 angeschlossen. Ebenfalls angepasst ist die Blocklänge von 32 Bytes für gespeicherte Daten für jeden Blitz und die Möglichkeit, das EEPROM zu löschen. Wie die Bascom-Version erfüllt das Arduino-Sketch gleichzeitig zwei Aufgaben: Gewitterwarnung und Datenerfassung.


Arduino-Messung: Simulierte Blitze

Download: LoggerVB3.zip
Änderung: DTR und RTS wurden eingeschaltet, dann klappt es auch mit dem Leonardo.

Auswertung mit dem Tiny13, von Heinz D.

Anbei der Entwurf (nicht getestet) für die Schaltung vom letzten Jahr (Gewitter-(Früh-)Warner) mit Simpel-Differenziator (100n/100k/BC547) . Alle Zeiten sind noch veränderbar. Ich habe auch Blitze 'über' DLF gehört, jedoch ist die AVR halb zu und damit die Verstärkung geringer.  An meiner Langdraht habe ich mir von den statischen Ladungen schnell ziehender Wolken schon heftig einen gefangen. Mein Wohnort scheint schlechter als Ihrer zu sein, jedenfalls habe ich am 9.6. beim Gewitter um Frankfurt nichts empfangen.

' 1306-Blitz-Detector1 digital (TA7642+BC547)
'-------------------------------------------------------------------------------
' Ein positiver Impuls an PB4 speichert den Wert und zeigt rt/ge/gn an
' Nach 1,5s wird die Anzeige abgeschaltet, wg. Stromverbrauch
' Mit der Taste wird nur die Anzeige für 1,5s eingeschaltet
'###############################################################################
' T13 ___
' Reset/Adc0 /-_-| +3 Vcc o-|___|-|>|+
' Anzeige | | 220 rt | ___
' -Taste Pb3/Adc3 | | Pb2/Adc1 o----------+-|___|-|>|-+
' Blitz- | | 220 gn | ___
' Input Pb4/Adc2 | | Pb1 o----------------------+-|___|-|>|-| Gnd
' | | 220 ge
' Gnd |___| Pb0 o---||--|
' Piezo
'###############################################################################
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 16
$framesize = 24
Data "1 3 0 6 _ B l i t z _ D e t e c t o r 1 _ D i g i t a l " 'an Adr 0x46=Name
'-------------------------------------------------------------------------------
Ddrb = &B00111
Piezo Alias Portb.0 'Piep für 0,1s
Led_1 Alias Portb.1
Led_2 Alias Portb.2
Taste Alias Pinb.3 : Portb.3 = 1 'pullup
Inpu1 Alias Pinb.4 : Portb.4 = 1 'pullup
Const Totzeit = 1500 'ms zwischen 2 Blitzen
Const Tonhohe = 500 'us=1kHz
Const Tonlang = 99 'Cyclen
Const Grenz_rt = 20 'unter 20s
Const Grenz_gn = 200 'über 200s
Dim I As Byte 'für Piep
Dim Delay200ms As Byte '5Hz bei 1,2MHz
Dim Delay1s As Word '1s Zähler
Dim Blitzabstand As Word 'letzter Wert
Blitzabstand = 2000 'grün
Config Timer0 = Timer , Prescale = 1024
On Ovf0 Int_t0 : Enable Timer0 : Start Timer0 : Enable Interrupts
Do
Main:
If Inpu1 = 1 Then 'Blitzimpuls 1=aktiv=TA7642
Blitzabstand = Delay1s :
Delay1s = 0 :
Goto Anzeige
End If
If Taste = 1 Then Goto Main 'Taste gedrückt ?
Anzeige:
Ddrb = &B00111
For I = 0 To Tonlang :
Piezo = 1 : Waitus Tonhohe :
Piezo = 0 : Waitus Tonhohe :
Next I
If Blitzabstand < Grenz_rt Then '<20s
Led_1 = 0 : Led_2 = 0 'rot
Else '>20s
If Blitzabstand > Grenz_gn Then
Led_1 = 0 : Led_2 = 1 'grün
Else '20s-200s
Led_1 = 1 : Led_2 = 1 'gelb
End If
End If
Waitms Totzeit :
Ddrb = &B00000 'LED aus
Loop
'###############################################################################
Int_t0:
Timer0 = 21 '255-234 1,2MHz -> 5Hz
If Delay200ms < 4 Then
Incr Delay200ms
Else
Delay200ms = 0
If Delay1s < 65534 Then Incr Delay1s '
End If
Return
'###############################################################################


Retroradio als Blitzwarner



Zur Auswertung wird hier ebenfalls ein Tiny13 verwendet. Er läuft tatsächlich problemlos mit 1,5 V und braucht nur 0,5 mA, zusammen mit dem Empfänger ca. 1 mA. Der Controller steuert das Messgerät über einen 2-Bit-DA-Wandler mit zwei Widerständen an zwei Ports an. Zusätzlich werden Lichtblitze an einer weißen LED ausgegeben und der Lautsprecherverstärker bei jedem Blitz mit einem Impuls angesteuert.

Dazu ein Youtube-Video: http://youtu.be/lIf8ljNYbbk

Nachdem das Gerät Langezeit völlig still blieb gab es in der Nacht auf Montag plötzlich ein heftiges Geblitze und Geknacke, sodass man sich richtig erschrecken konnte. Ein Blick ins Internet zeigte aber nur ein fernes Gewitter im Abstand von ca. 300 km. Ein parallel arbeitendes Gerät mit etwas andern Eigenschaften zeigte keine Blitze an, wohl aber später in der Nacht ein Gewitter im Abstand von ca. 40 km. Den Retro-Blitzwarner habe ich dann im Interesse der weiteren Nachtruhe erstmal abgeschaltet.  Der Versuch hat ein Problem er Auswertemethode gezeigt: Weil nicht zwischen nahen und fernen Blitzen unterschieden wird, kann der Alarm sich auf ein sehr fernes Gewitter beziehn, das eigentlich nicht relevant ist. Eventuell muss die Empfindlichkeit der Messung reduziert werden oder man versucht besser, die Intensität der Blitze zu berücksichtigen.





'Gewitterwarner 2
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 8
$framesize = 8

Config Adc = Single , Prescaler = 2 , Reference = Avcc ' Pre 8...32
Start Adc
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1

Config Portb.4 = Output
Portb.3 = 1

Dim D As Word
Dim B As Byte
Dim U1 As Byte
Dim U2 As Byte
Dim Ticks As Byte
Dim Ticks2 As Byte
Dim Level As Word

Config Portb = &B00010111


U2 = 15
U1 = 15
Do
D = Getadc(3)
Shift D , Right , 4 '0..63
B = D
U1 = B
'B = B + 2 'VCC=5V
B = B + 8 'Vcc=1,5 V
If B < U2 Then
Portb.0 = 1
Waitms 4
Portb.0 = 0
Level = Level + 600
If Level > 20000 Then Level = 20000
End If

U2 = U1
U1 = B

'Put #1 , U
'Waitms 10

Ticks = Ticks + 1
If Ticks >= 200 Then
Ticks = 0
Ticks2 = Ticks2 + 1
If Ticks2 > 35 Then
Ticks2 = 0 'ca. 1 s
Put #1 , B
If Level > 10 Then
Level = Level - 1 '1 Blitz in 10 min vergessen
If Level > 2000 Then Level = Level - 9 '1 Blitz in 1 min vergessen
If Level > 6000 Then Level = Level - 20 '3 Blitze in 1 min vergessen
End If
If Level < 1000 Then Portb = &B00010000 'weniger als 1 Blitz in 10 min
If Level > 1000 Then Portb = &B00010010 '>10 Blitze pro min
If Level > 2000 Then Portb = &B00010100 '<1 Blitz pro min
If Level > 6000 Then Portb = &B00010110 '>3 Blitze pro min
End If
End If
Loop

End



Elektronik-Labor  AVR  HF  Projekte