Trong phần hướng dẫn, chúng ta sẽ học cách xây dựng bộ phát Arduino RC DIY Tôi rất thường xuyên cần điều khiển không dây cho các dự án mà tôi thực hiện, vì vậy tôi đã chế tạo bộ điều khiển vô tuyến đa[.]
Trang 1Trong phần hướng dẫn, chúng ta sẽ học cách
xây dựng bộ phát Arduino RC DIY Tôi rất
thường xuyên cần điều khiển không dây cho
các dự án mà tôi thực hiện, vì vậy tôi đã chế
tạo bộ điều khiển vô tuyến đa chức năng này
có thể được sử dụng cho hầu hết mọi thứ
Hey I'm Dejan, a maker, a techie
Trang 2Bạn có thể xem video sau hoặc đọc hướng
dẫn bằng văn bản bên dưới
T ổ ng quan
Bây giờ tôi có thể điều khiển không dây bất
kỳ dự án Arduino nào chỉ với một số điều
chỉnh nhỏ ở phía bộ thu Máy phát này cũng
có thể được sử dụng như bất kỳ máy phát RC
thương mại nào để điều khiển đồ chơi RC, ô
tô, máy bay không người lái, v.v Với mục đích
đó, nó chỉ cần một bộ thu Arduino đơn giản
sau đó tạo ra các tín hiệu thích hợp để điều
khiển các thiết bị RC thương mại đó
I will explain how everything works in this
video through few examples of controlling an
Arduino robot car, controlling the Arduino
Ant Robot from my previous video and
controlling a brushless DC motor using an
ESC and some servo motors
and a mechatronics engineer I love making electronics and robotics projects for you to learn and make something cool on your own Don't forget to check my 590K+ subs YouTube Channel.
Table of Contents
1 Overview
2 Arduino RC Transmitter Circuit Diagram
3 PCB Design
3 1 DIY Arduino based RC
Transmitter PCB Gerber file V1
3 2 DIY Arduino based RC
Trang 3The radio communication of this controller is
based on the NRF24L01 transceiver module
which if used with an amplified antenna it
can have a stable range of up to 700 meters
in open space It features 14 channels, 6 of
which are analog inputs and 8 digital inputs
It has two joysticks, two potentiometers, two
toggle switches, six buttons and additionally
an internal measuring unit consisting of an
accelerometer and a gyroscope which can be
also used for controlling things with just
moving around or tilting the controller
Arduino RC Transmitter
Circuit Diagram
Transmitter PCB Gerber file V2
3 3 DIY Arduino based RC
Transmitter PCB Gerber file V3
4 Assembling the PCB
5 DIY Arduino based RC Transmitter Code
5 1 Receiver Code
6 Arduino Robot Car Wireless Control using RC Transmitter
6 1 Receiver 02
- Arduino Robot Car Example
7 Arduino Ant Robot / Hexapod control using Arduino RC Transmitter
71 Receiver 03 Ant Robot
-Example
8 ESC and Servo Control using RC Transmitter
Trang 4To begin with, let’s take a look at the circuit
diagram The brain of this RC controller is an
Arduino Pro Mini which is powered using 2
LiPo batteries producing around 74 volts We
can connect them directly to the RAW pin of
the Pro Mini which has a voltage regulator
that reduced the voltage to 5V Note that
there are two versions of the Arduino Pro
Mini, like the one I have that operates at 5V
and the other operates at 3 3V
On the other hand, the NRF24L01 module
strictly needs 3 3V and it’s recommended to
come from a dedicated source Therefore we
need to use a 3 3V voltage regulator which is
connected to the batteries and convert the
74V to 3 3V Also we need to use a
decoupling capacitor right next to the
module in order to keep the voltage more
stable, thus the radio communication will be
more stable as well The NRF24L01 module
communicates with the Arduino using SPI
protocol, while the MPU6050 accelerometer
and gyro module uses the I2C protocol
FEATUREDPROJECTS
Trang 5You can get the components needed for this
Arduino Tutorial from the links below:
Amazon / Banggood / AliExpress
Chuyển đổi Công tắc
……….… Amazon
/ Banggood / AliExpress
Cần điều khiển
………
Amazon / Banggood / AliExpress
-Cần điều khiển này đi kèm với một
bảng đột phá, vì vậy bạn sẽ phải hủy
bỏ Cần điều khiển khỏi nó
Cần điều khiển không có bảng đột phá
Trang 6Tiết lộ: Đây là những liên kết liên kết Với tư
cách là Cộng tác viên của Amazon, tôi kiếm
được tiền từ các giao dịch mua đủ điều kiện
Thi ế t k ế PCB
Tôi thực sự đã sử dụng tất cả các chân
analog và kỹ thuật số của Arduino Pro Mini
Vì vậy, bây giờ nếu tôi cố gắng kết nối mọi
thứ với nhau bằng cách sử dụng dây nhảy, nó
sẽ khá lộn xộn Do đó, tôi đã thiết kế một
PCB tùy chỉnh bằng cách sử dụng phần mềm
thiết kế mạch trực tuyến miễn phí EasyEDA
Ở đây, tôi đã xem xét tính công thái học của
bộ điều khiển và thiết kế nó để có thể dễ
dàng cầm bằng hai tay, trong khi tất cả các
Trang 7điều khiển đều nằm trong phạm vi của các
ngón tay Tôi đã làm cho các cạnh tròn và
thêm một số lỗ 3mm để tôi có thể gắn PCB
vào một thứ gì đó sau này Tôi đã đặt các
chân lập trình Arduino Pro Mini ở phía trên
cùng của bộ điều khiển để chúng có thể dễ
dàng truy cập trong trường hợp chúng tôi
muốn lập trình lại Arduino Chúng ta cũng có
thể nhận thấy ở đây rằng tôi đã sử dụng các
chân RX và TX của Arduino cho các nút cần
điều khiển Tuy nhiên, hai dòng này cần được
ngắt kết nối khỏi bất kỳ thứ gì trong khi
chúng tôi đang tải bản phác thảo lên
Arduino Vì vậy, chúng được ngắt bằng hai
chân mà sau đó có thể dễ dàng kết nối bằng
cách sử dụng các nắp jumper đơn giản
Xin lưu ý: Đảm bảo rằng bạn có phiên bản
Arduino Pro Mini phù hợp để tạo PCB hoặc
sửa đổi thiết kế PCB theo nó Dưới đây là ảnh
so sánh giữa ba phiên bản khác nhau, tùy
thuộc vào Arduino của bạn và bộ điều chỉnh
điện áp
Đây là một liên kết đến các tệp dự án của
thiết kế PCB này Thao tác này sẽ mở ba
Trang 8phiên bản khác nhau trong các tab riêng biệt,
vì vậy bạn có thể chọn phiên bản mình cần
Vì vậy, sau khi hoàn thành thiết kế, tôi đã tạo
tệp Gerber cần thiết để sản xuất PCB
Tệp định dạng:
Sau đó, tôi đã đặt mua PCB từ JLCPCB cũng
là nhà tài trợ của video này
Trang 9Tại đây, chúng ta có thể chỉ cần kéo và thả
tệp Gerber và sau khi tải lên, chúng ta có thể
xem lại PCB của mình trong trình xem
Gerber Nếu mọi thứ đều ổn thì chúng ta có
thể tiếp tục và chọn các thuộc tính mà chúng
ta muốn cho PCB của mình Lần này tôi chọn
màu PCB là đen Vậy là xong, bây giờ chúng
ta có thể đơn giản đặt mua PCB của mình với
mức giá hợp lý Lưu ý rằng nếu đó là đơn đặt
hàng đầu tiên của bạn từ JLCPCB, bạn có thể
nhận được tối đa 10 PCB chỉ với 2 đô la
Và nó đây Tôi thực sự thích cách PCB này
xuất hiện trong màu đen này Chất lượng của
PCB rất tuyệt và mọi thứ đều giống hệt như
trong thiết kế
Trang 10L ắ p ráp PCB
Được rồi, bây giờ chúng ta có thể tiếp tục lắp
ráp PCB Tôi bắt đầu với việc hàn các đầu
ghim của Arduino Pro Mini Một cách dễ dàng
và tốt để làm điều đó là đặt chúng lên một
breadboard và như vậy chúng sẽ cố định ở vị
trí trong khi hàn
Pro Mini cũng có các chân cắm ở hai bên,
nhưng lưu ý rằng vị trí các chân cắm này có
thể khác nhau tùy thuộc vào nhà sản xuất
Trang 11Đối với mô hình cụ thể mà tôi có, tôi cần 5
chân cho mỗi bên, trong khi để trống một
chân GND vì tôi đã sử dụng khu vực bên dưới
của nó trên PCB để chạy một số dấu vết Tôi
đã hàn Arduino Pro Mini trực tiếp lên PCB và
cắt độ dài thực thi của các tiêu đề Ngay bên
cạnh nó là mô đun con quay hồi chuyển và
gia tốc kế MPU6050
Sau đó, tôi hàn bộ điều chỉnh điện áp 3,3V
với một tụ điện bên cạnh nó và một tụ điện
khác gần mô đun NRF24L01 Mô đun này có
Trang 12Tôi tiếp tục với các chân để lập trình Arduino,
chân RX và TX, chân cấp nguồn và công tắc
nguồn
Tiếp theo để hàn chiết áp vào PCB, tôi phải
mở rộng các chân của chúng bằng cách sử
dụng một số đầu cắm chân
Chúng ta có thể lưu ý ở đây rằng trước đây
tôi đã cắt chiều dài của các núm để tôi có thể
lắp đúng một số nắp vào chúng Tuy nhiên,
chúng tôi sẽ hàn chiết áp vào PCB sau một
chút
Sau đó, tôi lắp và hàn hai công tắc bật tắt và
hai cần điều khiển vào đúng vị trí
Trang 13Cuối cùng những gì còn lại là hàn bốn nút
nhấn Tuy nhiên chúng không có chiều cao
thích hợp, vì vậy một lần nữa tôi đã sử dụng
đầu ghim để mở rộng chân của chúng một
chút
Và thế là xong, PCB của chúng tôi hiện đã
sẵn sàng để chúng tôi có thể tiếp tục chế tạo
vỏ cho nó Bởi vì tôi thích vẻ ngoài của PCB
và tôi muốn được nhìn thấy, tôi đã quyết định
sử dụng acrylic trong suốt cho lớp vỏ
Ở đây tôi có 4 mm đánh dấu acrylic trong
suốt hiện có một lá bảo vệ và có vẻ là màu
xanh lam Ý tưởng cho tấm bìa là tạo ra hai
tấm có hình dạng của PCB và cố định một
Trang 14trong số chúng ở mặt trên và tấm kia ở mặt
dưới của PCB
Vì vậy, tôi đã đánh dấu hình dạng PCB và sử
dụng một chiếc cưa tay kim loại, tôi cắt
acrylic theo nó
Sau đó, sử dụng một nét vẽ đơn giản, tôi đã
tinh chỉnh hình dạng của acrylic Hai tấm này
rất tuyệt và chúng hoàn toàn phù hợp với
PCB
Trang 15Tiếp theo, tôi đánh dấu những vị trí mà tôi
cần tạo khe hở cho các thành phần đi qua
Sử dụng một mũi khoan 3mm, lần đầu tiên
tôi tạo 4 lỗ để cố định các tấm vào PCB Đối
với những lỗ này, tôi cũng tạo bộ đếm chìm
để có thể đặt các bu lông chớp với các tấm
Đối với các lỗ mở cho công tắc bật tắt và
chiết áp, tôi sử dụng mũi khoan 6mm và đối
với các lỗ mở cần điều khiển, tôi sử dụng mũi
khoan Forstner 25mm Một lần nữa, bằng
cách sử dụng một đoạn ngắn, tôi đã tinh
chỉnh tất cả các lỗ hổng
Trang 16Trước khi lắp ráp nắp, chỉ cần lưu ý rằng tôi
thực sự đã hàn đầu cắm chân cắm ngược của
bộ nguồn để có thể tiếp cận nó từ mặt sau
nơi đặt pin
Được rồi, bây giờ chúng ta có thể bắt đầu với
việc lắp ráp bìa Tôi bắt đầu với việc bóc lớp
giấy bảo vệ khỏi acrylic mà tôi phải thừa
nhận là khá hài lòng vì acrylic bây giờ rất
sạch Vì vậy, đầu tiên tôi cố định hai chiết áp
trên tấm trên cùng, lắp các bu lông lắp 3mm
Trang 17Sau đó, tôi cẩn thận hợp nhất và bảo đảm
tấm trên cùng và PCB bằng một số bu lông
Tại thời điểm này, cuối cùng tôi đã hàn chiết
áp vào PCB vì trước đó tôi không biết chính
xác chúng sẽ được đặt ở độ cao nào
Tiếp theo trên tấm mặt sau, tôi gắn giá đỡ
pin bằng 2 bu lông Tôi đã hoàn thành việc
Trang 18Cuối cùng, chúng ta có thể gắn các đường
pin vào chân cấp nguồn, lắp và cố định các
nút trên chiết áp, lắp các nút trên cần điều
khiển và gắn ăng ten vào mô đun NRF24l01
Và thế là xong, cuối cùng chúng ta đã hoàn
thành với bộ phát Arduino RC DIY
Việc còn lại bây giờ là lập trình Arduino Để
lập trình bo mạch Pro Mini, chúng ta cần một
giao diện USB nối tiếp UART có thể được kết
nối với tiêu đề lập trình nằm ở phía trên cùng
của bộ điều khiển của chúng tôi
Trang 19Sau đó, trong menu công cụ Arduino IDE,
chúng ta cần chọn bảng Arduino Pro hoặc
Pro Mini, chọn phiên bản thích hợp của bộ xử
Trang 20T ự làm mã máy phát RC d ự a
trên Arduino
Hãy giải thích cách hoạt động của mã máy
phát Vì vậy, trước tiên chúng ta cần bao gồm
thư viện SPI và RF24 cho giao tiếp không dây
và thư viện I2C cho mô đun gia tốc kế Sau
đó, chúng ta cần xác định các đầu vào kỹ
thuật số, một số biến cần thiết cho chương
trình bên dưới, xác định đối tượng vô tuyến
// Define the digital inputs
#define jB1 1 // Joystick button 1
#define jB2 0 // Joystick button 2
#define t1 7 // Toggle switch 1
#define t2 4 // Toggle switch 1
#define b1 8 // Button 1
#define b2 9 // Button 2
#define b3 2 // Button 3
#define b4 3 // Button 4
const int MPU = 0x68 ; // MPU6050 I2C address
float AccX, AccY, AccZ;
float GyroX, GyroY, GyroZ;
float accAngleX, accAngleY, gyroAngleX, gyroAngleY;
float angleX, angleY;
float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY;
float elapsedTime, currentTime, previousTime;
Trang 21Sau đó, chúng ta cần xác định một cấu trúc
nơi chúng ta sẽ lưu trữ 14 giá trị đầu vào của
bộ điều khiển Kích thước tối đa của cấu trúc
này có thể là 32 byte vì đó là giới hạn bộ đệm
NRF24L01 hoặc lượng dữ liệu mà mô đun có
Data_Package data; //Create a variable with the above struc
Trong phần thiết lập, chúng ta cần khởi tạo
mô đun MPU6050 và chúng tôi cũng có thể
tính toán lỗi IMU là giá trị sau này được sử
dụng khi tính toán các góc chính xác của
mô-đun
void initialize_MPU6050 () {
Wire begin (); // Initialize comunication
Wire beginTransmission (MPU); // Start communication w
Wire write ( 0x6B ); // Talk to the register 6B
Wire write ( 0x00 ); // Make reset - place a 0 into t
Wire endTransmission ( true ); //end the transmission
// Configure Accelerometer
Wire beginTransmission (MPU);
Wire write ( 0x1C ); //Talk to the ACCEL_CONFIG re
Wire write ( 0x10 ); //Set the register bits as 00010
Trang 22Wire endTransmission ( true );
// Configure Gyro
Wire beginTransmission (MPU);
Wire write ( 0x1B ); // Talk to the GYRO_CONFIG r
Wire write ( 0x10 ); // Set the register bits as 0001
Wire endTransmission ( true );
}
Bạn có thể tìm thêm thông tin chi tiết về cách
hoạt động của gia tốc kế MEMS và con quay
hồi chuyển tại đây Sắp có hướng dẫn dành
riêng cho MPU6050
Sau đó, chúng ta cần khởi tạo giao tiếp vô
tuyến, kích hoạt các điện trở kéo lên bên
trong Arduino cho tất cả các đầu vào kỹ
thuật số và đặt các giá trị mặc định ban đầu
Trong phần vòng lặp, hãy bắt đầu bằng cách
đọc tất cả các đầu vào tương tự, ánh xạ các
giá trị của chúng từ 0 đến 1023 thành các giá
trị byte từ 0 đến 255 bởi vì chúng tôi đã xác
Trang 23định các biến trong cấu trúc của mình dưới
dạng byte Mỗi đầu vào được lưu trữ trong
biến dữ liệu cụ thể từ cấu trúc
// Read all analog inputs and map them to one Byte value
data.j1PotX = map ( analogRead (A1), 0 , 1023 , 0 , 255 ); // Conv
data.j1PotY = map ( analogRead (A0), 0 , 1023 , 0 , 255 );
data.j2PotX = map ( analogRead (A2), 0 , 1023 , 0 , 255 );
data.j2PotY = map ( analogRead (A3), 0 , 1023 , 0 , 255 );
data.pot1 = map ( analogRead (A7), 0 , 1023 , 0 , 255 );
data.pot2 = map ( analogRead (A6), 0 , 1023 , 0 , 255 );
Chúng ta chỉ cần lưu ý rằng bởi vì chúng ta
sử dụng điện trở kéo lên, các số đọc chân kỹ
thuật số là 0 khi các nút được nhấn
// Read all digital inputs
// Send the whole data from the structure to the receiver
radio write (&data, sizeof (Data_Package));
Trong trường hợp công tắc chuyển đổi 1 được
bật, thì chúng tôi sử dụng dữ liệu gia tốc kế
và con quay hồi chuyển để điều khiển
Trang 24}
Vì vậy, thay vì các giá trị X và Y của phím điều
khiển, chúng tôi đang sử dụng các giá trị góc
mà chúng tôi nhận được từ IMU, mà trước
đây chúng tôi chuyển đổi chúng từ các giá trị
từ -90 đến +90 độ thành các giá trị byte từ 0
đến 255 một cách thích hợp
// Map the angle values from -90deg to +90 deg into values
data.j1PotX = map (angleX, -90 , + 90 , 255 , 0 );
data.j1PotY = map (angleY, -90 , + 90 , 0 , 255 );
Vì vậy, đó là cách mã máy phát, những điều
quan trọng nhất là xác định liên lạc vô tuyến
và gửi dữ liệu đến máy thu
Đây là mã Arduino đầy đủ cho Bộ phát
Arduino RC DIY này:
/*
DIY Arduino based RC Transmitter
by Dejan Nedelkovski, www.HowToMechatronics.com
// Define the digital inputs
#define jB1 1 // Joystick button 1
#define jB2 0 // Joystick button 2
#define t1 7 // Toggle switch 1
#define t2 4 // Toggle switch 1
Trang 25const int MPU = 0x68 ; // MPU6050 I2C address
float AccX, AccY, AccZ;
float GyroX, GyroY, GyroZ;
float accAngleX, accAngleY, gyroAngleX, gyroAngleY;
float angleX, angleY;
float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY;
float elapsedTime, currentTime, previousTime;
int c = 0 ;
RF24 radio ( 5 , 6 ) ; // nRF24L01 (CE, CSN)
const byte address[ 6 ] = "00001" ; // Address
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
Trang 26// Set initial default values
data.j1PotX = 127 ; // Values from 0 to 255 When Joystick is
// Read all analog inputs and map them to one Byte value
data.j1PotX = map ( analogRead (A1), 0 , 1023 , 0 , 255 ); // Conv
data.j1PotY = map ( analogRead (A0), 0 , 1023 , 0 , 255 );
data.j2PotX = map ( analogRead (A2), 0 , 1023 , 0 , 255 );
data.j2PotY = map ( analogRead (A3), 0 , 1023 , 0 , 255 );
data.pot1 = map ( analogRead (A7), 0 , 1023 , 0 , 255 );
data.pot2 = map ( analogRead (A6), 0 , 1023 , 0 , 255 );
// Read all digital inputs
// Send the whole data from the structure to the receiver
radio write (&data, sizeof (Data_Package));
}
void initialize_MPU6050 () {
Wire begin (); // Initialize comunication
Wire beginTransmission (MPU); // Start communication w
Wire write ( 0x6B ); // Talk to the register 6B