0 đánh giá

Lập trình giao tiếp với Tay cầm điều khiển RC vơi Arduino

Nếu bạn là tín đồ của Thiết bị điêu khiển từ xa RC như Ô tô, Máy bay mô hình, Ca nô chắc bạn từng làm quen với Tay điều khiển của nó. Với thể loại này, Bạn thường mua về sau đó lắp ráp cho nó. Bạn có bao giờ nghĩ rằng làm sao để ta dùng nó để điều khiển không ?. Bài hướng dẫn này tôi sẽ hướng dẫn cho các bạn làm sao để lập trình lấy tín hiệu điều khiển từ bộ điều khiển RC.

Bước 1: Linh kiện cần thiết
khoere_arduino-uno-8559306063.jpg khoere_bo-thu-rc-1518796817.jpg khoere_bo-phat-rc-3966453592.jpg

Linh kiện cần thiết gồm có:

- Arduino UNO

- Bộ thu phát sóng RC 4 hoặc 6 kênh.

- Động cơ Servo

- Dây nối

Bước 2: Nối dây
khoere_fm24mu9ibrs2sin.medium1-4974718694.jpg khoere_dau-day-2004314498.jpg khoere_rc-input-wiring-7647961475.png

- Để tiến hành đấu nối, trước tiên bạn cần tìm hiểu về bộ thu của R/C. Bộ điều khiển RC có rất nhiều hãng sản xuất, có thể có 4 hoặc 6 kênh hoặc hơn. Một kênh của bộ thu gồm 3 dây, +, - và tín hiệu điều khiển nhận được. 

- Ta tiến hành nối chân D7 arduino vào kênh 3 của bộ thu. 

- Chân + của  bộ thu nối với chân 5V, chân - của bộ thu nối với GND.

- Với động cơ Servo, nối - vào GND. + vào 5V. Chân điều khiển vào D9 Arduino.

Bước 3: Lập trình

Chương trình này sẽ nhận tín hiệu điều khiển từ Bộ điều khiển và điều khiển cho động cơ servo, 

#include <Servo.h> // Gọi thư viện dành cho động cơ Servo.
Servo myservo; //
int pos = 0; //Vị trí đc Servo.
int ch1; // Giá trị nhận được từ bộ thu
int ch2;
int ch3;
void setup() {
  myservo.attach(9); //Định nghĩa động cơ nối vào chân 9
  pinMode(5, INPUT); // Chân tín hiệu kênh 1
  pinMode(6, INPUT); // Chân tín hiệu kênh 2
  pinMode(7, INPUT); // Chân tín hiệu kênh 3
  Serial.begin(9600); // 
}
void loop() {
  ch1 = pulseIn(5, HIGH, 25000); // Đọc độ rộng xung của kênh 1
  ch2 = pulseIn(6, HIGH, 25000); // Đọc độ rộng xung của kênh 2
  ch3 = pulseIn(7, HIGH, 25000); // Đọc độ rộng xung của kênh 3
  Serial.print(Channel 1:); // Hiển thị lên debug
  Serial.println(ch1); // 
  Serial.print(Channel 2:);
  Serial.println(ch2);
  Serial.print(Channel 3:);
  Serial.println(ch3);
  if ((ch3 >= 1500) && (ch3 <= 1600)) { // the center postion for controller
    Serial.println(ở giữa);
    pos = 90;//đặt động cơ vào vị trí ơ giữa, 90*
    myservo.write(pos); // 
  }
  else {
    
    Serial.println(không ở giữa);
    if(ch3 >1500){
    
    for (pos = 0; pos < 180; pos += 1) // Nếu remote muốn tăng giá trị thì ta sẽ tăng dần góc của động cơ.
    { // Một bức 1 độ
      myservo.write(pos); 
      delay(1); // chờ 1ms để động cơ di chuyển
    }
    }else{
    for (pos = 180; pos >= 1; pos -= 1) 
    {
      myservo.write(pos); 
      delay(1); 
    }
}
  }
  delay(100); 
}

pulseIn(): Đọc một xung tín hiệu digital (HIGH/LOW) và trả về chu kì của xung tín hiệu, tức là thời gian tín hiệu chuyển từ mức HIGH xuống LOW hoặc ngược lại (LOW -> HIGH). Một số cảm biến như cảm biến màu sắc như TCS3200D hay cảm biến siêu âm dòng HC-SRxx phải giao tiếp qua xung tín hiệu nên ta phải kết hợp giữa 2 hàm digitalWrite() để xuất tín hiệu và pulseIn() để đọc tín hiệu.

(!) Nếu có bất kỳ thắc mắc nào cần hỏi vui lòng đặt câu hỏi tại HỏiHay.Net, Cộng đồng Hỏi đáp Hỏi Hay sẽ trả lời bạn.
3,660 lượt xem ^tháng ^ngày, ^năm
admin 2,030 điểm

Please log in or register to Comment this Media.