DESCRIPCIÓN DEL PROYECTO
El objetivo de este proyecto es crear un avión que vuele por radio control utilizando 1 Arduino Uno.
AUTORES
- Daniel Lysenko.
- Kilian Escudero.
- Jorge Santamaría.
- Javier Morales.
Material necesario
MATERIALES
- Cinta de aluminio.
- Varillas de vidrio.
PARTES COMPRADAS
- Motor brushless (junto a la hélice) + Esc 30A.
- Explicación en la siguiente entrada :
- Bateria 11,1Voltios y de 5 Voltios.
- 4 Servo Motor SG90
- Explicación en la siguiente entrada:
- Arduino Uno R3 (mando y avión).
- RC receiver.
- Explicación en el siguiente enlace:
- 2 Ruedas delanteras (3,2 cm)
- 1 Rueda trasera (2,5 cm)
- Mando shield joystick
MATERIAL EN 3D
- Morro del avión
- ENLACE DEL DISEÑO: https://www.tinkercad.com/things/iHVqg4a7ukz
- Cola avión
- ENLACE DEL DISEÑO: https://www.tinkercad.com/things/b19rYsem6ne
- Ala del avión
- ENLACE DEL DISEÑO: https://www.tinkercad.com/things/7AcJl865CAa
- Avión
- ENLACE DEL DISEÑO: https://www.tinkercad.com/things/jC5oomKLtDw
- Mando
- ENLACE DEL DISEÑO: https://www.tinkercad.com/things/ap9ttbUHv0t
- Montaje del mando en el siguiente enlace:
DIAGRAMA DEL PROYECTO
Código del mando (emisor):
#include <RF24.h>
#include <nRF24L01.h>
#include <RF24_config.h>
#include <printf.h>
//Declaremos los pines CE y el CSN
#define CE_PIN 9
#define CSN_PIN 8
//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={‘p’,’l’,’a’,’n’,’e’};
//creamos el objeto radio (NRF24L01)
RF24 Radio(CE_PIN, CSN_PIN);
//vector con los datos a enviar
float datos[4];
// Arduino pin joysticks izq
const int X_pinI = 2; // analog pin connected to X output
const int Y_pinI = 3; // analog pin connected to Y output
// Arduino pin joysticks der
const int X_pinD = 0; // analog pin connected to X output
const int Y_pinD = 1; // analog pin connected to Y output
void setup(){
//inicializamos el NRF24L01
Radio.begin();
//inicializamos el puerto serie
Serial.begin(9600);
//Abrimos un canal de escritura
Radio.openWritingPipe(direccion);
}
void loop(){
//cargamos los datos en la variable datos[]
// leeremos lso joysticks
datos[0]=analogRead(X_pinI);
datos[1]=analogRead(Y_pinI);
datos[2]=analogRead(X_pinD);
datos[3]=analogRead(Y_pinD);
datos[0] = map(datos[0], 508, 1023, 0, 180);
datos[1] = map(datos[1], 0, 1020, 0, 180);
datos[2] = map(datos[2], 0, 1023, 0, 185);
datos[3] = map(datos[3], 0, 1023, 0, 185);
//enviamos los datos
bool ok = Radio.write(datos, sizeof(datos));
//reportamos por el puerto serial los datos enviados
// luego lo comentaremos no será necesario
if(ok){
Serial.print(» Y Left»);
Serial.println(datos[0]);
Serial.print(» X Left»);
Serial.println(datos[1]);
Serial.print(» Y Right»);
Serial.println(datos[2]);
Serial.print(» X Right»);
Serial.println(datos[3]);
Serial.print(«\n\n»);
delay(100);
}
else{
Serial.println(«no se ha podido enviar y recibir»);
}
delay(200);
// Librerías
#include <RF24.h> // Driver de Radio – Módulos nRF24L01+
#include <Servo.h>
// definimos el servo para la velocidad
#define PIN_VELO 2
// definimos el servo para la dirección
// faltarán el resto de servos
// Pines RF24L01
#define PIN_CE 9
#define PIN_CSN 10
//Servos
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo motor;
int x_axis = A0;
int y_axis = A1;
int velo, dire;
const byte direccion[5] = {‘p’, ‘l’, ‘a’, ‘n’, ‘e’};
RF24 radio(PIN_CE, PIN_CSN);
int data[4];
Servo velocidad;
// Configuración
void setup() {
velocidad.attach(PIN_VELO, 1000, 2000);
velocidad.writeMicroseconds(900); // send “stop” signal to ESC.
delay(4000);
// Configuración Consola – Depuración
Serial.begin(9600);
// Inicializa Sistema RF sobre el bus SPI
if (!radio.begin()) {
Serial.println(F(«¡¡¡El Hardware de Radio no responde!!!»));
while (1) {
} // Bucle infinito
}
// Modo Lectura > Pipe 1 + Dirección
radio.openReadingPipe(1, direccion);
Serial.println(«escuchando»);
// Sistema RF en Recepción – RX Mode
radio.startListening();
servo1.attach(3); //s1
servo2.attach(4); //s2
servo3.attach(5); //s3
servo4.attach(6); //s4
motor.attach(2, 1000, 2000);
motor.writeMicroseconds(900); // send “stop” signal to ESC.
delay(4000);
}
void loop() {
int angulo1 = data[0] ; //Brushless
int angulo2 = data[1] ; //wings left-right
int angulo3 = data[2] ;
int angulo4 = data[3] ;
// Enlace TX / RX
boolean radioOK = radio.available();
// Datos Recibidos > Sistema RF
if (radioOK) {
// Leer Datos > Estructura
radio.read(data, sizeof(data));
servo1.write(angulo4);
motor.write(angulo1);
Serial.println(angulo1);
if (angulo3 != 90){
servo3.write(angulo3);
servo4.write(angulo3);
}
else {
servo3.write(angulo2);
servo4.write(180-angulo2);
}
servo2.write(angulo3);
}
}
PLANTEAMIENTO DEL PROYECTO
Avión en proceso:
Avión acabado:
Esquema eléctrico del avión: