Zepelín- Grupo 2
Integrantes
José Pertierra das Neves
Sergio Santamaría Carrasco
Guillermo Nieto Barba
1.-Introducción
La idea del proyecto viene para dar una alternativa a los drones, sobretodo en recintos cerrados donde las condiciones meteorológicas no afecten al vuelo. En el sector del entretenimiento podría utilizarse para grabar eventos, ser un elemento de seguridad mostrando las salidas cercanas…
2.-Proceso de diseño
La primera decisión que tuvimos que tomar fue el método por el que mantendríamos en el aire los componentes, dependía del peso que queríamos que levantara y este a su vez dependía de la funcionalidad que queríamos dar al zepelín. Nos decantamos por un globo de latex con 70 cm de diámetro lleno de helio dad la dificultad de transporte de globos mayores.
Por la limitación antes mencionada decidimos usar un arduino nano, un módulo bluetooth, un motor y dos servos para conducir el zepelín. Tras las primeras pruebas descubrimos que el método de propulsión era insuficiente y que la primera versión del soporte para los componentes demasiado pesado.
Tras este intento trabajamos en en desarrollar la aplicación distribuida en android para, gracias al módulo bluetooth, controlar los servos y motores.
El anterior diseño desembocó en uno más ligero donde cambiamos la estructura por una formada por varillas y en la que añadimos un nuevo motor.
A pesar de que aumenta nuestro control en en el movimiento del zepelín nos surge el problema de sostener el Arduino junto con la alimentación. La solución final a nuestro problema fue utilizar tres varillas dispuestas en forma de triángulo.
Una vez resuelto debíamos elegir la funcionalidad añadida aparte de la conducción con una aplicación distribuida para Android.
Por motivos de peso, una vez más, descartamos el uso de un medidor de ultrasonidos para mantener el zepelín a una altura mínima o detectar choques con otros objetos.
3.-Circuito
Como podemos observar el circuito está alimentado por una pila de 9V alimentando el arduino y una batería de 1100 mAh alimentando los motores.
4.-Gastos
Hemos realizado un presupuesto cero, esto es calculando el coste de de todas las herramientas necesarias.
Componentes |
Cantidad |
Coste/und |
Coste |
Multirotor Carbon Fiber |
2 |
3,04 € |
6,08 € |
Nano ArduinoCH34OG/ATmga168 |
1 |
3,00 € |
3,00 € |
DigitalServo |
4 |
2,93 € |
11,72 € |
Globo 70cm + Helio |
2 |
14,00 € |
28,00 € |
Módulo Bluetooth |
1 |
4,00 € |
4,00 € |
Transistores BC557 |
4 |
0,20 € |
0,80 € |
ProtoboardMini |
1 |
1,00 € |
1,00 € |
Motor DC |
4 |
2,50 € |
10,00 € |
Batería 1100 mAh |
1 |
20,00 € |
20,00 € |
Batería 110 mAh |
1 |
8,00 € |
8,00 € |
Batería 680 mAh |
1 |
15,00 € |
15,00 € |
Cables (bolsa) |
1 |
2,00 € |
2,00 € |
Arduino UNO |
1 |
20,00 € |
20,00 € |
Accesorios |
1 |
5,00 € |
5,00 € |
Soldador Estaño |
1 |
15,00 € |
15,00 € |
Polímetro |
1 |
10,00 € |
10,00 € |
Móvil Android |
1 |
50,00 € |
50,00 € |
Total |
209,60 € |
||
Mano de obra |
Horas |
Coste/hora |
Coste |
Mano de obra (horas) |
70 |
15,00 € |
1.050,00 € |
Total |
1.259,60 € |
5.-Mejoras
- Reducir el peso.
- Cambiando el globo por uno de 90 cm de diámetro.
- Utilizar un arduino nano.
- Añadir sensores de distancia.
- Añadir pantallas LCD.
6.-Anexo
6.1-Video
#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo;
Servo myservo2;
boolean motor1 = false;
boolean motor2 = false;
char c;
boolean modoEstatico = false;
SoftwareSerial BTserial(10,11); // RX | TX
long distancia;
long tiempo;
void setup() {
// put your setup code here, to run once:
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
myservo.attach(7);
myservo2.attach(8);
//Medidor de distancia
pinMode(5, OUTPUT); /*activación del pin 5 como salida: para el pulso ultrasónico TRIGGER*/
pinMode(6, INPUT); /*activación del pin 6 como entrada: tiempo del rebote del ultrasonido ECHO*/
Serial.begin(9600);
BTserial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (BTserial.available())
{
c = BTserial.read();
Serial.println(c);
if (modoEstatico){
if (c!=’d’){
modoEstatico = false;
}
estatico();
}else{
realizarAccion(c);
}
}
}
void estatico(){
digitalWrite(5,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(5, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(6, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.println(«Distancia «);
Serial.println(distancia);
Serial.println(» cm»);
delay(1000);
}
void reiniciarTodo(){
motor1 = false;
motor2 = false;
digitalWrite(2,LOW);
digitalWrite(3,LOW);
}
void realizarAccion(char valor){
if (valor == ‘0’){
reiniciarTodo();
}
else if (valor == ‘1’){
if (motor1){
digitalWrite(2,LOW);
Serial.println(«Apagando motor1»);
}else{
Serial.println(«Encendiendo motor1»);
digitalWrite(2,HIGH);
}
motor1 = !motor1;
}
else if (valor == ‘2’){
if (motor2){
Serial.println(«Apagando motor1»);
digitalWrite(3,LOW);
}else{
Serial.println(«Encendiendo motor1»);
digitalWrite(3,HIGH);
}
motor2 = !motor2;
}
else if (valor == ‘3’){
myservo.write(120);
}
else if (valor == ‘4’){
myservo2.write(120);
}
else if (valor == ‘5’){
myservo.write(150);
}
else if (valor == ‘6’){
myservo2.write(150);
}
else if (valor == ‘7’){
myservo.write(60);
}
else if (valor == ‘8’){
myservo2.write(60);
}
else if (valor==’d’){
modoEstatico = true;
myservo.write(60);
myservo2.write(60);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);