지진은 인명과 재산에 피해를주는 예측할 수없는 자연 재해입니다. 갑자기 발생하여 멈출 수는 없지만 경고는받을 수 있습니다. 오늘날에는 작은 흔들림과 두드리는 소리를 감지하는 데 사용할 수있는 많은 기술이 있습니다. 따라서 우리는 지구에서 큰 진동이 발생하기 전에 예방 조치를 취할 수 있습니다. 여기서는 가속도계 ADXL335를 사용하여 지진 전 진동을 감지합니다. 가속도계 ADXL335는 세 축 모두와 함께 흔들림과 진동에 매우 민감합니다. 여기에서는 가속도계를 사용하여 Arduino 기반 지진 감지기를 구축하고 있습니다.
우리는이 지진 감지기를 PCB에 Arduino Shield로 구축 하고 있으며 Processing을 사용하여 컴퓨터에 진동 그래프를 표시 할 것입니다.
필요한 구성 요소:
- Arduino UNO
- 가속도계 ADXL335
- 16x2 LCD
- 부저
- BC547 트랜지스터
- 1k 저항기
- 10K POT
- LED
- 전원 공급 장치 9v / 12v
- Berg 스틱 남성 / 여성
가속도계:
가속도계 핀 설명:
- Vcc 5 볼트 전원이이 핀에 연결되어야합니다.
- X-OUT이 핀은 x 방향으로 아날로그 출력을 제공합니다.
- Y-OUT이 핀은 y 방향으로 아날로그 출력을 제공합니다.
- Z-OUT이 핀은 z 방향으로 아날로그 출력을 제공합니다.
- GND 접지
- ST 센서의 감도 설정에 사용되는 핀
Accelerometer를 사용하여 다른 프로젝트도 확인하십시오.
- Arduino를 사용한 탁구 게임
- 가속도계 기반 손 제스처 제어 로봇.
- GPS, GSM 및 가속도계를 사용한 Arduino 기반 차량 사고 경보 시스템
작동 설명:
이 지진 감지기의 작동 은 간단합니다. 앞서 언급했듯이 가속도계를 사용하여 세 축 중 하나를 따라 지진 진동을 감지하여 진동이 발생할 때마다 가속도계가 해당 진동을 감지하여 동일한 ADC 값으로 변환합니다. 그런 다음 이러한 ADC 값은 Arduino에서 읽고 16x2 LCD에 표시됩니다. 또한 Processing을 사용하여 그래프에 이러한 값을 표시했습니다. 여기에서 다른 가속도계 프로젝트를 통해 가속도계에 대해 자세히 알아보십시오.
먼저 Arduino의 전원이 켜질 때마다 주변 진동의 샘플을 수집 하여 가속도계 를 보정 해야 합니다. 그런 다음 실제 판독 값을 얻기 위해 실제 판독 값에서 해당 샘플 값을 빼야합니다. 이 보정은 정상적인 주변 진동에 대한 경고를 표시하지 않도록하기 위해 필요합니다. 실제 판독 값을 찾은 후 Arduino는 이러한 값을 사전 정의 된 최대 및 최소 값과 비교합니다. Arduino가 변경 값이 양방향 (음수 및 양수)의 모든 축에 대해 미리 정의 된 값보다 크거나 작다는 것을 발견하면 Arduino는 부저를 트리거하고 16x2 LCD에 경고 상태를 표시하고 LED도 켜집니다. Arduino 코드에서 미리 정의 된 값을 변경하여 지진 감지기의 감도를 조정할 수 있습니다.
데모 비디오 및 Arduino 코드 는 기사 끝에 제공됩니다.
회로 설명:
이 지진 감지기 Arduino Shield PCB의 회로또한 간단합니다. 이 프로젝트에서는 가속도계의 아날로그 전압을 읽고이를 디지털 값으로 변환하는 Arduino를 사용했습니다. Arduino는 또한 버저, LED, 16x2 LCD를 구동하고 값을 계산 및 비교하고 적절한 조치를 취합니다. 다음 부분은 가속도계로 지구의 진동을 감지하고 3 축 (X, Y, Z)에서 아날로그 전압을 생성합니다. LCD는 X, Y, Z 축의 값 변화를 표시하고 그 위에 경고 메시지를 표시하는 데 사용됩니다. 이 LCD는 Arduino에 4 비트 모드로 연결되어 있습니다. RS, GND 및 EN 핀은 Arduino의 9, GND 및 8 핀에 직접 연결되고 LCD의 나머지 4 개 데이터 핀 즉 D4, D5, D6 및 D7은 Arduino의 디지털 핀 7, 6, 5 및 4에 직접 연결됩니다.. 버저는 NPN BC547 트랜지스터를 통해 Arduino의 핀 12에 연결됩니다. 10k 포트는 LCD의 밝기를 제어하는데도 사용됩니다.
프로그래밍 설명:
이 지진 감지기 Arduino Shield 에서는 두 개의 코드를 만들었습니다. 하나는 Arduino가 지진을 감지하는 코드 이고 다른 하나는 Processing IDE가 컴퓨터의 그래프에 지진 진동을 표시하는 코드입니다. 두 코드에 대해 하나씩 배웁니다.
Arduino 코드:
우선 , 가속도계 를 배치 표면과 관련하여 보정하여 정상적인 주변 진동에 대한 경고를 표시하지 않도록합니다. 이 교정에서는 몇 가지 샘플을 취한 다음 평균을 취하여 변수에 저장합니다.
for (int i = 0; i
이제 가속도계가 판독 값을 취할 때마다 주변 진동을 무시할 수 있도록 판독 값에서 해당 샘플 값을 뺍니다.
int value1 = analogRead (x); // x를 읽음 int value2 = analogRead (y); // y 출력 int value3 = analogRead (z); // z out int xValue = xsample-value1; // x에서 변화 찾기 int yValue = ysample-value2; // y에서 변화 찾기 int zValue = zsample-value3; // z에서 변화 찾기 / * lcd에 x, y 및 z 축 값의 변화를 표시 * / lcd.setCursor (0,1); lcd.print (zValue); lcd.setCursor (6,1); lcd.print (yValue); lcd.setCursor (12,1); lcd.print (zValue); 지연 (100)
그런 다음 Arduino는 보정 된 (감산 된) 값을 사전 정의 된 제한과 비교합니다. 그리고 그에 따라 조치를 취하십시오. 값이 미리 정의 된 값보다 높으면 신호음이 울리고 Processing을 사용하여 컴퓨터에 진동 그래프가 표시됩니다.
/ * 사전 정의 된 한계와 변경 비교 * / if (xValue <minVal-xValue> maxVal-yValue <minVal-yValue> maxVal-zValue <minVal-zValue> maxVal) {if (buz == 0) start = millis (); // 타이머 시작 buz = 1; // 부저 / led 플래그 활성화} else if (buz == 1) // 부저 플래그 활성화 후 지진 경보 {lcd.setCursor (0,0); lcd.print ("지진 경보"); if (millis ()> = start + buzTime) buz = 0; }
처리 코드:
아래는 첨부 된 처리 코드입니다. 아래 링크에서 코드를 다운로드 할 수 있습니다.
지진 감지기 처리 코드
우리는 창 크기, 단위, 글꼴 크기, 배경, 직렬 포트 읽기 및 표시, 선택한 직렬 포트 열기 등을 정의한 지진 진동에 대해 Processing을 사용하여 그래프를 설계했습니다.
// 창 크기 및 글꼴 크기 설정 f6 = createFont ("Arial", 6, true); f8 = createFont ("Arial", 8, true); f10 = createFont ("Arial", 10, true); f12 = createFont ("Arial", 12, true); f24 = createFont ("Arial", 24, true); 크기 (1200, 700); // 사용 가능한 모든 직렬 포트 나열 println (Serial.list ()); myPort = new Serial (this, "COM43", 9600); println (myPort); myPort.bufferUntil ('\ n'); 배경 (80)
아래 기능에서는 시리얼 포트에서 데이터를 받아 필요한 데이터를 추출하여 그래프 크기로 매핑했습니다.
// 세 축의 모든 필수 값 추출: int l1 = inString.indexOf ("x =") + 2; 문자열 temp1 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("y =") + 2; 문자열 temp2 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("z =") + 2; 문자열 temp3 = inString.substring (l1, l1 + 3); // x, y 및 z 값을 그래프 차원으로 매핑 float inByte1 = float (temp1 + (char) 9); inByte1 = map (inByte1, -80,80, 0, 높이 -80); float inByte2 = float (temp2 + (char) 9); inByte2 = map (inByte2, -80,80, 0, 높이 -80); float inByte3 = float (temp3 + (char) 9); inByte3 = map (inByte3, -80,80, 0, 높이 -80); float x = map (xPos, 0,1120,40, width-40);
그 후 단위 공간, 최대 및 최소 한계, x, y 및 z 축 값을 플로팅했습니다.
// 그래프 창 플로팅, 단위 strokeWeight (2); 스트로크 (175); Line (0,0,0,100); textFont (f24); fill (0,00,255); textAlign (RIGHT); xmargin ("EarthQuake Graph By Circuit Digest", 200,100); 채우기 (100); strokeWeight (100); 라인 (1050,80,1200,80);………………
그런 다음 x 축 값은 파란색, y 축은 녹색, z는 빨간색으로 표시되는 3 가지 색상을 사용하여 그래프 위에 값을 플로팅합니다.
스트로크 (0,0,255); if (y1 == 0) y1 = height-inByte1-shift; line (x, y1, x + 2, height-inByte1-shift); y1 = height-inByte1-shift; 스트로크 (0,255,0); if (y2 == 0) y2 = height-inByte2-shift; line (x, y2, x + 2, height-inByte2-shift); y2 = height-inByte2-shift; 스트로크 (255,0,0); if (y2 == 0) y3 = height-inByte3-shift; line (x, y3, x + 2, height-inByte3-shift); y3 = height-inByte3-shift;
또한 다른 처리 프로젝트를 통해 처리에 대해 자세히 알아보십시오.
EasyEDA를 사용한 회로 및 PCB 설계:
EasyEDA는 회로도 캡처, 회로 시뮬레이션 및 PCB 설계를위한 원 스톱 솔루션 일뿐만 아니라 저렴한 PCB 프로토 타입 및 부품 소싱 서비스도 제공합니다. 최근에는 전자 부품 재고가 많고 사용자가 PCB 주문과 함께 필요한 부품을 주문할 수있는 부품 소싱 서비스를 시작했습니다.
당신의 회로와의 PCB 설계하는 동안, 당신은 또한 당신의 회로를 만들 수 있으며, PCB는 다른 사용자가 복사하거나 편집을하고 거기에서 이익을 취할 수 할 수있는 공공 때문에 디자인, 우리는 또한이 우리의 전체 회로 및 PCB 레이아웃 공개 한 대한 지진 표시 쉴드 Arduino UNO, 아래 링크를 확인하십시오.
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
아래는 EasyEDA의 PCB 레이아웃의 상단 레이어 스냅 샷이며, '레이어'창에서 레이어를 선택하여 PCB의 모든 레이어 (Top, Bottom, Topsilk, bottomsilk 등)를 볼 수 있습니다.
EasyEDA를 사용하여 PCB의 사진보기를 볼 수도 있습니다.
온라인으로 샘플 계산 및 주문:
PCB 설계를 완료 한 후 Fabrication output 아이콘을 클릭 하면 PCB 주문 페이지로 이동합니다. 여기에서 Gerber Viewer에서 PCB를 보거나 PCB의 Gerber 파일을 다운로드 할 수 있습니다. 여기서 주문하려는 PCB 수, 필요한 구리 층 수, PCB 두께, 구리 무게 및 PCB 색상까지 선택할 수 있습니다. 모든 옵션을 선택한 후 "장바구니에 저장"을 클릭하고 주문을 완료하십시오. 최근에 그들은 PCB 요금을 크게 떨어 뜨 렸고 이제 10cm x 10cm 크기의 2 레이어 PCB 10 개를 $ 2에 주문할 수 있습니다.
EasyEDA에서 얻은 PCB는 다음과 같습니다.
아래는 PCB에 부품을 납땜 한 후 최종 Shield 의 사진입니다.