Detector de rayos de Arduino bolsillo (3 / 5 paso)

Paso 3: Código y los iconos

Ahora viene la parte que hace todo el trabajo!

El código. O en ArduinoSpeak (el boceto).

ACTUALIZACIÓN: he encontrado y corregido un pequeño bug que podría causar el detector congelar cuando detecta una señal desconocida. También he añadido la capacidad para el detector guardar la configuración cuando apagado almacenando los valores en la EEPROM. el código actualizado está en el zip con el código original. El código actualizado tiene el EEPROM anexado al nombre de archivo dentro del archivo zip.

También se incluyen los archivos de impresora 3d de sketchup para el caso.

El Sensor AS3935 básicamente sólo se sienta y escucha lightnig vía la antena pequeña inducción en el tablero de arranque. Cuando detecta algo que piensa es rayo o ruido que provoca la cuál es llamada un IRQ. Esto es una señal que es duro por cable en el arduino que puede hacer que se detenga y preste atención no importa lo que está haciendo en el momento.

Cuando Arduino ve la línea IRQ cambiar detiene cualquier código corre y salta a un poco especial de código que pueda leer los datos del sensor guardados sobre el evento particular se detecta y luego mostrar o actuar según lo que encuentre.

En nuestro caso el Arduino se sienta y felizmente (o Infelizmente, quién sabe cómo se siente acerca de ello.) un pequeño mapa de bits de nube en movimiento en la pantalla. Una y otra vez... parece también momentáneamente para ver si un botón tiene ben presiona indicando el usuario Todopoderoso quiere cambiar algunos ajustes.

Si el Sensor pasa el arduino en el lado con un IRQ. El arduino para animar la nubecita y pide el sensor lo que quiere. El arduino luego actualiza la pantalla para mostrar lo ha aprendido.

El bosquejo también incluye algunas opciones de configuración rudimentaria como si queremos saber la distancia del relámpago en millas o kilómetros o si estamos dentro o fuera.

He incluido un archivo zip que contiene todos los archivos que he creado en relación con este proyecto. también contiene las bibliotecas de la Junta de detector del relámpago. Tiene todo que lo necesario para construir esta igual que tengo.

Las bibliotecas de Nokia 5110 están disponibles en el administrador de bibliotecas de la IDE de Arduino. Simplemente busca por adafruit GFX y LCD.

Aquí está el código...

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

#include #define eeprom_dist 4 //Define ubicación de memoria eeprom para almacenar milla o km cálculo #define eeprom_level 5 //Define eeprom ubicación de memoria para almacenar cálculo de millas o km #include / * * AS3935 comunica con i2c en este bosquejo * y el Nokia 5110 utiliza SPI * / #include #include #include Adafruit_PCD8544 display = Adafruit_PCD8544 (8, 5, 4); #include "I2C.h" / / incluye bibliotecas jugando con fusión AXS3935 #include "PWFusion_AS3935_I2C.h" / / interrupción desencadenar var global volátil int8_t AS3935_ISR_Trig = 0; definir algunos valores utilizados por el panel y los botones int adc_key_in = 0; int z = 0; mi int = 0; #define #define btnLEFT 3 btnDOWN 2 #define btnUP 1 #define btnRIGHT 0 #define btnSELECT 4 #define btnNONE 5 / / define para hardware config #define SI_PIN 9 #define IRQ_PIN 2 / digitales pins 2 y 3 están disponibles para la capacidad de interrupción #define AS3935_ADD 0 x 03 / / x03-configuración estándar de PWF SEN-39001-R01 #define AS3935_CAPACITANCE 104 / / <--establecer este valor a la número listado en su Junta / / define configuración de chip general #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 de int = 0; prototipos de void AS3935_ISR(); ---datos que construye el lightning0 de los iconos en pantalla PWF_AS3935_I2C (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, 0x18, 0x12, 0x24, 0x21, 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, 0x07, 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}; const unsigned char PROGMEM nube [32] = {0 x 01, 0xE0, 0 x 02, 0 x 20, 0x0C, 0x18, 0x12, 0x24, 0x21, 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}; rayo de PROGMEM de 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, 0x07, 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); / / lee el valor de placa. Valores devuelven si obtiene presiona un botón y que se fue... Si (adc_key_in > 1000) vuelta btnNONE; Si (adc_key_in == 0) volver btnLEFT; Si (adc_key_in > 310 y 330 < adc_key_in) devuelven btnDOWN; Si (adc_key_in > 120 y adc_key_in < 145) vuelta btnUP; Si (adc_key_in > 480 y adc_key_in < 550) volver btnRIGHT; Si (adc_key_in > 700 y 800 < adc_key_in) devuelven btnSELECT; volver btnNONE; Cuando todos los demás fallan, esto regresar...} ---la config menú menú vacío () {delay(400); mientras que (read_buttons()! = 4) {display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.println("Enter=Return"); display.setCursor(0,8); display.println ("hasta = Mi"); display.setCursor(0,18); display.println ("hacia abajo = kilometros"); display.setCursor(0,28); display.println("Left=Indoors"); display.setCursor(0,38); display.println ("derecha = al aire libre"); display.display(); Si (read_buttons() == 1) {mi = 0; EEPROM.write(eeprom_dist,0); Escribir configuración de milla (1) / (0) kilómetro cálculo EEPROM de memoria después de energía apagado display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.println "(juego del km"); display.display(); Delay(1000); Menu(); } Si (read_buttons() == 2) {mi = 1; EEPROM.write(eeprom_dist,1); Escribir ajuste para el cálculo de la milla/kilómetro a EEPROM de memoria después de energía apagado display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.println "(conjunto de millas"); display.display(); Delay(1000); Menu(); } Si (read_buttons() == 0) {lightning0. AS3935_SetIndoors(); Dist = 0; EEPROM.write(eeprom_level,0); Escribir configuración para interiores (0) (1) al aire libre ajuste en AS3935 para EEPROM de memoria después de energía apagado 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); Escribir configuración para interiores (0) (1) al aire libre ajuste en AS3935 para EEPROM de memoria después de energía apagado display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.println("Outdoor"); display.setCursor(0,20); display.println("Operation"); display.display(); Delay(1000); Menu(); retorno de}}; } void setup() {mi = EEPROM.read(eeprom_dist); //Read almacena configuración de EEPROM dist = EEPROM.read(eeprom_level); //Read almacena la configuración de pinMode(6,OUTPUT) EEPROM; Serial.Begin(115200); display.Begin(); init realizada / / se puede cambiar el contraste para adaptar la pantalla / / para la mejor visualización
! display.setContrast(25); display.display(); Show splashscreen display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.println ("hablantes Lightning Detector"); display.setTextSize(1); display.drawBitmap (35, 22, lightning_bmp, 16, 16, 1); display.setTextColor(BLACK); display.display(); Flash(); display.display(); Delay(3000); configuración para el la librería I2C: (permitir finalizar, ajustar la velocidad a 400kHz) I2c.begin(); I2C.pullup(true); I2C.SETSPEED(1); Delay(2); lightning0. AS3935_DefInit(); conjunto de registros por defecto / / actualizar ahora cal sensor para su aplicación y encendido chip lightning0. AS3935_ManualCal (AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN); Parámetros de AS3935_ManualCal: / /--> capacidad en pF (marcado en el paquete) / /--> bajo techo/al aire libre (AS3935_INDOORS:0 / AS3935_OUTDOORS:1) / /--> perturbadores (AS3935_DIST_EN:1 / AS3935_DIST_DIS:2) / / función también enciende el chip / / habilitar interrupción (gancho pin IRQ para Arduino Uno/Mega interrupción entrada: 0 -> pin 2, 1 -> pin 3) attachInterrupt (0, AS3935_ISR, RISING); lightning0. AS3935_PrintAllRegs(); AS3935_ISR_Trig = 0; gatillo claro} / /---esto solo consigue jugado una y otra vez... y más... y o... void loop() {display.clearDisplay(); analogWrite(6,60); //---turn en la luz de fondo / /---construir la pantalla display.setCursor(0,0); display.println("LastStrike"); display.setCursor(0,8); display.println ("Dist:" + String(lsDist)); display.setCursor(50,8); ---Si elegimos millas, hacer este si (mi == 1) {display.println ("Mi");} //otherwise suponer que queremos hacer esto... else {display.println ("Km");} display.setCursor(0,17); display.println("0"); display.setCursor(72,17); Si millas---40 km = aaprox 25 millas if(mi==1) {display.println("25");} else {/ /---si no sólo la escala para display.println("40") de 40 km;} display.setCursor(0,39); display.println ("huelgas:"); display.setCursor(48,39); display.println(String(l)); display.setCursor(64,39); --colocar una indicación que nosotros estamos dentro en la esquina inferior derecha de la pantalla si (dist==1){display.println("Out");} más {/ /--o mostrar fueron fijados para al aire libre display.println("In");} //--draw la display.drawLine de la escala de distancia (0, 37, 84, 37, negro); display.drawLine (0, 0, 25, 37, negro); display.drawLine (21, 35, 21, 37, negro); display.drawLine (42, 42, 35, 37, negro); display.drawLine (35, 63, 63, 37, negro); display.drawLine (25, 83, 83, 37, negro); display.fillCircle(mapDist,35,2,BLACK); Si (l == 0) / /--empezamos con no display.setCursor(9,24) de ataques detectados; display.println ("sin golpes"); Si (l > 0) //-if theres una huelga. lugar un poco zap en la distancia lo es... display.drawBitmap (mapDist, 22, relámpago, 16, 16, 1); Si (mapDist > 20) {display.setCursor(9,24); display.println ("Far Ligntning");} display.display(); if(0 == AS3935_ISR_Trig) {/ / Serial.println(read_buttons()); animateCloud(); / / Serial.println(read_buttons()); si (read_buttons()! = 5) {menu();}; / / reposición de bandera de interrupción AS3935_ISR_Trig = 0; / / ahora consigue interrumpir la fuente 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("");} otra cosa if(1 == int_src) {flash(); uint8_t lightning_dist_km = lightning0. AS3935_GetLightningDistKm(); display.clearDisplay(); l ++; display.println ("rayos!!"); Si (mi == 1) {lsDist =(lightning_dist_km * 0.62137);} else {lsDist=(lightning_dist_km);} display.println((lsDist)); mapDist = mapa (lsDist, 0, 0, 25, 83); display.println ("millas"); 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("");} otra cosa if(3 == int_src) {display.clearDisplay(); display.println ("nivel de ruido muy alto"); display.display(); delay(500);} / / lightning0. AS3935_PrintAllRegs(); para debug...} } / / Esto es el controlador de irq para AS3935 interrupciones, tiene que regresar vacío y no tomar argumentos / siempre hacer código en interrumpir controladores rápido y corto void AS3935_ISR() {AS3935_ISR_Trig = 1;} //---flash el flash() vacía rutina pantalla {para (int y = 1; y < 5; y ++) {digitalWrite(6,LOW); display.invertDisplay(true); delay(100); digitalWrite(6,HIGH); display.invertDisplay(false); delay(100);}} //--make que nube bebé ir!!!! void animateCloud() {display.drawBitmap (m, 15, nube, 16, 16, 1); display.display(); si (m > = 80) {m = 0;} m ++; delay(200);}

Artículos Relacionados

Relámpago! El Detector de rayos para la estación meteorológica de frambuesa Pi (actualizado)

Relámpago! El Detector de rayos para la estación meteorológica de frambuesa Pi (actualizado)

En este Instructable aprenderás:Cómo conectar un Detector de rayos a un Solar Powered estación meteorológicaCómo diseñar y colocar el detector de rayos para mejor perfomanceCómo reunir datos para ver la historia de Lightning como ocurreCómo conectar
Cómo hacer una nube de cámaras (Detector de rayos cósmicos)

Cómo hacer una nube de cámaras (Detector de rayos cósmicos)

6 año viejo Samatha muestra cómo construir un compartimiento de nube (simple, elegante y económico Detector de rayos cósmicos) en casa y detectar rayos cósmicos muones/electrones y partículas alfa.Paso 1: Herramientas para construir un compartimiento
Detector láser de Arduino con teclado

Detector láser de Arduino con teclado

Hola a todos!!!!!!He sido jugar con unos pocos componentes y mi arduino. He descubierto este proyecto la semana pasada y sólo tenía que compartir con todos ustedes. Lo que es, es un rayo láser que golpea una célula fotoeléctrica. El arduino lee la cé
Controlado por Arduino bolsillo Etch A Sketch paseo aleatorio simulación

Controlado por Arduino bolsillo Etch A Sketch paseo aleatorio simulación

este proyecto es el resultado de Wal-Mart compra por impulso salida carril de Etch A Sketch de bolsillo por $3.99.Dos motores paso a paso conducen los ejes de mando de Etch A Sketch, y un motor servo gira Etch A Sketch para borrar la pantalla.  Uso a
Control de gestos de usable Wireless con PHIRO Pro + Arduino + bolsillo código smartphone app (modo JEDI)

Control de gestos de usable Wireless con PHIRO Pro + Arduino + bolsillo código smartphone app (modo JEDI)

Una vez más, aquí estamos con otro tutorial para "despertar a la fuerza" dentro de ti! Con la nueva película de Star Wars a la vuelta de la esquina, hemos pensado que sería divertido para utilizar la fuerza para controlar PHIRO. En este tutorial
Detector de metales de Arduino

Detector de metales de Arduino

Construir una mirada fresca y único detector de metales con búsqueda separada 5 bobinas esa luz hasta cuando se detecta el metal. La bobina de búsqueda más cercana al metal se ilumina mejor ayudando a identificar la ubicación del tesoro escondido!Pas
Detector de EMI con Arduino

Detector de EMI con Arduino

Recientemente tuve un problema con ruido eléctrico y desarrolló este sencillo detector de ruido EMI para rastrear la fuente. Este Instructable describe mi problema y la solución que he desarrollado. Ofrecen con la esperanza de va ser útil para usted
Detector de LPG de Arduino y llama

Detector de LPG de Arduino y llama

Este proyecto es un detector Arduino basada en LPG y llama. Tengo la idea de construir este proyecto porque estos días tengo mis vacaciones y siempre he querido hacer un proyecto innovador y único. Espero que te gusta.Paso 1: Recolectar las piezas ne
Detector de distancia de Arduino con zumbador y LED

Detector de distancia de Arduino con zumbador y LED

esta es una guía sencilla sobre cómo hacer un detector de distancia utilizando un Arduino, un Sensor de ultrasonidos HC-SRO4, un zumbador y un LED.  El objetivo final de este tutorial es utilizar el zumbador y LED mostrar cuánto es el objeto del sens
Seguridad alarma Laser detector o sensor para arduino para principiantes

Seguridad alarma Laser detector o sensor para arduino para principiantes

Hola, chicos hoy me y todos vamos a hacer un detector de láser trabajan con un Arduino y piezo.Cómo funciona. Cuando el láser está bloqueado por el jefe de módulo el piezoalarma para arriba.permite así iniciar. :):):):):):):):):):):):):):):):):):):):
Detector de EMF de Arduino

