Intel 3WD Seeed/Edison/Nexus OmniRover (17 / 18 paso)

Paso 17: Software de pruebas de carga

Ahora tenemos que programar el Edison para controlar el robot. Doy prueba simple código en este paso diseñado para comprobar que funciona todo el hardware y permitirle Asegúrese de que el codificador correcto está asociado con los canales de motor correcto, pero dejará más complejo de programación hasta (y más tarde puestos...).

Voy a utilizar Node.js para que sea más fácil conectarse a servicios web y tal más adelante pero también es posible utilizar C y C++, Python, Java o Arduino. También voy a usar MRAA y UPM, algunas bibliotecas de interfaz de hardware simple proporcionadas por Intel. También, hay otras opciones de la interfaz HW Node.js hay como cylon.js y JohnnyFive, que puede mirar más tarde.

Sin embargo, vamos a configurar cosas para utilizar MRAA y UPM. En primer lugar, siga las instrucciones para actualizar MRAA y UPM a las últimas versiones. Puede encontrar documentación para esto en el sitio de Intel pero si ya tienes actualizan el firmware de Edison a una versión razonablemente reciente entonces lo siguiente debe agarrar la últimas versiones de los repositorios en línea (Nota: Edisons tendrá que tener acceso a internet primero...). Después de iniciar sesión en el Edison como root ejecute los siguientes comandos:

actualización de OPKG
libmraa0 actualización de OPKG
OPKG actualización upm

Entonces usted quiere poner el siguiente script en alguna parte en el Edison, dicen en "omnitest.js" en tu directorio home y luego ejecutarlo con "nodo omnitest.js". Alternativamente usted puede cargar este código usando el XDK Intel gratis (edición Internet), que hace más conveniente el ciclo editar/cargar/ejecutar, proporciona a un depurador si quieren y también logra resolver las dependencias de módulo de MNP (sin embargo, esta secuencia de comandos de prueba intencionalmente evita el uso de módulos externos distintos de UPM y MRAA para facilitar la instalación). Carga del código por el XDK también configura lo para funcionar automáticamente en el arranque. Voy a mostrar cómo utilizar con más detalle más adelante.

Utilice esta secuencia de comandos para asegurarse de que están trabajando los codificadores, sensores, motores y bocinas. Básicamente, el guión hace girar el robot hacia adelante y hacia atrás en el lugar mediante la ejecución de todos los motores hacia adelante y hacia atrás, entonces se ejecuta cada motor a su vez. Asegúrese de que todos tres codificadores cuentan para arriba y luego abajo en la primera ida y vuelta de movimiento. Compruebe que cuando el motor gira a su vez el canal codificador correcto está respondiendo. Si no, intercambiar alrededor de cables de codificador o cambiar las asignaciones de pines en el script. Si uno de los motores no gira usted puede han revertido los identificadores para los controladores de motor de dos. Te recomiendo cambiar la asignación de pines en la secuencia de comandos en lugar de meterse con el cableado. También puede ajustar las constantes de escalamiento para el divisor de tensión (si lo usas) para obtener una lectura más precisa. Mira básicamente la lectura cruda mira el corrector de voltaje externo y después entra el derecho constantes en el script para calcular la relación de escala.

Una vez que se ejecuta esta secuencia de comandos de prueba y la anterior está todo resuelto, el hardware debería estar listo para una codificación más sofisticada!

------

/ * Omnirover demo.
* Ejercicios motores, Lee los datos de los sensores y descargas a la consola, pruebas de sonido.
*/

/ === PRUEBA SELECCIÓN
var test_motors = true;
var test_batt = true;
var test_encoders = true;
var test_sound = true;

=== LAS DEPENDENCIAS
var Mraa = require('mraa'); General hardware I/O
var MD = require("jsupm_grovemd"). GroveMD; Conductor del motor de UPM Grove
var RE = require("jsupm_rotaryencoder"). RotaryEncoder; Codificador rotatorio de UPM

=== LA CONFIGURACIÓN
pernos de var = {}
Batería conectada a través del divisor de tensión de arboleda, en configuración de 3
batería: 1, / / analógica de entrada; nivel de la batería total, dividido por 3.

Módulo de "altavoz" de Grove (también se puede utilizar el módulo zumbador)
altavoces: 6, / / se puede utilizar para varios tonos utilizando PWM modulada de salida

Codificadores de cuadratura para cada rueda (swap alrededor como sea necesario para obtener codificadores correcta en las ruedas de la correctas)
encoder_A1: 2 / / 1, una entrada de la rueda
encoder_B1: 3 / / 1, B de entrada de la rueda
encoder_A2: 8 / / 2, una entrada de la rueda
encoder_B2: 9, / / de la rueda 2, B de entrada
encoder_A3: 4 / / 3, una entrada de la rueda
encoder_B3: 5 / / 3, B de entrada de la rueda

Controladores de motor
motor_driver_bus: 0, / / Bus (hardware I2C)
motor_driver_01_id: 15, / la dirección de I2C para motores de 0 y 1 (canal 0 no se usa)
motor_driver_23_id: 10 / la dirección de I2C para motores de 2 y 3
};
Console.log("Pins:",pins);

=== PRUEBA MOTOR
var motor01 = new MD(pins.motor_driver_bus,pins.motor_driver_01_id);
var motor23 = new MD(pins.motor_driver_bus,pins.motor_driver_23_id);

Función auxiliar para establecer direcciones y velocidades de motor más fácilmente
función set_speed(m0,m1,m2,m3) {}
var abs_m0 = Math.floor(255*Math.abs(m0));
var abs_m1 = Math.floor(255*Math.abs(m1));
var abs_m2 = Math.floor(255*Math.abs(m2));
var abs_m3 = Math.floor(255*Math.abs(m3));
¿var dir_m0 = (m0 > 0)? MD. DIR_CW: MD. DIR_CCW;
¿var dir_m1 = (m1 > 0)? MD. DIR_CW: MD. DIR_CCW;
¿var dir_m2 = (m2 > 0)? MD. DIR_CW: MD. DIR_CCW;
¿var dir_m3 = (m3 > 0)? MD. DIR_CW: MD. DIR_CCW;
motor01.setMotorSpeeds(0,0);
motor01.setMotorDirections(dir_m0,dir_m1);
motor01.setMotorSpeeds(abs_m0,abs_m1);
motor23.setMotorSpeeds(0,0);
motor23.setMotorDirections(dir_m2,dir_m3);
motor23.setMotorSpeeds(abs_m2,abs_m3);
}

Prueba del motor
Si (test_motors) {}
periodicMotorForward();
} else {}
set_speed(0,0,0,0);
}

función periodicMotorForward() {}
Console.log ("motores: todos hacia delante");
set_speed(0,1,1,1);
setTimeout(periodicMotorStop1,10000);
}

función periodicMotorStop1() {}
Console.log ("motores: parada");
set_speed(0,0,0,0);
setTimeout(periodicMotorBackward,3000);
}

función periodicMotorBackward() {}
Console.log ("motores: hacia atrás");
set_speed(0,-1,-1,-1);
setTimeout(periodicMotorStop2,10000);
}

función periodicMotorStop2() {}
Console.log ("motores: parada");
set_speed(0,0,0,0);
setTimeout(periodicMotorForward_1,3000);
}

Utilizar las siguientes tres funciones, junto con la prueba de codificador,
para asegurarse de que los codificadores se asocian a los motores correcta
función periodicMotorForward_1() {}
Console.log ("motores: MOTOR delantero 1");
set_speed(0,1,0,0);
setTimeout(periodicMotorForward_2,10000);
}

función periodicMotorForward_2() {}
Console.log ("motores: MOTOR delantero 2");
set_speed(0,0,1,0);
setTimeout(periodicMotorForward_3,10000);
}

función periodicMotorForward_3() {}
Console.log ("motores: MOTOR delantero 3");
set_speed(0,0,0,1);
setTimeout(periodicMotorForward,10000);
}

=== PRUEBA CODIFICADOR

Lee todos los codificadores periódicamente e imprime sus cuentas actuales
Si (test_encoders) {}
encoder1 var = nuevo RE(pins.encoder_A1,pins.encoder_B1);

encoder2 var = nuevo RE(pins.encoder_A2,pins.encoder_B2);
var encoder3 = new RE(pins.encoder_A3,pins.encoder_B3);
{setInterval(function()}
Console.log ("encoder1:", encoder1.position());
Console.log ("encoder2:", encoder2.position());
Console.log ("encoder3:", encoder3.position());
}, 1000);
}

=== PRUEBA DE SENSOR BATERÍA
batt var = nuevo Mraa.Aio(pins.batt);
var batt_scale = 11.93/0.8; Divisor de tensión, 3 establecer
función read_batt_sensor() {}
br de var = batt.readFloat();
var bv = batt_scale * br;
Console.log ("lectura de batt crudo:", br);
Console.log("BATT:",BV);
}

Si (test_batt) {}
setInterval(read_batt_sensor,1000);
}

=== PRUEBA SONIDO
altavoz de var = nuevo Mraa.Pwm(pins.speaker);

var speaker_duty = 0,5;
var speaker_freq = 600;
var speaker_on_interval = 1000;
var speaker_off_interval = 10000;

Si (test_sound) {}
Speaker.period(1.0/speaker_freq);
Speaker.Write(0.0);
Speaker.Enable(true);
start_alarm();
} else {}
Speaker.Enable(false);
}

función start_alarm() {}
Console.log ("alarma en");
Speaker.period(1.0/speaker_freq);
Speaker.Write(speaker_duty);
setTimeout(stop_alarm,speaker_on_interval);
}

función stop_alarm() {}
Console.log ("alarma desactivada");
Speaker.Write(1.0);
setTimeout(start_alarm,speaker_off_interval);
}

Artículos Relacionados

Intel® tablero de Edison: Clap activado reloj

Intel® tablero de Edison: Clap activado reloj

Se irá este tutorial sobre cómo crear un reloj en el clap con la ventaja añadida de que la temperatura y ajuste de brillo de la pantalla basado en los niveles de luz ambiente.Se utilizó una placa Intel® Edison junto con un sensor de luz, sensor de te
Una guía de principiantes para la Edison Intel

Una guía de principiantes para la Edison Intel

¡ Hola allí! Recientemente recibí una placa Intel Edison de Instructables, como un bonito regalo. Si su pregunta lo que es, el Edison de Intel es una pequeña computadora del tamaño de una tarjeta SD (que es en serio pequeña), para aficionados de la e
Alarma de ruido de Edison de Intel (Intel IoT)

Alarma de ruido de Edison de Intel (Intel IoT)

IntroducciónTengo una alarma antirrobo y alarma de incendio, pero no hay manera de saber si cualquiera está sonando a menos que estoy en la casa. En lugar de sustituirlas por alternativas 'inteligentes', planeo construir un dispositivo para escuchar
Guía Chromebook Arduino y Edison de Intel para el desarrollo de Intel IoT EDI sobre presupuesto

Guía Chromebook Arduino y Edison de Intel para el desarrollo de Intel IoT EDI sobre presupuesto

Primero voy a explicar por qué este Instructable es necesario como muchos desarrolladores experimentados se burlan cuando ven el título y nunca lo leerá porque no tienen una mente abierta acerca de cosas como Chromebooks. Eso es porque muchos de ello
La cuadrícula de tiempo (Powered By Intel Edison)

La cuadrícula de tiempo (Powered By Intel Edison)

El Edison de Intel es una bestia muy interesante. Ambos cuenta con un procesador Intel con Linux y tiene funcionalidad de Arduino (GPIO, SPI, etc.). Este proyecto es un poco diferente en que utiliza dos de esas características.En este Instructable, v
Cámara trampa subir Twitter con Edison de Intel

Cámara trampa subir Twitter con Edison de Intel

Cámaras trampa es cámaras especialmente diseñadas para capturar imágenes de animales de una fauna y flora. Con esto se pretende estudiar el ecosistema de los animales en el bosque. Esta cámara está equipada por movimiento cencors que censurar pir. Si
Servidor de audio y grabadora con Edison de Intel

Servidor de audio y grabadora con Edison de Intel

Una de las grandes cosas sobre el Edison de Intel es que pueden actuar como un servidor. Esto significa que puede almacenar archivos y compartirlos si quieres. Esta una gran oportunidad de comisariado en listas de reproducción y almacenamiento de otr
Introducción a Intel Edison - programación Python

Introducción a Intel Edison - programación Python

Esta guía es para todos los programadores de python que siempre te han preguntado,cuál es la mejor manera de llegar a "IoT"(Internet of Things) , ahora ya has hecho a esta página, cómprate un Edison de Intel de Amazon o en línea guardar como Ada
EQUIPO IMPACTO! Elegante casco - Intel Edison, Sparkfun 9DOF

EQUIPO IMPACTO! Elegante casco - Intel Edison, Sparkfun 9DOF

Edison de Intel con Sparkfun 9DOF LSM9DS0 IMU3er lugar a la IoT de Intel Roadshow NYC 2015Este Instructable es un casco elegante de IoT con Edison de Intel que utiliza un 9DOF de Sparkfun para recopilar datos del casco para medir cabeza tramas y crea
Gesto basado en domótica con Edison de Intel (Intel IoT))

Gesto basado en domótica con Edison de Intel (Intel IoT))

Domótica en gesto es la nueva forma de interactuar con dispositivos eléctricos disponibles en nuestra casa. En este proyecto utilizaremos sensores en lugar de cámara para reconocimiento de gestos, ya que proporciona mejor consistencia, independencia
ETextiles con el Edison de Intel

ETextiles con el Edison de Intel

eTextiles se realizan con técnicas y materiales que componentes eléctricos así que pueden ser incrustados e integrados en la tela. Es una parte esencial de la tecnología usable y una manera perfecta para gente astuta bucear en la electrónica y viceve
Aumentar el tamaño de partición raíz de Intel Edison con beta Release 2 imagen de Linux

Aumentar el tamaño de partición raíz de Intel Edison con beta Release 2 imagen de Linux

Hola todos, hoy voy a mostrarte cómo optimizar la partición raíz de Edison con la última imagen de Linux, también conocido como versión 2 beta (Rel 2.1).Tradicionalmente, si desea personalizar la partición de raíz de Edison, necesitará cuidadosamente
Movimiento de cámara de seguridad activada usando Intel Edison

Movimiento de cámara de seguridad activada usando Intel Edison

El objetivo de este proyecto es hacer una cámara de seguridad que es activada por un sensor de movimiento. Un sensor de movimiento infrarrojo pasivo (PIR) supervisa de forma continua para cualquier movimiento en su campo de visión. Cuando se detecta
Automatización casera pequeño con Edison de Intel y Microsoft Azure

Automatización casera pequeño con Edison de Intel y Microsoft Azure

IoT está parado para "Internet de las cosas" que es un desarrollo de la Internet donde está prevista para que todos los dispositivos tener conectividad de red, así que les permite enviar y recibir datos. Y, más importante aún, identificar los th