Chương trình Code Labview

Một phần của tài liệu Nghiên cứu và thiết kế thiết bị lưu trữ dữ liệu phục vụ xử lý xe sau tai nạn đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 80)

Hình 4.14: Khối chương trình

Khối lấy dữ liệu từ file .TXT

Hình 4.15: Khối lấy dữ liệu từ file .TXT

Khối lấy dữ liệu từ file .TXT có ô trỏ cho phép nạp file dữ liệu đuôi .TXT, chuyển sang dạng text, xuất thành mảng dữ liệu theo từng cột.

73

Khối tín hiệu tay số

Hình 4.16: Khối tín hiệu tay số

Là khối điều kiện gồm default (tay số 1 2 3), -1 (tay số P), -2 (tay số R)

Khối xác định thời điểm tai nạn

Hình 4.17:Khối xác định thời điểm tai nạn

Khối dựa trên giá trị gia tốc thẳng đạt giá trị > 2.5g (24m/s2) hay gia tốc ngang đạt giá trị >1g (9.81 m/s2) để xác định thời điểm xảy ra tai nạn.

74

Khối tách dữ liệu thành các tín hiệu riêng biệt

Hình 4.18: Khối tách dữ liệu thành các tín hiệu riêng biệt

Khối này tách các dữ liệu theo của file dữ liệu thành các cột dữ liệu riêng biệt ứng với mỗi thông số, dữ liệu được tách ra và ở dạng chuỗi.

Khối vẽ đồ thị tọa độ chuyền động của ô tô

Hình 4.19: Khối vẽ đồ thị tọa độ chuyền động của ô tô

Tọa độ chuyển động của ô tô được tính toán như mô tả ở phần hình ảnh 4.12: Giao diện đồ thị tọa độ quỹ đạo chuyển động của xe.

75

Ngoài giao diện chính, nhóm nghiên cứu còn tạo thêm 2 giao diện đồ thị để thể hiện từng thông số của xe trong quá trình tai nạn.

Hình 4.20: Đồ thị hành vi người lái và sự chuyển động của xe

Các đồ thị chia thành 2 nhóm chính: Nhóm 1 là các thông số thể hiện tác động của người lái lên xe. Nhóm 2 là các thông số chuyển động thực tế của xe

Đồ thị diễn tả quá trình thay đổi của từng thông số đã lưu trữ theo thời gian thực

Hình 4.21: Đồ thị tín hiệu của xe

Đồ thị này giúp dễ dàng so sánh mỗi tương quan giữa hành vi của người lái và chuyển động thực tế của xe trên cũng 1 trục thời gian xung quanh thời điểm tai nạn.

76

Hình 4.22: Giao diện thông số bàn đạp ga và tốc độ theo thời gian

77

Hình 4.24: Giao diện thông số tay số, phanh và ly hợp của xe

Trên đây là một giao diện hiển thị khác hỗ trợ xử lý tai nạn với các thông số có tương quan với nhau: Bàn đạp ga – tốc độ xe, góc lái – góc Yaw xe, … các đồ thị này giúp điều tra viên có thể so sánh các hành vi của người lái và thông số tình trạng thực tế của xe.

78

CHƯƠNG 5: KẾT QUẢ THỰC NGHIỆM 5.1. Lắp đặt thiết bị

Vì việc lấy dữ liệu tai nạn khó thực hiện trong thực tế nên nhóm sẽ thiết kế mô hình giả lập tai nạn với các thông số giá trị bàn đạp ga, tốc độ xe, phanh, tín hiệu lái xe, tay số, ly hợp và truyền dữ liệu giao tiếp với mô hình thu thập dữ liệu bằng mạng truyền thông CAN.

.

Hình 5.1: Sơ đồ đấu dây module giả lập

Ở module giả lập các giá trị thay đổi từ các nút bấm và biến trở giả lập thông số tạo ra các tín hiệu tốc độ xe, vị trí bàn đạp chân ga, góc đánh vô lăng, vị trí tay số, bàn đạp phanh, ly hợp, tín hiệu lỗi SRS của xe theo thời gian thực của module RTC DS1307. Các tín hiệu này được Arduino ghi nhận và truyền thông qua mạng CAN đến module lưu trữ dữ liệu tai nạn.

79

Hình 5.2: Sơ đồ đấu dây giữa 2 mô hình (module giả lập bên trái và module

thu thập dữ liệu bên phải)

Đồng thời Nhóm nghiên cứu cũng di chuyển module lưu trữ dữ liệu để tạo ra các tín hiệu về góc xoay, gia tốc và giả tín hiệu tai nạn.

80

5.2. Kết quả thu được

5.2.1. Kết quả thu được trên Module giả lập

Hình 5.4: Giao diện hiển thị của module giả lập

Màn hình LCD thể hiện các thông số vị trí bàn đạp ga, góc đánh vô lăng, tốc độ và tay số hiện tại điều khiển chính xác điều kiện giả lập.

81

5.2.2. Kết quả lưu trữ trên thẻ SD

Hình 5.5: Kết quả lưu được trên thẻ SD

Các tín hiệu được lưu dưới dạng file .txt trong thẻ nhớ. Mỗi tín hiệu được chia thành các cột riêng biệt nhằm dễ dàng cho việc xử lý số liệu trên Labview

82

5.2.3. Kết quả hiển thị trên Labview

Hình 5.6: Kết quả hiển thị trên Labview

Giao diện Labview thể hiện các thông số chuyển động trước và sau tai nạn 30s. Giúp người điều tra viên đánh giá tai nạn có được cái nhìn tổng quan về các thông số và các thay đổi trong thời điểm xảy ra tai nạn.

Thông số SRS: Trạng thái về dây an toàn, túi khí có bị lỗi trong thời gian tai nạn

hay không. Thông số giúp đánh giá về người trong xe có hay không sử dụng dây an toàn.

Thông số gia tốc: Thông số gia tốc được tính toán dựa vào sự thay đổi vận tốc delta

V trong một khoảng thời gian nhỏ lấy mẫu, gia tốc được tính với đơn vị m/s2, đại lượng này đặc trưng cho sự thay đổi vận tốc của xe theo thời gian, người ta cũng dựa vào số liệu gia tốc để nhận định và phân tích mức độ nghiêm trọng của vụ tai nạn, vì nếu gia tốc lớn, các thuộc tính liên quan đến đại lượng gia tốc như lực quán tính, momen quán tính cũng sẽ rất lớn, những thành phần này sẽ là thước đo cho sự nghiệm trọng của vụ tai nạn.

Thông số vận tốc: Thông số vận tốc cho biết tốc độ của xe trước, trong và sau thời

điểm xảy ra tai nạn, đại lượng này giúp người điều tra biết được tại thời điểm xảy ra tai nạn, người điều khiển phương tiện có đang phạm luật quá tốc độ hay không.

Thông số tay số: Thông số tay số giúp điều tra viên đánh giá hành vi tác động của

người lái lên xe. Số tiến (1,2,3) số lùi (R), hay số trung gian(N) ảnh hưởng đến tốc độ và hướng chuyển động của xe.

83

Thông số bàn đạp ga: Dữ liệu bàn đạp ga được lấy từ cảm biến bàn đạp ga, nó cho

biết tại thời điểm trước, trong và sau va chạm, người lái xe có đang đạp bàn đạp ga hay không, giá trị phần trăm bàn đạp ga là bao nhiêu.

Thông số bàn đạp phanh: Dữ liệu bàn đạp phanh (phần trăm bàn đạp phanh) được

lấy từ công tắc cảm biến lực đạp phanh kết hợp với dữ liệu bàn đạp ga cho biết liệu người lái có chủ động giảm tốc để tránh tai nạn hoặc giảm thiểu mức độ nghiêm trọng của tai nạn hay không.

Thông số góc lái: Dữ liệu thông số góc lái được lấy từ cảm biến góc lái của xe, lắp

tại vị trí vô lăng lái. Đại lượng này giúp người điều tra viên biết được tại thời điểm trước, trong và sau va chạm, người lái xe đang lái xe với góc lái như thế nào, người lái có chủ động đánh lái để tránh tai nạn hoặc giảm mức độ nghiêm trọng của tai nạn hay không.

84

Hình 5.8: Kết quả đồ thị tín hiệu xe

85

Hình 5.10: Giao diện thông số góc lái và góc Yaw của xe theo thời gian

86

Chương 6. KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN 6.1. Những kết quả đạt được

Sau thời gian thực hiện đồ án với sự hướng dẫn và giúp đỡ của giảng viên hướng dẫn

ThS Nguyễn Trọng Thức, nhóm đã hoàn thành đề tài và đạt được những kết quả sau:

Thực hiện giả lập một vài thông số quan trọng cần thu thập để xử lý và tái hiện sau khi xe bị tai nạn, lưu trữ dữ liệu vào thẻ nhớ thông qua việc lấy dữ liệu bằng giao thức CAN, tăng mẫu lấy dữ liệu để đạt được số dữ liệu lưu được là 8 lần/giây.

Thiết kế công cụ hiển thị lại các giá trị đã thu thập được thành đồ thị theo thời gian để thuận tiện cho quá trình phân tích.

Qua đề tài này chúng em có cơ hội tìm hiểu sâu hơn về chuẩn giao tiếp CAN trên xe ô tô, kết hợp các module, cảm biến và lập trình vi điều khiển vào thực tế, nâng cao kỹ năng tìm kiếm, sàng lọc và đọc hiểu tài liệu, thấy được những thiếu xót trong kiến thức để có thể học tập và trao dồi hơn cho những công việc sau này.

6.2. Hướng phát triển của đề tài

 Sử dụng bộ lọc nhiễu để tăng độ chính xác của cảm biến MPU 6050 và loại bỏ giá trị của gia tốc trọng trường lên gia tốc thẳng và gia tốc ngang để tính vận tốc thực tế của xe.

 Thử nghiệm thiết bị trên xe thực tế có hỗ trợ cung cấp các thông số quan trọng như góc lái, phanh, tay số, …

 Sử dụng kết hợp thông qua module bluetooth, module wifi để thu thập dữ liệu trên xe, lưu trữ trên server

 Sử dụng cảm biến GPS để thu được tọa độ tại nạn, kết hợp với cảm biến gia tốc để đo chính xác tốc độ thực tế của xe

87

TÀI LIỆU THAM KHẢO

(1) https://www.rietveld.nl/wp-content/uploads/2019/04/EDR-Event-Data-Recorder- 2019.pdf truy cập 17/11/2020 (2) https://www.aaam.org/education-resource-center/public-position-statements/event- data-recorder-position-statement/ truy cập 17/11/2020 (3) https://carsexplained.wordpress.com/2017/02/21/fundamentals-of-car-science-pitch- and-roll/ truy cập 5/1/2021 (4) https://mesidas.com/can-canbus/ truy cập 11/1/2021 (5) https://news.hoikysuotovn.com/cau-truc-tren-giac-chan-doan-obd-ii-va-y-nghia-cac- con-so-trong-ma-loi-obd-ii/ truy cập 15/1/2021

(6) https://en.wikipedia.org/wiki/OBD-II_PIDs truy cập ngày 15/1/2021

(7) http://dammedientu.vn/chuan-giao-tiep-spi-va-cach-ket-noi/ truy cập ngày 9/1/2021 (8) http://arduino.vn/bai-viet/1053-giao-tiep-i2c-voi-nhieu-module truy cập ngày

8/1/2021 (9) http://dammedientu.vn/gioi-thieu-chuan-giao-tiep-i2c/ (10) https://stackoverflow.com/questions/58469297/how-do-i-calculate-the-yaw-pitch- and-roll-of-a-point-in-3d?noredirect=1&lq=1 (11) https://www.analog.com/en/technical-articles/mems-gyroscope-provides- precision-inertial-sensing.html?fbclid=IwAR1k8X3WwFM8Z9o4vYc- eP2KbcX9N6x3DYcoZ-lIvnCA82oRAcuv7nmhfQ8 (12) https://sensorwiki.org/sensors/gyroscope?fbclid=IwAR0uKr-O7tweqTpYye- Zwl73D4Pi6xzeqHasSU-ul0hJ7qu1j5V8KPK4LII (13) http://www.formula1-dictionary.net/motions_of_f1_car.html (14) https://www.geotab.com/white-paper/collision-reconstruction-with-telematics/

88

PHỤ LỤC

Code module giả lập:

1. #include <mcp_can.h> // khai báo thư viện CAN

2. #include <SPI.h> //Khai báo thư viện SPI

3. #include <Wire.h> //Khai báo thư viện wire cho I2C

4. #include <LiquidCrystal_I2C.h> //Khai báo thư viện I2C

5. LiquidCrystal_I2C lcd(0x27,20,4);

6. #include <RTClib.h> //Khai báo thư viện RTC

7. int readA0();

8. RTC_DS1307 rtc;

9. char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

10. int St,Sp, STA;

11. const int VPA = A3;

12. const int Speed=A2;

13. const int Steer=A1;

14. const int Clutch=4;

15. const int SRS=5;

16. const int Brake=8;

17. const int SPI_CS_PIN = 10;

18. MCP_CAN CAN(SPI_CS_PIN); //Set CS pin của module CAN Bus

19. void setup() 20. { Serial.begin(9600); 21. 22. if (! rtc.begin()) 23. { 24. Serial.print("Couldn't find RTC"); 25. while (1); 26. } 27. 28. if (! rtc.isrunning())

89

29. {

30. Serial.print("RTC is NOT running!");

31. Serial.println();

32. }

33. rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

34. pinMode(0, OUTPUT); //Khai báo các chân tín hiệu

35. pinMode(Clutch, INPUT); 36. pinMode(VPA, INPUT); 37. pinMode(Speed, INPUT); 38. pinMode(Steer, INPUT); 39. pinMode(SRS, INPUT); 40. pinMode(A0, INPUT);

41. lcd.init(); //Khởi tạo LCD

42. lcd.backlight();

43. lcd.print("VPA:"); //VARIBLE PEDAL ACCELARATE

44. lcd.setCursor(9,0);

45. lcd.print("Speed:"); //VEHICLE SPEED

46. lcd.setCursor(0,1);

47. lcd.print("STA:"); //STEERING ANGLE

48. lcd.setCursor(9,1);

49. lcd.print("Gear:"); //GEAR NUMBER

50. while (CAN_OK != CAN.begin(CAN_500KBPS)) // khởi tạo tốc độ CAN : baudrate = 500k

51. {

52. Serial.println("CAN BUS Shield init fail");

53. Serial.println(" Init CAN BUS Shield again");

54. digitalWrite(0,LOW);

55. delay(100);

56. }

57. Serial.println("CAN BUS Shield init ok!");

90

59. }

60. unsigned char DataVPA[8] = {0x02, 0x41, 0x49, 0, 0, 0, 0, 0}; //khởi tạo smg

61. unsigned char DataSpeed[8] = {0x02, 0x41, 0x0D, 0, 0, 0, 0, 0};

62. unsigned char DataSteer[8] = {0x02, 0x41, 0x25, 0, 0, 0, 0, 0};

63. unsigned char DataGear[8] = {0x02, 0x41, 0x26, 0, 0, 0, 0};

64. unsigned char DataBrake[8] = {0x02, 0x41, 0x60, 0, 0, 0, 0, 0};

65. unsigned char DataSRS[8] = {0x02, 0x41, 0x28, 0, 0, 0, 0, 0};

66. unsigned char DataClutch[8] = {0x02, 0x41, 0x35, 0, 0, 0, 0, 0};

67. unsigned char DataTime[8] = {0x02, 0x41, 0x30, 0, 0, 0, 0, 0};

68. unsigned char DataDate[8] = {0x02, 0x41, 0x31, 0, 0, 0, 0, 0};

69. void loop()

70. {

71. DateTime now = rtc.now(); //gán giá trị cho smg

72. DataDate[3]=now.day(); 73. DataDate[4]=now.month(); 74. DataDate[5]=(now.year()/1000)*10+(now.year()%1000)/100; 75. DataDate[6]=now.year()%100; 76. DataTime[3]=now.hour(); 77. DataTime[4]=now.minute(); 78. DataTime[5]=now.second(); 79. DataGear[3]=readA0(); 80. DataBrake[3]=digitalRead(Brake); 81. DataSRS[3]=digitalRead(SRS); 82. DataClutch[3]=digitalRead(Clutch); 83. DataVPA[3]=map(analogRead(VPA),0,1023,0,100);

84. Sp=map(analogRead(Speed),0,1023,0,120); //gán giá trị speed

85. DataSpeed[3]=Sp;

86. St=map(analogRead(Steer),0,1023,-100,100); //gán giá trị steer

87. STA=map(analogRead(Steer),0,1023,-600,600);

88. DataSteer[3]=abs(St); //gán giá trị steer cho msg

91 90. { 91. DataSteer[4]=1; 92. } 93. else 94. { 95. DataSteer[4]=0; 96. } 97. lcd.setCursor(4,0); 98. if (DataVPA[3]<10) {lcd.print("00");} 99. if (DataVPA[3]>=10&&DataVPA[3]<100) {lcd.print("0");} 100. lcd.print(DataVPA[3]); 101. lcd.setCursor(15,0); 102. if (Sp<10) {lcd.print("00");} 103. if (Sp>=10&&Sp<100) {lcd.print("0");} 104. lcd.print(Sp); 105. lcd.setCursor(4,1); 106. if (STA>0) {lcd.print("+");} 107. if (STA<0) {lcd.print("-");} 108. if (abs(STA)<10) {lcd.print("00");} 109. if (abs(STA)>=10&&abs(STA)<100) {lcd.print("0");} 110. lcd.print(abs(STA)); 111. lcd.setCursor(15,1); 112. switch (DataGear[3]){ 113. case 5: 114. lcd.print("R"); 115. break; 116. case 4: 117. lcd.print("P"); 118. break; 119. case 0: 120. lcd.print("N");

92 121. break; 122. default: 123. lcd.print(DataGear[3]); 124. break; 125. }

126. CAN.sendMsgBuf(0x7E, 0, 8, DataDate); //gửi dữ liệu qua CAN

127. delay(10); 128. CAN.sendMsgBuf(0x7E, 0, 8, DataTime); 129. delay(10); 130. CAN.sendMsgBuf(0x7E8, 0, 8, DataVPA); 131. delay(10); 132. CAN.sendMsgBuf(0x7E8, 0, 8, DataSpeed); 133. delay(10); 134. CAN.sendMsgBuf(0x264, 0, 8, DataSteer); 135. delay(10); 136. CAN.sendMsgBuf(0x1D0, 0, 8, DataGear); 137. delay(10); 138. CAN.sendMsgBuf(0x194, 0, 8, DataSRS); 139. delay(10); 140. CAN.sendMsgBuf(0x136, 0, 8, DataClutch); 141. delay(10); 142. CAN.sendMsgBuf(0x30, 0, 8, DataBrake); 143. delay(10); 144. }

145. int readA0(){ //chương trình con đọc dữ liệu tay số

146. int Gr; 147. int y = floor(map(analogRead(A0),0,1023,0,200)); 148. if (y >= 163 && y <= 170) { 149. Gr=0; 150. } 151. if (y >= 156 && y <= 160) {

93 152. Gr=4; 153. } 154. if (y >= 145 && y <= 155 ) { 155. Gr=1; 156. } 157. if (y >= 125 && y <= 135) { 158. Gr=2; 159. } 160. if (y >=95 && y <= 110) { 161. Gr=3; 162. } 163. if (y >= 0 && y <= 10) { 164. Gr=5; 165. } 166. return Gr; 167. } ////END

Một phần của tài liệu Nghiên cứu và thiết kế thiết bị lưu trữ dữ liệu phục vụ xử lý xe sau tai nạn đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 80)

Tải bản đầy đủ (PDF)

(101 trang)