Dự án xe điều khiển từ xa qua Internet với iNut Cảm biến kết nối wifi trong nhà hoặc USB Wifi 3G

30/06/2021
du-an-xe-dieu-khien-tu-xa-qua-internet-voi-inut-cam-bien-ket-noi-wifi-trong-nha-

Mô tả dự án: 

Với mong muốn các bạn có thể sáng tạo ra con xe vòng quanh khắp thế giới 5 châu, mình làm ra cái app này để giúp các bạn thực hiện được điều đó.

P/s: Bạn nào muốn gắn camera thì lấy một con android phát wifi bằng 3G rồi video call từ điện thoại đó qua máy tính. Rồi cầm trên tay con app này và control xe nè :D (ý tưởng từ một bạn trong cộng đồng Arduino Việt Nam)

1. Bạn sẽ làm được gì trong ngày hôm nay?

Đó là một con xe thực sự điều khiển qua Internet chứ không đơn thuần là một chiếc xe điều khiển qua Bluetooth bạn nhé.

2. Bạn cần chuẩn bị gì

  • Arduino UNO
  • Module L298
  • Dây breadboard (đực - đực và cái cái)
  • Bộ khung xe rùa (hoặc 2 động cơ và một bánh đa hướng gắn vào một tấm phản)
  • Và không thể thiếu iNut Cảm biến

3. Tải một số app

Bạn cần 02 app:

  • iNut - để cài đặt iNut Cảm biến
  • iNut Robot Controller để điều khiển xe (chỉ support Android)

4. Lắp mạch cho xe nè :>

Bạn có thể thay thế nguồn 9V bằng nguồn pin lipo 2 cell hoặc 3 cell (hoặc li-ion 2 hoặc 3 viên). Bạn cũng có thể sử dụng nguồn từ 7 - 15V để thay thế. Ví dụ như 8 cục pin tiểu mắc nối tiếp cũng có thể chạy được nè! 

5. Cài đặt mạng iNut Cảm biến

Các bạn có thể lắp mạch rồi cài đặt cũng được hoặc dùng dây micro usb nối vào máy tính hoặc cục sạc 5V usb nhé.

Cài đặt cho mạng (iNut_<con số>) (Password: inut12345)

6. Nạp code Arduino

 
  1. #include <Wire.h>
  2. #define N_SENSOR 1
  3. float sensors[N_SENSOR];
  4.  
  5.  
  6. //l298 - module điều khiển động cơ
  7. #define ENA 7
  8. #define IN1 6
  9. #define IN2 5
  10. #define IN3 4
  11. #define IN4 3
  12. #define ENB 2
  13.  
  14. //Định nghĩa các hướng di chuyển
  15. #define UP 1
  16. #define RIGHT 2
  17. #define DOWN 3
  18. #define LEFT 4
  19.  
  20.  
  21. //Biến lưu trữ hướng đi của Robot hiện tại
  22. int direction;
  23.  
  24.  
  25. //Cài đặt chương trình
  26. void setup() {
  27. Serial.begin(9600);
  28. Wire.begin(10);
  29.  
  30. //Đăng ký lệnh lắng nghe lệnh từ iNut - Cảm biến. iNut Cảm biến => Arduino
  31. Wire.onReceive(receiveEvent);
  32.  
  33. //Đăng ký lệnh khi iNut - Cảm biến yêu cầu gửi dữ liệu lại cho nó. Arduino => iNut Cảm biến
  34. Wire.onRequest(i2cRequestEvent);
  35.  
  36. //Cài đặt các chân điều khiển motor là OUTPUT
  37. pinMode(ENA, OUTPUT);
  38. pinMode(IN1, OUTPUT);
  39. pinMode(IN2, OUTPUT);
  40. pinMode(IN3, OUTPUT);
  41. pinMode(IN4, OUTPUT);
  42. pinMode(ENB, OUTPUT);
  43.  
  44. //điều khiển các chân Enable A, Enable B để cho phép module điều khiển động cơ hoạt động
  45. digitalWrite(ENA, HIGH);
  46. digitalWrite(ENB, HIGH);
  47.  
  48. //Gọi hàm stop để dừng chương trình
  49. stop();
  50.  
  51. }
  52.  
  53.  
  54. //Các biến lưu trữ lệnh khi nhận được lệnh từ iNut - Cảm biến
  55. volatile char buffer[33];
  56. volatile boolean receiveFlag = false;
  57.  
  58. //Khi nhận được lệnh từ iNut cảm biến thì lắng nghe
  59. void receiveEvent(int howMany)
  60. {
  61. Wire.readBytes((byte *)buffer, howMany);
  62. buffer[howMany] = 0;
  63. receiveFlag = true;
  64. }
  65.  
  66. void i2cRequestEvent()
  67. {
  68. //Buộc phải có nếu bạn muốn gửi dữ liệu
  69. char *data = (byte*)&sensors;
  70. Wire.write(data, sizeof(sensors));
  71. Serial.println(F("gui den inut - cam bien"));
  72. }
  73.  
  74.  
  75. void loop() {
  76.  
  77. //rain sensor
  78. sensors[0] = direction;
  79.  
  80. if (receiveFlag) { //khi có tín hiệu là đã nhận được lệnh
  81.  
  82. String command = buffer; //chép lệnh vào biến String cho dễ xử lý
  83.  
  84.  
  85. Serial.print(command);// in ra lệnh
  86. Serial.print(' ');
  87. Serial.println(millis());//in ra thời gian theo millis tính từ lúc arduino chạy để debug
  88. if (command == "UP") {
  89. up();
  90. } else if (command == "DOWN") {
  91. down();
  92. } else if (command == "TURN_LEFT") {
  93. left();
  94. } else if (command == "TURN_RIGHT") {
  95. right();
  96. } else if (command == "STOP") {
  97. stop();
  98. }
  99.  
  100. receiveFlag = false; //đánh dấu đã xử lý xong lệnh, không cần đọc nữa
  101. }
  102. //Cho xe chạy 500ms thôi để lỡ có chạm mạch thì còn xử lý được :))
  103. static unsigned long timer = 0;
  104. if (millis() - timer > 1500UL) {
  105. stop();
  106. timer = millis();
  107. }
  108. }
  109.  
  110. void up() {
  111. digitalWrite(IN1,HIGH);
  112. digitalWrite(IN2,LOW);
  113. digitalWrite(IN3,HIGH);
  114. digitalWrite(IN4,LOW);
  115. direction = UP;
  116.  
  117. Serial.println(F("Xe chay toi"));
  118. }
  119.  
  120. void down() {
  121. digitalWrite(IN1,LOW);
  122. digitalWrite(IN2,HIGH);
  123. digitalWrite(IN3,LOW);
  124. digitalWrite(IN4,HIGH);
  125. direction = DOWN;
  126.  
  127. Serial.println(F("Xe chay lui"));
  128. }
  129.  
  130. void left() {
  131. digitalWrite(IN1,HIGH);
  132. digitalWrite(IN2,LOW);
  133. digitalWrite(IN3,LOW);
  134. digitalWrite(IN4,HIGH);
  135. direction = LEFT;
  136.  
  137. Serial.println(F("Xe re trai"));
  138. }
  139.  
  140. void right() {
  141. digitalWrite(IN1,LOW);
  142. digitalWrite(IN2,HIGH);
  143. digitalWrite(IN3,HIGH);
  144. digitalWrite(IN4,LOW);
  145. direction = RIGHT;
  146.  
  147. Serial.println(F("Xe re phai"));
  148. }
  149.  
  150. void stop() {
  151. digitalWrite(IN1,LOW);
  152. digitalWrite(IN2,LOW);
  153. digitalWrite(IN3,LOW);
  154. digitalWrite(IN4,LOW);
  155. direction = 0;
  156.  
  157.  
  158. Serial.println(F("Xe dung lai!"));
  159. }
  160.  

