Sơ đồ mạch điện máy bay điều khiển từ xa
- 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:
Bạn đang đọc: 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ụ
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ạnh
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.
Tuy 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
2. Động cơ
Đâ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.
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.
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.
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.
7. Bộ điều khiển bay
Ở đây ta dùng Arduino Uno làm bộ điều khiển chính.
Xem thêm: Sửa Tivi Sony Huyện Từ Liêm
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ộ.
- Bộ thu
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
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
Mã nguồn chương trình
Chương trình test động cơ
#include
#include
//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
//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
Xem thêm: Sửa Tivi Sony Huyện Thanh Trì
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)
Source: https://thomaygiat.com
Category : Điện Tử
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…