이전 튜토리얼에서 GPS 모듈을 컴퓨터와 인터페이스하는 방법, Arduino GPS 시계를 만드는 방법, GSM 및 GPS를 사용하여 차량을 추적하는 방법에 대해 배웠습니다. 이 프로젝트에서는 GPS, GSM 및 가속도계를 사용하여 Arduino 기반 차량 사고 경보 시스템 을 구축 할 것 입니다. 가속도계는 차량 축의 급격한 변화를 감지하고 GSM 모듈은 사고 위치와 함께 휴대폰으로 경고 메시지를 보냅니다. 사고 위치는 GPS 모듈에서 얻은 위도와 경도를 바탕으로 Google Map 링크 형태로 전송됩니다. 메시지는 또한 매듭으로 차량의 속도를 포함합니다. 참고 항목 데모 비디오끝에. 이 차량 사고 경보 프로젝트는 하드웨어와 소프트웨어를 거의 변경하지 않는 것만으로도 추적 시스템 등으로 사용할 수 있습니다.
필요한 구성 요소:
- Arduino Uno
- GSM 모듈 (SIM900A)
- GPS 모듈 (SIM28ML)
- 가속도계 (ADXL335)
- 16x2 LCD
- 전원 공급
- 전선 연결
- 10 개 K-POT
- 브레드 보드 또는 PCB
- 전원 공급 장치 12v 1amp
프로젝트에 들어가기 전에 GPS, GSM 및 가속도계에 대해 논의 할 것입니다.
GPS 모듈 및 작동:
GPS는 Global Positioning System의 약자로 정확한 UTC 시간 (협정 세계시)으로 지구상의 모든 위치의 위도와 경도를 감지하는 데 사용됩니다. GPS 모듈은 우리 프로젝트에서 사고 위치를 추적하는 데 사용됩니다. 이 장치는 시간과 날짜와 함께 매초마다 위성으로부터 좌표를 수신합니다. 위도 및 경도 좌표를 찾기 위해 차량 추적 시스템에서 이전에 $ GPGGA 문자열을 추출했습니다.
GPS 모듈 은 추적 위치와 관련된 데이터를 실시간으로 전송하며 NMEA 형식으로 많은 데이터를 전송합니다 (아래 스크린 샷 참조). NMEA 형식은 여러 문장으로 구성되며 한 문장 만 필요합니다. 이 문장은 $ GPGGA 에서 시작 하며 좌표, 시간 및 기타 유용한 정보를 포함합니다. 이 GPGGA 는 Global Positioning System Fix Data 라고합니다. 여기에서 NMEA 문장과 GPS 데이터 읽기에 대해 자세히 알아보세요.
문자열의 쉼표를 세어 $ GPGGA 문자열에서 좌표를 추출 할 수 있습니다. $ GPGGA 문자열을 찾아서 배열에 저장한다고 가정하면 Latitude는 두 개의 쉼표 뒤에 있고 Longitude는 네 개의 쉼표 뒤에 있습니다. 이제이 위도와 경도를 다른 배열에 넣을 수 있습니다.
다음은 설명과 함께 $ GPGGA 문자열입니다.
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M`` * 47 $ GPGGA, HHMMSS.SSS, 위도, N, 경도, E, FQ, NOS, HDP, altitude, M, height, M,, 체크섬 데이터
식별자 |
기술 |
$ GPGGA |
글로벌 포지셔닝 시스템 수정 데이터 |
HHMMSS.SSS |
시간 (시간 분 초 및 밀리 초 형식) |
위도 |
위도 (좌표) |
엔 |
방향 N = 북, S = 남 |
경도 |
경도 (좌표) |
이자형 |
방향 E = 동쪽, W = 서 |
FQ |
품질 데이터 수정 |
NOS |
사용중인 위성 수 |
HDP |
정밀도의 수평 희석 |
고도 |
고도 (해발 미터) |
미디엄 |
미터 |
신장 |
신장 |
체크섬 |
체크섬 데이터 |
GSM 모듈:
SIM900은 고객이나 애호가가 쉽게 사용할 수있는 완전한 쿼드 밴드 GSM / GPRS 모듈입니다. SIM900 GSM 모듈은 산업 표준 인터페이스를 제공합니다. SIM900은 낮은 전력 소비로 음성, SMS, 데이터에 GSM / GPRS 850 / 900 / 1800 / 1900MHz 성능을 제공합니다. 시장에서 쉽게 구할 수 있습니다.
- AMR926EJ-S 코어를 통합 한 단일 칩 프로세서를 사용하여 설계된 SIM900
- 작은 크기의 쿼드 밴드 GSM / GPRS 모듈.
- GPRS 사용
AT 명령:
AT는주의를 의미합니다. 이 명령은 GSM 모듈을 제어하는 데 사용됩니다. 이전에 Arduino를 사용하는 많은 GSM 프로젝트에서 사용한 통화 및 메시징 명령이 있습니다. GSM 모듈을 테스트하기 위해 AT 명령을 사용했습니다. AT Command GSM Module 수신 후 OK로 응답합니다. GSM 모듈이 잘 작동하고 있음을 의미합니다. 다음은 이 프로젝트에서 사용한 AT 명령입니다.
ATE0 에코 오프 용 AT + CNMI = 2,2,0,0,0
(GSM 모듈에 대한 자세한 내용은 여기에서 다양한 마이크로 컨트롤러로 다양한 GSM 프로젝트를 확인하십시오.)
가속도계:
가속도계 핀 설명:
- Vcc 5 볼트 전원이이 핀에 연결되어야합니다.
- X-OUT이 핀은 x 방향으로 아날로그 출력을 제공합니다.
- Y-OUT이 핀은 y 방향으로 아날로그 출력을 제공합니다.
- Z-OUT이 핀은 z 방향으로 아날로그 출력을 제공합니다.
- GND 접지
- ST 센서의 감도 설정에 사용되는 핀
또한 Accelerometer를 사용하는 다른 프로젝트: Arduino를 사용한 Ping Pong 게임 및 Accelerometer 기반 손 제스처 제어 로봇을 확인하십시오.
회로 설명:
이 차량 사고 경보 시스템 프로젝트 의 회로 연결 은 간단합니다. 여기서 GPS 모듈 의 Tx 핀 은 Arduino의 디지털 핀 번호 10에 직접 연결됩니다. 여기에서 소프트웨어 직렬 라이브러리를 사용하여 핀 10과 11에서 직렬 통신을 허용하고 각각 Rx 및 Tx로 만들고 GPS 모듈의 Rx 핀을 열어 둡니다. 기본적으로 Arduino의 핀 0과 1은 직렬 통신에 사용되지만 SoftwareSerial 라이브러리를 사용하면 Arduino의 다른 디지털 핀에서 직렬 통신을 허용 할 수 있습니다. 12V 공급은 GPS 모듈에 전원을 공급하는 데 사용됩니다.
GSM 모듈의 Tx 및 Rx 핀은 Arduino의 D2 및 D3 핀에 직접 연결됩니다. GSM 인터페이스의 경우 여기에서 소프트웨어 직렬 라이브러리도 사용했습니다. GSM 모듈은 12v 전원으로도 공급됩니다. 선택적 LCD의 데이터 핀 D4, D5, D6, D7 및 핀 번호 6, 7, 8에 연결되고, 9의 Arduino된다. LCD의 커맨드 핀 RS와 EN은 Arduino의 4, 5 번 핀에 연결되고 RW 핀은 접지에 직접 연결됩니다. 전위차계는 LCD의 대비 또는 밝기를 설정하는데도 사용됩니다.
가속도계 직접 ADC의 Arduino 핀 A1, A2 및 A3에 연결되어 사고 및 X, Y, Z 축 ADC 출력 핀을 검출하기위한 시스템이 추가된다.
작동 설명:
이 프로젝트에서 Arduino는 GPS 수신기와 GSM 모듈로 전체 프로세스를 제어하는 데 사용됩니다. GPS 수신기는 차량의 좌표를 감지하는 데 사용되며 GSM 모듈은 좌표와 Google Map 링크가 포함 된 경고 SMS를 보내는 데 사용됩니다. 가속도계, 즉 ADXL335 는 모든 축의 사고 또는 갑작스러운 변화를 감지하는 데 사용됩니다. 또한 선택 사항 인 16x2 LCD는 상태 메시지 또는 좌표를 표시하는데도 사용됩니다. 우리는 GPS 모듈 SIM28ML 및 GSM 모듈 SIM900A를 사용했습니다.
프로그래밍 후 하드웨어 준비가 완료되면 차량에 설치하고 전원을 켤 수 있습니다. 이제 사고가 발생할 때마다 차가 기울어지고 가속도계가 축 값을 변경합니다. 이 값은 Arduino에서 읽고 어떤 축에서 변경이 발생하는지 확인합니다. 변경이 발생하면 Arduino는 GPS 모듈 데이터에서 $ GPGGA 문자열을 추출하여 좌표를 읽고 (위에서 설명한 GPS 작업) 미리 정의 된 번호로 SMS를 경찰이나 구급차 또는 사고 장소의 위치 좌표와 함께 가족 구성원에게 보냅니다. 메시지에는 사고 위치에 대한 Google지도 링크도 포함되어있어 위치를 쉽게 추적 할 수 있습니다. 메시지를 받으면 링크를 클릭하기 만하면 Google지도로 리디렉션되고 차량의 정확한 위치를 볼 수 있습니다. 차량 속도 (노트 단위)(1.852 KPH), SMS로도 전송되고 LCD 패널에 표시됩니다. 프로젝트 아래 의 전체 데모 비디오를 확인하십시오.
이 프로젝트에서는 코드에 최소값과 최대 값을 입력하여 가속도계의 감도를 설정할 수 있습니다.
여기 데모에서 주어진 값을 사용했습니다.
#define minVal -50 #define MaxVal 50
그러나 더 나은 결과를 위해 50 대신 200을 사용하거나 요구 사항에 따라 설정할 수 있습니다.
프로그래밍 설명:
완전한 프로그램은 아래 코드 섹션에 제공되었습니다. 여기에서는 다양한 기능을 간략하게 설명합니다.
먼저 필요한 모든 라이브러리 또는 헤더 파일을 포함하고 계산 및 데이터 임시 저장을 위해 다양한 변수를 선언했습니다.
그 후, GSM 모듈을 초기화하고 AT 명령을 사용하여 응답을 확인하는 void initModule (String cmd, char * res, int t) 함수를 만들었습니다.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); 지연 (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); 지연 (t); 반환; } else {Serial.println ("오류"); }} 지연 (t); }}
이후 void setup () 함수에서 하드웨어 및 소프트웨어 직렬 통신, LCD, GPS, GSM 모듈 및 가속도계를 초기화했습니다.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("사고 경고"); lcd.setCursor (0,1); lcd.print ("시스템"); 지연 (2000); lcd.clear ();…………………
가속도계 교정 프로세스 도 설정 루프 에서 수행됩니다. 여기에서는 몇 가지 샘플을 취한 다음 x 축, y 축 및 z 축의 평균값을 찾습니다. 그리고 그것들을 변수에 저장하십시오. 그런 다음이 샘플 값을 사용하여 차량이 기울어 질 때 (사고) 가속도계 축의 변화를 읽었습니다.
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("가속기"); for (int i = 0; i
그런 다음 void loop () 함수에서 가속도계 축 값을 읽고 보정에서 가져온 샘플을 사용하여 변경 사항을 추출하는 계산을 수행했습니다. 이제 변경 사항이 정의 된 수준보다 많거나 적 으면 Arduino는 미리 정의 된 번호로 메시지를 보냅니다.
void loop () {int value1 = analogRead (x); int value2 = analogRead (y); int value3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
여기에서 우리는 또한 같은 다양한 목적들을위한 몇 가지 다른 기능을 만들었습니다 무효 gpsEvent () GPS 좌표, 얻을 무효 coordinate2dec를 () 는 GPS 문자열에서 좌표를 추출하고 진수 값으로 변환 무효 show_coordinate () 시리얼 모니터를 통해 값을 표시하고 LCD, 그리고 마지막으로 미리 정의 된 번호로 경고 SMS를 보내기 위한 void Send () .
완성 된 코드와 데모 영상 은 아래와 같습니다. 코드의 모든 기능을 확인할 수 있습니다.