Tay cầm điều khiển robot

1. Giới thiệu


Gamepad là một phụ kiện được sử dụng để mở rộng khả năng tương tác với các loại robot trong hệ sinh thái OhStem, bao gồm Robot xBot, Robot Rover và Maker Robot. Việc kết nối giữa Gamepad và robot được thực hiện thông qua module Gamepad Receiver ở cổng giao tiếp I2C có trên robot. Điều này cho phép người dùng dễ dàng kiểm soát và điều khiển robot một cách linh hoạt hơn, tăng tính năng tương tác và trải nghiệm với robot.

../_images/gamepad.png

Đặc biệt, Gamepad có 2 joystick và 12 nút nhấn có thể lập trình để tạo ra các tính năng tùy biến để người dùng điều khiển robot theo ý muốn. Các tính năng bao gồm di chuyển, nâng hạ, dò line,… sẽ giúp bạn khám phá tất cả các chức năng của robot và tạo ra những trải nghiệm mới mẻ.

3. Thông số kỹ thuật


  • Thông số kỹ thuật của module Gamepad Receiver:

../_images/gamepad.1.png

  • Thông số kỹ thuật của Gamepad:

../_images/gamepad.2.png

4. Kết nối GamePad với Robot Rover



  • Đối với Robot xBot và Maker Robot: Kết nối module vào cổng I2C ở vị trí số 4.

../_images/i2c_xbot.png

Các bước còn lại thực hiện tượng tự như Rover


5. Các nút nhấn có trên Gamepad:


  • Mặt trước của Gamepad:

../_images/gamepad.3.png

  • Mặt trên của Gamepad:

../_images/gamepad.4.png


6. Chức năng của module Gamepad Receiver


Module Gamepad Receiver là thiết bị để kết nối robot với tay cầm điều khiển, trên module sẽ có các nút nhấn và đèn báo hiệu như sau:

../_images/gamepad.5.png

  1. Đèn báo dung lượng pin trên Gamepad:

    Khi gamepad đã được kết nối tới module, các đèn này sẽ hiển thị tình trạng pin của Gamepad như sau:

    • Pin < 20% hoặc Gamepad chưa được kết nối: 0 đèn sáng

    • Pin < 40%: 1 đèn sáng

    • Pin <60%: 2 đèn sáng

    • Pin <80%: 3 đèn sáng

    • Pin >80%: 4 đèn sáng

  2. Đèn báo trạng thái:

    Đèn này sẽ báo cho bạn biết module đã kết nối thành công với Gamepad hay chưa.

    2.1. Đèn chớp tắt nhanh (0,2s): Module đang tìm kiếm và cấp phép kết nối đến các gamepad mới.

    Sau đó, nhấn giữ nút Nguồn và nút Share trên Gamepad cùng 1 lúc để Gamepad vào chế độ kết nối mới. Khi đó đèn led trên Gamepad sẽ nháy trắng liên tục báo hiệu đã vào chế độ kết nối mới.

../_images/gamepad.6.png

2.2. Đèn chớp tắt chậm (1s): Module đang tìm kiếm và kết nối các Gamepad đã được cho phép kết nối ở bước 2.1.

Đồng thời nhấn nút nguồn Gamepad, đèn led trên Gamepad sẽ nháy trắng chậm báo hiệu đã vào chế độ tìm thiết bị đã kết nối. Khi đèn trên GamePad và đèn báo trạng thái trên module Gamepad Receiver cùng hiện màu xanh thì đã kết nối thành công.

../_images/gamepad.7.png

2.3. Đèn chuyển từ trạng thái luôn bật sang chớp tắt 3 lần rồi tắt hẳn: Module đã xóa tất cả các kết nối đã cấp phép ở bước 2.1.

  1. Nút Reset:

    Khởi động lại module, đồng thời ngắt kết nối với Gamepad đã kết nối.

  2. Nút Clear: Nút này có chức năng sau:

    • Nhấn giữ nút Clear sau khi nhấn nút Reset: Lúc này đèn báo kết nối sẽ nhấp nháy nhanh như mô tả ở mục 2.2 để bắt đầu tìm kiếm thiết bị Gamepad mới.

    • Nhấn giữ nút Clear trong vòng 3 giây trong quá trình Gamepad đã kết nối thành công với module Gamepad Receiver thì module Gamepad Receiver sẽ xóa kết nối của Gamepad đã được cho phép. Để sử dụng kết nối lại, bạn cần thực hiện lại bước 2.1

7. Hướng dẫn lập trình với OhStem App


7.1. Thư viện

  1. Vào giao diện lập trình cho Yolo:Bit (hoặc xBot) trong OhStem App tại địa chỉ https://app.ohstem.vn/ hoặc ứng dụng OhStem App trên mobile ( Tải trên Google Play / App Store với tên tìm kiếm là “OhStem App”)

../_images/thu_vien.1.png

  1. Nhấn vào mục Mở Rộng ở danh sách bên trái:

../_images/thu_vien.2.png

  1. Chọn thư viện Robocon trong danh sách mục mở rộng có sẵn (hoặc nhập tên Robocon vào ô tìm kiếm nếu bạn không nhìn thấy):

../_images/robocon.png

Chọn tải thư viện:

../_images/thu_vien.3.png

  1. Chọn thiết bị Yolo:Bit (hoặc xBot) để kết nối (nếu chưa kết nối) và phải đảm bảo đã cài đặt thư viện thành công (bên trái giao diện xuất hiện danh mục Gamepad như hình):

../_images/robocon.2.png

7.2. Giới thiệu khối lệnh

Trong danh mục khối lệnh Gamepad sẽ có các khối lệnh với chức năng như sau:

  • Khối lệnh khởi tạo Gamepad:

    Để lập trình cho Gamepad, trước tiên bạn cần khai báo chân kết nối của module Gamepad Receiver với robot bằng câu lệnh sau:

../_images/gamepad.8.png

Note

Đối với xBot, bạn sử dụng câu lệnh sau để khai báo cổng kết nối module Gamepad Receiver với robot:

../_images/gamepad.27.png

Chỉ kết nối module với xBot ở cổng 4, 5 hoặc 6


  • Cài đặt chế độ điều khiển:

    Bạn có thể đặt chế độ điều khiển mặc định của robot bằng câu lệnh:

../_images/gamepad.9.png

Từng chế độ điều khiển trên Gamepad sẽ có chức năng và màu đèn tương ứng như sau:

  • Phím điều hướng dpad - đèn màu cam: cho phép robot di chuyển theo 4 hướng tiến về trước, lùi lại, rẽ trái và rẽ phải. Bạn cũng có thể điều khiển robot di chuyển theo đường cong bằng cách nhấn kết hợp 2 phím ↑ hoặc ↓ với ↶ hoặc ↷ cùng lúc đến khi thả nút nhấn.

  • Joystick trái - đèn xanh lá: chỉ có thể điều khiển robot di chuyển đến các hướng bằng joystick ở bên trái Gamepad.

  • Joystick phải - đèn xanh dương: tượng tự với joystick trái, chỉ có thể điều khiển robot đi đến các hướng bằng joystick ở bên phải Gamepad.

  • Kết hợp joystick trái và joystick phải - đèn tím: bạn có thể điều khiển từng động cơ của robot, Joystick trái điều khiển động cơ bên trái, joystick phải điều khiển động cơ bên phải.

  • Cài đặt tăng giảm tốc độ cho robot:

    Câu lệnh giúp bạn tăng và giảm tốc độ của robot cho đến khi đạt yêu cầu:

../_images/gamepad.10.png

Tốc độ mặc định của robot khi được điều khiển bằng Gamepad là 50. Bạn có thể chọn 2 nút nhấn bất kỳ trên Gamepad để tăng và giảm tốc độ bằng cách nhấn vào hình tam giác có trong câu lệnh.

Note

Ngoài việc điều khiển các hướng di chuyển của robot, joystick trái và joystick phải còn có chức năng như một nút nhấn khi được nhấn.

  • Cài đặt điều khiển tay gắp của Robot:

    Câu lệnh có chức năng điều khiển tay gắp đóng và mở:

../_images/gamepad.11.png
Bạn cần chọn đúng chân cắm servo của tay gắp trong chương trình và nhấn vào hình tam giác có trong câu lệnh để chọn nút nhấn điều khiển tay gắp robot trên Gamepad.
  • Cài đặt kit bắn bóng:

    Câu lệnh có chức năng điều khiển kit bắn bóng, bật chế độ nạp đạn hoặc chế độ bắn:

../_images/gamepad.12.png

Ở câu lệnh này bạn cần chọn đúng chân cắm của từng servo trên robot. Nhấn vào hình tam giác có trong câu lệnh để chọn nút nhấn điều khiển kit bắn bóng trên Gamepad.

  • Đổi màu đèn trên Gamepad

    Câu lệnh đổi màu đèn hiển thị trên Gamepad. Có thể chọn màu khác mà bạn muốn đổi.

../_images/gamepad.13.png

Vị trí đèn LED trên Gamepad:

../_images/gamepad.14.png

  • Thay đổi mức độ rung của Gamepad:

    Câu lệnh yêu cầu Gamepad rung để khi nó kết nối thành công với robot.

    Bạn có thể điều chỉnh độ rung trong khoảng từ 0 đến 100 và thời gian rung từ 0 đến 2000 mili giây (tương đương với 2 giây).

../_images/gamepad.15.png

  • Chuyển sang chế độ dò line:

    Câu lệnh này được sử dụng để bật chế độ dò line trên robot.

    Nhấn giữ nút này để robot thực hiện việc dò line. Sau khi thả ra, chế độ dò line hết tác dụng trở về chế độ điều khiển trước đó.

../_images/gamepad.16.png

Tốc độ dò line có thể thay đổi trong khoảng từ 0 đến 100 và nhấn vào hình tam giác có trong câu lệnh để chọn nút nhấn robot dò line trên Gamepad.

Note

Đối với xBot, bạn cần chọn đúng cổng kết nối của cảm biến dò line với robot khi thực hiện chương trình.

../_images/gamepad.17.png

  • Nút tăng tốc:

    Câu lệnh này có chức năng giúp robot tăng tốc lên tốc độ tối đa là 100 ngay lập tức.

    Nhấn giữ nút này trong khi sử dụng các chế độ di chuyển, sẽ giúp robot tăng tốc lên độ tối đa là 100. Khi thả nút, robot sẽ chuyển về tốc độ hoạt động trước đó của nó.

../_images/gamepad.18.png

  • Đổi chế độ điều khiển:

    Câu lệnh có chức năng thay đổi chế độ điều khiển robot trên Gamepad.

../_images/gamepad.19.png
Khi nhấn nút này, 4 chế độ điều khiển sẽ chuyển lần lượt từ: Phím điều hướng dpad -> Joystick trái -> Joystick phải -> Kết hợp Joystick trái và Joystick phải. Đồng thời đèn trên Gamepad sẽ đổi màu theo từng chế độ điều khiển. Giúp người dùng dễ dàng lựa chọn chế độ điều khiển phù hợp trong quá trình sử dụng.

Nhấn vào hình tam giác có trong câu lệnh để chọn nút nhấn đổi chế độ điều khiển robot.

  • Điều khiển servo:

    Câu lệnh này được sử dụng để điều khiển servo trên các bộ kit khác như đầu nâng, thùng xe… theo ý muốn của bạn. Bạn có thể thay đổi góc hoạt động của servo và thay đổi nút nhấn trên Gamepad bằng cách nhấn vào hình tam giác có trong câu lệnh .

../_images/gamepad.20.png

  • Cập nhật thông tin từ Gamepad:

    Câu lệnh này được sử dụng để cập nhật và xử lý thông tin từ Gamepad một cách liên tục. Do đó, trong chương trình lập trình, câu lệnh này thường được đặt trong vòng lặp lại mãi để luôn được cập nhật các tín hiệu mới nhất từ Gamepad.

../_images/gamepad.21.png

  • Câu lệnh đang kết nối:

    Câu lệnh này giúp bạn nhận biết trạng thái kết nối của robot và Gamepad.

../_images/gamepad.22.png

7.3 Nạp chương trình

Để làm quen với Gamepad, chúng ta sẽ lập trình một chương trình đơn giản như sau:

  • Robot Rover:

    • Lưu ý: Trước khi lập trình cho Gamepad, bạn cần tải thêm thư viện Rover cho Yolo:Bit, xem hướng dẫn tại đây.

    • Chương trình mẫu xem tại đây.

../_images/gamepad.23.png

Chương trình điều khiển Robot Rover bằng Gamepad


  • Giải thích chương trình:

Khi nạp chương trình vào Yolo:Bit thành công, các câu lệnh trong phần lặp lại mãi sẽ giúp bạn nhận biết được robot đã kết nối thành công với thiết bị chưa.

  • Nếu kết nối thành công, Robot Rover sáng đèn màu xanh lá.

  • Ngược lại, nếu chưa kết nối, Robot chớp tắt đèn đỏ liên tục.

../_images/gamepad.24.png

Mỗi nút nhấn chỉ thực hiện một chức năng, do đó bạn hãy kiểm tra thật kỹ trong chương trình các nút nhấn được chọn có bị lặp lại hay không nhé!

  • Robot xBot / Maker Robot sử dụng chương trình sau:

../_images/gamepad.25.png

Chương trình điều khiển Robot xBot / Maker Robot bằng Gamepad


  • Giải thích chương trình:

Khi nạp chương trình vào xBot thành công, các câu lệnh trong phần lặp lại mãi sẽ giúp bạn nhận biết được robot đã kết nối thành công với thiết bị chưa.

  • Nếu kết nối thành công, Robot sáng đèn màu xanh lá.

  • Ngược lại, nếu chưa kết nối, Robot chớp tắt đèn đỏ liên tục.

../_images/gamepad.26.png

Mỗi nút nhấn chỉ thực hiện một chức năng, do đó bạn hãy kiểm tra thật kỹ trong chương trình các nút nhấn được chọn có bị lặp lại hay không nhé!

8. Hướng dẫn lập trình với Arduino


  • Mở phần mềm Arduino IDE. Xem hướng dẫn lập trình với Arduino tại đây.

  • Copy đoạn code sau, click vào nút Verify để kiểm tra lỗi chương trình. Sau khi biên dịch không báo lỗi, bạn có thể nạp đoạn code vào board.

8.1 Chương trình điều khiển robot cơ bản

#include <Wire.h>
#include "gamepad.h"

Gamepad_Receiver gamepad;

void setup() {
    Serial.begin(115200);
    gamepad.begin();
    Serial.println("Begin");
}

void loop() {
    gamepad.update();   // hàm để cập nhật thông tin của gamepad
    Serial.print((int)gamepad.isConnected); // hàm kiểm tra kết nối của gamepad

    // các hàm để lấy thông số của tay cầm
    Serial.print(" "); Serial.print(gamepad.dpad_left);
    Serial.print(" "); Serial.print(gamepad.dpad_right);
    Serial.print(" "); Serial.print(gamepad.dpad_up);
    Serial.print(" "); Serial.print(gamepad.dpad_down);
    Serial.print(" "); Serial.print(gamepad.aLx);
    Serial.print(" "); Serial.print(gamepad.aLy);
    Serial.print(" "); Serial.print(gamepad.aRx);
    Serial.print(" "); Serial.print(gamepad.aRy);
    Serial.print(" "); Serial.print(gamepad.al2);
    Serial.print(" "); Serial.print(gamepad.ar2);
    Serial.print(" "); Serial.print(gamepad.a);
    Serial.print(" "); Serial.print(gamepad.b);
    Serial.print(" "); Serial.print(gamepad.x);
    Serial.print(" "); Serial.print(gamepad.y);
    Serial.print(" "); Serial.print(gamepad.l1);
    Serial.print(" "); Serial.print(gamepad.l2);
    Serial.print(" "); Serial.print(gamepad.r1);
    Serial.print(" "); Serial.print(gamepad.r2);
    Serial.print(" "); Serial.print(gamepad.sys);
    Serial.println();
    Serial.println((int)gamepad.readJoystick(0));  // hàm để định giá trị nhận được từ joystick (0 là trái, 1     là phải)
    Serial.println((int)gamepad.j_distance); // hàm trả về giá trị khoảng cách kéo của joystick
    Serial.println((int)gamepad.axis_x);  // khoảng cách theo trục x
    Serial.println((int)gamepad.axis_y);  // khoảng cách theo trục y
    Serial.println();
    delay(100);
}

8.2 Gamepad điều khiển mạch động cơ

Bạn có thể tham khảo mạch động cơ của OhStem tại đây.

#include <Wire.h>
#include "gamepad.h"
#include "MotorDriver.h"

Gamepad_Receiver gamepad;
DCMotor motor;

void setup() {
    Serial.begin(115200);
    gamepad.begin();
    Serial.println("Begin");
    motor.setSpeed(1, BACKWARD,  0);
}

void loop() {
    //Serial.println("Set led color: ");
    //Serial.println(gamepad.setLedColor(0, 255, 0));

    gamepad.update();
    if (gamepad.isConnected == 1) {
        if (gamepad.dpad_up == 1) {
        motor.setSpeed(1, FORWARD,  50);
        motor.setSpeed(0, FORWARD,  50);
        }else if (gamepad.dpad_down == 1){
        motor.setSpeed(1, BACKWARD,  50);
        motor.setSpeed(0, BACKWARD,  50);
        } else {
        motor.setSpeed(1, BACKWARD,  0);
        motor.setSpeed(0, BACKWARD,  0);
        }
    } else {
        motor.setSpeed(1, BACKWARD,  0);
        motor.setSpeed(0, BACKWARD,  0);
    }

    delay(100);
}