Detector de EMF de Arduino

aquí es un pequeño y rápido proyecto que puedes hacer con un arduino, el Detector EMF!Paso 1: circuitos Todo lo que necesitas para este proyecto es10 - resistencias de 330 ohm10 - LED1-resistencia de 3.3 mSólido de 1 hilo (esto servirá como la punta
Detector de Color simple "arduino"

Detector de Color simple "arduino"

Este tutorial va a llevará a través de cómo hacer detector de color simple, con aplicaciones de VB.net a mostrar color. Es es relativamente sencillo de hacer, mientras que el código es de longitud moderada. La salida es en forma de un valor hexadecim
Detector de mentiras y Arduino Biofeedback basado

Detector de mentiras y Arduino Biofeedback basado

Este tutorial explicará cómo construir una máquina de biorretroalimentación. Pero primero un poco de teoría.¿Qué es biofeedback?[Fuente: Wikipedia | https://en.wikipedia.org/wiki/Biofeedback]Biofeedback es el proceso de obtener mayor conocimiento de
Dispositivo de Detector de buzón Arduino Wireless

Dispositivo de Detector de buzón Arduino Wireless

Si eres algo como yo, esperamos al buzón de correo que llegan como un niño nervioso esperando sus regalos en Nochebuena. Puesto que el tiempo que llega mi correo no es siempre consistente, revisé mi correo varias veces al día. Para resolver este prob