Aerodeslizador RC + mando a distancia personalizado (6 / 8 paso)

Paso 6: El receptor

El receptor que he hecho es básicamente una costumbre * duino junta con la comodidad de tener un interruptor ON/OFF y un encabezado para el módulo de radio nRF24L01 +.

Por lo tanto, te aconsejo conseguir un Arduino (o board compatible) y solo Conecte los otros nRF24l01 + radio módulo a su respectivos necesario pernos.

MOSI - pin Digital 11
MISO - pin Digital 12
SCK - pin Digital 13

Adicionalmente necesitará conectar clavijas CE y CSN (desde el módulo de radio) algunos pins gratis de su elección en el Arduino (o compatible) Junta. El valor por defecto en el código que sigue son los pines 9 y 10 respectivamente.

Desde el módulo de radio necesita poder usted también tendrá que conectar los pines GND y 3,3 v voltios.

ADVERTENCIA: es muy importante que alimenta el módulo de RADIO con 3, 3V de lo contrario usted a tostarlos.

Debe subir una versión modificada del siguiente código a la tarjeta receptora. Sólo necesitará modificar las asignaciones de pin si utiliza pines diferentes, y lo más importante es probablemente se necesitará modificar la ESC código de activación. Si usted no tiene trabajo con Arduino + ESC antes de fuertemente recomiendo que probarlas independiente, procedimientos de activación varían de ESC a ESC. El código de abajo funciona bien para dos misterio marca CES clasificada de 30A. Para otros CES que tendrás que investigar a cierta longitud sobre cómo armarlos correctamente.

#include < Servo.h >
#include < SPI.h >
#include "nRF24L01.h"
#include "RF24.h"

/ *---ESTRUCTURAS DE DATOS VIAJE---* /

comandos va dentro de
typedef struct {}
int X;
int Y;
Boolean botones [4];
}
Capacidad de carga;

regeneración va dentro de
typedef struct {}
int rudderAng;
int Z;
int S;
}
Retroalimentación;

/ *---VARIABLES CONTRA REBOTES---* /

previousMillis largo = 0;        temporizador para servo
previousButtonMillis largo = 0;  temporizador para botones
previousTX largo = 0;            temporizador para transmisiones
TXinterval largo = 25;           intervalo para transmitir telemetría
const int intervalo = 30;        intervalo de actualización de servo
const int binterval = 70;       intervalo para contra rebotes
const int TX_timeout = 100;     remoto - arte vincular el tiempo de espera

/* ------------------------------------------------------------- */

Servo empuje;
Elevación del servo;

Paquete de carga útil;
Telemetría de respuesta;

Timón del servo;

int oldAngle, newAngle = 0;     posiciones de servo

int lift_ang;                   Levante motor pseudo-'angular' velocidad

vel de int;                        pseudo-'angular' velocidad de empuje

Boolean ejecutar = false;

RF24 radio (9, 10);

const uint64_t tubos [2] = {}
0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};

/* ----------------------------------------------------- */

/ * ESTABLECER EL NODO RECEPTOR * /

void setup(void)
{
Serial.Begin(57600);

radio.Begin();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();

Rudder.Attach(7);

Es importante que el brazo
CADA ESC secuencialmente
Lift.Attach(5);
armESC(lift);
lift_ang = 50;

Delay(100);

thrust.Attach(6);
armESC(thrust);
Vel = 50;
}

void loop(void)
{

started_waiting_at largo sin signo = millis();
tiempo de espera de tipo boolean = false;
mientras (! radio.available() & &! tiempo de espera)
Si (millis() - started_waiting_at > TX_timeout)
tiempo de espera = true;

Si {} (tiempo límite)
Serial.println ("no se pudo, agotado el tiempo de respuesta.");
ejecutar = false;
}
Else {}
radio.Read (& paquete, sizeof(package));
ejecutar = true;
}

Si TX-RX enlace es (vivo) entonces...
if(Run)
{

/ *---EJECUTAREMOS COMANDOS RECIBIDOS---* /

int X = paquete. X;
int Y = paquetes. Y;

CONTROL DEL TIMÓN DE
// ------------------------------------------------------------
Si (X > 480 & & X < 530) {}
newAngle = 90;             90 = servo en posición central
}
Si (X < 480) {}
newAngle = (mapa (X, 480, 150, 155, 91));
}
Si (X > 530) {}
newAngle = (mapa (X, 530, 815, 89, 30));
}

