Trong các bài hướng dẫn trước, chúng ta đã tìm hiểu về Cách giao diện mô-đun GPS với Máy tính và cách Theo dõi xe bằng GSM và GPS. Chúng tôi cũng đã xây dựng Hệ thống Cảnh báo Tai nạn Xe cộ bằng Arduino và gia tốc kế. Ở đây, chúng tôi đang xây dựng lại dự án tương tự nhưng lần này, bệ phóng MSP430 và cảm biến rung sẽ được sử dụng để phát hiện tai nạn xe cộ. Vì vậy, dự án này cũng sẽ nói về giao tiếp cảm biến rung với bệ khởi chạy MSP430. Bạn có thể tìm thêm các dự án MSP430 tại đây.
Tại đây, mô-đun cảm biến rung phát hiện độ rung của xe và gửi tín hiệu đến MSP430 Launchpad. Sau đó MSP430 lấy dữ liệu từ mô-đun GPS và gửi đến Điện thoại di động của người dùng qua SMS bằng mô-đun GSM. Một đèn LED cũng sẽ phát sáng dưới dạng tín hiệu Cảnh báo Tai nạn, đèn LED này có thể được thay thế bằng một số báo động. Vị trí của vụ 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. Xem Video Demo ở cuối.
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
ATD
AT + CMGF = 1
AT + CMGS = "Số điện thoại di động"
>> Bây giờ chúng ta có thể viết tin nhắn của mình
>> Sau khi soạn tin nhắn
Ctrl + Z gửi lệnh tin nhắn (26 ở dạng thập phân).
ENTER = 0x0d trong HEX
(Để 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)
Mô-đun cảm biến rung
Trong dự án Hệ thống Cảnh báo Tai nạn MSP430 này, chúng tôi đã sử dụng một mô-đun cảm biến rung động để phát hiện các rung động hoặc điều biến đột ngột. Mô-đun cảm biến rung đưa ra đầu ra kỹ thuật số logic CAO / THẤP tùy thuộc vào mô-đun. Trong trường hợp của chúng tôi, chúng tôi đã sử dụng mô-đun cảm biến rung logic CAO đang hoạt động. Nó có nghĩa là bất cứ khi nào cảm biến rung động phát hiện ra rung động, nó sẽ đưa ra mức logic CAO cho bộ vi điều khiển.
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ố P1_1 của MSP430 Launchpad (Serial phần cứng) và 5v được sử dụng để cấp nguồn cho Mô-đun GPS. 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 P_6 và P1_7, đồng thời biến chúng thành Rx và Tx tương ứng và được kết nối với mô-đun GSM. Nguồn 12 Volt được sử dụng để cấp nguồn cho Mô-đun GSM. Các rung cảm biến được kết nối tại P1_3. Đèn LED cũng được sử dụng để chỉ báo phát hiện tai nạn. Phần còn lại của các kết nối được hiển thị trong sơ đồ mạch.
Giải thích lập trình
Lập trình cho dự án này rất dễ dàng ngoại trừ phần GPS. Mã hoàn chỉnh được đưa ra ở cuối dự án. Để viết hoặc biên dịch mã trong MSP430, chúng tôi đã sử dụng Energia IDE tương thích với Arduino. Hầu hết chức năng Arduino IDE có thể được sử dụng trực tiếp trong IDE Energia này.
Vì vậy, trước hết chúng tôi đã bao gồm một thư viện bắt buộc và ghim và biến đã khai báo.
#include
Chức năng đã cho được sử dụng để đọc tín hiệu cảm biến rung động. Chức năng này cũng sẽ lọc các rung động nhỏ hoặc sai.
#define count_max 25 char SensorRead (int pin) // đọc sw với debounce { char count_low = 0, count_high = 0; làm { delay (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; đếm_thấp ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; khác trả về CAO; }
Hàm dưới phát hiện rung và gọi hàm gpsEvent () để lấy tọa độ GPS và cuối cùng gọi hàm Send () để gửi SMS.
void loop () { if (SensorRead (VibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Gửi (); digitalWrite (dẫn đầu, THẤP); chậm trễ (2000); } }
Chức năng Given chịu trách nhiệm lấy chuỗi GPS từ mô-đun GPS, trích xuất tọa độ từ chúng và chuyển đổi chúng ở định dạng độ-thập phân.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Dữ liệu gửi nối tiếp từ GPS { char inChar = (char) Serial.read (); gpsString = inChar; // lưu trữ dữ liệu nhập từ GPS vào chuỗi tạm thời str i ++; if (i <4) { if (gpsString! = test) // kiểm tra chuỗi bên phải i = 0; }
int độ = 0; độ = gpsString-48; độ * = 10; độ + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; vĩ độ = ((float) độ + phút);
Và cuối cùng, hàm Send () được sử dụng để gửi SMS đến số người dùng được chèn trong phần mã này.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // nhập số Di động của bạn GSM.println ('"'); chậm trễ (500); // GSM.print ("Latitude:"); // GSM.println (vĩ độ); GSM.println ("Tai nạn Đã xảy ra"); chậm trễ (500); // GSM.print ("kinh độ:"); // GSM.println (logitude); GSM.println ("Nhấp vào liên kết để xem Vị trí"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (vĩ độ, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); chậm trễ (4000); }
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ã.