jueves, 5 de junio de 2014

RASPZEPPELIN, Dron controlado por Android

Proiektu honen helburua jendetza handiko jazoeratan iragarkiak ahalik eta jende gehienari iritsi ahal izatea da, baina baita ere ingurugiroko datuak hartu eta imaginak denbora errealean gure Android gailura bidaltzea.
Zeppelina Wifi bidez dago konektaturik Android gailu mugikorrera. Android gailuan Zeppelina kontrolatzeko sortutako aplikazio bat egozten da, aplikazio honen bidez Zeppelinarekin interaktuatu ahal izango dugu.

RaspZeppelin DB-Sarietan


Aplikazio honek Zeppelinaren kontrolaz gain beste ainbat datu ere erreztuko dizkigu, horietatik garrantzitsuena denbora errealean jasotako bideoa da.

RaspZeppelinaren egituran Raspberry Pi bat dago kontrolaz arduraturik. Raspberry Pi bat, Hardware libreko SBC bat da eta Linuxen oinarrituriko sistema eragilea erabiltzen du. Sofwar hau librea denez, proiektu honentzako aproposa da gure nahietara egoki baitezakegu. Raspberriaren funtzio nagusiak ondorengoak dira: Arduino mikrokontrolatzaileari egin beharrekoa adieraztea, Acces Point bezela jokatzea gailu mugikorrarekin wifi konexioa lortzeko eta kamararen kontrolaz arduratzea. Wifi konexia lortzeko Wi-Pi wifi moduloa erabili da.


Proiektuaren eskema nagusia

Raspberry Piaren aginduak Arduino Mega plakara doaz. Arduino Mega ATmega2560 mikrokontrolagailu batetan oinarrituriko plaka bat da. Plaka honek agindu bakoitzeko irteera bat edo beste aktibatuko du bere barnean duen programari esker.

Arduino plakak azkenik aktuadoreei bidaliko die agindua. Aktuadoreak RaspZeppelinaren norabidea eta kameraren kontrola erregulatuko dute. 5V-ko bi servomotorek kameraren angelua eta propultsio servoen angelua kontrolatuko dute. 5V-ko ak direnez zuzenean lotu daitezke Arduino Megarekin. Beste bi brushless motore RaspZeppelinaren propulsioaz arduratuko dira. Hauek Arduino plaka eta beraien artean control etapa bat dute, ESC zirkuito elektroniko bat. Azkenik RaspZeppelinaren norabidea kontrolatzeko DC-ko 5v-ko motore bat hau isatsan dagoenez RaspZeppelina altuera konstate batean geldirik egonik bere Z ardatzarekiko biratzea ahalbidetzen du. Zuzenki polarizatzen denean zentzu batean biratzen du eta alderantziz polarizatzean beste alderuntz biratzen du.

Hurrengo lerroetan proiektua gartzeko eman ditugun pausuak:

1. Eskemaren edizioa eta Zirkuituaren simulazioa:

RaspZeppelinaren Arduinoko programa simulatzeko, Isis-en sortutako eskema bat beharrezkoa da programan egon daitezkeen akatsak aurrez topatzeko. Isis-eko programak serboak zuzenean konektatzea onartzen duen arren, brushless motoreen eta Arduinoaren artean, ESC etapa bat beharrezkoa da.


                                                      Proteus programa simulaziorako


2. PCB-aren fabrikazioa:


Areseko PCB-a método mekaniakoren bidez eraiki da. Areseko artxiboa, .LYT izeneko extensioa dauka, baina extensio hau irakurezina da Board Master programan. Artxiboa egokitzeko CircuitCam-en .LMD extensiora pasa da, Board Master-ek irakur ahal dezan. Board Masterren LPKF-aren lan sistema konfiguratzen da eta fresatu beharrekoa adierazten zaio LPKF-ari.


LPKF-an PCB-a egiten

Lehenik eta behin zuloak egiten dira metalizatu ahal izateko, metalizatu prosezua pasa eta gero, berriz LPKF-ra eramaten dugu plaka, bi aldeetako pistak egiteko.

LPKF-an pistak egiten


3. Konponenteen kokapena eta soldadura:

Behin PCBaren plaka eraikita, konponenteak jarri eta soldatu dira, ondorengo argazkian eraikitako Shiedaren irudi bat.

Arduinoren Shield-a


4. Arduinoren programazioa:

#include <Servo.h>
Servo servokamera;          //altuera kontrolatzeko servoa
Servo servoaltuera;         //kamera kontrolatzeko servoa
Servo esc7;                //nombramos el esc7. Aurrera
Servo esc8;                //nombramos el esc8. Aurrera
int motor1=6;              //Direccion
int motor2=5;               //Direccion
float bateria=A1;         //asignamos al pin A1 la entrada de la bateria
int estadobateria=0;  
int ledbateriabaja=4;     //asignamos el pin 4 a los led bateriabaja
float estadobateriav;  
int F='J';
int kamerakontrol =500; //Poner servo de camara en posición "0"

void setup (){

  servoaltuera.attach(10); //asignamos el pin 10 al servoaltuera
  servokamera.attach(9); //asignamos el pin 9 al servokamera
  esc7.attach(7);   //asignamos el pin 7 al esc11
  esc8.attach(8);  //asignamos el pin 8 al esc12
  pinMode(motor1, OUTPUT);   //Direccion
  pinMode(motor2, OUTPUT);   //Direccion
  pinMode (A1,INPUT); //pin analogico para control bateria
  pinMode (4,OUTPUT);  //pin para encender leds de aviso

  esc7.write(0);    //Armamos el esc11 enviandole "0"
  esc8.write(0);   //Armamos el esc12 enviandole "0"
  delay (1000);
  esc7.write (20);  //Le enviamos "20" y se escucha un pitido
  esc8.write (20);   //Le enviamos "20" y se escucha un pitido
  delay(1000);
  Serial.begin (9600);
  digitalWrite(ledbateriabaja,LOW);
}

void loop(){
  estadobateria = analogRead(bateria); //leer bateria y escribir en estadobateria
  estadobateriav = estadobateria * (5.0 / 1023.0); //conversión de lectura
  if(estadobateriav < 4.18){
       digitalWrite(ledbateriabaja,HIGH);
       //mandar informacion a raspi
  }
  else{
    digitalWrite(ledbateriabaja,LOW);
  }  

  Serial.print( " ");
  Serial.println( " ");
Serial.print(estadobateriav);   //escribe en purto serial valor de la bateria
 
   if (Serial.available() > 0) {
     F = Serial.read();
   }
   switch(F){
     case 'A':
       mover(90,40,40,0,0);     //A letra ASCII, gora juteko
       break;
     case 'B':
       mover(180,40,40,0,0);    //B letra ASCII, behera juteko
       break;
     case 'C':
       mover(45,40,40,0,0);     //C letra ASCII, aurrera juteko
       break;
     case 'D':
       mover(135,40,40,0,0);     //D letra ASCII, atzera juteko
       break;
     case 'E':
       mover(0,20,20,255,0);    //E letra ASCII, eskubira juteko
       break;
     case 'F':
       mover(0,20,20,0,255);    //F letra ASCII, ezkerrera juteko
       break;
     case 'G':
       mov_camara(1,50);        //G letra ASCII, kamera behera juteko
       break;
     case 'H':
       mov_camara(0,50);        //H letra ASCII, kamera gora juteko
       break;
     case 'I':
       mov_camara(1,0);         //I letra ASCII, kamera GERATU
       break;
     case 'J':
       mover(0,20,20,0,0);      //J letra ASCII, dena gelditzeko
       break;
  }
}

/************************************************************
   funcion para control del movimiento del Zepellin
  Le pasamos 5 parametros:
    ang_motores  (0-180)
    vel_esc7     (20-180)
    vel_esc8     (20-180)
    motor_cola_izq  (0-255)
    motor_cola_dch  (0-255)
***********************************************************/  
   
void mover(int ang_motores,int vel_esc1,int vel_esc2,int motor_cola_izq,int motor_cola_dch  ){
 
    servoaltuera.write(ang_motores);
    esc7.write(vel_esc1);          //Damos marcha al motot a "90"
    esc8.write( vel_esc2);          //Damos marcha al motot a "90"
    analogWrite(motor1, motor_cola_izq);   //Direkzioa 0ra
    analogWrite(motor2, motor_cola_dch);   //Direkzioa 0ra
  }

/***********************************************************
    función para control del movimiento de la camara
    Le pasamos dos parametro:
      direccion (1 --> suma , 0 --> resta)
      var_angulo  (0 a 50)
************************************************************/
void mov_camara (int direccion, int var_angulo) {
 
  if(direccion==1){
    kamerakontrol = kamerakontrol + var_angulo;
  }
  else{
     kamerakontrol = kamerakontrol - var_angulo;
  }
    servokamera.writeMicroseconds (kamerakontrol);
    delay (500);
}

4. Android Aplikazioa:

Eclipse programa erabiliz, edozein mugikor edo tabletekin Zeppelina guidatu ahal izateko aplikazio bat garatu dugu. Tablet bertatik Zeppelina guztiz gidatzeaz gain, bideoa ikusi daiteke eta argazkiak atera ere bai.



5. Materialen metaketa:

Arduino mega 2560
Raspberry-py
Raspberry-ren kamera
2xBrushless motore
2xESC
Servo Motor
Micro Servo
Arduino megarentzat Shield-a
3xDiodo led
1xInterruptore
1xResistencia 10K
3xResistencia 330 ohm.
2xBaterias lipo de tres celdas y 2200mA
H Zubia


6. Prototipoaren kableaketa eta froga:

Behin servo guztiak eta korronte zuzenezko motorea kontrolatutak dauzkagunean, denak elkarrekin frogatzera pasako gara.


Probando montaje 


7. 3D Osagaien diseinu eta fabrikazioa:

3D inpresoran sortutako konponenteak asko izan dira RaspZeppelinean. Serboen kontrolarako engranaiak, brushlessak eje transmisorera lotzeko piezak, zeppelinaren hegalak, isatseko motorraren gurutze hegalak, elektronika sartzeko gondola, gondolaren ankak eta kamera lotzeko kutxa.

Diseinatu ditugun pieza guztien .stl artxiboak blog-aren bukaerako link-aren barruan daude.




8. Heliorekin betetzea:

Heliorekin puzteko orduan, kontuz ibili behar da helio botilak presio handia duelako barruan eta gaizki erabiltzea oso arriskutsua delako.


Zeppelina puzteko klase teoriko-praktikoak

Helioa-ren indarra

9. Lehenengo hegalaldiak:

Azkenik, frogatzeko hegalaldi frogak egin ditugu funtzionamendua ona delako bermatzeko.


Don Boscoko Polikiroldegian

                                                                                              DBSari-etan 

DBSari-etan 

                                                                                              DBSari-etan 


Deskargatu proiektuko artxiboak.

1 comentario:

  1. Lan bikaina, arduino kodea kolorearekin politago geratzen da ;)

    ResponderEliminar