Introducción a la robótica (8 / 10 paso)

Paso 8: Diseño de Software

El rover es un obstáculo, evitando robot que poco a poco para evitar un obstáculo cercano y congelar si es completamente incapaz de moverse, que debe prevenir daños. El software para el robot es una básica máquina de estado, que de control claro y sencillo. Después de inicializar las direcciones GPIO, continuamente se detectará el Edison, procesar y reaccionar sin cesar. En este caso, la salida única del robot es un cambio en la dirección del motor. Los sensores IR tienen salidas de limpieza digitales que son alta o baja, lo que los convierte en simples eventos que fácilmente pueden ser almacenados como un estado booleano. Debido a la naturaleza de corto alcance de los sensores, el software del robot es meramente reactivo a eventos externos. Si está equipado con un IR o telémetro ultrasónico, el robot sería capaz de determinar proactivamente una ruta, que haría más interesante comportamiento. Cuando empezar, sugiero trabajar con un solo tipo de sensor y aprender cómo puede procesar los datos de él. Una vez que estés a gusto trabajando con un solo tipo de entrada, poco a poco añadir más sensores y prueba de ellos en el camino. Este enfoque es mucho más metódico, pero le ahorrará el dolor de cabeza de tratar de integrar muchos sensores diferentes al mismo tiempo, que puede ser difícil de depurar.

INTEL Introducción a robótica Demo #define PIN_MOTOR1IN1 4 #define PIN_MOTOR1IN2 5 #define PIN_MOTOR1PWM 6 #define PIN_MOTOR2IN1 7 #define PIN_MOTOR2IN2 8 #define PIN_MOTOR2PWM 9 #define PIN_SENSOR_FRONT_L 0 / / delantera izquierda #define PIN_SENSOR_FRONT_R 1 #define PIN_SENSOR_REAR_L 2 / / trasera izquierda #define PIN_SENSOR_REAR_R 3 #define STATE_TURNING_L 0 #define STATE_TURNING_R 1 #define STATE_FORWARD 2 #define STATE_REVERSE 3 #define boolean STATE_IDLE 4 sensorFrontLActive = false; Boolean sensorFrontRActive = false; Boolean sensorRearLActive = false; Boolean sensorRearRActive = false; driveTime int = 4000; curTime larga sin signo milisegundos = 0; sin firmar largo lastTime = 0; int currentState = STATE_FORWARD; int lastState = STATE_IDLE; motorSpeed bytes = 64; máximo es de 255 void setup() {pinMode (PIN_MOTOR1IN1, salida) pinMode (PIN_MOTOR1IN2, salida) pinMode (PIN_MOTOR2IN1, salida); pinMode (PIN_MOTOR2IN2, salida); pinMode (PIN_SENSOR_FRONT_L, entrada); pinMode (PIN_SENSOR_FRONT_R, entrada); pinMode (PIN_SENSOR_REAR_L, entrada); pinMode (PIN_SENSOR_REAR_R, entrada);} / / rutina de configuración final void loop() {getSensorInput(); / / registro de la cruda situación de la currentState de detectores IR = processSensorData(); / / decidir que estado entrar / * curTime = millis(); / / pequeña prueba de rutina para funcionar a través de los Estados si (curTime - lastTime > driveTime) {lastTime = curTime; currentState ++; if (currentState > 4) {currentState = 0;}} * / Si (currentState! = lastState) {/ / sólo actualizar el controlador, si algo ha cambiado lastState = currentState; switch (currentState) {caso STATE_FORWARD: moveForward(); break; caso STATE_REVERSE: moveReverse(); break; caso STATE_IDLE: idle(); break; caso STATE_TURNING_L: moveLeft(); break; caso STATE_TURNING_R: moveRight(); break; default: / / idle si processSensorData() hizo un idle() error; break;} / / fin SWITCHCASE} / / fin IF currentState} / / fin principal bucle void getSensorInput() {sensorFrontLActive =! digitalRead(PIN_SENSOR_FRONT_L); / / guardar la lógica no estado de la digitalRead() porque los sensores están activos BAJA sensorFrontRActive =! digitalRead(PIN_SENSOR_FRONT_R); sensorRearLActive =! digitalRead(PIN_SENSOR_REAR_L); sensorRearRActive =! digitalRead(PIN_SENSOR_REAR_R); } / / FIN función getSensorInput() int processSensorData() {//If allí no es entrada, sólo avanzar si (! sensorFrontLActive & &! sensorFrontRActive & &! sensorRearLActive & &! sensorRearRActive) {vuelta STATE_FORWARD;} / y si algo está delante del robot, si (sensorFrontLActive & & sensorFrontRActive) {vuelta STATE_REVERSE;} //If algo está a la derecha mientras se mueve hacia adelante, girar a la izquierda si (currentState == STATE_FORWARD & & sensorFrontRActive) {vuelta STATE_TURNING_L;} //If algo está a la izquierda mientras se mueve hacia adelante , vuelta derecha if (currentState == STATE_FORWARD & & sensorFrontLActive) {vuelta STATE_TURNING_R;} //If algo está a la derecha mientras se mueve en reversa, girar a la derecha si (currentState == STATE_REVERSE & & sensorFrontLActive) {vuelta STATE_TURNING_R;} //If algo es sólo el de la izquierda mientras se mueve en reversa, girar a la izquierda si (currentState == STATE_REVERSE & & sensorFrontLActive) {vuelta STATE_TURNING_L;} //If todos los sensores están activos , inactivo en lugar de si (sensorFrontLActive & & sensorFrontRActive & & sensorRearLActive & & sensorRearRActive) {vuelta STATE_IDLE;} / * acelerar (no implementado) si no se detecta ningún obstáculo, por defecto a una velocidad lenta si algo es detectado! Si algo está delante del robot mientras marcha atrás, acelera! Si algo se detecta detrás del robot, la velocidad de
! * / < Br >} / / END FUNCTION processSensorData() void moveForward() {/ / izquierda = hacia delante, derecha = inversa digitalWrite (PIN_MOTOR1IN1 alta); digitalWrite (PIN_MOTOR1IN2, bajo); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, alto); digitalWrite (PIN_MOTOR2IN2, bajo); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void moveReverse() {/ / izquierda = atrás, derecha = adelante digitalWrite (PIN_MOTOR1IN1, LOW); digitalWrite (PIN_MOTOR1IN2, alto); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, bajo); digitalWrite (PIN_MOTOR2IN2 ALTO); analogWrite (PIN_MOTOR2PWM, motorSpeed); } void moveLeft() {/ / izquierda = atrás, derecha = inversa digitalWrite (PIN_MOTOR1IN1, bajo); digitalWrite (PIN_MOTOR1IN2 alta); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, alto); digitalWrite (PIN_MOTOR2IN2, bajo); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void moveRight() {/ / izquierda = hacia delante, derecha = adelante digitalWrite (PIN_MOTOR1IN1, alto); digitalWrite (PIN_MOTOR1IN2, bajo); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, bajo); digitalWrite (PIN_MOTOR2IN2 alta); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void idle() {/ motor entradas baja digitalWrite (PIN_MOTOR1IN1 ALTO); digitalWrite (PIN_MOTOR1IN2, bajo); digitalWrite (PIN_MOTOR1PWM, bajo); digitalWrite (PIN_MOTOR2IN1, alto); digitalWrite (PIN_MOTOR2IN2, bajo); digitalWrite (PIN_MOTOR2PWM, bajo); }

Artículos Relacionados

Introducción a la robótica básica

Introducción a la robótica básica

Este instructivo está diseñado para ayudar a construir un robot básico que se puede comprar como kit o montar a través de código abierto. Puede obtener el kit mediante el proyecto de código abierto de materiales en nuestro sitio web, http://www.build
Divulgación de la robótica para los estudiantes de la escuela primaria

Divulgación de la robótica para los estudiantes de la escuela primaria

Hola, mundo! Somos un equipo de robótica de la high School secundaria de Madison, Nueva Jersey. Nuestra gama de miembros en edad de 13 a 18 (jueces, tome nota!). Competimos en el anual Primer desafío de la tecnología. Cada año, nuestra escuela tiene
HackerBoxes 0001: Árbol de Navidad LED 3D coche inteligente robótica, NodeMCU,

HackerBoxes 0001: Árbol de Navidad LED 3D coche inteligente robótica, NodeMCU,

Este instructable comparte los fundamentos de trabajar con HackerBoxes #0001. HackerBoxes es el servicio de caja de suscripción mensual para aficionados de electrónica, fabricantes y los hackers. Si desea recibir un cuadro como este derecho a su buzó
Proyecto de ciencia de mano robótica

Proyecto de ciencia de mano robótica

Hola,Una pequeña introducción primera. Ser voluntario como profesor de Ciencias en una escuela primaria local, y mi objetivo es inculcar un amor por el aprendizaje en cada niño. Usted puede ver mi blog aquí. Proyectos de Kto6Science .Ahora, a la mano
Protoboard de robótica simple

Protoboard de robótica simple

Este Instructable le muestra cómo construir un tablero simple y barato para experimentos de robótica. Es un compañero al barato, fácil de robótica para el Non-Programmer. Aquí aprenderemos cómo construir un robot de Babuino para experimentos con el e
Accionado por aire suave pinza robótica

Accionado por aire suave pinza robótica

actualización (24/01/2014): Nota importante sobre materiales de impresora 3D añadido a continuación. Leer antes de intentar este proyecto!Actualización (22/11/2013): mucho más barata opción agregada a la lista de materiales para sustituir las bombill
Guía de robótica

Guía de robótica

Tal vez no somos conscientes, pero la robótica es una de las muchas ciencias, que son más importantes en desarrollo del mundo de hoy. Para todo aquel que esté interesado en es muy importante conocer su concepto, historia, términos, etc.. Precios de h
Plataforma robótica experimental

Plataforma robótica experimental

¡ Hola! Mi nombre es Andrés y soy un estudiante de Ciencias de la computación.Empecé a trabajar en este robot para ambos divertirse y como parte de mi tesis de licenciatura.Todo comenzó cuando compré un kit de la robusteza de un sitio llamado Conrad:
Barato, fácil de robótica para el programador no

Barato, fácil de robótica para el programador no

Hey robótica-programador-quiere a abejas! ¿Cansado de tratar de hacen varios ambientes sólo para encontrar que hay una curva de aprendizaje entre usted y esos robot fresco trucos a tus amigos geek? ¿Los kits comerciales son demasiado caros? Entonces
Cómo llegar en robótica, programación, Arduino electrónica

Cómo llegar en robótica, programación, Arduino electrónica

Integrar todos los campos STEM de robótica y hacer siempre cada cabrito loco. Puede ayudar a los niños a obtener experiencia práctica en mecánica, electrónica, Ciencias de sistema y equipo de control.Sin embargo, todos los robots en el mercado parece
Cómo construir una mano robótica con retroalimentación háptica

Cómo construir una mano robótica con retroalimentación háptica

para Feria de Ciencias este año, sentí como algo en vez de hacer un experimento. Todo lo que necesitaba hacer era mirar alrededor Instructables para una idea de proyecto. Me inspiré por mano robótica de njkl44 desde que recuerda mucho de cosas de pel
Proyecto de robótica DIY - Bernabé-Bot 2.0

Proyecto de robótica DIY - Bernabé-Bot 2.0

¿QUÉ ES BERNABÉ-BOT?Bernabé-Bot es una introducción al kit de robótica (y clase) que proporciona una oportunidad para que los estudiantes aprendan ciencia, tecnología, ingeniería, arte y matemáticas de una manera atractiva y divertida. A través de es
Robótica con un presupuesto

Robótica con un presupuesto

este Instructable le mostrará cómo crear una diversión, sin embargo fácil de construir robots con materiales que cuestan menos de cincuenta dólares.Este es un gran proyecto para 4H, Boyscouts o como una introducción aula robótica.Te enseñaremos cómo
CONSIGUE tu BOT en: Robótica Robot Hackathon Demo

CONSIGUE tu BOT en: Robótica Robot Hackathon Demo

CONSIGUE tu BOT en: Robótica Robot Hackathon DemoPaso 1: Materiales que necesitaráAquí están todos los materiales que usted necesitará:1. Arduino Uno junta2. tablero de pan3. los cables4. LED luces5. AC Motor6. baterías7. Sensor de proximidad8. pieza