Arduino Pocket Lightning detektor (3 / 5 steg)

Steg 3: Kod och ikoner



Nu kommer den del som gör det hela arbete!

Koden. Eller i ArduinoSpeak (skiss).

UPPDATERING: Jag hittade och korrigerade en liten bugg som skulle orsaka detektorn att frysa när man upptäckt en okänd signal. Jag har också lagt till möjligheten för detektorn spara inställningarna när avstängd genom att lagra värdena i EEPROM. uppdaterade koden är i zip-filen tillsammans med den ursprungliga koden. Uppdaterade koden har EEPROM läggs till i filnamnet i zipfilen.

Jag ingår också sketchup 3d skrivare filerna för fallet.

AS3935 sensorn i princip bara sitter och lyssnar efter lightnig via små induktion antennen på breakout ombord. När den upptäcker något funderare det, blixtnedslag eller buller det utlöser whats kallas en IRQ. Detta är en signal som är svårt kabelansluten till arduino som kan orsaka att det ska sluta och uppmärksamma oavsett vad det gör på gång.

När Arduino ser i IRQ-kanalen ändra det stannar oavsett vilken kod det är igång och hoppar till lite speciell kod som kan läsa data sensorn har lagrat om särskilt händelsen det identifieras och sedan Visa eller agera utifrån vad den hittar.

I vårt fall Arduino sitter och glatt (eller olyckligt, vem vet hur det känns om den..) rör sig en lite moln bitmapp över displayen. Om och om igen... det ser också tillfälligt för att se om en knapp har ben pressas som anger den allsmäktiga användaren vill ändra några inställningar.

Om sensorn Petar arduino i sidan med en IRQ. Arduinoen stannar animera lilla molnet och frågar sensorn vad den vill. Arduinoen uppdaterar sedan visning för att visa vad man har lärt sig.

Skissen också innehåller några rudimentära config inställningar som om vi vill veta lightning avståndet i Miles eller kilometer eller om vi är innanför eller utanför.

Jag har tagit en zip-fil som innehåller alla de filer som jag har skapat i förhållande till detta projekt. den innehåller också biblioteken för lightning detektor styrelsen. Den har allt du behöver att bygga detta på samma sätt som jag har.

Nokia 5110 biblioteken är tillgängliga i Arduino IDE bibliotek manager. Sök bara efter adafruit GFX och LCD.

Här är koden...

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

#include
#define eeprom_dist 4 //Define eeprom minnesplats att lagra mil eller km beräkning
#define eeprom_level 5 //Define eeprom minnesplats att lagra mil eller km beräkning

#include

/*
* AS3935 kommunicerar med i2c i denna skiss
* och Nokia 5110 använder SPI
*/
#include
#include
#include

Adafruit_PCD8544 display = Adafruit_PCD8544 (8, 5, 4);

#include "I2C.h"
inkludera spela med Fusion AXS3935 bibliotek
#include "PWFusion_AS3935_I2C.h"

avbryta trigger globala var
flyktiga int8_t AS3935_ISR_Trig = 0;

definiera vissa värden används av panel och knappar
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

definierar för hårdvara config
#define SI_PIN 9
#define IRQ_PIN 2 / / digital stift 2 och 3 finns tillgängliga för avbrott kapacitet
#define AS3935_ADD 0x03 / / x03-standard PWF SEN-39001-R01 config
#define AS3935_CAPACITANCE 104 / / <--SET detta värde till numret som anges på brädan

definierar för allmänna chip inställningar
#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;
int dist = 0;
int tt = 0;
prototyper
void AS3935_ISR();
---data som bygger på skärmen ikoner
PWF_AS3935_I2C lightning0 ((uint8_t) IRQ_PIN, (uint8_t) SI_PIN, (uint8_t) AS3935_ADD);
CONST unsigned char PROGMEM lightning_bmp [32] = {
0x01, 0xE0, 0x02, 0x20, 0x0C, 0x18, 0x12, 0x24, 0x21, 0x06, 0x10, 0x02, 0x1F, 0xFC, 0x01, 0xF0,
0x01, 0xC0, 0x03, 0x80, 0x07, 0xF8, 0x00, 0xF0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x00, 0x01, 0x00
};
CONST unsigned char PROGMEM cloud [32] = {
0x01, 0xE0, 0x02, 0x20, 0x0C, 0x18, 0x12, 0x24, 0x21, 0x06, 0x10, 0x02, 0x1F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
CONST unsigned char PROGMEM lightning [32] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x01, 0xF0,
0x01, 0xC0, 0x03, 0x80, 0x07, 0xF8, 0x00, 0xF0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x00, 0x01, 0x00
};

int read_buttons()
{
adc_key_in = analogRead(0); läsa värdet från knappanelen. Värden som returneras om en knapp blir pressade och som en det var...

om (adc_key_in > 1000) return btnNONE;
om (adc_key_in == 0) återvända btnLEFT;
om (adc_key_in > 310 och adc_key_in < 330) återvänder btnDOWN;
om (adc_key_in > 120 och adc_key_in < 145) återvända btnUP;
om (adc_key_in > 480 och adc_key_in < 550) återvända btnRIGHT;
om (adc_key_in > 700 och adc_key_in < 800) återvänder btnSELECT;
återvända btnNONE; När alla andra misslyckas, tillbaka detta...
}

---på config-menyn
void menyn)
{
Delay(400);
medan (read_buttons()! = 4) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Enter=Return");
display.setCursor(0,8);
display.println ("upp = Mi");
display.setCursor(0,18);
display.println ("ner = KM");
display.setCursor(0,28);
display.println("left=indoors");
display.setCursor(0,38);
display.println ("rätt = utomhus");
display.display();
om (read_buttons() == 1) {
mi = 0;
EEPROM.write(eeprom_dist,0); Skriva för (1) mil / (0) Kilometer beräkning till EEPROM för återkallelse efter avstängning
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println ("Set till KM");
display.display();
Delay(1000);
Menu();
}
om (read_buttons() == 2) {
mi = 1;
EEPROM.write(eeprom_dist,1); Skriva för mil/Kilometer beräkning till EEPROM för återkallelse efter power off
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println ("Set till Miles");
display.display();
Delay(1000);
Menu();
}
om (read_buttons() == 0) {
lightning0. AS3935_SetIndoors();
dist = 0;
EEPROM.write(eeprom_level,0); Skriva för (0) inomhus / utomhus (1) på AS3935 till EEPROM för återkallande efter power off
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Indoor");
display.setCursor(0,20);
display.println("operation");
display.display();
Delay(1000);
Menu();
}
om (read_buttons() == 3) {
lightning0. AS3935_SetOutdoors();
dist = 1;
EEPROM.write(eeprom_level,1); Skriva för (0) inomhus / utomhus (1) på AS3935 till EEPROM för återkallande efter power off
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Outdoor");
display.setCursor(0,20);
display.println("operation");
display.display();
Delay(1000);
Menu();
}
}
hemkomst.
}

void setup()
{
mi = EEPROM.read(eeprom_dist); Läs lagras inställningarna från EEPROM
dist = EEPROM.read(eeprom_level); Läs lagras inställningarna från EEPROM
pinMode(6,OUTPUT);
Serial.BEGIN(115200);
display.BEGIN();
init gjort

Du kan ändra kontrasten runt för att anpassa displayen
för bästa visning!
display.setContrast(25);

display.display(); Visa splashscreen
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println ("Raht Lightning Detector");
display.setTextSize(1);
display.drawBitmap (35, 22, lightning_bmp, 16, 16, 1);
display.setTextColor(BLACK);
display.display();
Flash();
display.display();
Delay(3000);

för den I2C biblioteket: (aktiverar pullups, som hastigheten till 400kHz)
I2c.BEGIN();
I2c.pullup(true);
I2c.setSpeed(1);
Delay(2);

lightning0. AS3935_DefInit(); Ange register till försummelsen
nu uppdatera sensor cal för din ansökan och driva upp chip
lightning0. AS3935_ManualCal (AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN);
AS3935_ManualCal parametrar:
--> kapacitans, i pF (markerade på paketet)
--> inomhus/utomhus (AS3935_INDOORS:0 / AS3935_OUTDOORS:1)
--> disturbers (AS3935_DIST_EN:1 / AS3935_DIST_DIS:2)
fungerar också befogenheter upp chip

Aktivera avbrott (krok IRQ-stift till Arduino Uno/Mega avbrott ingång: 0 -> stift 2, 1 -> pin 3)
attachInterrupt (0, AS3935_ISR, RISING);
lightning0. AS3935_PrintAllRegs();
AS3935_ISR_Trig = 0; Rensa trigger

}

---Detta bara blir spelade om och om igen... och över... och o...
void loop()
{
display.clearDisplay();
analogWrite(6,60); ---slå på bakgrundsbelysningen
---bygga skärmen
display.setCursor(0,0);
display.println("LastStrike");
display.setCursor(0,8);
display.println ("Dist:" + String(lsDist));
display.setCursor(50,8);
---om vi plocka miles, göra detta
om (mi == 1) {display.println ("Mi");}
annars anta vi vill göra detta...
annat {display.println ("Km");}
display.setCursor(0,17);
display.println("0");
display.setCursor(72,17);
om miles---40 km = aaprox 25 miles
IF(mi==1) {
display.println("25");
}
annat {
---annars bara skala det 40 km
display.println("40");
}
display.setCursor(0,39);
display.println ("Strikes:");
display.setCursor(48,39);
display.println(String(l));
display.setCursor(64,39);
--Placera en indikation på att vi som att inne i det nedre högra hörnet av displayen
om (dist==1){display.println("Out");}
annat {
-- eller Visa sattes för utomhus
display.println("in");}
--dra avståndsskala
display.drawLine (0, 37, 84, 37, svart);

display.drawLine (0, 25, 0, 37, svart);
display.drawLine (21, 21, 35, 37, svart);
display.drawLine (42, 35, 42, 37, svart);
display.drawLine (63, 63, 35, 37, svart);
display.drawLine (83, 83, 25, 37, svart);

display.fillCircle(mapDist,35,2,BLACK);
om (l == 0)
--Vi börjar med inga strejker upptäckt
display.setCursor(9,24);
display.println ("inga slag");
om (l > 0)
-om theres en strejk. Placera en liten zap på avstånd det är...
display.drawBitmap (mapDist, 22, blixtnedslag, 16, 16, 1);
om (mapDist > 20) {
display.setCursor(9,24);
display.println ("fjärran Ligntning");
}
display.display();

IF(0 == AS3935_ISR_Trig) {
Serial.println(read_buttons());
animateCloud();
Serial.println(read_buttons());
om (read_buttons()! = 5) {
Menu();
};
återställa avbrott flagga
AS3935_ISR_Trig = 0;

nu får avbryta källa
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("");
}
annat if(1 == int_src)
{
Flash();
uint8_t lightning_dist_km = lightning0. AS3935_GetLightningDistKm();
display.clearDisplay();
l ++;
display.println ("Lightning!");
om (mi == 1) {
lsDist =(lightning_dist_km * 0.62137);
}
annat {
lsDist=(lightning_dist_km);
}
display.println((lsDist));
mapDist = karta (lsDist, 0, 25, 0, 83);
display.println ("Miles");
display.display();
Flash();
}
annat if(2 == int_src)
{
display.clearDisplay();
display.setCursor(72,0);
display.println("N");
// n++;
display.display();
Delay(1000);
display.setCursor(72,0);
display.println("");
}
annat if(3 == int_src)
{
display.clearDisplay();
display.println ("brus nivå för hög").
display.display();
Delay(500);
}
lightning0. AS3935_PrintAllRegs(); för debug...
}
}

Detta är IRQ-hanterare för AS3935 avbrott, måste returnera void och ta inga argument
alltid göra koden i avbryta hanterare snabb och kort
void AS3935_ISR()
{
AS3935_ISR_Trig = 1;
}
---flash displayen rutin
void flash() {
för (int y = 1; y < 5; y ++) {
digitalWrite(6,LOW);
display.invertDisplay(true);
Delay(100);
digitalWrite(6,HIGH);
display.invertDisplay(false);
Delay(100);
}
}
--göra att moln gå baby!
void animateCloud() {
display.drawBitmap (m, 15, moln, 16, 16, 1);
display.display();
om (m > = 80) {m = 0;}
m ++;
Delay(200);
}

Se Steg
Relaterade Ämnen

Arduino DSLR Lightning Catcher

Jag har alltid velat skjuta några blixtar men visste inte hur.Så jag ligger och gjorde denna Arduino DSLR Lightning Catcher.Tanken är att ständigt mesure det omgivande ljuset och när avkänning en stegring i ljuset tar ett skott.Steg 1: Behovet av lis...

Steampunked lightning detektor "Jupiter"

Hej alla!Detta är min senaste instructable heter Steampunked lightning detektor "Jupiter"** Jupiter var en flash kastar Gud i de gamla romarnaÅska med blixtar en djupt rullande åska är alltid spännande att mänskligheten. Så är det mycket bra att...

Arduino avstånd detektor med Summer och LED'S

detta är en enkel guide om hur man gör en avstånd detektor med en Arduino, en HC-SRO4 Ultrasonic Sensor, en Summer och vissa lysdioder. Det slutliga målet med denna handledning är att använda summern och LED för att visa hur långt objektet är från ul...

Arduino IR-signal detektor

Detta Instructable visar dig hur du använder din Arduino modul för att upptäcka om en blinkande IR signal är närvarande.Detta kan vara användbart i IR spårning, där du inte vill att spåra objektet ljusaste IR men en pulserande på en viss frekvens.Ste...

Arduino - MAGNETFÄLT detektor med KY-003 eller KY-035

Hej världen! Här är jag igen. Idag gjorde jag 2 olika scheman och 2 koder.Bli inte förvirrad de ser mycket ut varandra, den enda skillnaden är... 1 sensor, KY-003 använder endigital ingång, och KY-035 en Analog insignal. Därför finns det 2 scheman ef...

Arduino Cap-känsla luften Piano

jag har nyligen fått min leverans av 10 buzzers beställde jag ungefär en månad sedan, så när jag fick dem jag var ivrig att göra något roligt med dem, så jag tittade runt lite och sökte efter vad man ska göra med dem, och genom att spendera lite tid...

EMI detektorn genom att använda Arduino

Jag nyligen hade problem med elektriska störningar och utvecklat denna enkla EMI buller detektor för att spåra källan. Detta Instructable beskriver mitt problem och lösningen jag utvecklat. Det erbjuder jag hoppas det kommer att vara användbart för d...

Lightning! Lightning detektorn för Raspberry Pi väderstation (uppdaterad)

I detta Instructable kommer du lära dig:Hur man a Anslut en Lightning detektor till en Solar Powered väderstationHur att utforma och placera lightning detektorn för bästa perfomanceHur du samlar in data för att se Lightning historien när det händerHu...

Arduino Air Cap-Sense Piano

jag har nyligen fått min leverans av 10 buzzers beställde jag ungefär en månad sedan, så när jag fick dem jag var ivrig att göra något roligt med dem, så jag tittade runt lite och sökte efter vad man ska göra med dem, och genom att spendera lite tid...

Enkel, nr kod Blixtnedslag Trigger/blixt slav Trigger från billigt Sensor

i driftstopp mellan storm säsonger här i Australien som jag har byggt en Arduino baserat lightning/flash trigger. Dess varit en rolig tid experimentera med kod och olika tech. Jag beställde några ljussensorer från eBay att ha en lek med och träna en...

Infraröd spårning kamerafästet

Detta Instructable visar hur du gör en kamera fäste som spårar en 200Hz pulserande infrarött (IR) ljuskälla. Spåra denna 200Hz gör pulserande källan och inte bara de ljusaste IR-ljuset, systemet mer motståndskraftiga till bakgrundsljud IR.Även om i d...

Iluminated enorma trä bokstäver med "bara gift detector"

Inspirerad av Instructable enorma trä bokstäver av kaktus workshop, jag har förberett dessa brev för mitt bröllop med Julia som ska hållas nästa 2 juli (coincidentally initialer stämmer överens med kaktus), mina verktyg är inte idealiska för professi...

Bygga en Pocket joniserande strålning detektor (PIRD)

besök min youtube sida för cool projekt och mer: http://www.youtube.com/channel/UCksEFn8xaLP0z4rsiHa9zcA?feature=mheeI detta instructable jag kommer att visa hur man bygger en pocket strålning detektor eller "PIRD." Delarna för denna strålning d...

Pocket Arduino kit.

så du vill ta en Arduino eller klon med dig så du kan nog knåpa var du än är?med tanke på vissa...Med detta kan du testa kretsar, bash ut en idé, Visa vänner coola saker som den kan göra. och så vidare.Du kan förmodligen göra den användbar med alla d...

Arduino gasol och lågan detektor

Detta projekt är en Arduino baserat gasol och lågan detektor. Jag fick idén att bygga detta projekt eftersom dessa dagar har jag min semester och jag har alltid velat göra ett nyskapande och unikt projekt. Hoppas du kommer gilla det.Steg 1: Samla nöd...

Lightning Simulator/alkoholmätare/grafisk Equalizer - Arduino Powered

UPPDATERING: En bärbar version av talar alkoholmätare är här http://talkingbreathalyzer.com ***LED-strips är monterade på en utomhus trellace som fungerar som ett blixtnedslag simulator, utomhus breathalyzer, grafisk equalizer synkroniseras till musi...

Arduino Stress detektor

Från EE122B, introduktion till biomedicinsk elektronik, vid Stanford UniversityUndervisas av Professor Greg Kovacs, våren 2014Problemet:Stress är en genomgripande del av det moderna snabba livet. Dessutom, finns det en växande mängd vetenskaplig fors...

Hur man kontrollerar arduino via bluetooth från (PC, pocket PC PDA)

Jag ville göra det möjligt att styra en arduino ombord från min telefon.Så att jag kunde styra andra enheter.Det enklaste sättet tycktes med bluetooth.men när jag fick de delar som behövs för jag vill ha riktigt så enkelt som jag hade hoppats.Och eft...

Programkontrollen & Arduino + PHIRO robot samtidigt med Pocket kod smartphone app

PHIRO Pro är en pedagogisk robot som hjälper barn lära sig till koden. Ett sätt att programmera och kontrollera PHIRO är via en Android app som kallas Pocket koden tillgänglig på Google spela för gratis. Pocket koden har förmågan att programmera och...