Advertisement
Villalba2006

POST_67

Nov 29th, 2016
1,490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.08 KB | None | 0 0
  1. /*  TITULO: Robot Miniskybot 2.0 controlado a través de Bluetooth
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.  
  13.     Con este programa controlamos el movimiento del Robot Miniskybot 2.0 mediante Bluetooth,
  14.     a través de la aplicación para Smartphones con S.O Android llamada "Wise HC-06 Carrinho Bluetooth",
  15.     que nos podemos descargar directamente de la Play Store de nuestro Smarthpone.
  16.     Al pulsar cada una de las flechas de la aplicación, el robot se movera en una dirección concreta,
  17.     a excepción de la flecha hacia abajo, puesto que si el robot está en movimiento, al pulsarla el
  18.     robot se para, y si el robot esta parado, al pulsarla se movera marcha atrás.
  19.    
  20.  
  21.     ESQUEMA DE CONEXION
  22.    
  23.                                       +-----+
  24.          +----[PWR]-------------------| USB |--+
  25.          |                            +-----+  |
  26.          |         GND/RST2  [ ][ ]            |
  27.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  28.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  29.          |                             AREF[ ] |
  30.          |                              GND[ ] |
  31.          | [ ]N/C                    SCK/13[ ] |  
  32.          | [ ]IOREF                 MISO/12[ ] |  
  33.          | [ ]RST                   MOSI/11[ ]~|   Pin RX del Módulo Bluetooth HC-06
  34.          | [ ]3V3    +---+               10[ ]~|   Pin TX del Módulo Bluetooth HC-06
  35.          | [ ]5v    -| A |-               9[ ]~|  
  36.          | [ ]GND   -| R |-               8[ ] |  
  37.          | [ ]GND   -| D |-                    |
  38.          | [ ]Vin   -| U |-               7[ ] |  
  39.          |          -| I |-               6[ ]~|  
  40.          | [ ]A0    -| N |-               5[ ]~|   Cable blanco (Señal) del SERVO_IZQUIERDO
  41.          | [ ]A1    -| O |-               4[ ] |    
  42.          | [ ]A2     +---+           INT1/3[ ]~|   Cable blanco (Señal) del SERVO_DERECHO
  43.          | [ ]A3                     INT0/2[ ] |  
  44.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  45.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  46.          |            [ ] [ ] [ ]              |
  47.          |  UNO_R3    GND MOSI 5V  ____________/
  48.           \_______________________/
  49.  
  50.   NOTAS:  
  51.  
  52.     - Todas las alimentaciones (cables rojos) y las masas (cables negros) de los servos van
  53.       conectadas a +5V y GND respectivamente.
  54.     - La alimentación y la masa del Módulo Bluetooth HC-06 van conectadas directamente a +5V y
  55.       GND respectivamente.
  56.     - Las conexiones están marcadas soble la placa de Arduino UNO, aunque luego conectemos
  57.       directamente sobre los terminales de 3 pines (GVS) del sensor shield V4.0 que correspondan
  58.       a cada pin digital de Arduino que estemos utilizando.
  59.      
  60. */
  61.  
  62.   // Incluimos la librería para la comunicación serie con Arduino
  63.   #include "SoftwareSerial.h"
  64.   // Incluimos la librería para el funcionamiento y control de los servos
  65.   #include <Servo.h>
  66.    
  67.   // Declaramos el objeto BT1 para la comunicación serie con el módulo Bluetooth HC-06
  68.   // Utilizamos el pin 10 para recibir y el 11 para transmitir hacia el módulo Bluetooth HC-06
  69.   SoftwareSerial BT1(10,11); // RX, TX para Arduino
  70.  
  71.   char cadena[5]; // Creamos un array de caracteres de 5 posiciones para guardar el código de cada flecha
  72.   char dato; // Variable para guardar el carácter
  73.   int i=0; // Tamaño actual del array
  74.   int movimiento=0; // Variable para controlar si el robot se mueve o está parado (inicialmente parado).
  75.  
  76.   // Constantes para el motor derecho
  77.   const int SERVO_DERECHO = 3;  // PIN PWM donde conecto el servomotor derecho
  78.   const int SERVO_DERECHO_ADELANTE = 0;    // Mueve el motor derecho hacia adelante
  79.   const int SERVO_DERECHO_ATRAS = 180;  // Mueve el motor derecho hacia atrás
  80.   const int SERVO_DERECHO_PARA = 90; // Para el motor derecho
  81.  
  82.   // Constantes para el motor izquierdo (invertidas porque se monta el servo al revés)
  83.   const int SERVO_IZQUIERDO = 5;  // PIN PWM donde conecto el servomotor izquierdo
  84.   const int SERVO_IZQUIERDO_ADELANTE = 180;  // Mueve el motor izquierdo hacia adelante
  85.   const int SERVO_IZQUIERDO_ATRAS = 0;    // Mueve el motor izquierdo hacia atrás
  86.   const int SERVO_IZQUIERDO_PARA = 90; // Para el motor izquierdo
  87.    
  88.  
  89.   // Declaramos los dos objetos de tipo servo
  90.   Servo motor_derecho;  // Motor derecho
  91.   Servo motor_izquierdo;  // Motor izquierdo
  92.  
  93.   // Función que manda AVANZAR al robot
  94.   void robot_avanza()
  95.   {
  96.     motor_derecho.write(SERVO_DERECHO_ATRAS);
  97.     motor_izquierdo.write(SERVO_IZQUIERDO_ATRAS);
  98.   }
  99.  
  100.   // Función que manda RETROCEDER al robot
  101.   void robot_retrocede()
  102.   {
  103.     motor_derecho.write(SERVO_DERECHO_ADELANTE);
  104.     motor_izquierdo.write(SERVO_IZQUIERDO_ADELANTE);
  105.   }
  106.  
  107.   // Función que manda PARARSE al robot
  108.   void robot_para()
  109.   {
  110.     motor_derecho.write(SERVO_DERECHO_PARA);
  111.     motor_izquierdo.write(SERVO_IZQUIERDO_PARA);
  112.   }
  113.  
  114.   // Función que hace que gire el robot a la IZQUIERDA
  115.   void robot_izquierda()
  116.   {
  117.     motor_derecho.write(SERVO_DERECHO_ATRAS);
  118.     motor_izquierdo.write(SERVO_IZQUIERDO_ADELANTE);
  119.   }
  120.  
  121.   // Función que hace que gire el robot a la DERECHA
  122.   void robot_derecha()
  123.   {
  124.     motor_derecho.write(SERVO_DERECHO_ADELANTE);
  125.     motor_izquierdo.write(SERVO_IZQUIERDO_ATRAS);
  126.   }
  127.  
  128.  
  129.   void setup()
  130.   {  
  131.     // Configuramos el pin de señal de los dos servos
  132.     motor_derecho.attach(SERVO_DERECHO); // Servo derecho
  133.     motor_izquierdo.attach(SERVO_IZQUIERDO); // Servo izquierdo
  134.    
  135.     // Iniciamos la comunicación serie con el módulo Bluetooth HC-06
  136.     BT1.begin(9600); // Aquí hay que poner la velocidad que tengamos configurada en nuestro HC-06
  137.   }
  138.  
  139.   void loop()
  140.   {
  141.     // Si hay disponible comunicación con el módulo Bluetooth HC-06...
  142.     if (BT1.available())
  143.     {    
  144.       dato = BT1.read(); // Leemos un carácter y lo guardamos en dato
  145.       cadena[i++]=dato; // Vamos acumulando cada carácter (dato) recibido en el array "cadena"
  146.    
  147.     // Cuando hemos recibido una cadena completa (4 caracteres).
  148.     if(i==4)
  149.     {
  150.       // Cuando pulsamos la flecha DERECHA de la aplicación se recibe la cadena "D1S0"
  151.       if(strstr(cadena,"D1S0")!=0)
  152.       {
  153.         movimiento = 1; // El robot comienza a moverse
  154.         robot_derecha(); // El robot gira hacia la DERECHA
  155.       }
  156.      
  157.       // Cuando pulsamos la flecha IZQUIERDA de la aplicación se recibe la cadena "E1S0"
  158.       if(strstr(cadena,"E1S0")!=0)
  159.       {
  160.         movimiento = 1; // El robot comienza a moverse
  161.         robot_izquierda(); // El robot gira hacia la IZQUIERDA
  162.       }
  163.      
  164.       // Cuando pulsamos la flecha ARRIBA de la aplicación se recibe la cadena "F1S0"
  165.       if(strstr(cadena,"F1S0")!=0)
  166.       {
  167.         movimiento = 1; // El robot comienza a moverse
  168.         robot_avanza(); // El robot se mueve hacia ADELANTE
  169.       }
  170.      
  171.       // Cuando pulsamos la flecha ABAJO y el coche está PARADO se recibe la cadena "T1S0"
  172.       if(strstr(cadena,"T1S0")!=0 && movimiento == 0)
  173.       {
  174.         movimiento = 1; // El robot comienza a moverse
  175.         robot_retrocede();  // El robot se mueve hacia ATRÁS
  176.         clean(); // Ejecutamos la función clean() para limpiar el array
  177.       }
  178.    
  179.       // Cuando pulsamos la flecha ABAJO y el coche está EN MOVIMIENTO se recibe la cadena "T1S0"
  180.       if(strstr(cadena,"T1S0")!=0 && movimiento == 1)
  181.       {
  182.         movimiento = 0; // El robot permanece parado
  183.         robot_para(); // El robot se PARA
  184.         clean(); // Ejecutamos la función clean() para limpiar el array
  185.       }
  186.      
  187.       clean(); // Ejecutamos la función clean() para limpiar el array
  188.       i=0; // Inicializamos el contador del array
  189.     }
  190.    }
  191.   }
  192.    
  193.   // Limpia el array para poder recibir nuevos códigos
  194.   void clean()
  195.   {
  196.     for (int cl=0; cl<=i; cl++)
  197.     {
  198.       cadena[cl]=0;
  199.     }
  200.     i=0;
  201.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement