- Nødvendige komponenter:
- Arbejdsforklaring:
- Forklaring af kredsløb:
- Programmeringsforklaring:
- Kredsløb og printkortdesign ved hjælp af EasyEDA:
- Beregning og bestilling af prøver online:
Et jordskælv er en uforudsigelig naturkatastrofe, der skader liv og ejendom. Det sker pludselig, og vi kan ikke stoppe det, men vi kan advares om det. I dag er der mange teknologier, der kan bruges til at detektere de små rystelser og slag, så vi kan tage forholdsregler inden nogle store vibrationer i jorden. Her bruger vi Accelerometer ADXL335 til at detektere vibrationerne før jordskælvet. Accelerometer ADXL335 er meget følsom over for rystelser og vibrationer sammen med alle de tre akser. Her bygger vi en Arduino-baseret jordskælvdetektor ved hjælp af accelerometer.
Vi bygger her denne jordskælvdetektor som et Arduino Shield på PCB og viser også vibrationsgrafen på computeren ved hjælp af Processing.
Nødvendige komponenter:
- Arduino UNO
- Accelerometer ADXL335
- 16x2 LCD
- Summer
- BC547 transistor
- 1k modstande
- 10K POTTE
- LED
- Strømforsyning 9v / 12v
- Berg stikker mand / kvinde
Accelerometer:
Stift Beskrivelse af accelerometer:
- Vcc 5 volt forsyning skal tilsluttes ved denne pin.
- X-OUT Denne pin giver en analog udgang i x-retning
- Y-OUT Denne pin giver en analog udgang i y-retning
- Z-OUT Denne pin giver en analog udgang i z-retning
- GND Ground
- ST Denne pin bruges til at indstille følsomheden for sensoren
Tjek også vores andre projekter ved hjælp af accelerometer:
- Ping Pong-spil ved hjælp af Arduino
- Accelerometerbaseret håndbevægelsesstyret robot.
- Arduino-baseret bilulykkesvarslingssystem ved hjælp af GPS, GSM og accelerometer
Arbejdsforklaring:
Arbejdet med denne jordskælvsdetektor er enkel. Som vi nævnte tidligere, har vi brugt accelerometer til at detektere jordskælvsvibrationer langs en af de tre akser, så når der forekommer vibrationer, registrerer accelerometer de vibrationer og konverterer dem til ækvivalent ADC-værdi. Derefter læses disse ADC-værdier af Arduino og vises over 16x2 LCD. Vi har også vist disse værdier på Graph ved hjælp af Processing. Lær mere om Accelerometer ved at gennemgå vores andre Accelerometer-projekter her.
Først skal vi kalibrere accelerometeret ved at tage prøver af omgivende vibrationer, når Arduino tænder. Så er vi nødt til at trække disse prøveværdier fra de faktiske målinger for at få de rigtige målinger. Denne kalibrering er nødvendig, så den ikke viser advarsler med hensyn til dens normale omgivende vibrationer. Efter at have fundet rigtige aflæsninger sammenligner Arduino disse værdier med foruddefinerede max- og min-værdier. Hvis Arduino finder nogen ændringer, er værdierne mere end eller mindre end de foruddefinerede værdier for enhver akse i begge retninger (negativ og positiv), så udløser Arduino summeren og viser status for alarm over 16x2 LCD og en LED er også tændt. Vi kan justere følsomheden af jordskælvsdetektor ved at ændre de foruddefinerede værdier i Arduino-kode.
Demonstrationsvideo og Arduino-kode findes i slutningen af artiklen.
Forklaring af kredsløb:
Kredsløb til denne jordskælvsdetektor Arduino Shield PCBer også simpelt. I dette projekt har vi brugt Arduino, der læser accelerometerets analoge spænding og konverterer dem til de digitale værdier. Arduino driver også summeren, LED, 16x2 LCD og beregner og sammenligner værdier og træffer passende handling. Næste del er accelerometer, der registrerer vibrationer på jorden og genererer analoge spændinger i 3 akser (X, Y og Z). LCD bruges til at vise X-, Y- og Z-aksens ændring i værdier og også vise advarselsmeddelelse over den. Denne LCD er knyttet til Arduino i 4-bit tilstand. RS-, GND- og EN-ben er direkte forbundet med 9, GND og 8 ben i Arduino, og resten af 4 datapinde på LCD, nemlig D4, D5, D6 og D7 er direkte forbundet med den digitale pin 7, 6, 5 og 4 i Arduino. Summeren er forbundet til pin 12 i Arduino gennem en NPN BC547 transistor. En 10k pot bruges også til at kontrollere LCD-skærmens lysstyrke.
Programmeringsforklaring:
I denne jordskælvsdetektor Arduino Shield har vi lavet to koder: en til Arduino til at opdage et jordskælv og en anden til behandling af IDE til at plotte jordskælvets vibrationer over grafen på computeren. Vi lærer om begge koder en efter en:
Arduino kode:
Først og fremmest kalibrerer vi accelerometeret i forhold til dets placeringsoverflade, så det ikke viser advarsler med hensyn til dets normale omgivende vibrationer. I denne kalibrering tager vi nogle prøver og tager derefter et gennemsnit af dem og gemmer i en variabel.
for (int i = 0; i
Nu når Accelerometer tager aflæsninger, trækker vi disse prøveværdier fra aflæsningerne, så det kan ignorere omgivelsesvibrationer.
int-værdi1 = analogRead (x); // læser x ud int værdi2 = analogRead (y); // læser y ud int værdi3 = analogRead (z); // læser z ud int xValue = xsample-value1; // finde ændring i x int yValue = ysample-value2; // finde ændring i y int zValue = zsample-value3; // finde ændring i z / * fordeling af ændring i x-, y- og z-akseværdier over lcd * / lcd.setCursor (0,1); lcd.print (zValue); lcd.setCursor (6,1); lcd.print (yValue); lcd.setCursor (12,1); lcd.print (zValue); forsinkelse (100)
Derefter sammenligner Arduino de kalibrerede (subtraherede) værdier med foruddefinerede grænser. Og tag handling i overensstemmelse hermed. Hvis værdierne er højere end foruddefinerede værdier, bipper det summeren og plotter vibrationsgrafen på computeren ved hjælp af Processing.
/ * sammenligning af ændring med foruddefinerede grænser * / if (xValue <minVal - xValue> maxVal - yValue <minVal - yValue> maxVal - zValue <minVal - zValue> maxVal) {if (buz == 0) start = millis (); // timer start buz = 1; // summer / led-flag aktiveret} ellers hvis (buz == 1) // summer-flag aktiveret, så alarm jordskælv {lcd.setCursor (0,0); lcd.print ("Earthquake Alert"); hvis (millis ()> = start + buzTime) buz = 0; }
Behandlingskode:
Nedenfor er vedhæftet behandlingskoden, du kan downloade koden fra nedenstående link:
Earth Quake Detector Processing Code
Vi har designet en graf ved hjælp af Processing til jordskælvsvibrationer, hvor vi definerede størrelsen på vinduet, enheder, skriftstørrelse, baggrund, læsning og visning af serielle porte, åben valgt seriel port osv.
// indstil vinduesstørrelse: og skriftstørrelse f6 = createFont ("Arial", 6, sand); f8 = createFont ("Arial", 8, sand); f10 = createFont ("Arial", 10, sand); f12 = createFont ("Arial", 12, sand); f24 = createFont ("Arial", 24, sandt); størrelse (1200, 700); // Liste over alle tilgængelige serielle porte println (Serial.list ()); myPort = ny serie (dette, "COM43", 9600); println (myPort); myPort.bufferUntil ('\ n'); baggrund (80)
I nedenstående funktion har vi modtaget data fra seriel port og udpakkede krævede data og derefter kortlagt det med størrelsen på grafen.
// udpakning af alle krævede værdier på alle tre akser: int l1 = inString.indexOf ("x =") + 2; Streng temp1 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("y =") + 2; Streng temp2 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("z =") + 2; Streng temp3 = inString.substring (l1, l1 + 3); // kortlægning af x-, y- og z-værdi med grafdimensioner float inByte1 = float (temp1 + (char) 9); inByte1 = kort (inByte1, -80,80, 0, højde-80); float inByte2 = float (temp2 + (char) 9); inByte2 = kort (inByte2, -80,80, 0, højde-80); float inByte3 = float (temp3 + (char) 9); inByte3 = kort (inByte3, -80,80, 0, højde-80); flyde x = kort (xPos, 0,1120,40, bredde-40);
Herefter har vi tegnet enhedsplads, maks og min grænser, værdier på x, y og z-aksen.
// plotte grafvindue, enhedsstregVægt (2); slagtilfælde (175); Linje (0,0,0,100); textFont (f24); fyld (0,00255); textAlign (HØJRE); xmargin ("EarthQuake Graph By Circuit Digest", 200.100); fyld (100); slagtilfælde (100); linje (1050,80,1200,80);………………
Herefter plotter vi værdierne over grafen ved hjælp af 3 forskellige farver som Blå for x-akse-værdi, grøn farve for y-akse og z er repræsenteret af rød farve.
slagtilfælde (0,0,255); hvis (y1 == 0) y1 = højde-inByte1-skift; linje (x, y1, x + 2, højde-inByte1-skift); y1 = højde-inByte1-skift; slagtilfælde (0,255,0); hvis (y2 == 0) y2 = højde-inByte2-skift; linje (x, y2, x + 2, højde-inByte2-shift); y2 = højde-inByte2-shift; slagtilfælde (255,0,0); hvis (y2 == 0) y3 = højde-iByte3-skift; linje (x, y3, x + 2, højde-inByte3-skift); y3 = højde-inByte3-shift;
Lær også mere om behandling ved at gennemgå vores andre Processing-projekter.
Kredsløb og printkortdesign ved hjælp af EasyEDA:
EasyEDA er ikke kun one-stop-løsningen til skematisk indfangning, kredsløbssimulering og printkortdesign, de tilbyder også en billig PCB-prototype og Components Sourcing-service. De lancerede for nylig deres komponentsourcingtjeneste, hvor de har et stort lager af elektroniske komponenter, og brugere kan bestille deres nødvendige komponenter sammen med printkortordren.
Mens du designer dine kredsløb og printkort, kan du også gøre dit kredsløb og printkortdesign offentligt, så andre brugere kan kopiere eller redigere dem og drage fordel af derfra. Vi har også gjort vores hele kredsløbs- og printkortlayouts offentlige for dette jordskælvsindikatorskjold til Arduino UNO, tjek nedenstående link:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
Nedenfor er øjebliksbillede af øverste lag af printkortlayout fra EasyEDA, du kan se ethvert lag (top, bund, topsilk, bundmælk osv.) På printkortet ved at vælge laget fra vinduet 'Lag'.
Du kan også se fotovisning af printkort ved hjælp af EasyEDA:
Beregning og bestilling af prøver online:
Når du er færdig med designet af PCB, kan du klikke på ikonet for Fabrication-output , som fører dig til PCB-ordresiden. Her kan du se din PCB i Gerber Viewer eller downloade Gerber-filer på din PCB. Her kan du vælge antallet af printkort, du vil bestille, hvor mange kobberlag du har brug for, printkorttykkelsen, kobbervægten og endda printkortfarven. Når du har valgt alle mulighederne, skal du klikke på "Gem i indkøbskurv" og færdiggøre din ordre. For nylig har de faldt deres PCB-priser betydeligt, og nu kan du bestille 10 stk. 2-lags PCB med en størrelse på 10 cm x 10 cm kun for $ 2.
Her er de printkort, jeg fik fra EasyEDA:
Nedenfor er billederne af det endelige skjold efter lodning af komponenterne på printkortet: