Sơ đồ mạch điện máy bay điều khiển từ xa

( Ý tưởng phát minh sáng tạo ) – Bạn đã từng thấy những máy bay trực thăng điều khiển ( rc helicopter ) được điều khiển bởi một mạch Arduino sử dụng sóng vô tuyến radio ( không cần ir led ). Trong bài viết thời điểm ngày hôm nay Sangtao24 sẽ ra mắt đến những bạn cách điều khiển máy bay trực thăng quy mô bằng mạch Arduino .Nội dung chính

  • Các thành phần của Máy bay Quacopter
  • Sơ đồ mạch và cách nối dây
  • Mã nguồn chương trình
  • Video liên quan

Các bước thực hiện:

Sơ đồ mạch điện máy bay điều khiển từ xa

Bước 1: Các phần và công cụ

Sơ đồ mạch điện máy bay điều khiển từ xa Bạn cần sẵn sàng chuẩn bị những bộ phận và những công cụ sau đây : – RC helicopter ( sử dụng S032 ) – Mạch Arduino – Bán dẫn PNP ( PNP transistor ) – Dây dẫn- Dụng cụ hàn điện tử. # quadcopter # maybay # lipo # mpu6050 Đầu tiên, Bạn cần phải đọc thêm bài này để hiểu hơn về Quadcopter. Về cơ bản, Quadcopter là máy bay điều khiển 4 động cơ được xếp thành hình vuông vắn, những cánh đặt ở 4 cạnhSơ đồ mạch điện máy bay điều khiển từ xa

Với Quadcopter, điển hình nhất ta có các máy bay thương mại của DJI, với giá khoảng 20 đến 40 triệu tùy loại. Hay ta có thể mua các bộ KIT lắp ráp để tự làm cho mình 1 chiếc.

Sơ đồ mạch điện máy bay điều khiển từ xaTuy nhiên bài viết này, sẽ giúp tất cả chúng ta tự tay làm cho mình một chiếc Quadcopter vởi Arduino, Nào ta khởi đầu. Háo hức rồi đây những bạn .

Các thành phần của Máy bay Quacopter

1. Khung máy bay

Sơ đồ mạch điện máy bay điều khiển từ xa

2. Động cơ

Sơ đồ mạch điện máy bay điều khiển từ xa Đây là loại động cơ không chổi than, quay ở vận tốc rất cao.

3. Cánh quạt
Để đảm bảo lực nâng cho máy bay, thì có 2 cách, một là tăng tốc độ của độ cơ, hai là tăng kích thước cánh quạt và tăng momen xoắn các động cơ. Việc tăng kích thước cánh quạt và tăng momen xoắn sẽ giúp máy bay bay êm ái hơn.

Sơ đồ mạch điện máy bay điều khiển từ xa
4. Bộ điều khiển đông cơ
Ở đây ta có 4 động cơ, vì vậy ta cần có 4 bộ điều khiển tương ứng.Sơ đồ mạch điện máy bay điều khiển từ xa

5. Pin

Pin của máy bay là loại có dung lượng cao, có thể dùng Pin LiPo, có điện áp ra 3.7V 1 cell. Loại phổ biến dùng cho máy bay là 3SP1 có 3 cell, điện áp ra xấp xỉ 11.1V.Sơ đồ mạch điện máy bay điều khiển từ xaSơ đồ mạch điện máy bay điều khiển từ xa
6. Bộ đo quán tính Inertial Measurement Unit (IMU)
Mạch này sẽ đo hướng di chuyển, vận tốc, lực hấp dẫn, v.v. Cấu tạo gồm một con quay hồi chuyển (gyroscope) 3 trục. Bạn hoàn toàn có thể đọc Bài con quay hồi chuyển trên Wiki để hiểu rõ hơn. Sơ đồ mạch điện máy bay điều khiển từ xa

7. Bộ điều khiển bay
Ở đây ta dùng Arduino Uno làm bộ điều khiển chính.

Sơ đồ mạch điện máy bay điều khiển từ xa
8. Bộ điều khiển từ xa (RC transmiter)
Các bộ RC transmiter là các bộ điều khiển chuẩn, dùng chung cho nhiều loại RC khác nhau như xe điều khiển RC, máy bay cánh bằng RC .v.v.Các lại RC transmiter này có 2 bộ. Sơ đồ mạch điện máy bay điều khiển từ xa

  • Bộ thu
  • Sơ đồ mạch điện máy bay điều khiển từ xa

Bộ thu được gắn lên máy bay để nhận tín hiệu.

Sơ đồ mạch và cách nối dây

Bây giờ ta sẽ tiến hành lắm ráp Khung máy bay, Mạch điều khiển, bộ đo quán tính.
Các linh kiện cần thiết gồm có:

  • Bộ thu phát RC (8)
  • Khung máy bay
  • 4 Động cơ 1000kV, Cánh máy bay và bộ điều khiển ESC đi kèm
  • Pin Lipo 3S (hoặc 3C) 2200mAh
  • 1 mạch Arduino Uno
  • 1 bộ đo quán tính MPU-6050
  • 1 bộ sạc 3s Pino

Sơ đồ mạch điện máy bay điều khiển từ xa

Bạn hoàn toàn có thể dùng điốt là 1N4007. Chân * 1 để trốngNếu muốn hòn đảo chiều cho động cơ, bạn chỉ cần đổi dây 2 và dây 3 ở * 2

Sơ đồ mạch điện máy bay điều khiển từ xa
Sơ đồ mạch điện máy bay điều khiển từ xa
Sơ đồ mạch điện máy bay điều khiển từ xa
Sơ đồ mạch điện máy bay điều khiển từ xaSơ đồ mạch điện máy bay điều khiển từ xa Sơ đồ mạch điện máy bay điều khiển từ xa

Mã nguồn chương trình

Chương trình test động cơ

#include //Include the Wire.h library so we can communicate with the gyro.
#include //Include the EEPROM.h library so we can store information onto the EEPROM
//Declaring global variables
byte last_channel_1, last_channel_2, last_channel_3, last_channel_4;
byte eeprom_data[36], start, data;
boolean new_function_request,first_angle;
volatile int receiver_input_channel_1, receiver_input_channel_2, receiver_input_channel_3, receiver_input_channel_4;
int esc_1, esc_2, esc_3, esc_4;
int counter_channel_1, counter_channel_2, counter_channel_3, counter_channel_4;
int receiver_input[5];
int loop_counter, gyro_address, vibration_counter;
int temperature;
long acc_x, acc_y, acc_z, acc_total_vector[20], acc_av_vector, vibration_total_result;
unsigned long timer_channel_1, timer_channel_2, timer_channel_3, timer_channel_4, esc_timer, esc_loop_timer;
unsigned long zero_timer, timer_1, timer_2, timer_3, timer_4, current_time;
int acc_axis[4], gyro_axis[4];
double gyro_pitch, gyro_roll, gyro_yaw;
float angle_roll_acc, angle_pitch_acc, angle_pitch, angle_roll;
int cal_int;
double gyro_axis_cal[4];
//Setup routine
void setup(){
Serial.begin(57600); //Start the serial port.
Wire.begin(); //Start the wire library as master
TWBR = 12; //Set the I2C clock speed to 400kHz.
//Arduino Uno pins default to inputs, so they don’t need to be explicitly declared as inputs.
DDRD |= B11110000; //Configure digital poort 4, 5, 6 and 7 as output.
DDRB |= B00010000; //Configure digital poort 12 as output.
PCICR |= (1 << PCIE0); // set PCIE0 to enable PCMSK0 scan. PCMSK0 |= (1 << PCINT0); // set PCINT0 (digital input 8) to trigger an interrupt on state change. PCMSK0 |= (1 << PCINT1); // set PCINT1 (digital input 9)to trigger an interrupt on state change. PCMSK0 |= (1 << PCINT2); // set PCINT2 (digital input 10)to trigger an interrupt on state change. PCMSK0 |= (1 << PCINT3); // set PCINT3 (digital input 11)to trigger an interrupt on state change.

Tải về không thiếu chương trình ( Đổi đuôi file. c thành. ino để mở bằng Arduin IDE )
ymfc-al-esc-calibrate. c39 kB

Chương trình setup, cấu hình cho mạch trước khi nạp chương trình chính

#include //Include the Wire.h library so we can communicate with the gyro
#include //Include the EEPROM.h library so we can store information onto the EEPROM
//Declaring Global Variables
byte last_channel_1, last_channel_2, last_channel_3, last_channel_4;
byte lowByte, highByte, type, gyro_address, error, clockspeed_ok;
byte channel_1_assign, channel_2_assign, channel_3_assign, channel_4_assign;
byte roll_axis, pitch_axis, yaw_axis;
byte receiver_check_byte, gyro_check_byte;
volatile int receiver_input_channel_1, receiver_input_channel_2, receiver_input_channel_3, receiver_input_channel_4;
int center_channel_1, center_channel_2, center_channel_3, center_channel_4;
int high_channel_1, high_channel_2, high_channel_3, high_channel_4;
int low_channel_1, low_channel_2, low_channel_3, low_channel_4;
int address, cal_int;
unsigned long timer, timer_1, timer_2, timer_3, timer_4, current_time;
float gyro_pitch, gyro_roll, gyro_yaw;
float gyro_roll_cal, gyro_pitch_cal, gyro_yaw_cal;
//Setup routine
void setup(){
pinMode(12, OUTPUT);
//Arduino (Atmega) pins default to inputs, so they don’t need to be explicitly declared as inputs
PCICR |= (1 << PCIE0); // set PCIE0 to enable PCMSK0 scan PCMSK0 |= (1 << PCINT0); // set PCINT0 (digital input 8) to trigger an interrupt on state change PCMSK0 |= (1 << PCINT1); // set PCINT1 (digital input 9)to trigger an interrupt on state change PCMSK0 |= (1 << PCINT2); // set PCINT2 (digital input 10)to trigger an interrupt on state change PCMSK0 |= (1 << PCINT3); // set PCINT3 (digital input 11)to trigger an interrupt on state change Wire.begin(); //Start the I2C as master Serial.begin(57600); //Start the serial connetion @ 57600bps delay(250); //Give the gyro time to start }

Tải về không thiếu chương trình ( Đổi đuôi file. c thành. ino để mở bằng Arduin IDE )

Chương trình bay

void gyro_signalen(){
//Read the MPU-6050
if(eeprom_data[31] == 1){
Wire.beginTransmission(gyro_address); //Start communication with the gyro.
Wire.write(0x3B); //Start reading @ register 43h and auto increment with every read.
Wire.endTransmission(); //End the transmission.
Wire.requestFrom(gyro_address,14); //Request 14 bytes from the gyro.
receiver_input_channel_1 = convert_receiver_channel(1); //Convert the actual receiver signals for pitch to the standard 1000 – 2000us.
receiver_input_channel_2 = convert_receiver_channel(2); //Convert the actual receiver signals for roll to the standard 1000 – 2000us.
receiver_input_channel_3 = convert_receiver_channel(3); //Convert the actual receiver signals for throttle to the standard 1000 – 2000us.
receiver_input_channel_4 = convert_receiver_channel(4); //Convert the actual receiver signals for yaw to the standard 1000 – 2000us.
while(Wire.available() < 14); //Wait until the 14 bytes are received. acc_axis[1] = Wire.read()<<8|Wire.read(); //Add the low and high byte to the acc_x variable. acc_axis[2] = Wire.read()<<8|Wire.read(); //Add the low and high byte to the acc_y variable. acc_axis[3] = Wire.read()<<8|Wire.read(); //Add the low and high byte to the acc_z variable. temperature = Wire.read()<<8|Wire.read(); //Add the low and high byte to the temperature variable. gyro_axis[1] = Wire.read()<<8|Wire.read(); //Read high and low part of the angular data. gyro_axis[2] = Wire.read()<<8|Wire.read(); //Read high and low part of the angular data. gyro_axis[3] = Wire.read()<<8|Wire.read(); //Read high and low part of the angular data. } if(cal_int == 2000){ gyro_axis[1] -= gyro_axis_cal[1]; //Only compensate after the calibration. gyro_axis[2] -= gyro_axis_cal[2]; //Only compensate after the calibration. gyro_axis[3] -= gyro_axis_cal[3]; //Only compensate after the calibration. } gyro_roll = gyro_axis[eeprom_data[28] & 0b00000011]; //Set gyro_roll to the correct axis that was stored in the EEPROM. if(eeprom_data[28] & 0b10000000)gyro_roll *= -1; //Invert gyro_roll if the MSB of EEPROM bit 28 is set. gyro_pitch = gyro_axis[eeprom_data[29] & 0b00000011]; //Set gyro_pitch to the correct axis that was stored in the EEPROM. if(eeprom_data[29] & 0b10000000)gyro_pitch *= -1; //Invert gyro_pitch if the MSB of EEPROM bit 29 is set. gyro_yaw = gyro_axis[eeprom_data[30] & 0b00000011]; //Set gyro_yaw to the correct axis that was stored in the EEPROM. if(eeprom_data[30] & 0b10000000)gyro_yaw *= -1; //Invert gyro_yaw if the MSB of EEPROM bit 30 is set. acc_x = acc_axis[eeprom_data[29] & 0b00000011]; //Set acc_x to the correct axis that was stored in the EEPROM. if(eeprom_data[29] & 0b10000000)acc_x *= -1; //Invert acc_x if the MSB of EEPROM bit 29 is set. acc_y = acc_axis[eeprom_data[28] & 0b00000011]; //Set acc_y to the correct axis that was stored in the EEPROM. if(eeprom_data[28] & 0b10000000)acc_y *= -1; //Invert acc_y if the MSB of EEPROM bit 28 is set. acc_z = acc_axis[eeprom_data[30] & 0b00000011]; //Set acc_z to the correct axis that was stored in the EEPROM. if(eeprom_data[30] & 0b10000000)acc_z *= -1; //Invert acc_z if the MSB of EEPROM bit 30 is set. }

Tải về rất đầy đủ chương trình ( Đổi đuôi file. c thành. ino để mở bằng Arduin IDE )

ymfc-al-flight-controller.c

40 kB

Trang chủ của Project này
http://www.brokking.net/ymfc-al_main.html
(Bài viết này tham khảo bài sau)

Sơ đồ mạch điện máy bay điều khiển từ xa

Bài viết liên quan
  • Sửa Tivi Sony

  • Sửa Tivi Sony Dịch Vụ Uy Tín Tại Nhà Hà Nội 0941 559 995 Hà Nội có tới 30% tin dùng tivi sony thì việc…

  • Sửa Tivi Oled

  • Sửa Tivi Oled- Địa Chỉ Uy Tín Nhất Tại Hà Nội: 0941 559 995 Điện tử Bách Khoa cung cấp dịch vụ Sửa Tivi Oled với…

  • Sửa Tivi Samsung

  • Sửa Tivi Samsung- Khắc Phục Mọi Sự cố Tại Nhà 0941 559 995 Dịch vụ Sửa Tivi Samsung của điện tử Bách Khoa chuyên sửa…

  • Sửa Tivi Asanzo

  • Sửa Tivi Asanzo Hỗ Trợ Sử Lý Các Sự Cố Tại Nhà 0941 559 995 Dịch vụ Sửa Tivi Asanzo của điện tử Bách Khoa…

  • Sửa Tivi Skyworth

  • Sửa Tivi Skyworth Địa Chỉ Sửa Điện Tử Tại Nhà Uy Tín 0941 559 995 Điện tử Bách Khoa chuyên cung cấp các dịch vụ…

  • Sửa Tivi Toshiba

  • Sửa Tivi Toshiba Tại Nhà Hà Nội Hotline: 0948 559 995 Giữa muôn vàn trung tâm, các cơ sở cung cấp dịch vụ Sửa Tivi…

Hotline 24/7: O984.666.352
Alternate Text Gọi ngay