- Potrebne komponente:
- Delovna razlaga:
- Pojasnilo vezja:
- Pojasnilo programiranja:
- Oblikovanje vezij in tiskanih vezij s pomočjo EasyEDA:
- Izračun in naročanje vzorcev prek spleta:
Potres je nepredvidljiva naravna nesreča, ki povzroči škodo na življenju in premoženju. To se zgodi nenadoma in tega ne moremo ustaviti, lahko pa smo opozorjeni. V današnjem času obstaja veliko tehnologij, s katerimi lahko zaznamo majhne tresenja in trke, tako da lahko previdno ukrepamo pred nekaterimi večjimi vibracijami na zemlji. Tu uporabljamo merilnik pospeška ADXL335 za zaznavanje predpotresnih vibracij. Merilnik pospeška ADXL335 je zelo občutljiv na tresenje in vibracije skupaj z vsemi tremi osmi. Tu gradimo detektor potresov, ki temelji na Arduinu, s pomočjo merilnika pospeška.
Tu ustvarjamo ta potresni detektor kot Arduino Shield na PCB-ju in bo prikazal tudi grafikon vibracij na računalniku z uporabo Processing.
Potrebne komponente:
- Arduino UNO
- Merilec pospeška ADXL335
- 16x2 LCD
- Zvočni signal
- Tranzistor BC547
- 1k upori
- 10K LONČEK
- LED
- Napajanje 9v / 12v
- Berg drži moški / ženska
Merilec pospeška:
Pin Opis merilnika pospeška:
- Na tem zatiču se mora priključiti napajalnik Vcc 5 voltov.
- X-OUT Ta zatič daje analogni izhod v smeri x
- Y-OUT Ta zatič daje analogni izhod v smeri y
- Z-OUT Ta zatič daje analogni izhod v smeri z
- GND Ground
- ST Ta zatič se uporablja za nastavitev občutljivosti senzorja
Preverite tudi druge naše projekte z merilnikom pospeška:
- Igra ping pong z uporabo Arduina
- Robot z nadzorom roke s pomočjo pospeška.
- Sistem za opozarjanje na nezgode na osnovi Arduina z uporabo GPS, GSM in merilnika pospeška
Delovna razlaga:
Delovanje tega detektorja potresov je preprosto. Kot smo že omenili, smo merilnik pospeška uporabili za zaznavanje potresnih vibracij vzdolž katere koli od treh osi, tako da pospešek, kadar koli se pojavijo vibracije, zazna te vibracije in jih pretvori v enakovredno vrednost ADC. Nato te vrednosti ADC prebere Arduino in jih prikaže na LCD 16x2. Te vrednosti smo prikazali tudi na Grafu z uporabo obdelave. Če želite izvedeti več o merilniku pospeška, si oglejte naše druge projekte pospeševalnika tu.
Najprej moramo umeriti merilnik pospeška, tako da vzamemo vzorce okoliških vibracij, kadar koli Arduino Powers up. Nato moramo vzorčne vrednosti odšteti od dejanskih odčitkov, da dobimo resnične odčitke. Ta kalibracija je potrebna, da ne bo prikazovala opozoril glede običajnih vibracij v okolici. Po iskanju dejanskih odčitkov Arduino te vrednosti primerja z vnaprej določenimi vrednostmi max in min. Če Arduino ugotovi, da so kakršne koli vrednosti sprememb več ali manj, kot so vnaprej določene vrednosti katere koli osi v obe smeri (negativne in pozitivne), potem Arduino sproži zvočno opozorilo in prikaže stanje opozorila na LCD-u 16x2 in prižgana tudi LED. Občutljivost detektorja potresa lahko prilagodimo s spreminjanjem vnaprej določenih vrednosti v kodi Arduino.
Demonstracijski video in Arduino koda sta podana na koncu članka.
Pojasnilo vezja:
Vezje tega detektorja potresov Arduino Shield PCBje tudi preprosto. V tem projektu smo uporabili Arduino, ki bere analogno napetost merilnika pospeška in jih pretvarja v digitalne vrednosti. Arduino poganja tudi zvočni signal, LED, 16x2 LCD, izračuna in primerja vrednosti ter ustrezno ukrepa. Naslednji del je merilnik pospeška, ki zazna vibracije zemlje in generira analogne napetosti v treh oseh (X, Y in Z). LCD se uporablja za prikaz sprememb vrednosti osi X, Y in Z in za prikaz opozorilnega sporočila. Ta LCD je pritrjen na Arduino v 4-bitnem načinu. Zatiči RS, GND in EN so neposredno povezani z 9, GND in 8 zatiči Arduina, ostali 4 podatkovni zatiči LCD, in sicer D4, D5, D6 in D7, pa so neposredno povezani z digitalnimi zatiči 7, 6, 5 in 4 Arduino. Zvočni signal je povezan z zatičem 12 Arduina prek tranzistorja NPN BC547. 10k lonec se uporablja tudi za nadzor svetlosti LCD-ja.
Pojasnilo programiranja:
V tem detektorju potresov Arduino Shield smo izdelali dve kodi: eno za Arduino za zaznavanje potresa in drugo za obdelavo IDE za risanje potresnih vibracij preko grafa na računalniku. Obe kodi bomo spoznavali eno za drugo:
Koda Arduino:
Najprej merimo merilnik pospeška glede na njegovo površino za namestitev, tako da ne bo prikazoval opozoril glede na običajne okoliške vibracije. Pri tej kalibraciji vzamemo nekaj vzorcev, nato pa jih vzamemo v povprečju in shranimo v spremenljivko.
za (int i = 0; i
Zdaj, ko merilnik pospeška odmeri, bomo od vzorcev odšteli te vzorčne vrednosti, da bo lahko prezrl vibracije okolice.
int vrednost1 = analogRead (x); // branje x vrednosti int value2 = analogRead (y); // branje y vrednosti int value3 = analogRead (z); // branje z z int xValue = xsample-value1; // iskanje spremembe v x int yValue = ysample-value2; // iskanje spremembe v y int zValue = zsample-value3; // iskanje spremembe v z / * z prikazom spremembe vrednosti x, y in z osi preko lcd * / lcd.setCursor (0,1); lcd.print (zValue); lcd.setCursor (6,1); lcd.print (yValue); lcd.setCursor (12,1); lcd.print (zValue); zamuda (100)
Nato Arduino primerja te umerjene (odštete) vrednosti z vnaprej določenimi mejami. In ustrezno ukrepati. Če so vrednosti višje od vnaprej določenih vrednosti, bo zvočni signal zapisal graf vibracij v računalnik s pomočjo Obdelava.
/ * primerjava spremembe z vnaprej določenimi omejitvami * / if (xValue <minVal - xValue> maxVal - yValue <minVal - yValue> maxVal - zValue <minVal - zValue> maxVal) {if (buz == 0) start = milis (); // zagon časovnika buz = 1; // aktivirana je zvočna / vodilna zastavica} else if (buz == 1) // zastava zvočne zvočnike aktivirana in nato opozoril na potres {lcd.setCursor (0,0); lcd.print ("Opozorilo o potresu"); if (millis ()> = start + buzTime) buz = 0; }
Koda obdelave:
Spodaj je priložena koda za obdelavo, ki jo lahko prenesete s spodnje povezave:
Koda za obdelavo detektorja zemeljskih potresov
Z uporabo Processing smo oblikovali graf za potresne vibracije, v katerem smo določili velikost okna, enote, velikost pisave, ozadje, branje in prikaz serijskih vrat, odprta izbrana serijska vrata itd.
// nastavimo velikost okna: in velikost pisave f6 = createFont ("Arial", 6, true); f8 = createFont ("Arial", 8, true); f10 = createFont ("Arial", 10, true); f12 = createFont ("Arial", 12, true); f24 = createFont ("Arial", 24, resnično); velikost (1200, 700); // Seznam vseh razpoložljivih serijskih vrat println (Serial.list ()); myPort = nov serijski (to, "COM43", 9600); println (myPort); myPort.bufferUntil ('\ n'); ozadje (80)
V spodnji funkciji smo prejeli podatke iz serijskih vrat in izvlekli zahtevane podatke ter jih nato preslikali z velikostjo grafa.
// pridobivanje vseh zahtevanih vrednosti vseh treh osi: int l1 = inString.indexOf ("x =") + 2; Niz temp1 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("y =") + 2; Niz temp2 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("z =") + 2; Niz temp3 = inString.substring (l1, l1 + 3); // preslikava vrednosti x, y in z z dimenzijami grafa float inByte1 = float (temp1 + (char) 9); inByte1 = zemljevid (inByte1, -80,80, 0, višina-80); float inByte2 = float (temp2 + (char) 9); inByte2 = zemljevid (inByte2, -80,80, 0, višina-80); float inByte3 = float (temp3 + (char) 9); inByte3 = zemljevid (inByte3, -80,80, 0, višina-80); float x = zemljevid (xPos, 0,1120,40, širina-40);
Po tem smo izrisali prostor enote, največje in najmanjše meje, vrednosti x, y in z-osi.
// risanje okna grafa, enota strokeWeight (2); možganska kap (175); Vrstica (0,0,0,100); textFont (f24); polnjenje (0,00,255); textAlign (DESNO); xmargin ("Grafikon EarthQuake po povzetku", 200.100); polnjenje (100); potezna teža (100); črta (1050,80,1200,80);………………
Nato vrednosti narišemo na graf z uporabo 3 različnih barv, kot so modra za vrednost osi x, zelena barva osi y in z pa rdeča barva.
kap (0,0,255); if (y1 == 0) y1 = višina-vByte1-shift; vrstica (x, y1, x + 2, shift-height-inByte1); y1 = višina-vByte1-premik; kap (0,255,0); če (y2 == 0) y2 = višina-vByte2-premik; črta (x, y2, x + 2, shift-height-inByte2); y2 = višina-vByte2-premik; kap (255,0,0); če (y2 == 0) y3 = višina-vByte3-premik; črta (x, y3, x + 2, shift-height-inByte3); y3 = višina-vByte3-premik;
Če želite izvedeti več o obdelavi, poglejte tudi druge naše procese obdelave.
Oblikovanje vezij in tiskanih vezij s pomočjo EasyEDA:
EasyEDA ni samo rešitev na enem mestu za shematsko zajemanje, simulacijo vezja in oblikovanje tiskanih vezij, ponujajo tudi poceni storitev za prototip in komponente komponent. Pred kratkim so uvedli svojo storitev nabave komponent, kjer imajo veliko zalogo elektronskih komponent in uporabniki lahko naročijo njihove zahtevane komponente skupaj z naročilom PCB.
Med načrtovanjem vezij in tiskanih vezij lahko svoje načrte vezij in tiskanih vezij objavite tudi tako, da jih lahko drugi uporabniki kopirajo ali urejajo in imajo od tega koristi. Za ta potresno-indikatorski ščit smo objavili tudi celotno postavitev vezij in tiskanih vezij. Arduino UNO, preverite spodnjo povezavo:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
Spodaj je Snapshot of Top layer of PCB layout from EasyEDA, lahko si ogledate katero koli plast (Top, Bottom, Topsilk, bottomomskil itd.) PCB-ja tako, da v oknu 'Layers' izberete plast.
Pogled fotografije na tiskano vezje si lahko ogledate tudi s pomočjo EasyEDA:
Izračun in naročanje vzorcev prek spleta:
Po končanem oblikovanju PCB-ja lahko kliknete ikono Fabrication output , ki vas popelje na stran za naročilo PCB-ja. Tu si lahko ogledate tiskano vezje v pregledovalniku Gerber ali prenesete datoteke Gerber s svojega tiskanega vezja. Tu lahko izberete število PCB-jev, ki jih želite naročiti, koliko bakrenih plasti potrebujete, debelino PCB-ja, težo bakra in celo barvo PCB-ja. Ko izberete vse možnosti, kliknite »Shrani v košarico« in dokončajte naročilo. V zadnjem času so občutno znižali svoje PCB in zdaj lahko naročite 10 kosov dvoslojnih PCB velikosti 10 cm x 10 cm samo za 2 USD.
Tukaj so PCB, ki sem jih dobil pri EasyEDA:
Spodaj so slike končnega ščita po spajkanju komponent na PCB: