Blitzduino – Blitzwarner

Bei der ersten Version des Blitzwarners habe ich einen Arduino-Uno benutzt – das Programm und das Shield sollten aber auf jedem Board funktionieren.

Dieses Shield ist gleichzeitig Empfänger und Anzeige. Sollte sich das Gewitter noch in großer Entfernung befinden, blinkt die weiße LED selten, da nur nicht alle Entladungen empfangen werden. Je näher das Gewitter kommt, desto häufiger blinkt auch die weiße LED, bis schließlich die erste Warnstufe erreicht ist, die durch die grüne LED angezeigt wird. Sollten sich die gemessenen Blitze noch weiter häufen, zeigt die rote LED die erhöhte Warnstufe an.

Blitz1_Schaltplan

C4=100nF; C5=330pF; C6=100nF; C7=22µF;

L1=250µH; L3=50µH;

LED: Pin13= Weiß; Pin2= Grün, Pin3 = Rot;

R1=100kΩ; R2=680 Ω; R3=470 Ω; R4=220 Ω; R5=220 Ω; R6=220 Ω;

Der Mittelwellenempfänger TA7642 arbeitet mit einer Ferritantenne, die fest auf  500 kHz abgestimmt ist. Das IC benötigt eine Betriebsspannung von 1,5 V, die hier mit zwei Si-Dioden stabilisiert ist. Die Schaltung und das Programm sind angelehnt an Schaltungen und Software aus dem Elektronik-Labor.  Eine aktuelle Blitzwarnung wird über die LEDs ausgegeben.

http://www.elektronik-labor.de/Projekte/Blitzwarner1.html

Es gibt aber noch eine weitere Möglichkeit Blitze auszuwerten. Wenn das Board mit dem PC verbunden ist und ein Terminal geöffnet ist (z.B. der in der Arduino Software integrierte „SerialMonitor“), bekommt man immer bei einem Blitz die Meldung „Blitz!“ und eine Reihe von Messewerten angezeigt.

Blitz2

Ein Blitz wurde daran erkannt, dass mindestens ein Messewert stark von den anderen abweicht (Auf dem Bild markiert). Der Grad der Abweichung sagt etwas darüber aus, wie stark der Blitz empfangen wurde. Manche Blitze sind noch sehr weit weg aber besonders stark, manche Blitze sehen wir besonders deutlich aber sie sind nur schwach und manche Blitze finden in den Wolken statt und werden nur gemessen, können aber nicht gesehen werden. Dadurch werden gelegentlich Blitze Empfangen die wir nicht als solche wahrnehmen.

Das Programm kann noch mehr als nur aktuelle Ereignisse anzeigen. Es verfügt zusätzlich über einen Daten-Logger. Dadurch können über einen längeren Zeitraum Werte gesammelt werden, die man dann später aus dem EEPROM auslesen kann. Dafür wurde die Arduino-Library EEPROM benutzt. Über den Terminalbefehl 0 kann man den ersten Datenbereich auslesen. Insgesamt gibt es vier Datenbereiche, die sich alle über die jeweilige Zahl (0-3) auslesen lassen. Mit dem Befehl 100 kann man die Daten aus dem EEPROM wieder löschen. Es gibt im Elektronik-Labor ein Programm welches die Daten aus dem EEPROM grafisch darstellen kann.

Blitz3

Gerade jetzt im Sommer häufen sich die Gewitter und wir konnten schon einige Messungen machen. Dabei ist mir bei einigen Versuchen aufgefallen, dass mein PC-Monitor den Empfänger ziemlich stört. Ich habe deswegen den Empfänger entweder an die Seite gelegt oder den Monitor ganz ausgeschaltet. Dadurch konnte ich deutlich mehr Blitze messen (siehe Videos).

DOWNLAODBlitzloggerF3

Das Listing

#include <EEPROM.h>

byte  A, Trigger, Sta;
word U, D;
word Daten[130];

byte B,J, I;
word Eeadr, Level, N;

word Ticks;

int Out1 = 3;
int Out2 = 2;

void setup(){
  pinMode(Out1, OUTPUT); 
  pinMode(Out2, OUTPUT);  

  Serial.begin(9600);
  Serial.println ("Logger");  
  U = analogRead(A0);
  pinMode(13, OUTPUT);

  Eeadr = 0;
  A = 1;
  Sta = 0;
  Trigger= 0 ;  
  Level = 0;
}

void loop(){
  D =  analogRead(A0);
  Daten[A] = D;
  U = U *15;
  U = U + D;

  U = U /16;

  if (Trigger == 1){
    if (Sta == A){
      Serial.println("Blitz!");
      for (N = 1; N <= 32; N++){
        A = A + 1;
        if (A > 128){ 
          A = 1;
        }
        D = Daten[A];
        D = D /2;
        D = D & 255;
        B = D;
        Serial.println (B);

        if (Eeadr < 512) { 
          EEPROM.write(Eeadr, B);
        }
        Eeadr++;
        digitalWrite(13, LOW);
      }
      I = I +1;
      Sta = 0;
      Trigger = 0;
      Level = Level + 600;
      if (Level > 6000) {
        Level = 6000;
      }
    }

    A = A + 1;
    if(A > 128){
      A = 1;
    }
  }
  else{
    D = D + 15;    
    if (D < U){
      Trigger = 1;
      Sta = A + 120;
      if(Sta > 128){
        Sta = Sta - 128;
      }
      digitalWrite(13, HIGH);
    }   
    A = A +1;
    if (A > 128){
      A = 1;
    }
    if (Serial.available() > 0) {
      J = Serial.read();
      if (J == 100){
        B = 0;
        for(N = 0; N<512;N++){
          EEPROM.write (N,B);
        }
        Eeadr = 0 ;
        Serial.write("Daten Gelöscht");
      }
      else{
        Eeadr = J *128;
        for (N = 1; N<= 128; N++){
          B =  EEPROM.read (Eeadr);
          Serial.write (B);
          Eeadr ++;
        }
        Eeadr = 0; 
      }
    }

  }

  Ticks++;
  if (Ticks >= 22000) {
    Ticks = 0;
    if (Level > 0) {
      Level--;
      if (Level >2000){ 
        Level = Level -9;
      }
    }
    if (Level > 2000){
      digitalWrite(Out2, HIGH);
    }
    else {
      digitalWrite(Out2, LOW); 
    }
    if (Level > 1000){  
      digitalWrite(Out1, HIGH);
    }
    else {
      digitalWrite(Out1, LOW);
    }
  }

[Einklappen]

Video