Introducción

En este tutorial daremos un paso más en nuestro proyecto del robot esquivaobstáculos para añadir una serie de funcionalidades que lo hagan más atractivo. Entre esos efectos estará la inclusión de 4 LED y un altavoz o zumbador piezoeléctrico.
El objetivo de nuestra mejora será añadir a nuestro prototipo los siguientes elementos: 2 LED verdes que se mantendrán encendidos siempre que el vehículo avance hacia delante (estos LED se colocarán en la parte delantera del proyecto), 2 LED rojos que se mantendrán encendidos siempre que el vehículo detecte un obstáculo (estos LED se colocarán en la parte trasera del proyecto) y un elemento sonoro (zumbador piezoeléctrico o altavoz) que emitirá un sonido cuando el vehículo se mueva hacia atrás.

Material necesario

Además de todos los componentes que ya estamos usando en nuestro robot esquivaobstáculos se añadirán los siguientes a nuestro proyecto:

Nombre Imagen Descripció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í
4 diodos LED de colores diodosled Como sabemos los diodos LED nos permiten obtener luz a partir de muy poca energía eléctrica.
Zumbador piezoeléctrico o altavoz altavoz Zumbador, buzzer en inglés, es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente de un mismo tono (generalmente agudo). Sirve como mecanismo de señalización o aviso y se utiliza en múltiples sistemas, como en automóviles o en electrodomésticos, incluidos los despertadores.
1 resistencia de 220 Ohmios resistencia

La resistencia de 220 ohmios se usa para impedir que los LED reciban demasiada intensidad (debida a su baja resistencia interna) y puedan funcionar de manera incorrecta o  sobrecalentarse y dejar de ser operativos.

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)

En este caso, añadiremos la circuitería necesaria para integrar estos elementos con el circuito de nuestro robot. Para no complicar demasiado el diagrama por excesivo número de conexiones, mostraremos por separado el circuito que gobierna el funcionamiento de nuestro robot y el circuito que estamos desarrollando ahora para introducir los LED y el zumbador.

Circuito Inicial

RobotEsquivaCircuitoCompletoPlaca

Circuito LED + Zumbador

circuitoLEDzumbador

Código programa Arduino

En este caso lo que se hará es actualizar el código que permite la funcionalidad del robot esquivaobstáculos añadiendo la posibilidad de encender/apagar las citadas salidas digitales (LEDs y zumbador piezoeléctrico). Como se puede apreciar en el circuito se han conectado los elementos:

  • LED verde 1: se ha conectado al pin digital 4
  • LED verde 2: se ha conectado al pin digital 5
  • LED rojo 1: se ha conectado al pin digital 6
  • LED rojo 2: se ha conectado al pin digital 7
  • Zumbador piezoeléctrico: se ha conectado al pin digital 8
Arduino Code
  1. /*
  2.   Nombre: Robot esquivaobstáculos
  3.   Autor: Daniel Pascual Gallegos
  4.   Fecha: Noviembre 2016
  5.   Funcionalidad: Este subproyecto forma parte de la construcción de nuestro robot autónomo.
  6.   En este subproyecto usaremos el driver L298n para gobernar 2 motores de CC que realizarán
  7.   la parte mecánica de nuestro robot móvil.
  8.   En este subproyecto nuestro robot irá recto y cuando encuentre un obstáculo
  9.   a menos de 10 cm girará en sentido horario hasta que esquive el obstáculo
  10.   Además encenderá 2 LEDs verdes cuando vaya hacia delante y
  11.   2 LEDs rojos y un zumbador cuando detecte un obstáculo.
  12. */
  13.  
  14. // Definición de variables y constantes relacionadas con el motor izquierdo
  15. const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
  16. const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
  17.  
  18. // Definición de variables y constantes relacionadas con el motor derecho
  19. const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
  20. const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
  21.  
  22. // Definición de variables y constantes relacionadas con los LEDs
  23. const int ledVerde1 = 4; // Pin digital 4 para conectar el LED verde 1
  24. const int ledVerde2 = 5; // Pin digital 5 para conectar el LED verde 2
  25. const int ledRojo1 = 6; // Pin digital 6 para conectar el LED rojo 1
  26. const int ledRojo2 = 7; // Pin digital 7 para conectar el LED rojo 2
  27.  
  28. // Definición de variables y constantes relacionadas con el zumbador
  29. const int zumbadorPiezo = 8; // Pin digital 8 para conectar el zumbador
  30.  
  31. // Este programa usará el sensor de ultrasonidos HCSR04
  32. // para medir la distancia a la que se encuentran diferentes obstáculos
  33. // en centímetros y mostrarlo por el puerto serie.
  34. const int triggerEmisor = 3; // El trigger se conecta al pin digital 3
  35. const int echoReceptor = 2; // El echo se conecta al pin digital 2
  36. const int valorUmbral = 10; // Fija la distancia a la que se percibe objeto (10 cm)
  37. long tiempoEntrada; // Almacena el tiempo de respuesta del sensor de entrada
  38. float distanciaEntrada; // Almacena la distancia en cm a la que se encuentra el objeto
  39.  
  40. // Función que se ejecuta una sola vez al cargar el programa
  41. void setup()
  42. {
  43. // Se declaran todos los pines como salidas
  44. // Pines asociados a los motores
  45. pinMode (IN1, OUTPUT);
  46. pinMode (IN2, OUTPUT);
  47. pinMode (IN3, OUTPUT);
  48. pinMode (IN4, OUTPUT);
  49.  
  50. // Pines asociados a los LEDS
  51. pinMode (ledVerde1, OUTPUT);
  52. pinMode (ledVerde2, OUTPUT);
  53. pinMode (ledRojo1, OUTPUT);
  54. pinMode (ledRojo2, OUTPUT);
  55.  
  56. // Pines asociados al zumbador
  57. pinMode (zumbadorPiezo, OUTPUT);
  58.  
  59. // Pines asociados al sensor ultrasonico HCSR04
  60. pinMode(triggerEmisor,OUTPUT); // El emisor emite por lo que es configurado como salida
  61. pinMode(echoReceptor,INPUT); // El receptor recibe por lo que es configurado como entrada
  62. Serial.begin(9600); // Inicia el puerto de comunicaciones en serie
  63. }
  64.  
  65. // Función que se repite de manera periódica
  66. void loop()
  67. {
  68. sensorUltrasonidos();
  69. // Si el valor de la distancia es menor que el valor umbral
  70. if(distanciaEntrada>valorUmbral)
  71. {
  72. robotAvance(); // El robot avanza mientras no encuentre obstáculos
  73. enciendeLEDVerde(); // Enciende los LED verdes delanteros
  74. }
  75. else
  76. {
  77. enciendeLEDRojoZumbador(); // Enciende los LED rojos traseros y el zumbador
  78. // El robot retrocede 1 segundo y gira a la derecha 0,5 segundos para esquivarlo
  79. robotRetroceso();
  80. delay(1000);
  81. robotDerecha ();
  82. delay(500);
  83. }
  84. }
  85.  
  86. /*
  87.  Función sensorUltrasonidos: para medir la longitud del pulso entrante.
  88.  Mide el tiempo que transcurrido entre el envío del pulso ultrasónico
  89.  y cuando el sensor recibe el rebote, es decir:
  90.  desde que el pin echo empieza a recibir el rebote, HIGH,
  91.  hasta que deja de hacerlo, LOW, la longitud del pulso entrante.
  92. */
  93. void sensorUltrasonidos()
  94. {
  95. // Se inicializa el sensor de infrasonidos
  96. digitalWrite(triggerEmisor,LOW); // Para estabilizar
  97. delayMicroseconds(10);
  98.  
  99. // Comenzamos las mediciones
  100. // Se envía una señal activando la salida trigger durante 10 microsegundos
  101. digitalWrite(triggerEmisor, HIGH); // Envío del pulso ultrasónico
  102. delayMicroseconds(10);
  103. tiempoEntrada=pulseIn(echoReceptor, HIGH);
  104. distanciaEntrada= int(0.017*tiempoEntrada); // Calcula la distancia en cm
  105. Serial.println("El valor de la distancia es ");
  106. Serial.println(distanciaEntrada);
  107. delay(200);
  108. }
  109. /*
  110.   Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
  111.   por lo que el robot avanzará hacia delante
  112. */
  113. void robotAvance()
  114. {
  115. // Motor izquierdo
  116. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  117. digitalWrite (IN1, HIGH);
  118. digitalWrite (IN2, LOW);
  119.  
  120. // Motor derecho
  121. // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
  122. digitalWrite (IN3, HIGH);
  123. digitalWrite (IN4, LOW);
  124. }
  125. /*
  126.   Función robotRetroceso: esta función hará que ambos motores se activen a máxima potencia
  127.   en sentido contrario al anterior por lo que el robot avanzará hacia atrás
  128. */
  129. void robotRetroceso()
  130. {
  131. // Motor izquierdo
  132. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  133. digitalWrite (IN1, LOW);
  134. digitalWrite (IN2, HIGH);
  135.  
  136. // Motor derecho
  137. // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior
  138. digitalWrite (IN3, LOW);
  139. digitalWrite (IN4, HIGH);
  140. }
  141.  
  142. /*
  143.   Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
  144.   por lo que el coche girará hacia la derecha (sentido horario)
  145. */
  146. void robotDerecha()
  147. {
  148. // Motor izquierdo
  149. // Se activa el motor izquierdo
  150. digitalWrite (IN1, HIGH);
  151. digitalWrite (IN2, LOW);
  152.  
  153. // Motor derecho
  154. // Se para el motor derecho
  155. digitalWrite (IN3, LOW);
  156. digitalWrite (IN4, LOW);
  157. }
  158. /*
  159.   Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
  160.   por lo que el coche girará hacia la izquierda (sentido antihorario)
  161. */
  162. void robotIzquierda ()
  163. {
  164. // Motor izquierdo
  165. // Se para el motor izquierdo
  166. digitalWrite (IN1, LOW);
  167. digitalWrite (IN2, LOW);
  168.  
  169. // Motor derecho
  170. // Se activa el motor derecho
  171. digitalWrite (IN3, HIGH);
  172. digitalWrite (IN4, LOW);
  173. }
  174. /*
  175.   Función robotParar: esta función parará ambos motores
  176.   por lo que el robot se parará.
  177. */
  178. void robotParar()
  179. {
  180. // Motor izquierdo
  181. // Se para el motor izquierdo
  182. digitalWrite (IN1, LOW);
  183. digitalWrite (IN2, LOW);
  184.  
  185. // Motor derecho
  186. // Se para el motor derecho
  187. digitalWrite (IN3, LOW);
  188. digitalWrite (IN4, LOW);
  189. }
  190. /*
  191.   Función enciendeLEDVerde: esta función hará que ambos LED verdes se enciendan
  192.   y se apaguen los LED rojos (en caso de que estuvieran encendidos)
  193.   y el zumbador (en caso de que estuviera sonando)
  194. */
  195. void enciendeLEDVerde()
  196. {
  197. // Manda 5 V a los pines por lo que enciende los 2 LED verdes
  198. digitalWrite (ledVerde1, HIGH);
  199. digitalWrite (ledVerde2, HIGH);
  200.  
  201. // Quita 5V de los otros pines por lo que apaga los 2 LED rojos y el zumbador
  202. digitalWrite (ledRojo1, LOW);
  203. digitalWrite (ledRojo2, LOW);
  204. digitalWrite (zumbadorPiezo, LOW);
  205. }
  206. /*
  207.   Función enciendeLEDRojoZumbador: esta función hará que ambos LED rojos se enciendan
  208.   y que empiece a sonar el zumbador. Además de que se apaguen los LED verdes
  209. */
  210. void enciendeLEDRojoZumbador()
  211. {
  212. // Manda 5 V a los pines por lo que enciende los 2 LED rojos y el zumbador
  213. digitalWrite (ledRojo1, HIGH);
  214. digitalWrite (ledRojo2, HIGH);
  215. digitalWrite (zumbadorPiezo, HIGH);
  216.  
  217. // Quita 5V de los otros pines por lo que apaga los 2 LED verdes
  218. digitalWrite (ledVerde1, LOW);
  219. digitalWrite (ledVerde2, LOW);
  220. }
  221.  
Spanish English French German Italian Portuguese Russian

Redes sociales

facebook iconotwitterGoogle plus iconpinterest

Artículos

TIC