Détecteur de foudre Arduino Pocket (3 / 5 étapes)

Étape 3: Code et icônes

Maintenant vient la partie qui fait tout travailler !

Le code. Ou en ArduinoSpeak (l’esquisse).

Mise à jour : J’ai trouvé et corrigé un petit bug qui pourrait déclencher le détecteur de geler lorsqu’il détecte un signal inconnu. J’ai également ajouté la possibilité pour le détecteur mémoriser les réglages lorsque éteint en stockant les valeurs dans l’EEPROM. le code de mise à jour est dans le fichier zip avec le code d’origine. Le code de mise à jour a l’EEPROM ajouté au nom du fichier dans le fichier zip.

J’ai aussi inclus les fichiers d’imprimante 3d sketchup pour le cas.

Le capteur AS3935 fondamentalement juste s’assoit et écoute pour contacteur via l’antenne d’induction petit sur la carte de dérivation. Lorsqu’il détecte quelque chose, qu’elle estime foudre ou bruit il déclenche whats appelle une IRQ. Il s’agit d’un signal qui est câblé dans l’arduino qui peut faire arrêter et attention, peu importe ce qu’il fait au moment de payer.

Quand l’Arduino voit la ligne IRQ changer il s’arrête quelque code il s’exécute et saute un peu spécial du code qui peut lire les données du capteur a stocké sur l’événement particulier il est détecté et ensuite afficher ou donner suite à ce qu’il trouve.

Dans notre cas l’Arduino est assis et heureusement (ou malheureusement, qui sait qu’il pense de lui.) se déplaçant une bitmap peu de nuages à l’écran. Encore et encore... il ressemble également momentanément pour voir si une touche a été pressée indiquant à l’utilisateur le tout-puissant veut modifier certains paramètres.

Si le capteur pokes l’arduino sur le côté avec une IRQ. L’arduino arrête animant le petit nuage et lui demande le capteur ce qu’il veut. L’arduino puis met à jour l’affichage pour indiquer ce qu’il a appris.

L’esquisse comprend également certains paramètres de configuration rudimentaires comme la question de savoir si nous voulons connaître la distance de la foudre en Miles ou kilomètres ou si nous sommes à l’intérieur ou à l’extérieur.

J’ai inclus un fichier zip qui contient tous les fichiers que j’ai créé dans le cadre de ce projet. Il contient également les bibliothèques pour le jury de détecteur de foudre. Il a tout ce que vous devrez construire ce la même façon que j’ai.

Les bibliothèques de Nokia 5110 sont disponibles dans le gestionnaire de bibliothèques IDE Arduino. Il suffit de chercher adafruit GFX et l’écran LCD.

Voici le code...

------------------------------------------------------------------

#include #define eeprom_dist 4 //Define emplacement de la mémoire eeprom pour stocker mile ou km calcul #define eeprom_level 5 //Define eeprom mémoire emplacement pour stocker le calcul mile ou km #include / * * AS3935 communique avec i2c dans ce sketch * et le Nokia 5110 utilise SPI * / #include #include #include Adafruit_PCD8544 display = Adafruit_PCD8544 (8, 5, 4) ; #include « I2C.h » / / include bibliothèques jouant avec Fusion AXS3935 #include « PWFusion_AS3935_I2C.h » / / interruption trigger volatil global var int8_t AS3935_ISR_Trig = 0 ; définir des valeurs utilisées par le panneau et boutons int adc_key_in = 0 ; int z = 0 ; int mi = 0 ; #define btnLEFT 3 #define btnDOWN 2 #define btnUP 1 #define btnRIGHT 0 #define btnSELECT 4 #define btnNONE 5 / / defines pour config matériel #define SI_PIN 9 #define IRQ_PIN 2 / / broches numériques 2 et 3 sont disponibles pour des capacités d’interruption #define AS3935_ADD 0 x 03 / / x03-config standard de PWF SEN-39001-R01 #define AS3935_CAPACITANCE 104 / / <--définir cette valeur au nombre énumérés ON votre Conseil / / définit des paramètres généraux puce #define AS3935_INDOORS 0 #define AS3935_OUTDOORS 1 #define AS3935_DIST_ DIS 1 #define AS3935_DIST_EN 0 int l = 0 ; int n = 0 ; int lsDist = 0 ; int mapDist = 0 ; int m = 0 ; dist int = 0 ; tt int = 0 ; prototypes void AS3935_ISR() ; ---données qui génère les icônes à l’écran PWF_AS3935_I2C lightning0 (IRQ_PIN (uint8_t), SI_PIN (uint8_t), AS3935_ADD (uint8_t)) ; const unsigned char PROGMEM lightning_bmp [32] = {0 x 01, 0xE0, 0 x 02, 0 x 20, 0x0C, 0 x 18, 0 x 12, 0 x 24, 0 x 21, 0 x 06, 0 x 10, 0 x 02, 0x1F, 0xFC, 0 x 01, 0xF0, 0 x 01, 0xC0, 0 x 03, 0 x 80, 0 x 07, 0xF8, 0 x 00, 0xF0, 0 x 00, 0xC0, 0 x 01, 0 x 80, 0 x 01, 0 x 00, 0 x 01, 0 x 00} ; Nuage de const unsigned char PROGMEM [32] = {0 x 01, 0xE0, 0 x 02, 0 x 20, 0x0C, 0 x 18, 0 x 12, 0 x 24, 0 x 21, 0 x 06, 0 x 10, 0 x 02, 0x1F, 0xFC, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00} ; foudre de PROGMEM const unsigned char [32] = {0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 01, 0xF8, 0 x 01, 0xF0, 0 x 01, 0xC0, 0 x 03, 0 x 80, 0 x 07, 0xF8, 0 x 00, 0xF0, 0 x 00, 0xC0, 0 x 01, 0 x 80, 0 x 01, 0 x 00, 0 x 01, 0 x 00} ; int read_buttons() {adc_key_in = analogRead(0); / / lire la valeur du panneau de boutons. Les valeurs retournées si un bouton est pressé et que l'on c’était... si btnNONE retour (adc_key_in > 1000) ; Si (adc_key_in == 0) return btnLEFT ; Si (adc_key_in > 310 et adc_key_in < 330) retournent btnDOWN ; Si (adc_key_in > 120 et adc_key_in < 145) return btnUP ; Si (adc_key_in > 480 et adc_key_in < 550) return btnRIGHT ; Si (adc_key_in > 700 et adc_key_in < 800) retournent btnSELECT ; Return btnNONE ; Lorsque tous les autres échouent, le retour...} ---la config menu menu Sub () {delay(400) ; tout en (read_buttons()! = 4) {display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; display.println("Enter=Return") ; display.setCursor(0,8) ; display.println ("Up = Mi"); display.setCursor(0,18) ; display.println ("bas = KM"); display.setCursor(0,28) ; display.println("Left=Indoors") ; display.setCursor(0,38) ; display.println ("droite = à l’extérieur") ; Display.Display() ; Si (read_buttons() == 1) {mi = 0 ; EEPROM.write(eeprom_dist,0) ; Écrire le paramètre pour mille (1) / (0) calcul de kilomètre d’EEPROM pour rappel après l’arrêt de display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; Display.println ("Set à KM") ; Display.Display() ; Delay(1000) ; menu() ; } Si (read_buttons() == 2) {mi = 1 ; EEPROM.write(eeprom_dist,1) ; Écrire réglage pour mille/kilomètre calcul EEPROM pour rappel après l’arrêt de display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; Display.println ("Set miles") ; Display.Display() ; Delay(1000) ; menu() ; } Si (read_buttons() == 0) {lightning0. AS3935_SetIndoors() ; Dist = 0 ; EEPROM.write(eeprom_level,0) ; Écrire le paramètre pour intérieur (0) / plein air (1) réglage sur AS3935 d’EEPROM pour rappel après l’arrêt de display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; Display.println("Indoor") ; display.setCursor(0,20) ; Display.println("Operation") ; Display.Display() ; Delay(1000) ; menu() ; } Si (read_buttons() == 3) {lightning0. AS3935_SetOutdoors() ; DIST = 1 ; EEPROM.write(eeprom_level,1) ; Écrire le paramètre pour intérieur (0) / plein air (1) réglage sur AS3935 d’EEPROM pour rappel après l’arrêt de display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; Display.println("Outdoor") ; display.setCursor(0,20) ; Display.println("Operation") ; Display.Display() ; Delay(1000) ; menu() ; retour}} ; } void setup() {mi = EEPROM.read(eeprom_dist) ; //Read paramètres stockés EEPROM dist = EEPROM.read(eeprom_level) ; //Read paramètres stockés EEPROM pinMode(6,OUTPUT) ; Serial.Begin(115200) ; Display.Begin() ; init fait / / vous pouvez changer le contraste autour pour s’adapter à l’écran / / pour le meilleur visionnement
! display.setContrast(25) ; Display.Display() ; Voir l’établissement splashscreen display.clearDisplay() ; display.setCursor(0,0) ; display.setTextSize(1) ; Display.println ("détecteur de foudre de Rath") ; display.setTextSize(1) ; display.drawBitmap (35, 22, lightning_bmp, 16, 16, 1) ; display.setTextColor(BLACK) ; Display.Display() ; Flash() ; Display.Display() ; Delay(3000) ; installation pour la la bibliothèque I2C: (activer les tractions, régler la vitesse à 400kHz) I2c.begin() ; I2C.pullup(true) ; I2C.setSpeed(1) ; Delay(2) ; lightning0. AS3935_DefInit() ; registres, par défaut la valeur / / maintenant mise à jour de capteur cal pour votre application et la mise sous tension puce lightning0. AS3935_ManualCal (AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN) ; Paramètres AS3935_ManualCal: / /--> capacitance, en pF (marqué sur le paquet) / /--> intérieur/extérieur (AS3935_INDOORS:0 / AS3935_OUTDOORS:1) / /--> perturbateurs (AS3935_DIST_EN:1 / AS3935_DIST_DIS:2) / / fonction également se mette la puce / / activer interruption (crochet broche IRQ à Arduino Uno/Mega interruption entrée: 0 -> pin 2, 1 -> pin 3) attachInterrupt (0, AS3935_ISR, RISING) ; lightning0. AS3935_PrintAllRegs() ; AS3935_ISR_Trig = 0 ; facteur déclenchant} / /---cela juste se joue encore et encore... et plus... et o... void loop() {display.clearDisplay() ; analogWrite(6,60) ; //---turn le rétro-éclairage / /---construire l’écran display.setCursor(0,0) ; display.println("LastStrike") ; display.setCursor(0,8) ; display.println ("Dist:" + String(lsDist)) ; display.setCursor(50,8) ; ---Si nous choisissons miles, faire cela si (mi == 1) {display.println ("Mi");} //otherwise suppose que nous voulons faire... else {display.println ("Km");} display.setCursor(0,17) ; Display.println("0") ; display.setCursor(72,17) ; Si miles---40 km = 25 miles d’aaprox if(mi==1) {display.println("25");} else {/ /---sinon juste redimensionnez-la pour 40 km display.println("40");} display.setCursor(0,39) ; Display.println ("grèves:") ; display.setCursor(48,39) ; Display.println(String(l)) ; display.setCursor(64,39) ; --Placez une indication que nous nous sommes fixés à l’intérieur dans le coin inférieur droit de l’écran si (dist==1){display.println("Out");} d’autre {/ /--ou Show ont été fixées pour l’extérieur display.println("In");} //--draw la display.drawLine d’échelle de distance (0, 84, 37, 37, noir) ; display.drawLine (0, 0, 25, 37, noir) ; display.drawLine (21, 21, 35, 37, noir) ; display.drawLine (42, 42, 35, 37, noir) ; display.drawLine (63, 63, 35, 37, noir) ; display.drawLine (83, 83, 25, 37, noir) ; display.fillCircle(mapDist,35,2,BLACK) ; Si (l == 0) / /--nous commençons par aucun display.setCursor(9,24) de grèves détectés ; Display.println (« aucune grève") ; Si (l > 0) //-if theres une grève. endroit un peu zapper à la distance il est... display.drawBitmap (mapDist, 22, foudre, 16, 16, 1) ; Si (mapDist > 20) {display.setCursor(9,24) ; display.println ("Far chapelet");} display.display() ; if(0 == AS3935_ISR_Trig) {/ / Serial.println(read_buttons()) ; animateCloud(); / / Serial.println(read_buttons()) ; if (read_buttons()! = 5) {menu();}; / / reset interrupt flag AS3935_ISR_Trig = 0; / / maintenant get interrupt source uint8_t int_src = lightning0. AS3935_GetInterruptSrc() ; if(0 == int_src) {display.setCursor(72,0) ; display.println("?") ; display.display(); / / delay(1000) ; display.setCursor(72,0) ; display.println("");} d’autre if(1 == int_src) {flash() ; uint8_t lightning_dist_km = lightning0. AS3935_GetLightningDistKm() ; display.clearDisplay() ; l ++ ; Display.println ("Lightning!!") ; Si (mi == 1) {lsDist =(lightning_dist_km * 0.62137);} else {lsDist=(lightning_dist_km)}; display.println((lsDist)) ; mapDist = carte (lsDist, 0, 0, 25, 83) ; Display.println ("Miles") ; Display.Display() ; Flash() ; } else if(2 == int_src) {/ / display.clearDisplay() ; display.setCursor(72,0) ; display.println("N"); / / n ++; display.display() ; delay(1000) ; display.setCursor(72,0) ; display.println("");} d’autre if(3 == int_src) {display.clearDisplay() ; display.println ("niveau de bruit trop élevé"); display.display() ; delay(500);} / / lightning0. AS3935_PrintAllRegs() ; pour déboguer...} } / / Ceci est gestionnaire d’irq pour AS3935 interruptions, doit retourner void et ne prendre aucun argument / / toujours rendre le code à interrompre des gestionnaires rapide et court AS3935_ISR() Sub {AS3935_ISR_Trig = 1;} //---flash la flash() Sub routine affichage {pour (int y = 1; y < 5; y ++) {digitalWrite(6,LOW) ; display.invertDisplay(true) ; delay(100) ; digitalWrite(6,HIGH) ; display.invertDisplay(false) ; delay(100);}} //--make que cloud allez bébé!! void animateCloud() {display.drawBitmap (m, 15, nuage, 16, 16, 1); display.display() ; if (m > = 80) {m = 0;} m ++; delay(200);}

Articles Liés

Foudre ! Le détecteur de foudre pour la Station météo de framboise Pi (mis à jour)

Foudre ! Le détecteur de foudre pour la Station météo de framboise Pi (mis à jour)

Dans ce Instructable vous apprendrez :Comment faire pour a connecter un détecteur de foudre d'un Solar Powered Station météoComment concevoir et positionnez le détecteur de foudre pour meilleure perfomanceComment recueillir des données pour voir l'ar
Détecteur de foudre Steampunked « Jupiter »

Détecteur de foudre Steampunked « Jupiter »

Salut tout le monde !C'est mon dernier instructable nommé détecteur de foudre Steampunked « Jupiter »** Jupiter était un Dieu de lancer flash des anciens RomainsUn orage avec éclairs un profond tonnerre est toujours passionnant de l'humanité. Il est
Détecteur de Stress Arduino

Détecteur de Stress Arduino

De EE122B, Introduction à l'électronique biomédicale, Université de StanfordEnseigné par le professeur Greg Kovacs, printemps 2014Le problème :Le stress est une partie omniprésente de la vie moderne au rythme rapide. En outre, il y a un nombre croiss
Tracker avec détecteurs infrarouge passifs, Arduino et un Servo de mouvement

Tracker avec détecteurs infrarouge passifs, Arduino et un Servo de mouvement

il s'agit de mon suivi de tête à l'aide de quatre détecteurs infrarouge passifs (détecteurs infrarouge passifs), une carte Arduino Uno et un servo de mouvement.C'est une façon simple de donner l'impression que la tête (birdy) effectivement suit le mo
Détecteur de mouvement Arduino

Détecteur de mouvement Arduino

L'écran Display To You « Détecteur de mouvement » puis affichant mon nom puis l'affichage de « Traitement des données »Pendant huit secondes pour vous donner le temps de suivre une voie espère que vous aimez ce projet:))Étape 1: Liste des piecesdans
Détecteur de l’Arduino EMF (champ électromagnétique)

