Arduino Lightning Detector W / Real Time Graphing: 3 kroki (ze zdjęciami)

Arduino Lightning Detector W / Real Time Graphing: 3 kroki (ze zdjęciami)

Spisu treści:

Anonim

Cześć! To jest mój pierwszy instruktażowy i bardzo chciałbym otrzymywać informacje zwrotne!

Ten projekt rozpoczął się pewnego dnia, kiedy się nudziłem. I Googled 'Arduino Projects', a to pojawiło się na placu zabaw Arduino.

UWAGA: To nie był mój oryginalny pomysł, odkryłem go na placu zabaw Arduino, ale oto oryginalny artykuł: http://runtimeprojects.com/2016/02/a-lightning-detector-for-arduino/. Wprowadziłem modyfikacje do mojego projektu, które moim zdaniem mogą go ulepszyć.

Potrzebujesz:

  1. x1 Arduino

    (Zacząłem od Uno, ale skończyłem na Micro)

  2. x1 Deska do krojenia chleba

    (Myślę, że w końcu możesz użyć Perfboardu)

  3. x4-7 Przewody rozruchowe

    (Aby połączyć komponenty)

  4. Obwód dzielnika napięcia x1

    Masz dwie opcje:

    1. x1 Potencjometr
    2. x3 Rezystory
      1. x2 10K Ohm
      2. x1 3,3 M Ohm

Kieszonkowe dzieci:

Krok 1: Wiedza o błyskawicach tła

Gdy piorun uderza, uwalnia wiele rodzajów energii. Większość ludzi wie, że uwalnia światło i dźwięk, ale Lightning uwalnia również fale radiowe, szczególnie w zakresie VLF (Very Low Frequency) do zakresów LF (Low Frequency) lub około 3 do 300 KHz. Dzięki Arduino można rejestrować częstotliwości około 7 KHz, co mieści się w granicach emitowanych częstotliwości.

Dzięki temu projektowi powinniśmy być w stanie podnieść błyskawicę w odległości około 20 km.

Krok 2: Obwód

OSTRZEŻENIE: Piorun może wywoływać zarówno dodatnie, jak i ujemne prądy w przewodzie, dlatego należy postępować zgodnie z instrukcjami 100% pewność, że dzielnik napięcia działa, aby uniknąć uszkodzenia Arduino.

Układ jest bardzo prosty. Najbardziej skomplikowaną częścią jest dzielnik napięcia, aby zapobiec uszkodzeniu naszego Arduino przez prądy indukowane przez drut przez Lightning.

Wybieranie trucizny: dzielniki napięcia

Istnieje kilka sposobów na zastosowanie dzielnika napięcia w obwodzie.

Opcja 1: Rezystor

Jeśli zamierzasz używać rezystorów, musisz dołączyć je jak na drugim zdjęciu.

Opcja 2: Potencjometr

Jeśli zamierzasz użyć potencjometru, możesz dołączyć go jak na pierwszym schemacie na schemacie obwodu.

Krok 3: Kodeks

Istnieją dwa różne programy uruchomione do normalnej pracy.

Pobierz mój kod i schematy obwodów z Githuba.

  1. Arduino

    Program Arduino jest bardzo prosty.

    void setup () {

    Serial.begin (115200); // Konfiguracja komunikacji szeregowej przy 115200 bodów.

    pinMode (A4, INPUT); // Zdefiniuj pin analogowy 4 jako wejście

    }

    void loop () {

    Serial.println (analogRead (A4)); // Wydrukuj wartość z pinu A4 do portu szeregowego

    }

  2. Przetwarzanie

    Program do przetwarzania jest nieco bardziej skomplikowany

    import processing.serial. *;

    Serial myPort; // Port szeregowy

    int xPos = 1; // poziome położenie wykresu float inByte = 0;

    void setup () {

    // ustaw rozmiar okna (Uwaga: można skalować na ekranie):

    rozmiar (1000, 750);

    // Wyświetl wszystkie dostępne porty szeregowe

    // jeśli używasz przetwarzania 2.1 lub nowszego, użyj Serial.printArray ()

    println (Serial.list ());

    // Otwórz dowolny port, którego używasz.

    // Zmień 0 na dowolną # na liście, której używasz (-1)

    myPort = new Serial (this, Serial.list () 0, 115200);

    // nie generuj serialEvent (), chyba że otrzymasz znak nowej linii:

    myPort.bufferUntil ('n');

    // ustaw tło podstawowe:

    tło (0);

    }

    void draw () {

    // Narysuj linię:

    udar mózgu (127, 34, 255);

    linia (xPos, wysokość, xPos, wysokość - inByte);

    // na krawędzi ekranu wróć do początku:

    if (xPos> = width) {

    xPos = 0;

    tło (0);

    }

    inaczej {

    // zwiększ poziomą pozycję:

    xPos ++;

    }

    }

    void serialEvent (Serial myPort) {

    // pobierz ciąg ASCII:

    String inString = myPort.readStringUntil ('n');

    if (inString! = null) {

    // odetnij dowolne białe znaki:

    inString = przycinanie (inString);

    // konwersja na int i odwzorowanie na wysokość ekranu:

    inByte = float (inString);

    println (inByte);

    inByte = map (inByte, 0, 1023, 0, height);

    }

    }