Advertisement
Villalba2006

POST_49

Nov 28th, 2016
1,256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.30 KB | None | 0 0
  1.  /*  TITULO: Robot Miniskybot 2.0 funcionando como siguelíneas.
  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 simplemente hacemos que el Robot Miniskybot 2.0 siga la línea negra,
  14.     sin salirse de la trayectoria dibujada en la pista de pruebas con un adhesivo de color negro
  15.     y cuando lo saquemos sobre la superficie blanca, el robot permanecerá parado.
  16.    
  17.  
  18.     ESQUEMA DE CONEXION
  19.    
  20.                                       +-----+
  21.          +----[PWR]-------------------| USB |--+
  22.          |                            +-----+  |
  23.          |         GND/RST2  [ ][ ]            |
  24.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  25.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  26.          |                             AREF[ ] |
  27.          |                              GND[ ] |
  28.          | [ ]N/C                    SCK/13[ ] |   Pin OUT del sensorIzquierdo
  29.          | [ ]IOREF                 MISO/12[ ] |   Pin OUT del sensorDerecho
  30.          | [ ]RST                   MOSI/11[ ]~|  
  31.          | [ ]3V3    +---+               10[ ]~|  
  32.          | [ ]5v    -| A |-               9[ ]~|  
  33.          | [ ]GND   -| R |-               8[ ] |  
  34.          | [ ]GND   -| D |-                    |
  35.          | [ ]Vin   -| U |-               7[ ] |  
  36.          |          -| I |-               6[ ]~|  
  37.          | [ ]A0    -| N |-               5[ ]~|   Cable blanco (Señal) del SERVO_IZQUIERDO
  38.          | [ ]A1    -| O |-               4[ ] |    
  39.          | [ ]A2     +---+           INT1/3[ ]~|   Cable blanco (Señal) del SERVO_DERECHO
  40.          | [ ]A3                     INT0/2[ ] |  
  41.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  42.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  43.          |            [ ] [ ] [ ]              |
  44.          |  UNO_R3    GND MOSI 5V  ____________/
  45.           \_______________________/
  46.  
  47.   NOTAS:  
  48.  
  49.     - Todas las alimentaciones (cables rojos) y las masas (cables negros) de los servos van
  50.       conectadas a +5V y GND respectivamente.
  51.     - También las alimentaciones y las masas de los sensores siguelíneas van directamente
  52.       conectadas a +5V y GND respectivamente.
  53.     - Las conexiones están marcadas soble la placa de Arduino UNO, aunque luego conectemos
  54.       directamente sobre los terminales de 3 pines (GVS) del sensor shield V4.0 que correspondan
  55.       a cada pin digital de Arduino que estemos utilizando.
  56.      
  57. */
  58.  
  59.   // Incluimos la librería para el funcionamiento de los servos
  60.   #include <Servo.h>
  61.  
  62.   // Constantes para el motor derecho
  63.   const int SERVO_DERECHO = 3;  // PIN PWM donde conecto el servomotor derecho
  64.   const int SERVO_DERECHO_ADELANTE = 0;    // Mueve el motor derecho hacia adelante
  65.   const int SERVO_DERECHO_ATRAS = 180;  // Mueve el motor derecho hacia atrás
  66.   const int SERVO_DERECHO_PARA = 90; // Para el motor derecho
  67.  
  68.   // Constantes para el motor izquierdo (invertidas porque se monta el servo al revés)
  69.   const int SERVO_IZQUIERDO = 5;  // PIN PWM donde conecto el servomotor izquierdo
  70.   const int SERVO_IZQUIERDO_ADELANTE = 180;  // Mueve el motor izquierdo hacia adelante
  71.   const int SERVO_IZQUIERDO_ATRAS = 0;    // Mueve el motor izquierdo hacia atrás
  72.   const int SERVO_IZQUIERDO_PARA = 90; // Para el motor izquierdo
  73.    
  74.   // Constantes para definir el pin de los dos SENSORES
  75.   const int sensorDerecho = 12;  // Pin digital donde conectamos el Sensor Derecho
  76.   const int sensorIzquierdo = 13;  // Pin digital donde conectamos el Sensor Izquierdo
  77.  
  78.   // Variables para guardar el valor de los sensores, inicialmente no detectan línea negra
  79.   int estadoDerecho = 1;  // para leer y guardar el estado del sensor derecho
  80.   int estadoIzquierdo = 1; // para leer y guardar el estado del sensor derecho
  81.  
  82.   // Declaramos los dos objetos de tipo servo
  83.   Servo motor_derecho;  // Motor derecho
  84.   Servo motor_izquierdo;  // Motor izquierdo
  85.  
  86.  
  87.   // Función que manda avanzar al robot
  88.   void robot_avanza()
  89.   {
  90.     motor_derecho.write(SERVO_DERECHO_ATRAS);
  91.     motor_izquierdo.write(SERVO_IZQUIERDO_ATRAS);
  92.   }
  93.  
  94.   // Función que manda pararse al robot
  95.   void robot_para()
  96.   {
  97.     motor_derecho.write(SERVO_DERECHO_PARA);
  98.     motor_izquierdo.write(SERVO_IZQUIERDO_PARA);
  99.   }
  100.  
  101.   // Función que mueve el robot a la izquierda
  102.   void robot_izquierda()
  103.   {
  104.     motor_derecho.write(SERVO_DERECHO_ATRAS);
  105.     motor_izquierdo.write(SERVO_IZQUIERDO_ADELANTE);
  106.   }
  107.  
  108.   // Función que mueve el robot a la derecha
  109.   void robot_derecha()
  110.   {
  111.     motor_derecho.write(SERVO_DERECHO_ADELANTE);
  112.     motor_izquierdo.write(SERVO_IZQUIERDO_ATRAS);
  113.   }
  114.  
  115.   void setup()
  116.   {
  117.     // Inicializa los sensores como entradas
  118.     pinMode(sensorDerecho, INPUT);
  119.     pinMode(sensorIzquierdo, INPUT);  
  120.    
  121.     // Configura el pin de señal de los motores
  122.     motor_derecho.attach(SERVO_DERECHO);
  123.     motor_izquierdo.attach(SERVO_IZQUIERDO);
  124.   }
  125.  
  126.   void loop()
  127.   {
  128.     // Lee el valor del estado del sensor derecho y lo guarda en la variable estadoDerecho
  129.     estadoDerecho = digitalRead(sensorDerecho);
  130.     // Lee el valor del estado del sensor izquierdo y lo guarda en la variable estadoIzquierdo
  131.     estadoIzquierdo = digitalRead(sensorIzquierdo);
  132.    
  133.     // Si los dos sensores están dentro de la línea negra
  134.     if ((estadoIzquierdo == LOW)&&(estadoDerecho == LOW))
  135.     {    
  136.       // El robot avanza hacia adelante
  137.       robot_avanza();
  138.     }
  139.    
  140.     // Si el sensor izquierdo está fuera de la línea negra y el derecho dentro
  141.     if ((estadoIzquierdo == HIGH)&&(estadoDerecho == LOW))
  142.     {
  143.       // El robot gira a la derecha
  144.       robot_derecha();
  145.     }
  146.    
  147.     // Si el sensor izquierdo está dentro de la línea negra y el derecho fuera
  148.     if ((estadoIzquierdo == LOW)&&(estadoDerecho == HIGH))
  149.     {
  150.       // El robot gira a la izquierda
  151.       robot_izquierda();
  152.     }
  153.    
  154.     // Si los dos sensores están fuera de la línea negra (sobre superficie blanca)
  155.     if((estadoIzquierdo == HIGH)&&(estadoDerecho == HIGH))
  156.     {
  157.       // El robot permanece parado
  158.       robot_para();
  159.     }
  160.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement