Arduino UNO R4 WiFi Bluetooth Rotator Example Điều Khiển Góc Quay qua BLE Tutorial

Tổng Quan

Ví dụ Bluetooth Rotator cung cấp khả năng điều khiển vị trí góc thông qua ứng dụng DIYables Bluetooth STEM. Được thiết kế cho Arduino UNO R4 WiFi sử dụng BLE (Bluetooth Low Energy) để điều khiển góc quay và servo motor không dây từ smartphone của bạn. Hỗ trợ chế độ quay giới hạn và quay liên tục. Hoàn hảo cho việc điều khiển servo, robot, cơ chế pan-tilt và định vị góc.

Lưu ý: Arduino UNO R4 WiFi chỉ hỗ trợ BLE (Bluetooth Low Energy). Nó không hỗ trợ Classic Bluetooth. Ứng dụng DIYables Bluetooth hỗ trợ cả BLE và Classic Bluetooth trên Android, và BLE trên iOS. Vì bo mạch này sử dụng BLE, ứng dụng hoạt động trên cả Android và iOS.

Arduino UNO R4 WiFi Bluetooth rotator example - Điều khiển góc quay qua ble tutorial

Tính Năng

  • Chế độ giới hạn: Đặt phạm vi góc min/max (ví dụ: 0° đến 180°)
  • Chế độ liên tục: Quay liên tục 360° đầy đủ
  • Góc thời gian thực: Nhận cập nhật góc khi người dùng quay
  • Tích hợp servo: Điều khiển servo motor trực tiếp
  • Đồng bộ góc ban đầu: Gửi vị trí hiện tại khi kết nối
  • Hoạt động trên Android & iOS: BLE được hỗ trợ trên cả hai nền tảng
  • Không cần ghép đôi: BLE tự động kết nối mà không cần ghép đôi thủ công

Phần Cứng Cần Thiết

1×Arduino UNO R4 WiFi
1×Alternatively, DIYables STEM V4 IoT
1×(Tùy chọn) DIYables STEM V4 IoT
1×Cáp USB Type-C
1×(tùy chọn) Servo Motor
1×breadboard
1×Dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Code Arduino UNO R4 WiFi

Các Bước Nhanh

Làm theo hướng dẫn từng bước:

  • Nếu đây là lần đầu bạn sử dụng Arduino UNO R4 WiFi, hãy tham khảo Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Kết nối bo mạch Arduino UNO R4 WiFi với máy tính bằng cáp USB.
  • Khởi động Arduino IDE trên máy tính.
  • Chọn bo mạch Arduino UNO R4 WiFi và cổng COM phù hợp.
  • Điều hướng đến biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • Tìm kiếm "DIYables Bluetooth", sau đó tìm thư viện DIYables Bluetooth của DIYables
  • Nhấn nút Install để cài đặt thư viện.
Arduino UNO R4 diyables Bluetooth thư viện
  • Bạn sẽ được yêu cầu cài đặt một số thư viện phụ thuộc khác
  • Nhấn nút Install All để cài đặt tất cả thư viện phụ thuộc.
Arduino UNO R4 diyables Bluetooth dependency

Code BLE

  • Trên Arduino IDE, đi đến File Examples DIYables Bluetooth ArduinoBLE_Rotator example, hoặc copy code trên và dán vào editor của Arduino IDE
/* * DIYables Bluetooth Library - Bluetooth Rotator Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Compatible Boards: * - Arduino UNO R4 WiFi * - Arduino Nano 33 BLE / BLE Sense * - Arduino Nano 33 IoT * - Arduino MKR WiFi 1010 * - Arduino Nano RP2040 Connect * - Any board supporting the ArduinoBLE library * * Optional: Servo motor for visual feedback * * Setup: * 1. Upload the sketch to your Arduino * 2. Open Serial Monitor to see connection status * 3. Use DIYables Bluetooth App to connect and rotate the knob * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_ArduinoBLE.h> // BLE Configuration const char* DEVICE_NAME = "Arduino_Rotator"; const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214"; const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214"; const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214"; // Create Bluetooth instances DIYables_ArduinoBLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance // Option 1: Continuous mode (0-360, wraps around) // DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // Option 2: Limited mode (constrained angle range) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; // Optional: Servo control (uncomment if using Servo library) // #include <Servo.h> // Servo myServo; // const int SERVO_PIN = 9; void setup() { Serial.begin(9600); while (!Serial); Serial.println("DIYables Bluetooth - Rotator Example"); // Optional: Initialize servo // myServo.attach(SERVO_PIN); // myServo.write(0); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle // Examples: // - Servo control: servo.write(map(angle, 0, 360, 0, 180)); // - Stepper motor: stepper.moveTo(angleToSteps(angle)); // - LED ring: setLEDPosition(angle); // - Volume control: setVolume(map(angle, 0, 360, 0, 100)); }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • Nhấn nút Upload trên Arduino IDE để upload code lên Arduino UNO R4 WiFi
  • Mở Serial Monitor
  • Kiểm tra kết quả trên Serial Monitor. Nó sẽ hiển thị như bên dưới:
COM6
Send
DIYables Bluetooth - Rotator Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Ứng Dụng Di Động

  • Cài đặt ứng dụng DIYables Bluetooth trên smartphone: Android | iOS

Lưu ý: Ứng dụng DIYables Bluetooth hỗ trợ cả BLE và Classic Bluetooth trên Android, và BLE trên iOS. Vì Arduino UNO R4 WiFi sử dụng BLE, ứng dụng hoạt động trên cả Android và iOS. Không cần ghép đôi thủ công cho BLE — chỉ cần quét và kết nối.

  • Mở ứng dụng DIYables Bluetooth
  • Khi mở ứng dụng lần đầu, nó sẽ yêu cầu quyền. Vui lòng cấp các quyền sau:
    • Quyền Thiết bị gần đó (Android 12+) / quyền Bluetooth (iOS) - cần thiết để quét và kết nối thiết bị Bluetooth
    • Quyền Vị trí (chỉ Android 11 và thấp hơn) - cần thiết cho các phiên bản Android cũ để quét thiết bị BLE
  • Đảm bảo Bluetooth được bật trên điện thoại
  • Trên màn hình chính, nhấn nút Connect. Ứng dụng sẽ quét thiết bị BLE.
diyables Bluetooth app - home screen with scan nút nhấn
  • Tìm và nhấn "Arduino_Rotator" trong kết quả quét để kết nối.
  • Sau khi kết nối, ứng dụng tự động quay về màn hình chính. Chọn ứng dụng Rotator từ menu ứng dụng.
diyables Bluetooth app - home screen with rotator app

Lưu ý: Bạn có thể nhấn biểu tượng cài đặt trên màn hình chính để ẩn/hiện ứng dụng trên màn hình chính. Để biết thêm chi tiết, xem Hướng dẫn sử dụng DIYables Bluetooth App.

  • Bạn sẽ thấy một vòng quay hiển thị từ 0° đến 180°
  • Xoay vòng quay để gửi giá trị góc đến Arduino
diyables Bluetooth app - rotator screen

Bây giờ hãy nhìn lại Serial Monitor trên Arduino IDE. Bạn sẽ thấy:

COM6
Send
Bluetooth connected! Angle changed: 45.00° Angle changed: 90.00° Angle changed: 135.00°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Tùy Chỉnh Sáng Tạo - Điều Chỉnh Code Theo Dự Án Của Bạn

Chế Độ Quay

// Chế độ giới hạn: chỉ định góc min và max DIYables_BluetoothRotator bluetoothRotator(bluetoothServer, ROTATOR_MODE_LIMITED, 0, 180); // Chế độ liên tục: quay 360° đầy đủ DIYables_BluetoothRotator bluetoothRotator(bluetoothServer, ROTATOR_MODE_CONTINUOUS);

Xử Lý Thay Đổi Góc

bluetoothRotator.onRotatorAngle([](float angle) { Serial.print("Angle: "); Serial.println(angle); // Điều khiển servo motor myServo.write((int)angle); });

Gửi Góc Hiện Tại

// Gửi góc hiện tại đến ứng dụng (ví dụ: khi kết nối) bluetoothRotator.sendAngle(currentAngle);

Ví Dụ Lập Trình

Điều Khiển Servo Motor

#include <Servo.h> Servo myServo; float currentAngle = 90; void setup() { myServo.attach(9); myServo.write(currentAngle); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; myServo.write((int)angle); Serial.print("Servo: "); Serial.println(angle); }); } void loop() { bluetoothServer.loop(); }

Giá Đỡ Camera Pan-Tilt

Servo panServo; Servo tiltServo; // Sử dụng hai instance rotator cho pan và tilt // Hoặc sử dụng một rotator cho một trục // và một slider cho trục khác void setup() { panServo.attach(9); tiltServo.attach(10); bluetoothRotator.onRotatorAngle([](float angle) { panServo.write((int)angle); Serial.print("Pan: "); Serial.println(angle); }); }

Khắc Phục Sự Cố

Các Vấn Đề Thường Gặp

1. Không thể tìm thiết bị trong ứng dụng

  • Đảm bảo Arduino UNO R4 WiFi được cấp nguồn và sketch đã được upload
  • Đảm bảo Bluetooth điện thoại được bật
  • Trên Android 11 trở xuống, cũng bật dịch vụ Location

2. Servo không phản hồi

  • Kiểm tra servo được nối với chân đúng
  • Kiểm tra thư viện servo được include và attach() được gọi
  • Đảm bảo nguồn cung cấp đủ cho servo

3. Phạm vi góc có vẻ sai

  • Kiểm tra giá trị min/max trong constructor
  • Đảm bảo bạn đang sử dụng ROTATOR_MODE_LIMITED cho phạm vi giới hạn

4. Vòng quay reset về 0 khi kết nối lại

  • Gửi góc hiện tại bằng sendAngle() khi thiết bị kết nối lại
  • Code ví dụ xử lý điều này trong callback onRotatorAngle

5. Upload thất bại hoặc bo mạch không được nhận dạng

  • Cài đặt gói bo mạch Arduino UNO R4 mới nhất qua Board Manager
  • Thử cáp USB hoặc cổng khác

Ý Tưởng Dự Án

  • Bộ điều khiển servo motor
  • Giá đỡ camera pan-tilt
  • Điều khiển khớp cánh tay robot
  • Điều khiển nhiệt độ kiểu quay số
  • Hiển thị la bàn/hướng

Bước Tiếp Theo

Sau khi thành thạo ví dụ Bluetooth Rotator, hãy thử:

  1. Bluetooth Slider - Để điều khiển giá trị tuyến tính
  2. Bluetooth Joystick - Để điều khiển vị trí 2D
  3. Bluetooth Analog Gauge - Để phản hồi trực quan
  4. Multiple Bluetooth Apps - Kết hợp rotator với các ứng dụng khác

Hỗ Trợ

Để được trợ giúp thêm:

  • Kiểm tra tài liệu API Reference
  • Diễn đàn cộng đồng Arduino