Détecteur de foudre Arduino avec représentation en temps réel: 3 étapes (avec photos)

Détecteur de foudre Arduino avec représentation en temps réel: 3 étapes (avec photos)

Table des matières:

Anonim

Salut! Ceci est mon premier Instructable, et j'aimerais des commentaires!

Ce projet a commencé un jour où je m'ennuyais. J'ai fait des recherches dans «Projets Arduino» sur Google, et cela a été fait sur le terrain de jeu Arduino.

REMARQUE: Ce n'était pas mon idée de départ, je l'ai découverte sur le terrain de jeu Arduino, mais voici l'article d'origine: http://runtimeprojects.com/2016/02/a-lightning-detector-for-arduino/. J'ai apporté des modifications à mon projet, ce qui pourrait l'améliorer.

Vous avez besoin:

  1. x1 Arduino

    (J'ai commencé sur Uno mais j'ai fini par utiliser un micro)

  2. x1 planche à pain

    (Vous pourriez éventuellement finir par utiliser un Perfboard, je suppose)

  3. x4-7 fils de démarrage

    (Pour connecter des composants)

  4. x1 diviseur de tension circut

    Vous avez deux options:

    1. x1 potentiomètre
    2. Résistances x3
      1. x2 10K Ohm
      2. x1 3,3 M Ohm

Provisions:

Étape 1: Connaissance de la foudre en arrière-plan

Lorsque la foudre frappe, elle libère de nombreux types d'énergie. La plupart des gens savent qu'il émet de la lumière et du son, mais Lightning émet également des ondes radio, notamment dans les gammes VLF (Très Basse Fréquence) à LF (Basse Fréquence), soit environ 3 à 300 KHz. Avec l’Arduino, les fréquences d’environ 7 KHz peuvent être capturées, ce qui se situe bien dans les limites des fréquences émises.

Avec ce projet, nous devrions pouvoir détecter la foudre dans un rayon de 20 kilomètres environ.

Étape 2: le circuit

AVERTISSEMENT: La foudre peut induire des courants positifs et négatifs dans le fil, veuillez donc suivre les instructions à la lettre 100% certain que votre diviseur de tension fonctionne pour éviter d’endommager votre Arduino.

Le circuit est très simple. La partie la plus compliquée est appelée un diviseur de tension, ceci afin d'éviter que notre Arduino ne soit endommagé par les courants induits dans le fil par Lightning.

Choisir son poison: diviseurs de tension

Il existe différentes manières d’implémenter un diviseur de tension dans votre circuit.

Option 1: résistance

Si vous souhaitez utiliser des résistances, vous devrez les fixer comme sur la deuxième image.

Option 2: potentiomètre

Si vous envisagez d’utiliser un potentiomètre, vous pouvez l’attacher comme sur le schéma de circuit, la première image.

Étape 3: le code

Deux programmes différents sont en cours d’exécution pour un fonctionnement normal.

Téléchargez mon code et les schémas de circuits de Github.

  1. Arduino

    Le programme Arduino est très simple.

    void setup() {

    Serial.begin (115200); // Configuration des communications série à 115200 bauds.

    pinMode (A4, INPUT); // Définir la broche analogique 4 comme entrée

    }

    boucle vide () {

    Serial.println (analogRead (A4)); // Affiche la valeur de la broche A4 sur le port série

    }

  2. En traitement

    Le programme de traitement est un peu plus compliqué

    import processing.serial. *;

    Serial MyPort; // le port série

    int xPos = 1; // position horizontale du graphe float inByte = 0;

    void setup () {

    // définit la taille de la fenêtre (Remarque: peut être mis à l'échelle pour votre écran):

    taille (1000, 750);

    // Liste tous les ports série disponibles

    // si vous utilisez Processing 2.1 ou une version ultérieure, utilisez Serial.printArray ()

    println (Serial.list ());

    // Ouvre le port que tu utilises.

    // Change le 0 en n'importe quel # de la liste que vous utilisez (-1)

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

    // ne génère pas serialEvent () sauf si vous obtenez un caractère de nouvelle ligne:

    myPort.bufferUntil (' n');

    // définit l'arrière-plan initial:

    fond (0);

    }

    void draw () {

    // Dessiner la ligne:

    accident vasculaire cérébral (127, 34, 255);

    ligne (xPos, hauteur, xPos, hauteur - inByte);

    // au bord de l'écran, retourne au début:

    si (xPos> = largeur) {

    xPos = 0;

    fond (0);

    }

    autre {

    // incrémente la position horizontale:

    xPos ++;

    }

    }

    annuler serialEvent (Serial myPort) {

    // récupère la chaîne ASCII:

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

    if (inString! = null) {

    // élimine les espaces:

    inString = trim (inString);

    // convertit en un int et mappe à la hauteur de l'écran:

    inByte = float (inString);

    println (inByte);

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

    }

    }