Các bạn nạp code sau đây vào nhé! Trong đó mình có giải thích các đoạn code và ý nghĩa của nó. Nôm na là như sau:

  • Khi app gửi lệnh UP thì gọi hàm up(); => tức là đi tới.
  • Khi app gửi lệnh DOWN thì gọi hàm down(); => tức là đi tới.
  • Khi app gửi lệnh TURN_LEFT thì gọi hàm left(); => tức là rẻ trái.
  • Khi app gửi lệnh TURN_RIGHT thì gọi hàm right(); => tức là rẻ phải.
  • Khi app gửi lệnh STOP thì gọi hàm stop(); => tức là đứng lại.
  • Và cứ khi nhận lệnh là 500ms giây sau gọi làm đứng lại để lỡ xe chạy nhanh quá nó tự dừng

7. Lấy app điều khiển thôi nào!

Để điều khiển được xe của mình, các bạn phải cài iNut vào mạng wifi nhà mình như hướng dẫn ở trên. Các bạn có thể phát wifi bằng một điện thoại khác rồi cho inut kết nối vào đó, từ đó có thể điều khiển từ xa khắp mọi miền tổ quốc qua 3G đó nhé. Có thể dùng facebook để chat video với người xung quanh nữa nhé. Hoặc dùng facetime luôn cho nó khỏe!

P/s: các bạn nào muốn đổi sang mạng wifi khác thì nhấn nút FLASH trên board iNut Cảm biến trong 10 giây nhé

Trên phần mềm iNut, bạn vào Cài đặt > Chọn tên thiết bị bạn mới cài > Kéo xuống dưới cùng chọn Dành cho lập trình viên, bạn sẽ có một mã QrCode, lấy thiết bị bạn sẽ điều khiển xe quét mã QrCode và thế là chơi thôi.

P/s: Nếu bạn quét mã qrcode rồi mà vẫn không được thì bật tắt app iNut hoặc click vào nút đổi mã thiết bị phía dưới cùng nhé (nhớ kiểm tra kết nối mạng của thiết bị thông minh điều khiển xe nữa nha)

8. App điều khiển có những block gì, tôi có quyền thêm code không?

Được bạn nha, toàn bộ app mình mở hết mà, các bạn có thể tải file aia củ app inventer tại đây nhé.

Hãy đi khám phá cả xóm của mình với độ ngầu của iNut Cảm biến và smartphone kết hợp nhé. Điều mà xe bluetooth KHÔNG THỂ LÀM ĐƯỢC. Chúc các bạn thành công!

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN