- Nødvendige komponenter:
- Arbeidsforklaring:
- Kretsforklaring:
- Programmeringsforklaring:
- Krets- og kretskortdesign ved bruk av EasyEDA:
- Beregning og bestilling av prøver online:
Et jordskjelv er en uforutsigbar naturkatastrofe som forårsaker skade på liv og eiendom. Det skjer plutselig, og vi kan ikke stoppe det, men vi kan bli varslet fra det. I dagens tid er det mange teknologier som kan brukes til å oppdage små rystelser og slag, slik at vi kan ta forholdsregler før noen store vibrasjoner i jorden. Her bruker vi akselerometer ADXL335 for å oppdage vibrasjonene før jordskjelvet. Akselerometer ADXL335 er svært følsom for rystelser og vibrasjoner sammen med alle de tre aksene. Her bygger vi en Arduino-basert jordskjelvdetektor ved hjelp av akselerometer.
Vi bygger her denne jordskjelvdetektoren som et Arduino-skjold på PCB, og vil også vise vibrasjonsgrafen på datamaskinen ved hjelp av prosessering.
Nødvendige komponenter:
- Arduino UNO
- Akselerometer ADXL335
- 16x2 LCD
- Summer
- BC547 transistor
- 1k motstander
- 10K POTTE
- LED
- Strømforsyning 9v / 12v
- Berg stikker hann / kvinne
Akselerometer:
Pin Beskrivelse av akselerometer:
- Vcc 5 volt forsyning skal kobles til ved denne stiften.
- X-OUT Denne pinnen gir en analog utgang i x-retning
- Y-UT Denne pinnen gir en analog utgang i y-retning
- Z-OUT Denne pinnen gir en analog utgang i z-retning
- GND Ground
- ST Denne pinnen brukes til å stille følsomheten til sensoren
Sjekk også våre andre prosjekter ved hjelp av akselerometer:
- Ping Pong-spill med Arduino
- Akselerometerbasert håndbevegelseskontrollert robot.
- Arduino-basert bilulykkesvarslingssystem ved hjelp av GPS, GSM og akselerometer
Arbeidsforklaring:
Å arbeide med denne jordskjelvdetektoren er enkel. Som vi nevnte tidligere, har vi brukt akselerometer for å oppdage jordskjelvvibrasjoner langs en av de tre aksene, slik at når vibrasjoner oppstår, registrerer akselerometer vibrasjonene og konverterer dem til ekvivalent ADC-verdi. Deretter blir disse ADC-verdiene lest av Arduino og vist over 16x2 LCD-skjermen. Vi har også vist disse verdiene på Graph ved hjelp av Processing. Lær mer om akselerometer ved å gå gjennom de andre akselerometerprosjektene våre her.
Først må vi kalibrere akselerometeret ved å ta prøvene av omkringliggende vibrasjoner når Arduino slår seg på. Deretter må vi trekke disse prøveverdiene fra de faktiske målingene for å få de virkelige målingene. Denne kalibreringen er nødvendig slik at den ikke viser varsler med hensyn til dens normale omgivende vibrasjoner. Etter å ha funnet ekte målinger, sammenligner Arduino disse verdiene med forhåndsdefinerte maks- og minverdier. Hvis Arduino finner at endringsverdiene er mer enn eller mindre enn de forhåndsdefinerte verdiene til hvilken som helst akse i begge retninger (negativ og positiv), utløser Arduino summeren og viser statusen til varselet over 16x2 LCD-skjermen, og en LED er også slått på. Vi kan justere følsomheten til jordskjelvdetektor ved å endre de forhåndsdefinerte verdiene i Arduino-koden.
Demonstrasjonsvideo og Arduino-kode er gitt på slutten av artikkelen.
Kretsforklaring:
Kretsløp for denne jordskjelvdetektoren Arduino Shield PCBer også enkelt. I dette prosjektet har vi brukt Arduino som leser akselerometerets analoge spenning og konverterer dem til de digitale verdiene. Arduino driver også summeren, LED, 16x2 LCD og beregner og sammenligner verdier og tar passende tiltak. Neste del er akselerometer som oppdager vibrasjoner på jorden og genererer analoge spenninger i 3 akser (X, Y og Z). LCD brukes til å vise X-, Y- og Z-aksens endring i verdier og også vise varselmelding over den. Denne LCD-skjermen er festet til Arduino i 4-biters modus. RS-, GND- og EN-pinner er direkte koblet til 9, GND og 8 pinner av Arduino, og resten av 4 datapinner på LCD, nemlig D4, D5, D6 og D7 er direkte koblet til digital pin 7, 6, 5 og 4 på Arduino. Summeren er koblet til pin 12 i Arduino gjennom en NPN BC547-transistor. En 10k-pott brukes også til å kontrollere lysstyrken på LCD-skjermen.
Programmeringsforklaring:
I denne jordskjelvdetektoren Arduino Shield har vi laget to koder: en for Arduino for å oppdage et jordskjelv og en annen for behandling av IDE for å plotte jordskjelvvibrasjonene over grafen på datamaskinen. Vi vil lære om begge kodene en etter en:
Arduino-kode:
Først og fremst kalibrerer vi akselerometeret med tanke på plasseringsflaten, slik at det ikke viser varsler med hensyn til dets normale vibrasjoner. I denne kalibreringen tar vi noen prøver og tar deretter et gjennomsnitt av dem og lagrer i en variabel.
for (int i = 0; i
Hver gang akselerometer tar avlesninger, trekker vi disse prøveverdiene fra avlesningene slik at det kan ignorere vibrasjoner i omgivelsene.
int-verdi1 = analogRead (x); // lese x ut int-verdi2 = analogRead (y); // lese y ut int-verdi3 = analogRead (z); // lese z ut int xValue = xsample-value1; // finne endring i x int yValue = ysample-value2; // finne endring i y int zValue = zsample-value3; // finne endring i z / * displying endring i x-, y- og z-akseverdier 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)
Deretter sammenligner Arduino de kalibrerte (subtraherte) verdiene med forhåndsdefinerte grenser. Og ta grep tilsvarende. Hvis verdiene er høyere enn forhåndsdefinerte verdier, piper det summeren og plotter vibrasjonsgrafen på datamaskinen ved hjelp av prosessering.
/ * sammenligne endring med forhåndsdefinerte grenser * / if (xValue <minVal - xValue> maxVal - yValue <minVal - yValue> maxVal - zValue <minVal - zValue> maxVal) {if (buz == 0) start = millis (); // timer starter buz = 1; // summer / ledet flagg aktivert} ellers hvis (buz == 1) // summerflagg aktivert så varsler jordskjelv {lcd.setCursor (0,0); lcd.print ("Earthquake Alert"); hvis (millis ()> = start + buzTime) buz = 0; }
Behandlingskode:
Nedenfor er behandlingskoden vedlagt, du kan laste ned koden fra lenken nedenfor:
Earth Quake Detector Processing Code
Vi har designet en graf ved hjelp av Processing, for jordskjelvvibrasjoner, der vi definerte størrelsen på vinduet, enheter, skriftstørrelse, bakgrunn, lese og vise serielle porter, åpne valgt seriell port etc.
// angi vindusstørrelse: og skriftstørrelse f6 = createFont ("Arial", 6, sant); f8 = createFont ("Arial", 8, true); f10 = createFont ("Arial", 10, true); f12 = createFont ("Arial", 12, true); f24 = createFont ("Arial", 24, true); størrelse (1200, 700); // Liste over alle tilgjengelige serielle porter println (Serial.list ()); myPort = ny serie (denne, "COM43", 9600); println (myPort); myPort.bufferUntil ('\ n'); bakgrunn (80)
I funksjonen nedenfor har vi mottatt data fra seriell port og hentet nødvendige data og deretter kartlagt den med størrelsen på grafen.
// trekke ut alle nødvendige verdier for 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); // kartlegging av x-, y- og z-verdi med grafdimensjoner float inByte1 = float (temp1 + (char) 9); inByte1 = kart (inByte1, -80,80, 0, høyde-80); float inByte2 = float (temp2 + (char) 9); inByte2 = kart (inByte2, -80,80, 0, høyde-80); float inByte3 = float (temp3 + (char) 9); inByte3 = kart (inByte3, -80,80, 0, høyde-80); flyte x = kart (xPos, 0,1120,40, bredde-40);
Etter dette har vi tegnet enhetsplass, maks og min grenser, verdier på x, y og z-aksen.
// plotte grafvindu, enhetsstrekvekt (2); hjerneslag (175); Linje (0,0,0,100); textFont (f24); fyll (0,00255); textAlign (HØYRE); xmargin ("EarthQuake Graph By Circuit Digest", 200,100); fyll (100); slagvekt (100); linje (1050,80,1200,80);………………
Etter dette plotter vi verdiene over grafen ved å bruke 3 forskjellige farger som Blå for x-akseverdi, grønn farge for y-akse og z er representert med rød farge.
hjerneslag (0,0255); hvis (y1 == 0) y1 = høyde-inByte1-skift; linje (x, y1, x + 2, høyde-innByte1-skift); y1 = høyde-inByte1-skift; hjerneslag (0,255,0); hvis (y2 == 0) y2 = høyde-inByte2-skift; linje (x, y2, x + 2, høyde-inByte2-skift); y2 = høyde-inByte2-skift; hjerneslag (255,0,0); hvis (y2 == 0) y3 = høyde-inByte3-skift; linje (x, y3, x + 2, høyde-inByte3-skift); y3 = høyde-inByte3-skift;
Lær også mer om behandling ved å gå gjennom de andre prosesseringsprosjektene våre.
Krets- og kretskortdesign ved bruk av EasyEDA:
EasyEDA er ikke bare one-stop-løsningen for skjematisk fangst, kretssimulering og PCB-design, de tilbyr også en billig PCB-prototype og Components Sourcing-tjeneste. De lanserte nylig komponentkjøpetjenesten der de har et stort lager av elektroniske komponenter og brukere kan bestille de nødvendige komponentene sammen med PCB-bestillingen.
Mens du designer kretsene og kretskortene dine, kan du også gjøre krets- og kretskortdesignene dine offentlige slik at andre brukere kan kopiere eller redigere dem og dra nytte av det. Vi har også gjort hele krets- og kretskortoppsett offentlig for dette jordskjelvindikatorskjoldet for Arduino UNO, sjekk lenken nedenfor:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
Nedenfor er øyeblikksbildet av det øverste laget av PCB-layout fra EasyEDA, du kan se hvilket som helst lag (topp, bunn, toppsilk, bunnmelk osv.) På PCB ved å velge laget fra "Lag" -vinduet.
Du kan også se bildevisning av PCB ved hjelp av EasyEDA:
Beregning og bestilling av prøver online:
Etter å ha fullført designen av PCB, kan du klikke på ikonet for Fabrication-utdata , som tar deg med på PCB-ordresiden. Her kan du se PCB-en i Gerber Viewer eller laste ned Gerber-filer på PCB-en. Her kan du velge antall PCB du vil bestille, hvor mange kobberlag du trenger, PCB-tykkelsen, kobbervekten og til og med PCB-fargen. Når du har valgt alle alternativene, klikker du på "Lagre i handlekurven" og fullfører bestillingen. Nylig har de sunket PCB-prisene betydelig, og nå kan du bestille 10 stk 2-lags PCB med 10 cm x 10 cm størrelse bare for $ 2.
Her er PCB-er jeg fikk fra EasyEDA:
Nedenfor er bildene av final Shield etter lodding av komponentene på PCB: