Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tutorial SumoBOTCBR

1,557 views

Published on

Manual para la construcción y programación de un robot de minisumo. Con enlaces para la descarga de programas, diseño para imprimir en 3D,....

Published in: Education
  • Be the first to comment

Tutorial SumoBOTCBR

  1. 1. 1Departamento de Tecnología IES Valentín Turienzo
  2. 2. 2Departamento de Tecnología IES Valentín Turienzo Introducción. SumoBotCBR es un robot de la categoría de minisumo que ha sido diseñado por alumn@s de Tecnología Industrial de 1º de Bachillerato del IES Valentín Turienzo de Colindres, Cantabria. Las principales premisas en su diseño fueron las siguientes: .- Sencillez de montaje, utilizando el menor número de tuercas, tornillos, adhesivos,… .- Menor coste de los componentes y material y facilidad en su adquisición. .- Control realizado con Arduino. .- Chasis impreso en 3D y diseñado con SketchUp. .- Homologado para la categoría de minisumo. (10 x 10 cm) y menos de 500 gr. El objetivo principal de este proyecto es que cualquier persona que quiera construir un robot de minisumo, ya sea profesor, estudiante, aficionado,… lo pueda hacer en muy poco tiempo, con las mínimas complicaciones y el mínimo coste. Descarga los archivos .stl para imprimir aquí. Descarga los archivos .skp por si quieres modificar y personalizar en robot.
  3. 3. 3Departamento de Tecnología IES Valentín Turienzo Material necesario Listado de componentes SumoBotCBR Artículo Imagen 1 x Arduino UNO 1 x Shield L293 control de motores 2 x Motorreductor DC120 3 x Módulo seguidor IR Sensor TCRT5000 1 x Sensor de ultrasonidos HC-SR04 40 x Cables dupot hembra-hembra 20 cm 1 x Conector y pila 9 v Chasis y cubierta impreso en 3D Ruedas impresas en 3D Cinta "tapafugas" para las ruedas El coste total aproximado del robot completo no supera los 45 €.
  4. 4. 4Departamento de Tecnología IES Valentín Turienzo Montaje y Conexiones. MONTAJE: Empezaremos montando los dos motorreductores CC en el chasis utilizando dos tornillos de 3 x 25 mm de cabeza hexagonal por cada motor. Previamente se deben realizar las conexiones de los cables a los terminales del motor. Si el motorreductor tuviera doble eje sería necesario cortar uno de los ejes. IMPORTANTE NO APRETAR DEMASIADO LOS TORNILLOS. Puede llegar a presionar la reductora del motor y hacer que este se quede trabado. A continuación colocaremos los tres sensores TCRT5000 y el sensor de ultrasonidos HC-SR04 En un primer momento su alojamiento está diseñado para colocarlos simplemente por presión, pero se podría sustituir esta sujeción por tornillos de 2,5 x 6 mm., o utilizar una gota de termocola. Después colocaremos los cables dupot en todos los terminales de los sensores. Tornillos 3x25 Los motorreductores deben ir colocados como muestra la imagen.
  5. 5. 5Departamento de Tecnología IES Valentín Turienzo Una vez colocados los cables se colocará la tapa haciendo pasar estos por los orificios practicados para tal fin. Seguidamente colocaremos la Arduino UNO sobre la tapa sujetándola con tres tornillos, y sobre ella colocaremos la Shield L293 en la parte superior, tal y como se ve en la foto. IMPORTANTE La Shield de motores L293 no tienen soldados los pines A0-5 (donde van conectados los sensores) por lo que es necesario soldarlos previamente.
  6. 6. 6Departamento de Tecnología IES Valentín Turienzo CONEXIONADO: El siguiente paso consiste en conectar los motorreductores a la Shield. Visto el robot desde arriba, el motor Izquierdo (MI) lo conectaremos a los terminales M2 y el motor Derecho (MD) a los terminales M1. *Cuando se realice el Test de motores habrá que revisar su polaridad. Los tres sensores TCRT5000 y el sensor de Ultrasonidos HC-SR04, los vamos a llamar de la siguiente manera: Sensor Derecho (SD). Sensor Trasero (ST). Sensor Ultrasonidos (SUS) Sensor Izquierdo (SI).
  7. 7. 7Departamento de Tecnología IES Valentín Turienzo Su conexión a la shield será: Sensor Pines de la Shield Sensor Trasero (ST) A1 Sensor Derecho (SD) A2 Sensor Izquierdo (SI) A3 Sensor Ultrasonidos TRIG A4 ECHO A5 Este será el aspecto final de nuestro SumoBotCBR;
  8. 8. 8Departamento de Tecnología IES Valentín Turienzo IMPORTANTE** No todos los sensores denominados TCRT5000 que nos encontramos en el mercado son iguales, tienen ligeras variaciones de tamaño y sobre todo de sensibilidad. Por ese motivo se ha diseñado otra carcasa para el SumoBOTCBR en la cual los sensores van en la parte superior. En un principio no parece la colocación ideal, pero su montaje es más sencillo y funcionan correctamente. Los archivos .STL de esta nueva configuración son: ChasisSumoV9.3 y CubiertaV5.2.
  9. 9. 9Departamento de Tecnología IES Valentín Turienzo PROGRAMACIÓN Antes de empezar con la programación, debemos instalar la librería AFMotor.h. y la librería Ultrasonic.h Podemos realizar una de las siguientes opciones: .- OPCIÓN 1: Abrimos el IDE de Arduino, Pinchamos en Sketch, Importar en librería y finalmente en Add Library. En este punto añadiríamos las librerías AFMotor.h y Ultrasonic.h (la carpeta entera en formato ZIP tal y como se ha descargado). .- OPCIÓN 2: Si la opción anterior nos diera algún problema, podemos meter directamente las carpetas descomprimidas en C:archivos de programa (x86)arduinolibraries
  10. 10. 10Departamento de Tecnología IES Valentín Turienzo Sketch 1. Test motor DERECHO Vamos a comenzar con la programación y para ello realizaremos un sencillo programa para controlar el motor DERECHO (MD). Haremos que gire hacia delante durante 1 seg, que se pare 2 seg y que giren hacia atrás 1 seg. Con esta práctica se pretende comprobar el correcto conexionado del motorreductor, conocer su sentido de giro y su control. El Sketch correspondiente sería este: //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL MOTOR REALIZADOS ADELANTE (1seg), PARO (2seg.) y ATRAS (2 seg.) #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado } void loop() { motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay(1000); // Se mantien durante 1 s.
  11. 11. 11Departamento de Tecnología IES Valentín Turienzo motorMD.run(FORWARD); // Motor Derecho hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. delay(2000); // Se mantien durante 2 s. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay(2000); // Se mantien durante 2 s. } *Recuerda, Si el motor DERECHO no girara en el sentido que le indicamos debemos cambiar su polaridad en la Shield. Ejercicio: Realiza los cambios necesarios para Testear el motor IZQUIERDO y comprobar su sentido de giro Sketch 2. Movimientos Básicos del SumoBotCBR Los movimientos básicos del SumoBotCBR son los siguientes; Adelante, Paro, Atrás, Giro Derecha, Giro Izquierda. Ahora vamos a trabajar con los dos motores a la vez. Para realizar los giros debemos parar el motor que esté en el sentido que queramos girar, por ejemplo, si queremos girar a la izquierda debemos parar el motor izquierdo y si queremos girar a la derecha, debemos parar el motor derecho. //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL ROBOT: ADELANTE, PARO, GIRO IZQUIERDA, GIRO DERECHA, ATRAS.
  12. 12. 12Departamento de Tecnología IES Valentín Turienzo #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. delay (1000);
  13. 13. 13Departamento de Tecnología IES Valentín Turienzo motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay (1000); } *Podemos hacer otro tipo de giros más suaves sin necesidad de parar el motor del interior. En lugar de bajar a 0 su setSpeed podemos variar su PWM entre 20 y 100, siempre más bajo que la velocidad del motor exterior. HAZ PRUEBAS. Sketch 3. Movimientos Básicos con SUBRUTINAS del SumoBotCBR Continuamos con nuestra programación y para ello vamos a introducir el concepto de SUBRUTINAS. Las subrutinas son unos «miniprogramas», unas funciones, que se ejecutan al ser llamadas desde el programa principal. La declaración de funciones, no va ni en el SETUP, ni en el LOOP, va de forma independiente entre los dos. En esta actividad crearemos 5 subrutinas ADELANTE, ATRAS, PARO, GIRODERECHA y GIROIZQUIERDA. El Sketch correspondiente sería este: //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL ROBOT REALIZADOS CON SUBRUTINAS ADELANTE, PARO, GIRO IZQUIERDA, GIRO DERECHA, ATRAS. #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
  14. 14. 14Departamento de Tecnología IES Valentín Turienzo motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { ADELANTE(); delay (1000); ATRAS(); delay (1000); PARO(); delay (1000); GIRODERECHA(); delay (1000); GIROIZQUIERDA(); delay (1000); } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA.
  15. 15. 15Departamento de Tecnología IES Valentín Turienzo motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 } Ejercicio: Completa el programa realizando SUBRUTINAS de giros más suaves hacia DERECHA e IZQUIERDA cambiando el PWM del motor que queda en el interior. Ejercicio: Utilizando las SUBRUTINAS, realiza un programa en el que tu robot describa un cuadrado perfecto, llegando al mismo punto de la salida. Ya hemos visto cómo controlar los motores DERECHOS e IZQUIERDOS del SumoBotCBR, ahora vamos a ver cómo hacerlo girar aún más rápido. Se pueden realizar tres tipos de giros, por llamarlos de alguna manera, lentos, suaves y rápidos. Los “lentos” consistirán en dejar parados los motores del interior del giro haciendo avanzar los del exterior, para los “suaves” cambiamos el PWM del motor interior a valores más pequeños que el exterior. Y los “muy rápidos” haciendo que los motores del interior giren hacia atrás mientras que los del exterior van hacia adelante. Ver cuadro siguiente: CASOS DE GIROS STOP GIRO A IZQUIERDAS LENTO GIRO A IZQUIERDAS RÁPIDOGIRO A IZQUIERDAS SUAVE
  16. 16. 16Departamento de Tecnología IES Valentín Turienzo Sketch 4: Sensor Infrarrojos. En esta práctica vamos a conocer el funcionamiento de los sensores IR. Más concretamente el sensor infrarrojo TCRT5000. Un sensor infrarrojo es un dispositivo optoelectrónico capaz de medir la radiación electromagnética infrarroja de los cuerpos en su campo de visión. El sensor que nos ocupa está compuesto por un diodo emisor de luz y un fototransistor. Si el fototransistor recibe luz da una señal de cero, si no recibe luz da un 1. Características:  Dimensiones: 10mm x 40mm  Voltaje de operación: 4.5V a 5.5V  Distancia de operación: Desde 1mm hasta 12mm  Sensor TCRT5000  Salida digital  Posee filtro bloqueador de luz de día  Voltaje de trabajo: 5VDC  Posee 3 pines: VCC (+), GND (-), OUT (Vout)  Si detecta un objeto color claro (ej. línea blanca) Vout >4 V  Si no detecta nada (ej. línea negra) Vout =0 V Más información de los sensores IR GIRO A DERECHAS RÁPIDO STOP GIRO A DERECHAS LENTO GIRO A DERECHAS SUAVE +5V GND PIN A1… OJO!!!!! No todos los sensores tienen la misma configuración de los pines. Comprobar antes de realizar la conexión.
  17. 17. 17Departamento de Tecnología IES Valentín Turienzo Para conocer los valores del sensor IR vamos a realizar un sencillo Sketch utilizando el Monitor Serial. De esta manera observamos que cuando el sensor detecta línea negra su valor es 1 y cuando detecta blanco su valor es 0. (En el propio sensor hay un led rojo que se enciende cuando marca 0). Ejercicio: Escribe un nuevo código para comprobar el valor de los 3 sensores con un Serial.print de tal forma que vaya escribiendo que sensor es y su valor, por ejemplo: El valor de SI es 0 El valor de SD es 1 El valor de ST es 1… int IR = A1; void setup() { Serial.begin (9600); pinMode(IR, INPUT); } void loop() { IR = digitalRead (A1); Serial.print("El valor del IR es "); Serial.println (IR); delay(1000); }
  18. 18. 18Departamento de Tecnología IES Valentín Turienzo Código para lectura de color (Blanco o Negro) para testear los sensores. //SumoBotCBR // By CantabRobots // TEST DE Sensores // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //TEST DE SENSORES int SI=A3; int SD=A2; int ST=A1; void setup() { Serial.begin(9600); pinMode(SD,INPUT); pinMode(SI,INPUT); pinMode(ST,INPUT); } void loop() { int valorSD=digitalRead(A2); if(valorSD==1){ Serial.println("valorSD es blanco"); }else{ Serial.println("valorSD es negro"); } delay(1000); int valorSI=digitalRead(A3); if(valorSI==1){ Serial.println("valorSI es blanco"); }else{ Serial.println("valorSI es negro"); } delay(1000); int valorST=digitalRead(A1); if(valorST==1){ Serial.println("valorST es blanco"); }else{ Serial.println("valorST es negro"); } delay(1000); }
  19. 19. 19Departamento de Tecnología IES Valentín Turienzo Sketch 5: Retroceder y girar al llegar al límite del Dohjo El Dohjo es el tablero sobre el que se hacen las competiciones de sumo y minisumo. Tienen un metro de diámetro y generalmente son de fondo negro, con una línea blanca de 5 cm que los rodea y de la que no se puede salir el robot. En esta práctica vamos a utilizar los dos sensores IR delanteros para que cuando el SumoBotCBR detecte la línea blanca retroceda 1 segundo, gire y continúe avanzando hasta encontrar otra vez la línea blanca. //SumoBotCBR // By CantabRobots // Sumo básico DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS DENTRO DEL DOHJO. #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 int SI=A3; int SD=A2; // Sólo se van a utilizar los sensores delanteros. void setup() { pinMode(SD,INPUT); pinMode(SI,INPUT);
  20. 20. 20Departamento de Tecnología IES Valentín Turienzo motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { int SI = digitalRead(A3); int SD = digitalRead(A2); if ((SI==HIGH) && (SD==HIGH)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta blanco ATRAS(); // Hacia atrás. delay (2000); GIRODERECHA(); delay (750); } else if ((SI==LOW) && (SD==HIGH)){ //Si el Sensor SI detecta negro y el Sensor SD detecta blanco ATRAS(); // Hacia atrás. delay (2000); GIRODERECHA(); delay (750); } else if ((SI==HIGH) && (SD==LOW)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta negro ATRAS(); // Hacia atras. delay (2000); GIROIZQUIERDA();
  21. 21. 21Departamento de Tecnología IES Valentín Turienzo delay (1000); } else{ // Si no hace nada de lo anterior ADELANTE(); // Paro. } } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. }
  22. 22. 22Departamento de Tecnología IES Valentín Turienzo void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 }
  23. 23. 23Departamento de Tecnología IES Valentín Turienzo Sketch 6: Sensor de Ultrasonidos HC-SR04 En esta práctica vamos a conocer el funcionamiento de los sensores de Ultrasonidos HC-SR04. Este tipo de sensor emite ultrasonidos por el PIN TRIG los cuales, al encontrar un objeto, rebotan y es el PIN ECHO el que recibe la onda. En función del tiempo entre el pulso emitido y el recibido se puede calcular la distancia del objeto. Recordad que la velocidad del sonido es 340 m/s. Estos sensores tienen un rango de acción de 2 cm hasta 3 m con una precisión de 3 mm. La librería Ultrasonic.h facilita mucho la programación del sensor de Ultrasonidos. Para su instalación procederemos como se explicó anteriormente. Vamos a realizar un sencillo programa para leer los valores de distancia utilizando el puerto serie.
  24. 24. 24Departamento de Tecnología IES Valentín Turienzo //SumoBotCBR // By CantabRobots // TEST DE Ultrasonidos de SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //Test del sensor de Ultrasonidos. #include <Ultrasonic.h> Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN) void setup() { Serial.begin(9600); } void loop() { Serial.print(ultrasonic.Ranging(CM)); // CM or INC Serial.println(" cm" ); delay(1000); } Al abrir el Monitor serie tendríamos que tener lecturas semejantes a estas.
  25. 25. 25Departamento de Tecnología IES Valentín Turienzo Sketch 7: Búsqueda y ataque Con este programa el robot girará sobre sí mismo buscando al oponente y cuando este esté a menos de 30 cm atacará. //SumoBotCBR // By CantabRobots // BUSQUEDA Y ATAQUE de SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //BUSQUEDA Y ATAQUE. #include <AFMotor.h> #include <Ultrasonic.h> Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN) AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 int SI=A3; int SD=A2; int ST=A1; void setup() { pinMode(SD,INPUT); pinMode(SI,INPUT); pinMode(ST,INPUT); pinMode(A4, OUTPUT); pinMode(A5, INPUT); motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { if (ultrasonic.Ranging(CM) < 30){ // Si hay un objeto a menos de 30 cm ir hacia adelante ADELANTE(); }
  26. 26. 26Departamento de Tecnología IES Valentín Turienzo else{ // Si no hace nada de lo anterior GIRODERECHA(); // Gira a derecha } } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 }
  27. 27. 27Departamento de Tecnología IES Valentín Turienzo Ejercicio FINAL: Con todo lo visto hasta este momento, dispones de suficiente información como para hacer tu propio programa completo de un robot de sumo que busque a su oponente, ataque y que se mueva dentro de los límites del Dohjo sin salirse. Cambia las velocidades de los motores, los tipos de giros, las velocidades en los giros, sus sentidos,… diseña una estrategia,… En cantabRobots.es puedes descargar toda la información del SumoBotCBR. Pincha aquí. Las carpetas de documentos son las siguientes: .- Diseño. Archivos .skp y .stl .- Librería. .- Documentación. PDF con los datasheets de driver, sensores… .- Todos los sketches del manual.

×