Conceptos básicos de convertir su vehículo de control remoto en un sistema autónomo (abejón) utilizando un Arduino (5 / 7 paso)

Paso 5: El código parte 2

Así que asumiendo su wen Test bien podemos comenzar a agregar los sensores para el arte, es donde el sistema se convierte en útil.

Usted puede utilizar cualquier sensor que te gusta y tantos como quieras, siempre y cuando puede interactuar con el arduino que está utilizando.

Para demostrar esta idea, he escrito algo de código que tiene a un representante de la lectura de la distancia de un análogo de la SHARP sensor de infrarrojos que se monta sobre un lado del helicóptero y si la lectura implica que el helicóptero está a punto de un obstáculo entonces va desviar apagado al lado opuesto. De lo contrario seguirá siendo control enteramente en nuestras manos.

He dejado el código de la válvula reguladora en a pesar de que no se utiliza en caso de que usted está usando una línea de señal de 3; le ahorrará tiempo añadiendo el código nuevo :) no me agradable!

Aquí está el modificado Código y recuerde por favor leer los comentarios para que sea claro en cuanto a lo que el código hace:

#include < RCArduinoFastLib.h >

//
Código de ejemplo Mod a la original prueba estructura de RCArduino de capitán Dyson
para la biblioteca "RCArduinoFastLib"
Este código Lee un sensor de distancia antes de decidir si mover lejos o no.
//

MultiChannels
rcarduino.blogspot.com
Un enfoque simple para la lectura de tres canales RC con pasador de cambio interrupciones
Ver entradas relacionadas-
http://rcarduino.blogspot.co.uk/2012/01/How-to-read-RC-Receiver-with.html
http://rcarduino.blogspot.co.uk/2012/03/Need-More-Interrupts-to-read-more.html
http://rcarduino.blogspot.co.uk/2012/01/Can-i-control-more-than-x-servos-with.html
rcarduino.blogspot.com

incluir la biblioteca de pinchangeint - vea los enlaces en la sección temas relacionados para obtener más información
#include < PinChangeInt.h >

Asignar el canal en pins
#define THROTTLE_IN_PIN 5
#define STEERING_IN_PIN 6
#define AUX_IN_PIN 7

Asignar el canal a pernos
#define THROTTLE_OUT_PIN 8
#define STEERING_OUT_PIN 9
#define AUX_OUT_PIN 10

Asignar índices de servo
#define SERVO_THROTTLE 0
#define SERVO_STEERING 1
#define 2
#define SERVO_FRAME_SPACE 3

Estos indicadores de bit se encuentran en bUpdateFlagsShared para indicar que los canales tienen nuevas señales
#define THROTTLE_FLAG 1
#define STEERING_FLAG 2
#define AUX_FLAG 4

sostiene las banderas de actualización definidas anteriormente
bUpdateFlagsShared de uint8_t volátiles;

variables compartidas son actualizadas por el ISR y leídas por lazo.
En bucle inmediatamente tome las copias locales para que la ISR puede mantener la propiedad de la
los compartidos. Para acceder a estas en bucle primero apagamos interrupciones con noInterrupts
tomamos una copia para utilizar en bucle y la vuelta interrupciones en cuanto antes
Esto asegura que siempre somos capaces de recibir nuevas señales
unThrottleInShared de uint16_t volátil;
unSteeringInShared de uint16_t volátil;
unAuxInShared de uint16_t volátil;

Estos se utilizan para registrar el flanco ascendente de pulso en las funciones calcInput
No deben ser volátiles como sólo se utilizan en el ISR Si quisiéramos
para hacer referencia a éstos en el lazo y el ISR entonces tendrían que ser declarados volátiles
unThrottleInStart de uint16_t;
unSteeringInStart de uint16_t;
unAuxInStart de uint16_t;

uint16_t unLastAuxIn = 0;
ulVariance de uint32_t = 0;
ulGetNextSampleMillis de uint32_t = 0;
uint16_t unMaxDifference = 0;

Asignar un pasador para leer los datos de sensor (es)
int sensorPin = A0;

void setup()
{
Serial.Begin(115200);
Serial.println("multiChannels");

adjuntar objetos de servo, se generan el correcto
pulsos para la conducción de controladores de velocidad electrónicos, servos y otros dispositivos
diseñado para interactuar directamente con receptores RC
CRCArduinoFastServos::attach(SERVO_THROTTLE,THROTTLE_OUT_PIN);
CRCArduinoFastServos::attach(SERVO_STEERING,STEERING_OUT_PIN);
CRCArduinoFastServos::attach(SERVO_AUX,AUX_OUT_PIN);

permite establecer una tasa estándar de 50 Hz mediante el establecimiento de un espacio del marco de 10 * 2000 = 3 Servos + 2000 7 veces
CRCArduinoFastServos::setFrameSpaceA(SERVO_FRAME_SPACE,7*2000);
CRCArduinoFastServos::begin();

usando la biblioteca PinChangeInt, coloque las interrupciones para leer los canales
PCintPort::attachInterrupt (THROTTLE_IN_PIN, calcThrottle, cambio);
PCintPort::attachInterrupt (STEERING_IN_PIN, calcSteering, cambio);
PCintPort::attachInterrupt (AUX_IN_PIN, calcAux, cambio);
}

void loop()
{
crear variables locales para sostener una copias locales de las entradas de canal
Estas se declaran estáticas que se conservarán sus valores entre llamadas a lazo.
unThrottleIn de uint16_t estáticos;
unSteeringIn de uint16_t estáticos;
unAuxIn de uint16_t estáticos;
copia local de indicadores de actualización
bUpdateFlags de uint8_t estática;

Ver banderas de actualización compartida para ver si los canales tienen una nueva señal
if(bUpdateFlagsShared)
{
noInterrupts(); desactivar interrupciones rápidamente mientras tomamos copias locales de las variables compartidas

tomar una copia local de que los canales fueron actualizados en caso de necesitar utilizar este en el resto del bucle
bUpdateFlags = bUpdateFlagsShared;

en el código actual, los valores compartidos están siempre poblados
así podríamos copiarlos sin pruebas las banderas
sin embargo en el futuro esto podría cambiar, así que vamos a
copiar sólo cuando los indicadores nos dicen que podemos.
if(bUpdateFlags & THROTTLE_FLAG)
{
unThrottleIn = unThrottleInShared;
}
if(bUpdateFlags & STEERING_FLAG)
{
unSteeringIn = unSteeringInShared;
}
if(bUpdateFlags & AUX_FLAG)
{
unAuxIn = unAuxInShared;
}

claro la copia compartida de indicadores actualizados como ya hemos tomado las actualizaciones
todavía tenemos una copia local si necesitamos usarlo en bUpdateFlags
bUpdateFlagsShared = 0;

Interrupts(); tenemos copias locales de las entradas, así que ahora podemos convertir interrumpe en
tan pronto como las interrupciones son nuevo, ya no podemos usar las copias compartidas, la interrupción
rutinas de servicio propias de estos y pueden actualizar en cualquier momento. Durante la actualización, la
copias compartidas pueden contener basura. Por suerte tenemos nuestras copias locales para trabajar con :-)
}

hacer cualquier procesamiento de aquí en adelante
Utilice únicamente los valores locales unAuxIn, unThrottleIn y unSteeringIn

Esta configuración de Sensor detecta la presencia de un objeto a la derecha de helecopters
Si el objeto es para cerrar entonces la nave se desviará izquierda, lejos del peligro
Puede agregar tantos lazos en este código que como con diferentes sensores
pero por favor no copiar este código exactamente y esperar que funcione, todo depende de la
los detalles de tus servos y las direcciones que quieras viajar
Este código es específico para mi construir, modificar para el suyo :)

Leer el Sensor
int val = analogRead(sensorPin);
colocar una condición contra esta lectura
Si (val > 150)
{
actuar de acuerdo a la condición
unSteeringIn = unSteeringIn + 430;
Aplicar los nuevos valores alterados
if(bUpdateFlags & THROTTLE_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn);
}

if(bUpdateFlags & STEERING_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn);
}

if(bUpdateFlags & AUX_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_AUX,unAuxIn);
}
}
Si no tenemos ninguna razón para alterar las posiciones de servo luego podemos pasar la señal a través de
como lo hicimos en el bosquejo del examen sin alteraciones.
otra cosa
{
if(bUpdateFlags & THROTTLE_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn);
}

if(bUpdateFlags & STEERING_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn);
}

if(bUpdateFlags & AUX_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_AUX,unAuxIn);
}
}
bUpdateFlags = 0;
}

rutina de servicio de interrupción simple
void calcThrottle()
{
if(PCintPort::pinState)
{
unThrottleInStart = TCNT1;
}
otra cosa
{
unThrottleInShared = (TCNT1 - unThrottleInStart) >> 1;
bUpdateFlagsShared | = THROTTLE_FLAG;
}
}

void calcSteering()
{
if(PCintPort::pinState)
{
unSteeringInStart = TCNT1;
}
otra cosa
{
unSteeringInShared = (TCNT1 - unSteeringInStart) >> 1;

bUpdateFlagsShared | = STEERING_FLAG;
}
}

void calcAux()
{
if(PCintPort::pinState)
{
unAuxInStart = TCNT1;
}
otra cosa
{
unAuxInShared = (TCNT1 - unAuxInStart) >> 1;
bUpdateFlagsShared | = AUX_FLAG;  }
}

Ahora recuerde que esto es sólo un simple ejemplo, por favor ser tan creativo como quieras y añadir tantos sensores como usted como algunas ideas un acelerómetro y un sensor PING para detección a largas distancias, o ir aún más lejos y añadir un GPS con una ubicación actual vs comparación del lugar de destino y luego conseguir el dispositivo para ir a una ubicación geográfica específica.

Artículos Relacionados

Diagnóstico de vehículo RC roto: Cómo arreglar un vehículo RC

Diagnóstico de vehículo RC roto: Cómo arreglar un vehículo RC

Hola chicos! Todos sabemos tiempo cuando está jugando con su vehículo de control remoto y se rompe. ¿Desgarradora, derecho? (Ver mi juego de palabras?) Bueno, este es el Instructable para usted. Es simplemente un universal básico solución de problema
Primera persona WiFi conducción de Roombas y otros vehículos RC infrarrojo

Primera persona WiFi conducción de Roombas y otros vehículos RC infrarrojo

Pegarse un smartphone un vehículo de control remoto y tener flujo de cámara video sobre WiFi permite tiene un montón de diversión de conducción del vehículo con su control remoto viendo imágenes de él en otro dispositivo y usando el mando a distancia
LEGO Power funciones de vehículo (con Video)

LEGO Power funciones de vehículo (con Video)

este es el segundo vehículo de control remoto funciones de energía de Lego que he subido a Instructables. Si no has visto mi primer one(a tank), aquí está el enlace. Puesto que éste utiliza neumáticos de goma grande en vez de pistas, es mucho más ráp
Seis ruedas RC vehículo

Seis ruedas RC vehículo

Hola, Bienvenidos a mi Instructable sobre cómo hacer su propio vehículo de RC Six-Wheeled.Este Instructable le ayudará en el camino a la grandeza de Arduino RC! En el momento en que termines trabajando, usted tendrá su propio totalmente funcional, Ar
Arduino Powered vehículo autónomo

Arduino Powered vehículo autónomo

Unos meses atrás empecé jugando con reguladores micro Arduino como un ejercicio de aprendizaje (y diversión); Este proyecto es la culminación de. El objetivo del proyecto era crear un vehículo que puede desplazarse autónomamente a través de una serie
Vehículos de Braitenberg 1-4: vehículos que 3mot3

Vehículos de Braitenberg 1-4: vehículos que 3mot3

uno de los aspectos más interesantes de la robótica es que a veces se pueden ver hermosamente intrincadas conductas emergentes de mecanismos relativamente simples. No hacerme mal, me encanta complicadas mis diseños tanto como el ingeniero siguiente,
Seguridad de los vehículos con GSM

Seguridad de los vehículos con GSM

El objetivo principal de hacer base de vehículo robo alerta sistema GSM es aplicar la electrónica las teorías, métodos modernos de la seguridad, sistemas integrados y edad de módem de ciencia y tecnología para muchas clases de máquina de transporte.
Cómo dibujar un Simple vehículo en perspectiva

Cómo dibujar un Simple vehículo en perspectiva

¿Eres capaz de conectar dos puntos con una línea recta?Es una tarea bastante simple, pero si eres capaz de completarlo, también son capaces de dibujar cualquier cosa en el mundo de su imaginación - si tienes las herramientas adecuadas.Con la direcció
Vehículo eléctrico - una simple plataforma ligera de EV

Vehículo eléctrico - una simple plataforma ligera de EV

yo he estado esperando la llegada de la tecnología de coches eléctricos. No sólo para la suave energía tranquila, torsión amplia, baratos costes de funcionamiento y un mantenimiento mínimo, pero para diseñar y construir coches para tomar ventaja de l
Un chasis de vehículo de 3 ruedas de ingeniería

Un chasis de vehículo de 3 ruedas de ingeniería

Mi proyecto Universidad era extremadamente ambicioso. En el transcurso de un año (2011), yo y otros tres estudiantes de ingeniería mecánica había diseñado y fabrican un chasis de automóvil de carrera solar completa incluyendo el marco, suspensión, ej
Conceptos básicos de Photoshop

Conceptos básicos de Photoshop

Hola. En este tutorial mostrará usted los conceptos básicos de Photoshop. Este tutorial es para quienes son nuevos en Photoshop y quieran saber los fundamentos de la misma.Iré:Crear un nuevo proyectoHerramientas básicasCapas, grupos y guíasFiltros y
¿DIY pesado clase R/c vehículo-(electrónica)

¿DIY pesado clase R/c vehículo-(electrónica)

alguna vez construido o jugado con un pequeña r/c coche y conseguido nada sino una superficie muy plana? esos coches pequeños no pueden ir de cualquier lugar y no se llevan mucho de nada, lo que necesita ahora es un vehículo de servicio pesado. Ahora
Construcción de un vehículo Multi modo (MMV)

Construcción de un vehículo Multi modo (MMV)

*---UPDATE---*Han pasado unos meses desde instalarse en el nuevo espacio y por fin pude dedicar más tiempo a mi pequeño proyecto.  Ha crecido bastante y me refiero a bastante.  Lo que empezó como un simple precursor de media pista ahora es algo mucho
Los conceptos básicos sobre salud

Los conceptos básicos sobre salud

aquí es mi guía para evitar mitos comunes de la salud y ayudar a aquellos que quieran vivir más saludable para tamizar a través de toda la información. He oído muchas ideas falsas de una forma u otra sobre cómo vivir una vida sana. Estos días se nos