Professional Documents
Culture Documents
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
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
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
SPECIFICATIONS
1.
2.
3.
4.
5.
6.
LI-PO BATTERY
SPECIFICATIONS
1.
2.
3.
4.
5.
6.
7.
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() {
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
gxZ=Wire.read()<<8|Wire.read();gz = (float)gxZ/131;
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()
Wire.endTransmission(true);
}
void loop()
{
//
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();
}