- Các thành phần bắt buộc:
- Mô-đun GPS và hoạt động của nó:
- Mô-đun GSM:
- Gia tốc kế:
- Giải thích mạch:
- Giải thích làm việc:
- Giải thích lập trình:
Trong các hướng dẫn trước của chúng tôi, chúng ta đã tìm hiểu về Cách giao diện mô-đun GPS với Máy tính, cách xây dựng Đồng hồ GPS Arduino và cách Theo dõi xe bằng GSM và GPS. Ở đây trong dự án này, chúng tôi sẽ xây dựng một hệ thống cảnh báo tai nạn xe cộ dựa trên Arduino sử dụng GPS, GSM và gia tốc kế. Gia tốc kế phát hiện sự thay đổi đột ngột trong trục của xe và mô-đun GSM sẽ gửi thông báo cảnh báo trên Điện thoại di động của bạn với vị trí xảy ra tai nạn. Vị trí tai nạn được gửi dưới dạng liên kết Google Map, lấy từ vĩ độ và kinh độ từ mô-đun GPS. Thông báo cũng bao gồm tốc độ của xe tính bằng hải lý. Xem Video giới thiệucuối cùng. Dự án cảnh báo Tai nạn Xe cộ này cũng có thể được sử dụng như một Hệ thống Theo dõi và hơn thế nữa, chỉ bằng cách thực hiện một số thay đổi trong phần cứng và phần mềm.
Các thành phần bắt buộc:
- Arduino Uno
- Mô-đun GSM (SIM900A)
- Mô-đun GPS (SIM28ML)
- Gia tốc kế (ADXL335)
- LCD 16x2
- Nguồn cấp
- Kết nối dây
- 10 K-POT
- Breadboard hoặc PCB
- Nguồn cung cấp 12v 1amp
Trước khi đi vào Dự án, chúng ta sẽ thảo luận về GPS, GSM và Gia tốc kế.
Mô-đun GPS và hoạt động của nó:
GPS là viết tắt của Hệ thống Định vị Toàn cầu và được sử dụng để phát hiện Vĩ độ và Kinh độ của bất kỳ vị trí nào trên Trái đất, với thời gian UTC chính xác (Phối hợp theo giờ quốc tế). Mô-đun GPS được sử dụng để theo dõi vị trí xảy ra tai nạn trong dự án của chúng tôi. Thiết bị này nhận các tọa độ từ vệ tinh trong từng giây, với thời gian và ngày tháng. Trước đây chúng tôi đã trích xuất chuỗi $ GPGGA trong Hệ thống Theo dõi Xe để tìm Tọa độ Vĩ độ và Kinh độ.
Mô-đun GPS gửi dữ liệu liên quan đến vị trí theo dõi trong thời gian thực và nó gửi rất nhiều dữ liệu ở định dạng NMEA (xem ảnh chụp màn hình bên dưới). Định dạng NMEA bao gồm một số câu, trong đó chúng ta chỉ cần một câu. Câu này bắt đầu từ $ GPGGA và chứa tọa độ, thời gian và các thông tin hữu ích khác. Đây GPGGA được gọi Global Positioning System Fix dữ liệu. Biết thêm về câu NMEA và đọc dữ liệu GPS tại đây.
Chúng ta có thể trích xuất tọa độ từ chuỗi $ GPGGA bằng cách đếm các dấu phẩy trong chuỗi. Giả sử bạn tìm thấy chuỗi $ GPGGA và lưu trữ nó trong một mảng, thì Latitude có thể được tìm thấy sau hai dấu phẩy và Kinh độ có thể được tìm thấy sau bốn dấu phẩy. Bây giờ, vĩ độ và kinh độ này có thể được đặt trong các mảng khác.
Dưới đây là Chuỗi $ GPGGA, cùng với mô tả của nó:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1.08.0.9.510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, vĩ độ, N, kinh độ, E, FQ, NOS, HDP, độ cao, M, chiều cao, M,, dữ liệu tổng kiểm tra
Định danh |
Sự miêu tả |
$ GPGGA |
Hệ thống định vị toàn cầu sửa dữ liệu |
HHMMSS.SSS |
Thời gian ở định dạng giờ phút giây và mili giây. |
Vĩ độ |
Vĩ độ (Tọa độ) |
N |
Hướng N = Bắc, S = Nam |
Kinh độ |
Kinh độ (Tọa độ) |
E |
Hướng E = Đông, W = Tây |
FQ |
Sửa dữ liệu chất lượng |
NOS |
Số lượng vệ tinh đang được sử dụng |
HDP |
Pha loãng theo chiều ngang của độ chính xác |
Độ cao |
Độ cao (mét trên mực nước biển) |
M |
Mét |
Chiều cao |
Chiều cao |
Checksum |
Dữ liệu Checksum |
Mô-đun GSM:
SIM900 là một Mô-đun GSM / GPRS bốn băng tần hoàn chỉnh có thể được nhúng dễ dàng bởi khách hàng hoặc người yêu thích. Mô-đun SIM900 GSM cung cấp giao diện tiêu chuẩn công nghiệp. SIM900 mang lại hiệu suất GSM / GPRS 850/900/1800 / 1900MHz cho thoại, SMS, Dữ liệu với mức tiêu thụ điện năng thấp. Nó dễ dàng có sẵn trên thị trường.
- SIM900 được thiết kế bằng cách sử dụng bộ xử lý chip đơn tích hợp lõi AMR926EJ-S
- Mô-đun GSM / GPRS bốn băng tần có kích thước nhỏ.
- GPRS đã bật
Lệnh AT:
AT có nghĩa là TẬN TÂM. Lệnh này được sử dụng để điều khiển mô-đun GSM. Có một số lệnh để gọi và nhắn tin mà chúng tôi đã sử dụng trong nhiều dự án GSM trước đây của chúng tôi với Arduino. Để kiểm tra Mô-đun GSM, chúng tôi sử dụng lệnh AT. Sau khi nhận được AT Command Mô-đun GSM trả lời bằng OK. Nó có nghĩa là mô-đun GSM đang hoạt động tốt. Dưới đây là một số lệnh AT chúng tôi đã sử dụng ở đây trong dự án này:
ATE0 Để tắt tiếng vọng AT + CNMI = 2,2,0,0,0
(Để tìm hiểu thêm về mô-đun GSM, hãy kiểm tra các dự án GSM khác nhau của chúng tôi với các bộ vi điều khiển khác nhau tại đây)
Gia tốc kế:
Mô tả Pin của máy đo gia tốc:
- Nguồn cung cấp Vcc 5 volt nên kết nối tại chân này.
- X-OUT Chân này cung cấp đầu ra Analog theo hướng x
- Y-OUT Chân này cung cấp đầu ra Analog theo hướng y
- Z-OUT Chân này cung cấp đầu ra Analog theo hướng z
- GND Ground
- ST Chân này được sử dụng để đặt độ nhạy của cảm biến
Đồng thời kiểm tra các dự án khác của chúng tôi bằng Gia tốc kế: Trò chơi Ping Pong sử dụng Arduino và Robot điều khiển bằng cử chỉ dựa trên gia tốc kế.
Giải thích mạch:
Kết nối mạch của Dự án Hệ thống Cảnh báo Tai nạn Xe cộ này rất đơn giản. Ở đây chân Tx của mô-đun GPS được kết nối trực tiếp với chân số 10 của Arduino. Bằng cách sử dụng Thư viện nối tiếp phần mềm tại đây, chúng tôi đã cho phép giao tiếp nối tiếp trên chân 10 và 11, đồng thời đặt chúng lần lượt là Rx và Tx và để mở chân Rx của Mô-đun GPS. Theo mặc định, Chân 0 và 1 của Arduino được sử dụng để giao tiếp nối tiếp nhưng bằng cách sử dụng thư viện SoftwareSerial, chúng tôi có thể cho phép giao tiếp nối tiếp trên các chân kỹ thuật số khác của Arduino. Nguồn 12 Volt được sử dụng để cấp nguồn cho Mô-đun GPS.
Các chân Tx và Rx của mô-đun GSM được kết nối trực tiếp với chân D2 và D3 của Arduino. Đối với giao diện GSM, ở đây chúng tôi cũng đã sử dụng thư viện nối tiếp phần mềm. Mô-đun GSM cũng được cung cấp bởi nguồn cung cấp 12v. Một màn hình LCD tùy chọn của các chân dữ liệu D4, D5, D6, D7 và được kết nối với pin số 6, 7, 8 và 9 của Arduino. Chân lệnh RS và EN của LCD được kết nối với chân số 4 và 5 của Arduino và chân RW được kết nối trực tiếp với đất. Một chiết áp cũng được sử dụng để thiết lập độ tương phản hoặc độ sáng của màn hình LCD.
Một Gia tốc kế được thêm vào hệ thống này để phát hiện tai nạn và các chân đầu ra ADC trục x, y và z của nó được kết nối trực tiếp với chân A1, A2 và A3 của Arduino ADC.
Giải thích làm việc:
Trong dự án này, Arduino được sử dụng để kiểm soát toàn bộ quá trình bằng Bộ thu GPS và mô-đun GSM. Bộ thu GPS được sử dụng để phát hiện tọa độ của xe, mô-đun GSM được sử dụng để gửi tin nhắn SMS cảnh báo với tọa độ và liên kết đến Google Map. Gia tốc kế cụ thể là ADXL335 được sử dụng để phát hiện tai nạn hoặc thay đổi đột ngột trên bất kỳ trục nào. Và một màn hình LCD 16x2 tùy chọn cũng được sử dụng để hiển thị thông báo trạng thái hoặc tọa độ. Chúng tôi đã sử dụng Mô-đun GPS SIM28ML và Mô-đun GSM SIM900A.
Khi chúng tôi đã sẵn sàng với phần cứng của mình sau khi lập trình, chúng tôi có thể cài đặt nó vào xe của mình và khởi động nó. Bây giờ bất cứ khi nào có tai nạn, chiếc xe sẽ bị nghiêng và gia tốc kế thay đổi các giá trị trục của anh ta. Các giá trị này được đọc bởi Arduino và kiểm tra xem có bất kỳ thay đổi nào xảy ra trong bất kỳ trục nào không. Nếu có bất kỳ thay đổi nào xảy ra thì Arduino sẽ đọc tọa độ bằng cách trích xuất Chuỗi $ GPGGA từ dữ liệu mô-đun GPS (hoạt động của GPS được giải thích ở trên) và gửi SMS đến số được xác định trước cho cảnh sát hoặc xe cứu thương hoặc thành viên gia đình với tọa độ vị trí của nơi xảy ra tai nạn. Tin nhắn cũng chứa một liên kết Google Map đến vị trí tai nạn để có thể dễ dàng theo dõi vị trí đó. Khi chúng tôi nhận được tin nhắn sau đó chúng tôi chỉ cần nhấp vào liên kết và chúng tôi sẽ chuyển hướng đến bản đồ Google và sau đó chúng tôi có thể nhìn thấy vị trí chính xác của chiếc xe. Tốc độ của xe, tính bằng hải lý(1.852 KPH), cũng được gửi trong SMS và hiển thị trên màn hình LCD. Kiểm tra Video Demo đầy đủ bên dưới Dự án.
Ở đây trong dự án này, chúng ta có thể đặt độ nhạy của Accelerometer bằng cách đặt giá trị tối thiểu và tối đa vào mã.
Ở đây trong bản demo đã sử dụng các giá trị đã cho:
#define minVal -50 #define MaxVal 50
Nhưng để có kết quả tốt hơn, bạn có thể sử dụng 200 thay cho 50 hoặc có thể đặt theo yêu cầu của bạn.
Giải thích lập trình:
Chương trình hoàn chỉnh đã được đưa ra bên dưới trong phần Mã; ở đây chúng tôi đang giải thích ngắn gọn các chức năng khác nhau của nó.
Đầu tiên, chúng tôi đã bao gồm tất cả các thư viện hoặc tệp tiêu đề bắt buộc và khai báo các biến khác nhau để tính toán và lưu trữ dữ liệu tạm thời.
Sau đó, chúng ta đã tạo một hàm void initModule (String cmd, char * res, int t) để khởi tạo mô-đun GSM và kiểm tra phản hồi của nó bằng các lệnh AT.
void initModule (Chuỗi cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); chậm trễ (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); sự chậm trễ (t); trở về; } else {Serial.println ("Lỗi"); }} delay (t); }}
Sau đó, trong hàm void setup () , chúng tôi đã khởi tạo giao tiếp nối tiếp phần cứng và phần mềm, LCD, GPS, mô-đun GSM và gia tốc kế.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Cảnh báo Tai nạn"); lcd.setCursor (0,1); lcd.print ("Hệ thống"); chậm trễ (2000); lcd.clear ();…………………
Quá trình hiệu chuẩn gia tốc kế cũng được thực hiện trong vòng lặp thiết lập . Trong phần này, chúng tôi đã lấy một số mẫu và sau đó tìm các giá trị trung bình cho trục x, trục y và trục z. Và lưu trữ chúng trong một biến. Sau đó, chúng tôi đã sử dụng các giá trị mẫu này để đọc các thay đổi trong trục gia tốc khi xe bị nghiêng (tai nạn).
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("Bộ tăng tốc"); for (int i = 0; i
Sau đó, trong hàm void loop () , chúng tôi đã đọc các giá trị trục gia tốc kế và thực hiện tính toán để trích xuất các thay đổi với sự trợ giúp của các mẫu được lấy trong Hiệu chuẩn. Bây giờ nếu có bất kỳ thay đổi nào nhiều hơn hoặc ít hơn mức đã xác định thì Arduino sẽ gửi thông báo đến số được xác định trước.
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);…………………
Ở đây chúng tôi cũng đã tạo ra một số chức năng khác cho puposes khác nhau như trống gpsEvent () để có được tọa độ GPS, khoảng trống coordinate2dec () để trích xuất tọa độ từ chuỗi GPS và chuyển đổi chúng thành các giá trị thập phân, khoảng trống show_coordinate () để hiển thị giá trị trên màn hình nối tiếp và LCD, và cuối cùng là void Send () để gửi tin nhắn SMS cảnh báo đến số được xác định trước.
Toàn bộ mã và video demo được đưa ra bên dưới, bạn có thể kiểm tra tất cả các chức năng trong mã.