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

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)

 

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é.

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

 

Tải một số app

Bạn cần 02 app:

Lắp mạch cho xe nè ahihi

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è! 

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)

Nạp code Arduino

#include <Wire.h>
#define N_SENSOR  1
float sensors[N_SENSOR];


//l298 - module điều khiển động cơ
#define ENA 7
#define IN1 6
#define IN2 5
#define IN3 4
#define IN4 3
#define ENB 2 

//Định nghĩa các hướng di chuyển
#define UP 1
#define RIGHT 2
#define DOWN 3
#define LEFT 4


//Biến lưu trữ hướng đi của Robot hiện tại
int direction;


//Cài đặt chương trình
void setup() {
  Serial.begin(9600);
  Wire.begin(10);

  //Đăng ký lệnh lắng nghe lệnh từ iNut - Cảm biến. iNut Cảm biến => Arduino
  Wire.onReceive(receiveEvent); 

  //Đă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
  Wire.onRequest(i2cRequestEvent);

  //Cài đặt các chân điều khiển motor là OUTPUT
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);

  //đ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
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  //Gọi hàm stop để dừng chương trình
  stop();

}


//Các biến lưu trữ lệnh khi nhận được lệnh từ iNut - Cảm biến
volatile char buffer[33];
volatile boolean receiveFlag = false;

//Khi nhận được lệnh từ iNut cảm biến thì lắng nghe
void receiveEvent(int howMany)
{
  Wire.readBytes((byte *)buffer, howMany);
  buffer[howMany] = 0;
  receiveFlag = true;
}

void i2cRequestEvent()
{
  //Buộc phải có nếu bạn muốn gửi dữ liệu
  char *data = (byte*)&sensors;
  Wire.write(data, sizeof(sensors));
  Serial.println(F("gui den inut - cam bien"));
}


void loop() {

  //rain sensor
  sensors[0] = direction;

  if (receiveFlag) { //khi có tín hiệu là đã nhận được lệnh
    
    String command = buffer; //chép lệnh vào biến String cho dễ xử lý
    
    
    Serial.print(command);// in ra lệnh
    Serial.print(' ');
    Serial.println(millis());//in ra thời gian theo millis tính từ lúc arduino chạy để debug
    if (command == "UP") {
      up();
    } else if (command == "DOWN") {
      down();
    } else if (command == "TURN_LEFT") {
      left();
    } else if (command == "TURN_RIGHT") {
      right();
    } else if (command == "STOP") {
      stop();
    }

    receiveFlag = false; //đánh dấu đã xử lý xong lệnh, không cần đọc nữa
  }
  //Cho xe chạy 500ms thôi để lỡ có chạm mạch thì còn xử lý được :))
  static unsigned long timer = 0;
  if (millis() - timer > 1500UL) {
    stop();
    timer = millis();
  }
}

void up() {
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  direction = UP;

  Serial.println(F("Xe chay toi"));
}

void down() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  direction = DOWN;

  Serial.println(F("Xe chay lui"));
}

void left() {
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  direction = LEFT;

  Serial.println(F("Xe re trai"));
}

void right() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  direction = RIGHT;

  Serial.println(F("Xe re phai"));
}

void stop() {
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,LOW);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,LOW);
 direction = 0;


 Serial.println(F("Xe dung lai!"));
}
 

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 (như video của mình devil).

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). Một video nói lên hết bao điều:

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é.

Chúc các bạn thành công! 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, làm xong thì cho mình xin một ảnh dưới bình luận cho xôm nha hehe.

lên
2 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Tạo một quy trình công nghiệp với các bước bằng Arduino - Phần 2: công việc có điều kiện

Ở bài viết trước, mình đã đề cập đến vấn đề là "Làm thế nào để xây dựng một quy trình công nghiệp trên Arduino.VN". Ở bài viết đó, mình đã đề cập đến vấn đề quy trình có điều kiện, và với sự hưởng ứng từ Cộng đồng qua vấn đề làm một máy công nghiệp dùng để sản xuất sản xuất thành phẩm, mình muốn đóng góp một cái gì đó để dự án này hoàn thiện, đó cũng làm một cách để rèn luyện khả năng xử lý vấn đề thông qua mô tả mà không trực tiếp "chạy" máy devil​!

lên
10 thành viên đã đánh giá bài viết này hữu ích.

Lập trình Arduino trên mây với Arduino Create - Sự thay thế tạm thời cho Codebender

Như chúng ta đã biết, Arduino là một board mạch lập trình giúp những người yêu thích vọc vạch điện tử có thể làm nên những dự án ý nghĩa mà không cần qua bất cứ trường lớp chuyên môn nào cả. Vậy, ngoài việc lập trình trên máy tính trước đây, liệu có cách nào giúp chúng ta lập trình Arduino trên mây được hay không? Nếu là một người theo dõi Arduino.vn thường xuyên, thì chắc hẳn bạn biết đến Codebender. Tuy nhiên, vì các lý do về kinh phí hoạt động, codebender của chúng ta sẽ không còn cho phép biên dịch code miễn phí online vào cuối tháng 11/2016 nữa. Vậy, liệu đó có phải là dấu chấm hết cho cộng đồng chúng ta khi muốn biên dịch Arduino online? Câu trả lời là không, và tôi xin giới thiệu với bạn Arduino Create, một trình biên dịch Arduino IDE online của Arduino(dot)cc được phát triển sau codebender và cũng mới đi vào hoạt động trong năm 2016.

lên
13 thành viên đã đánh giá bài viết này hữu ích.