💱 CAMBIO DE MONEDA
HAS TU ELECCION Boliviano Dolar Real🧾
🔄 Estamos actualizando precios, por favor consulta 📞
$
  • $
  • Bs.
  • R$
$
  • $
  • Bs.
  • R$
$
  • $
  • Bs.
  • R$

Cómo construir un robot seguidor de línea paso a paso – Guía completa para principiantes

AÑADIR A CARRITO

📘 Descripción SEO:
Descubre cómo hacer un robot seguidor de línea desde cero. Aprende qué materiales necesitas, cómo conectarlo con Arduino, y descarga el código listo para probar. Ideal para estudiantes, makers y apasionados por la robótica.

 

Categoría:
Seguridad garantizada Checkout

Introducción

En este tutorial explicaremos el procedimiento para crear un seguidor de línea usando nuestros conocimientos previos adquiridos tras la lectura de los correspondientes artículos publicados en este blog, sobre el sensor de infrarrojos TCRT5000 (ver artículo) y sobre los motores de corriente continua (ver artículo) para crear un interesante robot móvil en el que usaremos los 2 componentes de manera conjunta.
El objetivo de nuestro proyecto será crear un robot móvil que siga el recorrido marcado por una línea negra. El robot detectará con sensores de infrarrojos la presencia de la línea negra para poder rectificar su trayectoria y seguir el recorrido marcado por la misma.
siguelineaschasis2

Material necesario

Nombre Imagen Descripción
Plataforma universal robótica chasisrobotica La plataforma que nos permitirá conseguir el movimiento de nuestro robot está compuesta por los siguientes elementos:

  • 2 motores de corriente continua (motor CC) acoplados a ruedas neumáticas se encargan de dar tracción
  • Una rueda loca central permitirá que pueda girar.
  • El portapilas de 4 pilas AA nos permitirá alimentar nuestro dispositivo.
  • Una base de contrachapado hará de chasis
Placa Arduino Uno arduino uno large comp Placa Arduino Uno (o cualquier otra versión) 
Protoboard, breadboard o placa de conexiones protoboard Placa de conexiones o protoboard que usaremos en el montaje de circuitos eléctrico-electrónico para ahorrar y simplificar el cableado. Para aprender algo más sobre el uso de este dispositivo pulsa aquí
1 driver L298n
driverl298n El driver L298n nos permitirá gobernar los motores de corriente continua con las ruedas acopladas y, por tanto, gobernar el movimiento de nuestro vehículo. Se recomienda leer el artículo para más información.
2 sensores de infrarrojos TCRT5000 tcrt5000 El sensor de infrarrojos nos permitirá detectar la presencia de una línea negra y de esta manera enrutar nuestra trayectoria para poder seguirla (más información sobre este sensor)
Cables de conexiones entre los componentes, la placa de pruebas y Arduino cables Estos cables nos permiten conectar de manera sencilla todos los elementos del circuito.

Circuito eléctrico (diagrama de conexiones)

Dado que en otras sesiones ya trabajamos con el driver L298n para controlar 2 motores de corriente contínua y con el sensor de infrarrojos TCRT5000 para detectar la presencia de la línea negra, combinaremos la circuitería de ambos circuitos para crear nuestro proyecto conjunto.

esquemamontajeSiguelineas2

Código del programa Arduino

A continuación se muestra el código Arduino que implementa la funcionalidad.. Debe tenerse mucho cuidado con la correspondencia izquierda/derecha de los sensores y con el sentido de giro de las ruedas del vehículo…

Presentaremos 2 versiones..

  • En la primera controlaremos la velocidad del motor mediante la activación de los jumpers (ENA, ENB) del driver L298n..
Arduino Code
  1. /*
  2.   Nombre: Robot Siguelíneas
  3.   Autor: Daniel Pascual Gallegos
  4.   Fecha: Febrero 2017
  5.   Funcionalidad: este proyecto representa la típica función
  6.   del robot siguelíneas que se desplaza siguiendo una linea recta
  7.   de color negro.
  8. */
  9. // Definición de variables y constantes relacionadas con el motor izquierdo
  10. const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
  11. const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
  12. const int ENA = 6;
  13. // Definición de variables y constantes relacionadas con el motor derecho
  14. const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
  15. const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
  16. const int ENB = 5;
  17. const int vel = 175;
  18. // Definición de variables y constantes relacionadas con los sensores IR
  19. int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
  20. int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
  21. const int sensorIzqPin = A0; // El sensor izq irá conectado al pin analógico A0
  22. const int sensorDerPin = A1; // El sensor derecho irá conectado al pin analógico A1
  23. void setup()
  24. {
  25. // Se declaran todos los pines como salidas
  26. // Pines asociados a los motores
  27. pinMode (IN1, OUTPUT);
  28. pinMode (IN2, OUTPUT);
  29. pinMode (IN3, OUTPUT);
  30. pinMode (IN4, OUTPUT);
  31. pinMode (ENA, OUTPUT);
  32. pinMode (ENB, OUTPUT);
  33. pinMode( sensorIzqPin , INPUT) ;
  34. pinMode( sensorDerPin , INPUT) ;
  35. Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
  36. }
  37. void loop()
  38. {
  39. lecturaSensorIR(); // Se lee el valor de los sensores IR
  40. // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra
  41. // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
  42. if(lecturaSensorIzq == 0 && lecturaSensorDer == 0)
  43. {
  44. robotParar(); // El robot para
  45. }
  46. // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
  47. if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
  48. {
  49. robotDerecha();
  50. // El robot gira a la derecha
  51. }
  52. // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
  53. if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
  54. {
  55. robotIzquierda();
  56. }
  57. // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
  58. if (lecturaSensorIzq == 1 && lecturaSensorDer == 1)
  59. {
  60. robotAvance(); // El robot avanza
  61. Serial.println(«robot avanza»);
  62. }
  63. }
  64. /*
  65.   Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
  66.   y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
  67.   el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
  68.   negra.
  69. */
  70. void lecturaSensorIR()
  71. {
  72. lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
  73. lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho
  74. Serial.println(«El valor del sensor izquierdo es «);
  75. Serial.println(lecturaSensorIzq);
  76. Serial.println(«El valor del sensor derecho es «);
  77. Serial.println(lecturaSensorDer);
  78. }
  79. /*
  80.   Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
  81.   por lo que el robot avanzará hacia delante
  82. */
  83. void robotAvance()
  84. {
  85. // Motor izquierdo
  86. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  87. digitalWrite (IN1, HIGH);
  88. digitalWrite (IN2, LOW);
  89. analogWrite (ENA, vel); //Velocidad motor A
  90. // Motor derecho
  91. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  92. digitalWrite (IN3, HIGH);
  93. digitalWrite (IN4, LOW);
  94. analogWrite (ENB, vel); //Velocidad motor B
  95. }
  96. /*
  97.   Función robotRetroceso: esta función hará que ambos motores se activen a máxima potencia
  98.   en sentido contrario al anterior por lo que el robot avanzará hacia atrás
  99. */
  100. void robotRetroceso()
  101. {
  102. // Motor izquierdo
  103. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  104. digitalWrite (IN1, LOW);
  105. digitalWrite (IN2, HIGH);
  106. analogWrite (ENA, vel); //Velocidad motor A
  107. // Motor derecho
  108. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  109. digitalWrite (IN3, LOW);
  110. digitalWrite (IN4, HIGH);
  111. analogWrite (ENB, vel); //Velocidad motor B
  112. }
  113. /*
  114.   Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
  115.   por lo que el coche girará hacia la derecha (sentido horario)
  116. */
  117. void robotDerecha()
  118. {
  119. // Motor izquierdo
  120. // Se activa el motor izquierdo
  121. digitalWrite (IN1, HIGH);
  122. digitalWrite (IN2, LOW);
  123. analogWrite (ENA, vel); //Velocidad motor A
  124. // Motor derecho
  125. // Se para el motor derecho
  126. digitalWrite (IN3, LOW);
  127. digitalWrite (IN4, HIGH);
  128. analogWrite (ENB, vel); //Velocidad motor A
  129. }
  130. /*
  131.   Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
  132.   por lo que el coche girará hacia la izquierda (sentido antihorario)
  133. */
  134. void robotIzquierda ()
  135. {
  136. // Motor izquierdo
  137. // Se para el motor izquierdo
  138. digitalWrite (IN1, LOW);
  139. digitalWrite (IN2, HIGH);
  140. analogWrite (ENA, vel); //Velocidad motor A
  141. // Motor derecho
  142. // Se activa el motor derecho
  143. digitalWrite (IN3, HIGH);
  144. digitalWrite (IN4, LOW);
  145. analogWrite (ENB, vel); //Velocidad motor A
  146. }
  147. /*
  148.   Función robotParar: esta función parará ambos motores
  149.   por lo que el robot se parará.
  150. */
  151. void robotParar()
  152. {
  153. // Motor izquierdo
  154. // Se para el motor izquierdo
  155. digitalWrite (IN1, LOW);
  156. digitalWrite (IN2, LOW);
  157. // Motor derecho
  158. // Se para el motor derecho
  159. digitalWrite (IN3, LOW);
  160. digitalWrite (IN4, LOW);
  161. }
  • En la segunda no controlaremos la velocidad del motor y no estarán activados los jumpers (ENA, ENB) del driver L298n..
Arduino Code
  1. /*
  2.   Nombre: Robot Siguelíneas
  3.   Autor: Daniel Pascual Gallegos
  4.   Fecha: Febrero 2017
  5.   Funcionalidad: este proyecto representa la típica función
  6.   del robot siguelíneas que se desplaza siguiendo una linea recta
  7.   de color negro.
  8. */
  9. // Definición de variables y constantes relacionadas con el motor izquierdo
  10. const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
  11. const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
  12. // Definición de variables y constantes relacionadas con el motor derecho
  13. const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
  14. const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
  15. // Definición de variables y constantes relacionadas con los sensores IR
  16. int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
  17. int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
  18. const int sensorIzqPin = A1; // El sensor izq irá conectado al pin analógico A0
  19. const int sensorDerPin = A0 ; // El sensor derecho irá conectado al pin analógico A1
  20. void setup()
  21. {
  22. // Se declaran todos los pines como salidas
  23. // Pines asociados a los motores
  24. pinMode (IN1, OUTPUT);
  25. pinMode (IN2, OUTPUT);
  26. pinMode (IN3, OUTPUT);
  27. pinMode (IN4, OUTPUT);
  28. pinMode( sensorIzqPin , INPUT) ;
  29. pinMode( sensorDerPin , INPUT) ;
  30. Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
  31. }
  32. void loop()
  33. {
  34. lecturaSensorIR(); // Se lee el valor de los sensores IR
  35. // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra
  36. // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
  37. if(lecturaSensorIzq == 0 && lecturaSensorDer == 0)
  38. {
  39. robotParar(); // El robot para
  40. }
  41. // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
  42. if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
  43. {
  44. robotDerecha();
  45. // El robot gira a la derecha
  46. }
  47. // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
  48. if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
  49. {
  50. robotIzquierda();
  51. }
  52. // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
  53. if (lecturaSensorIzq == 1 && lecturaSensorDer == 1)
  54. {
  55. robotAvance(); // El robot avanza
  56. Serial.println(«robot avanza»);
  57. }
  58. }
  59. /*
  60.   Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
  61.   y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
  62.   el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
  63.   negra.
  64. */
  65. void lecturaSensorIR()
  66. {
  67. lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
  68. lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho
  69. Serial.println(«El valor del sensor izquierdo es «);
  70. Serial.println(lecturaSensorIzq);
  71. Serial.println(«El valor del sensor derecho es «);
  72. Serial.println(lecturaSensorDer);
  73. }
  74. /*
  75.   Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
  76.   por lo que el robot avanzará hacia delante
  77. */
  78. void robotAvance()
  79. {
  80. // Motor izquierdo
  81. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  82. digitalWrite (IN1, HIGH);
  83. digitalWrite (IN2, LOW);
  84. // Motor derecho
  85. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  86. digitalWrite (IN3, HIGH);
  87. digitalWrite (IN4, LOW);
  88. }
  89. /*
  90.   Función robotRetroceso: esta función hará que ambos motores se activen a máxima potencia
  91.   en sentido contrario al anterior por lo que el robot avanzará hacia atrás
  92. */
  93. void robotRetroceso()
  94. {
  95. // Motor izquierdo
  96. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  97. digitalWrite (IN1, LOW);
  98. digitalWrite (IN2, HIGH);
  99. // Motor derecho
  100. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  101. digitalWrite (IN3, LOW);
  102. digitalWrite (IN4, HIGH);
  103. }
  104. /*
  105.   Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
  106.   por lo que el coche girará hacia la derecha (sentido horario)
  107. */
  108. void robotDerecha()
  109. {
  110. // Motor izquierdo
  111. // Se activa el motor izquierdo
  112. digitalWrite (IN1, HIGH);
  113. digitalWrite (IN2, LOW);
  114. // Motor derecho
  115. // Se para el motor derecho
  116. digitalWrite (IN3, LOW);
  117. digitalWrite (IN4, HIGH);
  118. }
  119. /*
  120.   Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
  121.   por lo que el coche girará hacia la izquierda (sentido antihorario)
  122. */
  123. void robotIzquierda ()
  124. {
  125. // Motor izquierdo
  126. // Se para el motor izquierdo
  127. digitalWrite (IN1, LOW);
  128. digitalWrite (IN2, HIGH);
  129. // Motor derecho
  130. // Se activa el motor derecho
  131. digitalWrite (IN3, HIGH);
  132. digitalWrite (IN4, LOW);
  133. }
  134. /*
  135.   Función robotParar: esta función parará ambos motores
  136.   por lo que el robot se parará.
  137. */
  138. void robotParar()
  139. {
  140. // Motor izquierdo
  141. // Se para el motor izquierdo
  142. digitalWrite (IN1, LOW);
  143. digitalWrite (IN2, LOW);
  144. // Motor derecho
  145. // Se para el motor derecho
  146. digitalWrite (IN3, LOW);
  147. digitalWrite (IN4, LOW);
  148. }

🧪 5. PRUEBA Y CALIBRACIÓN

  1. Coloca cinta negra sobre superficie blanca para formar un circuito (curvas suaves).

  2. Enciende el robot y observa cómo sigue la línea.

  3. Ajusta altura del sensor o sensibilidad (si tiene potenciómetro).

  4. Si no responde bien, invierte cables de motores o ajusta la lógica.


🎁 BONUS: IDEAS DE MEJORA

  • Añadir sensor ultrasónico para evitar obstáculos

  • Programar con PID para movimientos más suaves

  • Añadir control remoto por Bluetooth o infrarrojo

  • Imprimir pista en papel A3 o usar cinta aislante negra en cartón blanco

Valoraciones

No hay valoraciones aún.

Sé el primero en valorar “Cómo construir un robot seguidor de línea paso a paso – Guía completa para principiantes”

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compra
0
    0
    Your Cart
    Your cart is emptyReturn to Shop