CONTROL DE EMPUJE HACIA ADELANTE... VROOOOMMMMMMM
// ---------------------------------------------------------------------
Si (Y > 550 & & Y < 635) {}
thrust.Write(50);           posición neutral, el motor no gira
telemetría. S = 50;
}
Si (Y > = 635) {}
Vel = (mapa (Y, 635, 925, 60, 90));
thrust.Write(vel);
telemetría. S = vel;
}

unsigned currentMillis largo = millis();

Emitir timón reposicionamiento comando solamente si se desea
cambios de posición y de intervalo (contra rebotes) es sobre
Si (oldAngle! = newAngle & & currentMillis - previousMillis > intervalo) {}
previousMillis = currentMillis;
oldAngle = newAngle;
Rudder.Write(newAngle);     Dile el servo a la posición en la variable 'pos'
} / / cierre si millis-tierra (para el servo del timón de dirección)


PULSAR UN BOTÓN DE LA MANIJA
// ------------------------------------------------------------------
currentMillis = millis();

Si (currentMillis - previousButtonMillis > binterval) {}

botón Presione para MIN instantáneo (ninguno) Levante la velocidad (sin acelerador)
Si (package.buttons[0] == 1) {}
lift_ang = 50;
}
botón Presione para levantar velocidad incremento
Si (package.buttons[1] == 1) {}
Si (lift_ang < 120) {lift_ang += 5;}
}
botón Presione para instantánea (especie de) "safe estacionario" rondando
Si (package.buttons[2] == 1) {}
lift_ang = 90;
}
botón Presione para levantar velocidad decremento
Si (package.buttons[3] == 1) {}
Si (lift_ang > 50 & & lift_ang < = 115) {lift_ang-= 5;}
}

previousButtonMillis = currentMillis;

Lift.Write(lift_ang);

} / / cierre si "millis-land" (prueba secundaria)--botón millis debounce

/* ---------------------------------------------------------------------- */

Datos de la telemetría sistema para enviar
telemetría. Z = lift_ang;
telemetrics.rudderAng = newAngle;

} / / cerrar declaración "if(run)"
Else {}
Serial.println ("no hay radio disponible");
emergencyStop();
}

PARA transmitir telemetría uso esto:

radio.stopListening();
bool ok = radio.write (& telemetría, sizeof(telemetrics));
radio.startListening();

O esto: (tienen que descomentar las variables previousTX y TXinterval
Si utiliza esta opción)

unsigned currentMillis largo = millis();
//
Si (currentMillis - previousTX > TXinterval) {}
previousTX = currentMillis;
//
radio.stopListening();
bool ok = radio.write (& telemetría, sizeof(telemetrics));
radio.startListening();
//  }

} / / cerrar el bloque de "loop()"

Funciones accesorias

void emergencyStop()
{
thrust.Write(50);
Lift.Write(50);
}

void armESC(Servo esc)
{
ESC.Write(10);
Delay(2000);
ESC.Write(50);
Delay(1000);
}

Artículos Relacionados

Aerodeslizador con mando a distancia. por AnTiProcrastination

Aerodeslizador con mando a distancia. por AnTiProcrastination

¡ Hola! Somos AnTiProcrastination, un grupo de estudiantes de La Universidad de Michigan--Shanghai Jiao Tong University Instituto conjunto (ver Logo en la figura 1) nuestro campus, (Figura 2; citado de www.ngeschool.org) situado en el distrito de caí
Un escudo personalizado para la hélice ASC - mando a distancia Infra-rojo - y múltiples dientes!

Un escudo personalizado para la hélice ASC - mando a distancia Infra-rojo - y múltiples dientes!

En mi primer proyecto se añadió una pantalla LCD de 2 líneas a la placa Arduino Shield Compatible (ASC).(  )En este proyecto también introducimos el uso de múltiples dientes, una característica única de la viruta de propulsor de la paralaje.Pantalla
BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

En los pasos siguientes, usted hacer un DIY "TV" con el código para un smart remote y realmente vídeos y posiblemente incluso conectar el mando a distancia inteligente a la placa de base real.Materiales:Espejo de papelEstabilizador sólido y no f
Ingeniería inversa RF mando a distancia para IoT.

Ingeniería inversa RF mando a distancia para IoT.

En este instructable, usted aprenderá cómo invertir el ingeniero cómo implementar en un ordenador muy barato de WiFi activado, el MCU de nodo y mandos de Radio frecuencia (RF). Usando esta técnica puedes IoT habilitar dispositivos mayores y dispositi
Papel avión-TV mando a distancia con control remoto

Papel avión-TV mando a distancia con control remoto

Crear un avión de papel controlada remota controlado por televisor medio remoto. Super divertido y barato para hacer!Paso 1: Para el paso 1, usted debe obtener todos los materiales: una pequeña li-poli batería (3,7 voltios), un trozo de PCB, motor el
Arduino preamplificador pasivo con mando a distancia, atenuador y canal selector

Arduino preamplificador pasivo con mando a distancia, atenuador y canal selector

Hola a todos,Ya que me han apoyado mucho en mi última instructable me alentó para mejorar más y compartirlo con ustedes.En la compilación anterior tuve preamp barato con Potenciómetro motorizado, control remoto y selector de canal. Motorizado pote te
Arreglar un mando a distancia no responde

Arreglar un mando a distancia no responde

No hay nada más molesto que tener un mando a distancia no responde!! Han intentado todo, cambiar las pilas pero su control remoto es bastante antiguo y está a punto de sustituirla!No tienes que aunque pocas herramientas básicas y materiales que todos
Sencillo mando a distancia inalámbrico para Robot

Sencillo mando a distancia inalámbrico para Robot

Se trata de simple control remoto de 4 canales para el control de dos motores de corriente continua en dirección hacia adelante y reversa.Paso 1: Diseño transmisorTransmisor se construye usando el codificador HT12E, módulo inalámbrico de 433MHz y los
IPhone Learing mando a distancia Universal con Arduino

IPhone Learing mando a distancia Universal con Arduino

Hola y Bienvenidos a mi primer Instructable.No sé ustedes, pero nunca puedo encontrar el control remoto para mi TV. Siempre parece desaparecer cuando lo necesito y luego sólo aparece días más tarde como cuña dentro del sofá por uno de los niños. Una
Otro preludio de automatización - clonación de un mando a distancia

Otro preludio de automatización - clonación de un mando a distancia

Hace unos días publiqué un IBLE de cómo hackear un mando a distancia.Al tiempo, mi mente estaba obsesionada en conseguir una casa proyecto de automatización se inició tan pronto como sea posible, y decidí tomar la ruta como se muestra en el mencionad
Preludio a la automatización - Hacking un mando a distancia

Preludio a la automatización - Hacking un mando a distancia

Hace unas semanas he leído en un proyecto de Arduino para crear un sistema de automatización del hogar. Siendo un aficionado de la electrónico, que quería ser consciente de los límites de mis habilidades antes de intentar un proyecto como este.Uno de
Control de efectos de Halloween con mandos a distancia infrarrojos DIY

Control de efectos de Halloween con mandos a distancia infrarrojos DIY

Halloween es la oportunidad perfecta para crear divertidos efectos especiales. Cuando quiere poder controlar remotamente apoyos y efectos, una buena opción es utilizar un control remoto infrarrojo. Así en este proyecto, que voy a mostrar algunos efec
Ingeniería inversa: Bombilla de LED RGB con mando a distancia IR

Ingeniería inversa: Bombilla de LED RGB con mando a distancia IR

compramos 20 de estas bombillas LED RGB para una fiesta en el trabajo, pero estaba un poco decepcionado con las funciones de fundido de color que proporcionaban. Así que decidí tomar a un ingeniero inverso, aparte el protocolo de IR y ver si tenía má
Mando a distancia Smart Fan

Mando a distancia Smart Fan

Ventiladores tradicionales no son Directiva, nos gustaría estar sólo ese lugar donde nos encontramos con máxima de enfriamiento del ventilador. Así, el concepto de ventilador inteligente es hacerlo fácil y Directiva controlable con mando a distancia