Anda di halaman 1dari 14

A REPORT ON QUAD COPTER

by
Ashwin B.M
Santosh G
Srinidhi
Ghatikachala Rao D
Abhishek Prabhu
Akhil D Prabhu
Project Initiation: 1-10-2015

Introduction
A quadcopter is a multirotor helicopter that is lifted and propelled by four rotors.
Quadcopters are classified as rotorcraft, as opposed to fixed-wing aircraft,
because their lift is generated by a set of rotors(vertically oriented propellers).
Unlike most helicopters, quadcopters use two sets of identical fixed pitched
propellers; two clockwise (CW) and two counter-clockwise (CCW). These use
variation of RPM to control lift and torque. Control of vehicle motion is
achieved by altering the rotation rate of one or more rotor discs, thereby
changing its torque load and thrust/lift characteristics.
More recently quadcopter designs have become popular in unmanned aerial
vehicle (UAV) research. These vehicles use an electronic control system and
electronic sensors to stabilize the aircraft. With their small size and agile
maneuverability, these quadcopters can be flown indoors as well as outdoors.
There are several advantages to quadcopters over comparably-scaled
helicopters. First, quadcopters do not require mechanical linkages to vary the
rotor blade pitch angle as they spin. This simplifies the design and maintenance
of the vehicle. Second, the use of four rotors allows each individual rotor to
have a smaller diameter than the equivalent helicopter rotor, allowing them to
possess less kinetic energy during flight. This reduces the damage caused should
the rotors hit anything. For small-scale UAVs, this makes the vehicles safer for
close interaction. Some small-scale quadcopters have frames that enclose the
rotors, permitting flights through more challenging environments, with lower
risk of damaging the vehicle or its surroundings.
Due to their ease of both construction and control, quadcopter aircraft are
frequently used as amateur model aircraft projects.

Scheme of working

Schematic of reaction torques on each motor of a quadcopter aircraft, due to


spinning rotors. Rotors 1 and 3 spin in one direction, while rotors 2 and 4 spin
in the opposite direction, yielding opposing torques for control.

Goals
The goal of this project is to design and develop a quadcopter for practical uses
by attaching a live feed camera to a small-scale, remote controlled, quadrotor,
unmanned aerial vehicle (UAV). The video received will be transmitted by
digital or analog signals. If the captured video is an analog format it must be
converted to digital video after transmission. With a digital signal, the video can
be easily processed for analysis and storage. Also,we want to develop a mobile
application named BOLT such that the user can control the quadcopter using a
mobile phone.
Summary of goals
1. Design and develop the quadcopter frame.
2. Determine a method to transmit live video to the controller.
3. Design a method to convert video to digital for further processing.

COMPONENTS
FLIGHT CONTROL BOARD

SPECIFICATION
1.Microcontroller :ATmega328
2.Operating Voltage:5v
3.Input Voltage (recommended):7-12v
4.Input Voltage (limits):6-20v
5.Digital I/O Pins: 14(6 PWM ports)
6.Analog Input Pins:6
7.DC Current per I/O Pin:40mA
8.DC Current for 3.3V Pin:50mA
9.Flash Memory: 32 KB (ATmega328)
10.SRAM: 2 KB (ATmega328)
11.EEPROM:1 KB (ATmega328)
12.Clock Speed: 16 MHz
13.Length: 68.6 mm
14.Width:53.4mm
15.Weight:25g

BRUSHLESS MOTORS

SPECIFICATIONS
1.
2.
3.
4.
5.
6.
7.
8.

Specs:Rpm/V: 1800kv
Shaft: 3.17mm
Motor size: diameter 27.7mm
Voltage: 2S~3S (7.4v to 11.1v)
Weight: 50g
Watts: 342w
Max Current: 34A
ESC: 30A

RC TRANSMITER AND RECIEVER

SPECIFICATIONS
1. Channels: 6channels;
2. Model type: Helicopter, airplane, glider
3. RF power: Less than 26dbm;
4. 2.4G System :AFHDS
5. Code type: GFSK
6. Sensitivity: 1024;
7. Computer program: yes;
8. Low voltage warning: LED warning
9. DSC port: yes
10.Charger port: yes;
11.Power:12VDC(1.5AAA*8) not included;
12. Weight: 680g;
13. ANT length: 26mm;
14. Size: 180*220*70mm
15. Colour: black;
16. Certificate: CE FCC

ELECTRONIC SPEED CONTROL (ESC)

SPECIFICATIONS
1.
2.
3.
4.
5.
6.

Continuous current: 30A


Burst current (10S): 40A
BEC output: 5v / 2A (linear)
Input voltage: LiPo 2S-4S
Wire gauge: 16AWG
Max speed: 210000rpm for 2 Poles BLM, 70000rpm for 6 poles BLM,
35000rpm for 12 poles BLMPre-Loaded with SimonK Firmware: Up to
490Hz refresh rates
7. Weight: 25g
8. Dimension: 46mm x 26mm x 11mm

LI-PO BATTERY

SPECIFICATIONS
1.
2.
3.
4.
5.
6.
7.

Chemistry : Lithium Polymer (LiPo)


Voltage:11.1V
Capacity:4200mah
Configuration:3s
Max discharge current:20c
Dimensions H*W*L: 26*24.5*136mm
Weight :315g

PROPELLERS

SPECIFICATIONS
1. Propeller:8*4.5
2. Material: nylon

METHODOLOGY
1. Design of the frame considering the weights of the components
2. Coding and feeding to the Arduino Controller

CODES
1. GYRO CODE
#include <Servo.h>
#include <Wire.h>
const int MPU=0x68; // I2C address of the MPU-6050
int16_t acX,acY,acZ,tmp,gxX,gxY,gxZ;
Servo esc[4];
int ch,Ch[10],i=0,avg_ch,throttle[4];
// Here's where we'll keep our channel values
float ax,ay,az,gx,gy,gz;

void average() {
int sum_ch=0,j=0;
for(j=0;j<10;j++)
{
sum_ch+=Ch[j];
}
avg_ch=sum_ch/10;
}

void process() {

float sensitivity = 0.5, increase_value = 30;


while(!(((ax>-sensitivity)&&(ax<sensitivity))&&((ay>-sensitivity)&&(ay<sensitivity)))) {
if((ax<-sensitivity)&&((ay>-sensitivity)&&(ay<sensitivity))){

throttle[0]+=increase_value;
throttle[1]+=increase_value;
}
else if((ax>sensitivity)&&((ay>-sensitivity)&&(ay<sensitivity))){
throttle[2]+=increase_value;
throttle[3]+=increase_value;
}
else if((ay<-sensitivity)&&((ax>-sensitivity)&&(ax<sensitivity))){
throttle[0]+=increase_value;
throttle[3]+=increase_value;
}
else if((ay>sensitivity)&&((ax>-sensitivity)&&(ax<sensitivity))){
throttle[1]+=increase_value;
throttle[2]+=increase_value;
}
else if((ax<-sensitivity)&&(ay<-sensitivity))
throttle[0]+=increase_value;
else if((ax<-sensitivity)&&(ay>sensitivity))
throttle[1]+=increase_value;
else if((ax>sensitivity)&&(ay<-sensitivity))
throttle[3]+=increase_value;
else if((ax>sensitivity)&&(ay>sensitivity))
throttle[2]+=increase_value;
write_motors();
readgyro();
}
}

void readgyro(){
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers

acX=Wire.read()<<8|Wire.read();ax = (float)acX/16384; // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)


acY=Wire.read()<<8|Wire.read();ay = (float)acY/16384; // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
acZ=Wire.read()<<8|Wire.read();az = (float)acZ/16384; // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
tmp=Wire.read()<<8|Wire.read();

// 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)

gxX=Wire.read()<<8|Wire.read();gx = (float)gxX/131; // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)


gxY=Wire.read()<<8|Wire.read();gy = (float)gxY/131;

// 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)

gxZ=Wire.read()<<8|Wire.read();gz = (float)gxZ/131;

// 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

void write_motors(){
int i=0;
for(i=0;i<4;i++)
esc[i].write(map(throttle[i], 0, 1023, 0, 179));
}

void debug(){
//Serial.print("AcX = "); Serial.print(ax);
//Serial.print(" | AcY = "); Serial.print(ay);
//Serial.print(" | AcZ = "); Serial.print(az);
//Serial.print(" | Tmp = "); Serial.print(tmp/340.00+36.53); //equation for temperature in degrees C from datasheet
//Serial.print(" | GyX = "); Serial.print(gx);
//Serial.print(" | GyY = "); Serial.print(gy);
//Serial.print(" | GyZ = "); Serial.println(gz);
Serial.print(" | Ch = "); Serial.print(avg_ch);
Serial.print(" | throttle 1 :");Serial.print(throttle[0]);
Serial.print(" | throttle 2 :");Serial.print(throttle[1]);
Serial.print(" | throttle 3 :");Serial.print(throttle[2]);
Serial.print(" | throttle 4 :");Serial.println(throttle[3]);
}

void setup()

//To initialise the motor pins


esc[0].attach(6);
esc[1].attach(9);
esc[2].attach(10);
esc[3].attach(11);

//Initialising the seial monitor


Serial.begin(9600);

//To read from RC channel 3


pinMode(3, INPUT);
int i=0;
for(i=0;i<10;i++)
Ch[i]=0;
throttle[0]=0;
throttle[1]=0;
throttle[2]=0;
throttle[3]=350;

//For the gyro


Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0);

// set to zero (wakes up the MPU-6050)

Wire.endTransmission(true);
}

void loop()
{

//

ch = pulseIn(3, HIGH, 25000);

//Read the pulse width of


Ch[i]=ch-1400;

//Reading gyro values


readgyro();

i=(i+1)%10;
average();
debug();

if(avg_ch>-10) {
throttle[0] =avg_ch;
throttle[1] =avg_ch;
throttle[2] =avg_ch;
throttle[3] =avg_ch+350;
Serial.println("yes");
}
else{
throttle[0] = 0;
throttle[1] = 0;
throttle[2] = 0;
throttle[3] = 350;
}
write_motors();
process();
}

Anda mungkin juga menyukai