Détecteur de l’Arduino EMF (champ électromagnétique)

A tout à l'arrière, j'ai vu un détecteur EMF (champ électromagnétique) au makezine.com qui a utilisé un diagramme à barre led. J'ai décidé de le modifier pour utiliser un affichage à LED 7 segments ! Voici mon projet. Désolé je n'ai pas des photos d'
Détecteur de mouvement Arduino + rendent sans fil + appel téléphonique lorsqu’un mouvement détecté

Détecteur de mouvement Arduino + rendent sans fil + appel téléphonique lorsqu’un mouvement détecté

J'ai toujours voulu un système de capteur de mouvement à monmaison, mais ils sont tous trop chers.Étant donné que j'ai commencé à travailler avec arduino j'ai réalisé que je pouvais le faire moi-même.J'ai donc fait ce projet en 3 parties :1) détecteu
Détecteur de Distance Arduino avec un LED et Buzzer

Détecteur de Distance Arduino avec un LED et Buzzer

il s'agit d'un simple guide sur comment faire un détecteur de distance à l'aide d'un Arduino, un capteur à ultrasons HC-SRO4, un Buzzer et quelques LED.  Le but ultime de ce tutoriel est d'utiliser le buzzer et LEDs pour afficher dans quelle mesure l
INTERRUPTEUR à détecteur tactile capacitif Arduino - TTP223B -

INTERRUPTEUR à détecteur tactile capacitif Arduino - TTP223B -

Bonjour tout le monde! Aujourd'hui, j'ai fait un code pour le ttp223b capacitive touch sensor. Un capteur que je teste pour ma boutique en ligne et il fait son travail ! Si peu de temps je l'ajouterai à ma boutique en ligne à arduinosensors.nl. Le co
Détecteur de signal Arduino IR

Détecteur de signal Arduino IR

Cet Instructable va vous montrer comment utiliser votre module Arduino pour détecter si un signal clignotant IR est présent.Cela pourrait être utile dans le suivi de l'IR, où vous ne voulez pas suivre l'objet IR plus brillants mais celui des impulsio
Détecteur sonore de ARDUINO un Transistor

Détecteur sonore de ARDUINO un Transistor

Aussi facile à construire le circuit vous permettra de détecter les sons avec votre ARDUINO, vous pouvez acheter un module de capteur de détection sonore fait pre mais ils ne fonctionnent pas une valeur un sh! t par rapport à mon expérience.L'image c
Détecteur de métaux de l’Arduino

Détecteur de métaux de l’Arduino

Construire un regard frais et tout à fait unique détecteur de métal avec 5 recherche distincte des bobines que la lumière vers le haut lorsqu'un métal est détecté. Le disque chercheur le plus proche pour le métal brille mieux aider à identifier l'emp
Arduino TV Annoyer Plus

Arduino TV Annoyer Plus

tout d'abord, je tiens à donner crédit à: Il s'agit de sa conception, j'ai peaufiné un peu aller à quelques pas plus loin.  C'est le dispositif infâme qui une fois que vous éteignez votre téléviseur il sera inconsciemment à la personne assis là rallu
Carré de fumée (détecteur de fumée GSM)

Carré de fumée (détecteur de fumée GSM)

ARRIÈRE-PLANFumée traditionnelle sont limités dans leur fonction car ils sont en mesure d'indiquer la présence de fumée et d'envoyer une sonnerie à la région environnante. Cependant, que se passe-t-il si personne n'est présent dans l'environnement où