Control de RC y Arduino: obras completas A (9 / 10 paso)

Paso 9: Depósito dirección Servos de rotación continua/W

Este paso final es la culminación de todos los temas anteriores y mi código de buey de tanque. Hice el depósito de dirigir el código para que sólo utilice el palillo del dedo pulgar derecho del transmisor para luego controlar dos servos de CR. Recuerda que mi TX se encuentra en modo 3 y no tengo ningún canal invertido. El stick derecho es canal 3 para el eje horizontal y canal 4 para el eje vertical. La siguiente es mi bosquejo utilizando un Arduino UNO en lugar de la MEGA. Estoy usando límites de servo diferentes que permiten un micro servo mover 180 grados completos y ellos diversa gama para tanque volante para dar más sensibilidad.

Asegúrese de que dar las gracias a mi maravilloso modelo Sid (por encima de la imagen) por ser un deporte tan buena mientras que he estado usando lo para refinar el programa.

/ * Esto esboce voluntad los valores vía serial de entrada y leer los 8 canales de un receptor RC
monitor. Programar el Arduino Uno y Adafuit Servo controlador Board(pins A5-SCL and A4-SDA).
Mi transmisor también se encuentra en modo 3 para que el stick derecho es el siguiente:
Eje vertical = canal 3
Eje horixontal = canal 4
===========================================================================================*/
Bibliotecas incluidas
#include
#include

Activar el modo de depuración para el ingreso de datos vía serie
/ * 0 = OFF, 1 = ingeniería de datos en, 2 = crudos datos sobre, 3 = valor de Servo salida,
4 = Eng crudo y salida de datos del Servo, 5 = salida de datos de la dirección de tanque, * /
const int debug = 0;

Matrices para canal pin ubicaciones y datos de un canal
const int canales = 8;
const int chPin [] = {2,3,4,5,6,7,8,9}; Ubicaciones de los pin
int chEng [8]; Almacenar datos de masajes
int chSer [8]; Almacenamiento de valor de servo

Señal de RX masaje valores
const int RXLo = 920;
const int RXHi = 1640;
const int RXDeadLo = 1265;
const int RXDeadHi = 1295;
const int RXMid = 1280;

Gamas de servo
const int serLo = 130;
const int serMid = 330;
const int serHi = 530;
const int tankLo = 250;
const int tankHi = 410;

Servos
Servo=Adafruit_PWMServoDriver(0x40) de Adafruit_PWMServoDriver;
const int freq = 50;
const int serNum = 8;
int ch3; Variable de buey de tanque
int ch4; Variable de buey de tanque

Configuración de ubicaciones de los pin, iniciar serie o comenzar I2C
void setup() {}
Si (debug > 0) {}
Serial.Begin(115200); Vamos a cuadros!
}

Pines de entrada:
para (int i = 0; i pinMode(chPin[i],INPUT);
}

servo.Begin();
servo.setPWMFreq(freq);
} //End de configuración

Principal del programa
void loop() {}
Hacia valores de chy chz, chx a chy y leer nuevos valores
para (int i = 0; i chEng[i]=pulseIn(chPin[i],HIGH);

Masaje de señal
chEng [i] = limitar (chEng [i], RXLo, RXHi); Moldura inferior y extremo superior
Si (chEng [i] < = RXDeadHi & & chEng [i] > = RXDeadLo) {//Create banda muerta
chEng [i] = RXMid;
}

Asignar valores de Eng para servos
Si (chEng [i] > = RXLo & & chEng [i] < = RXDeadLo) {//Map gama más baja de los valores
chSer [i] = mapa (chEng [i], RXLo, RXDeadLo, serLo, serMid);
}
else if (chEng [i] == RXMid) {//Map de valor medio
chSer [i] = serMid;
}
else if (chEng [i] > = RXDeadHi & & chEng [i] < = RXHi) {//Map mayor rango de valores
chSer [i] = mapa (chEng [i], RXDeadHi, RXHi, serMid, serHi);
}
} //End de bucle

Buey del tanque usando el stick derecho, outputing dos servos de rotación continua
/ * Utilizando el sistema de cuadrante cartesiano y cualquier valor dado del motor derecho se invierte a
asegurar la correcta operación * /

Primer cuadrante.
/ * Rango del tirón el servo derecho con respecto a la posición del eje vertical. Esto evitará que el
servo sistema de izquierda a la posición vertical y reducir la speed.* derecha servos /
Si (chSer [2] > = serMid & & chSer [3] > = serMid) {}
CH3 = chSer [2];
CH4=Map(chSer[3],serMid,serHi,chSer[2],serMid);
}

Segundo cuadrante
/ * Rango del tirón el servo izquierdo con respecto a la posición del eje vertical. Este no es como
Estrecho de adelante como 1 cuadrante pero el código de ejemplo siguiente que estaba usando antes debe
aspecto similar.
CH3=Map(chSer[3],serLo,serMid,serMid,serHi);
servo.setPWM(2,0,map(ch3,serHi,serMid,chSer[2],serMid));
Cómo llegué a la siguiente es por simplificación y Ahorre tiempo.* /
else if (chSer [2] > serMid & & ch3=map(chSer[3],serLo,serMid,serMid,chSer[2]) de chSer [3];
CH4 = chSer [2];
}

Tercer cuadrante
/ * La gama del tirón el servo derecho con respecto a la posición del eje vertical. El servo izquierdo
continuará viajando hacia atrás mientras que el servo derecho es slowed.* /
else if (chSer [2] < = serMid & & chSer [3] < = serMid) {}
CH3 = chSer [2];
CH4=Map(chSer[3],serMid,serLo,chSer[2],serMid);
}

Cuarto cuadrante
/ * La gama del tirón el servo izquierdo con respecto a la posición del eje vertivle, el servo derecho
será continut viajando hacia atrás mientras que el servo izquierdo es slowed.* /
else {} if(chSer[2]serMid)
CH4 = chSer [2];
CH3=Map(chSer[3],serMid,serLo,chSer[2],serMid);
}

/ * Habilitar CCW rotación invirtiendo derecha servo y servo izquierdo desvío con respecto a
el axis.* horizontal /
Si (chSer [2] == serMid & & chSer [3] > = serMid) {}
CH3 = chSer [3];
CH4=Map(chSer[3],serMid,serHi,serMid,serLo);
}

/ * Activar rotación CW por servo derecho de expedición y el servo izquierdo marcha atrás con respecto a
el axis.* horizontal /
Si (chSer [2] == serMid & & chSer [3] < = serMid) {}
CH3 = chSer [3];
CH4=Map(chSer[3],serMid,serLo,serMid,serHi);
}

Reasignación de las variables para dar mayor sensibilidad y todo el rango no es necesario para lograr la máxima velocidad.
CH3=Map(CH3,serLo,serHi,tankLo,tankHi);
CH4=Map(CH4,serLo,serHi,tankLo,tankHi);

Cambiando la señal de servo de lado derecho, señal de canal 4.
Si (ch4 > = serMid) {}
CH4=Map(CH4,serMid,serHi,serMid,serLo);
}
else if (ch4 ch4=map(ch4,serMid,serLo,serMid,serHi);
}

Salida a conductor servo
servo.setPWM(2,0,ch3);
servo.setPWM(3,0,ch4);

Salida de depuración
Si (eliminar errores == 1 || depuración == 4) //Engineering datos
{
Serial.Print ("EngData| CH1: ");
Serial.Print (chEng[0]);
Serial.Print ("| CH2: ");
Serial.Print (chEng[1]);
Serial.Print ("| CH3: ");
Serial.Print (chEng[2]);
Serial.Print ("| CH4: ");
Serial.Print (chEng[3]);
Serial.Print ("| Ch5: ");
Serial.Print (chEng[4]);
Serial.Print ("| Capítulo 6: ");
Serial.Print (chEng[5]);
Serial.Print ("| Ch7: ");
Serial.Print (chEng[6]);
Serial.Print ("| CH8: ");
Serial.Print (chEng[7]);
Serial.println ("|");
}

Si (eliminar errores == 3 || depuración == 4)
{
Serial.Print ("SerData| CH1: ");
Serial.Print (chSer[0]);
Serial.Print ("| CH2: ");
Serial.Print (chSer[1]);
Serial.Print ("| CH3: ");
Serial.Print (chSer[2]);
Serial.Print ("| CH4: ");
Serial.Print (chSer[3]);
Serial.Print ("| Ch5: ");
Serial.Print (chSer[4]);
Serial.Print ("| Capítulo 6: ");
Serial.Print (chSer[5]);
Serial.Print ("| Ch7: ");
Serial.Print (chSer[6]);
Serial.Print ("| CH8: ");
Serial.Print (chSer[7]);
Serial.println ("|");
}

Si (eliminar errores == 5) {}
Serial.Print(CH3);
Serial.Print("|");
Serial.println(CH4);
}
} //End de programa principal

Sé cómo hice el depósito dirección dista de ser óptima pero es cómo me di cuenta.  No funciona el cuarto cuadrante y todavía tengo que conseguir trabajo.  No era que un gran problema ya que esta es una prueba del robot de concepto de trabajo con control de RC y Arduino antes que mover toda la escala.

Me avisas si tienes alguna pregunta y haré mi mejor esfuerzo para responder y actualizar en consecuencia. Por favor incluya el paso y algún detalle explicando tu problema para ayudarme a conseguir en la misma página con usted.

Artículos Relacionados

Control de Motor con Arduino

Control de Motor con Arduino

Control de motores con Arduino puede ser complicado.En primer lugar, los motores necesitan más actual que la producción de qué Arduino pueden suministrar pernos. También motores pueden generar su propia corriente a través de un proceso llamado inducc
Sistema de seguridad y Control de acceso con Arduino y RFID

Sistema de seguridad y Control de acceso con Arduino y RFID

sistema de seguridad y Control de acceso con Arduino y RFIDEste proyecto es un evolotuin de mi primer proyecto llamado "Arduino – sistema de seguridad y acceso Control"Como se puede ver en el http://arduinobymyself.blogspot.com.br/2012/03/arduin
Cómo construir RC 433 MHZ para control de servos (100% Arduino)

Cómo construir RC 433 MHZ para control de servos (100% Arduino)

¡ Hola chicos!Hay mi solución para omitir número de temporizador (servo y Marc alambre virtual).Debido al número de temporizador que tenía, decidí omitir añadiendo un tercer arduino.Es la forma en que funciona:-El transmisor comprueba entradas y envi
Control de LED con Arduino Bluetooth y Android. (Parte 1)

Control de LED con Arduino Bluetooth y Android. (Parte 1)

Este instructable es un simple tutorial explicar cómo controlar un LED mediante Bluetooth de Android.Se necesita:Arduino UNOResistencias 300Ω (x 3)Resistencia 150ΩLEDPuentes;Módulo de Bluetooth (HC-06/otros);Teléfono Android;Bluetooth Apk SPP (Lite s
Cómo utilizar el control remoto IR con Arduino (actual y actualizada)

Cómo utilizar el control remoto IR con Arduino (actual y actualizada)

Estoy cansado de estos complicados tutoriales sobre cómo hacer ciertas cosas. Me gusta simple, fácil de entender, las instrucciones paso a paso. Mi mayor problema era con IR y POV *. Yo finalmente he dominado cómo controlar mi proyecto con cualquier
Control de luz usando Arduino con módulo de relé AC

Control de luz usando Arduino con módulo de relé AC

¡ Hola amigos! Soy Ostin, I ll muestran cómo controlar un CA luz con Arduino usando el módulo de relés. Es un proyecto simple y también muy peligroso ya que vamos a tratar con alto voltaje 220v. No trate de si eres un aficionado en el trato con alto
IR control 3D Rover impreso (Arduino)

IR control 3D Rover impreso (Arduino)

Este instructable fue creado en cumplimiento de la exigencia de proyecto de la Makecourse de la Universidad de South Florida (www.makecourse.com)Este instructivo cubre los pasos necesarios en la forma de recrear mi proyecto Rover. Que va cubriendo to
Control de Servos con Arduino y receptor/transmisor de RC

Control de Servos con Arduino y receptor/transmisor de RC

En este Tutorial voy a explicar cómo controlar más de un servo con un único canal de sus transmisor/receptor y el programa de movimientos propios. Es útil para movimientos complejos como brazos robóticos.Se necesita:-Arduino Uno-Transmisor-Receptor-3
Descifrado de control remoto IR de Arduino

Descifrado de control remoto IR de Arduino

el siguiente en mi lista de proyectos es un TV-B-Gone como gadget. Ya que muchos locales IR control remoto dispositivos Jordania desconocidos orígenes, un gadget simple IR control remoto descifrado, como el de tutorial fantástico de Ladyada , haría m
Control remoto universal usando Arduino, 1Sheeld y móvil Android

Control remoto universal usando Arduino, 1Sheeld y móvil Android

Este proyecto ilustra cómo su televisor, receptor de satélite y estéreo utilizando tu móvil Android en vez de usar hay mando a distancia.Básicamente, se puede aplicar esta técnica para otros dispositivos funcionan con control remoto. Estaba pensando
Control de calidad con Arduino Uno de aire

Control de calidad con Arduino Uno de aire

Control de calidad de aire con Arduino Uno con la ayuda de MQ135 aire calidad gases peligrosos módulo Sensor Detector.Paso 1: Configuración de pines Rojo = 5VVerde = datos (A0)Negro = tierraPaso 2: Conexión del cable de 1 = rojo (5V)2=Black(Ground)4=
Cómo el control DC motores con Arduino

Cómo el control DC motores con Arduino

Recientemente había terminado de diseñar nuestro compacto plug-and-play Arduino robot y lo lanzó en Kickstarter. Actualmente estamos buscando patrocinadores.Con este kit de robótica, es muy fácil de conectar motores, sensores y módulos de comunicació
Control de motor con arduino shield motor via Web

Control de motor con arduino shield motor via Web

En este proyecto, de control de motor de la C.C. (ventilador de la computadora) con motor shield(official) a través de la Página Web.Puede controlar motor de velocidad lenta o rápida velocidad y parada.También si lo desea, puede Agregar botón de cont
Control de ventilador de Arduino Uno

Control de ventilador de Arduino Uno

Este proyecto permite a los usuarios control dos diferentes ventiladores y un servo. Los ventiladores se encenderá automáticamente si se alcanza una cierta temperatura y el servo girará 90 grados. Un pulsador permite también para el control manual de