Introducción
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 | ![]() |
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 | ![]() |
Como sabemos los diodos LED nos permiten obtener luz a partir de muy poca energía eléctrica. |
Zumbador piezoeléctrico o 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 |
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 | ![]() |
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
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
/* Nombre: Robot esquivaobstáculos Autor: Daniel Pascual Gallegos Fecha: Noviembre 2016 Funcionalidad: Este subproyecto forma parte de la construcción de nuestro robot autónomo. En este subproyecto usaremos el driver L298n para gobernar 2 motores de CC que realizarán la parte mecánica de nuestro robot móvil. En este subproyecto nuestro robot irá recto y cuando encuentre un obstáculo a menos de 10 cm girará en sentido horario hasta que esquive el obstáculo Además encenderá 2 LEDs verdes cuando vaya hacia delante y 2 LEDs rojos y un zumbador cuando detecte un obstáculo. */ // Definición de variables y constantes relacionadas con el motor izquierdo const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo // Definición de variables y constantes relacionadas con el motor derecho const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo // Definición de variables y constantes relacionadas con los LEDs const int ledVerde1 = 4; // Pin digital 4 para conectar el LED verde 1 const int ledVerde2 = 5; // Pin digital 5 para conectar el LED verde 2 const int ledRojo1 = 6; // Pin digital 6 para conectar el LED rojo 1 const int ledRojo2 = 7; // Pin digital 7 para conectar el LED rojo 2 // Definición de variables y constantes relacionadas con el zumbador const int zumbadorPiezo = 8; // Pin digital 8 para conectar el zumbador // Este programa usará el sensor de ultrasonidos HCSR04 // para medir la distancia a la que se encuentran diferentes obstáculos // en centímetros y mostrarlo por el puerto serie. const int triggerEmisor = 3; // El trigger se conecta al pin digital 3 const int echoReceptor = 2; // El echo se conecta al pin digital 2 const int valorUmbral = 10; // Fija la distancia a la que se percibe objeto (10 cm) long tiempoEntrada; // Almacena el tiempo de respuesta del sensor de entrada float distanciaEntrada; // Almacena la distancia en cm a la que se encuentra el objeto // Función que se ejecuta una sola vez al cargar el programa void setup() { // Se declaran todos los pines como salidas // Pines asociados a los motores pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); // Pines asociados a los LEDS pinMode (ledVerde1, OUTPUT); pinMode (ledVerde2, OUTPUT); pinMode (ledRojo1, OUTPUT); pinMode (ledRojo2, OUTPUT); // Pines asociados al zumbador pinMode (zumbadorPiezo, OUTPUT); // Pines asociados al sensor ultrasonico HCSR04 pinMode(triggerEmisor,OUTPUT); // El emisor emite por lo que es configurado como salida pinMode(echoReceptor,INPUT); // El receptor recibe por lo que es configurado como entrada Serial.begin(9600); // Inicia el puerto de comunicaciones en serie } // Función que se repite de manera periódica void loop() { sensorUltrasonidos(); // Si el valor de la distancia es menor que el valor umbral if(distanciaEntrada>valorUmbral) { robotAvance(); // El robot avanza mientras no encuentre obstáculos enciendeLEDVerde(); // Enciende los LED verdes delanteros } else { enciendeLEDRojoZumbador(); // Enciende los LED rojos traseros y el zumbador // El robot retrocede 1 segundo y gira a la derecha 0,5 segundos para esquivarlo robotRetroceso(); delay(1000); robotDerecha (); delay(500); } } /* Función sensorUltrasonidos: para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin echo empieza a recibir el rebote, HIGH, hasta que deja de hacerlo, LOW, la longitud del pulso entrante. */ void sensorUltrasonidos() { // Se inicializa el sensor de infrasonidos digitalWrite(triggerEmisor,LOW); // Para estabilizar delayMicroseconds(10); // Comenzamos las mediciones // Se envía una señal activando la salida trigger durante 10 microsegundos digitalWrite(triggerEmisor, HIGH); // Envío del pulso ultrasónico delayMicroseconds(10); tiempoEntrada=pulseIn(echoReceptor, HIGH); distanciaEntrada= int(0.017*tiempoEntrada); // Calcula la distancia en cm Serial.println("El valor de la distancia es "); Serial.println(distanciaEntrada); delay(200); } /* Función robotAvance: esta función hará que ambos motores se activen a máxima potencia por lo que el robot avanzará hacia delante */ void robotAvance() { // Motor izquierdo // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); // Motor derecho // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); } /* Función robotRetroceso: esta función hará que ambos motores se activen a máxima potencia en sentido contrario al anterior por lo que el robot avanzará hacia atrás */ void robotRetroceso() { // Motor izquierdo // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior digitalWrite (IN1, LOW); digitalWrite (IN2, HIGH); // Motor derecho // Al mantener un pin LOW y el otro HIGH el motor gira en sentido contrario al anterior digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); } /* Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho por lo que el coche girará hacia la derecha (sentido horario) */ void robotDerecha() { // Motor izquierdo // Se activa el motor izquierdo digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); // Motor derecho // Se para el motor derecho digitalWrite (IN3, LOW); digitalWrite (IN4, LOW); } /* Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo por lo que el coche girará hacia la izquierda (sentido antihorario) */ void robotIzquierda () { // Motor izquierdo // Se para el motor izquierdo digitalWrite (IN1, LOW); digitalWrite (IN2, LOW); // Motor derecho // Se activa el motor derecho digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); } /* Función robotParar: esta función parará ambos motores por lo que el robot se parará. */ void robotParar() { // Motor izquierdo // Se para el motor izquierdo digitalWrite (IN1, LOW); digitalWrite (IN2, LOW); // Motor derecho // Se para el motor derecho digitalWrite (IN3, LOW); digitalWrite (IN4, LOW); } /* Función enciendeLEDVerde: esta función hará que ambos LED verdes se enciendan y se apaguen los LED rojos (en caso de que estuvieran encendidos) y el zumbador (en caso de que estuviera sonando) */ void enciendeLEDVerde() { // Manda 5 V a los pines por lo que enciende los 2 LED verdes digitalWrite (ledVerde1, HIGH); digitalWrite (ledVerde2, HIGH); // Quita 5V de los otros pines por lo que apaga los 2 LED rojos y el zumbador digitalWrite (ledRojo1, LOW); digitalWrite (ledRojo2, LOW); digitalWrite (zumbadorPiezo, LOW); } /* Función enciendeLEDRojoZumbador: esta función hará que ambos LED rojos se enciendan y que empiece a sonar el zumbador. Además de que se apaguen los LED verdes */ void enciendeLEDRojoZumbador() { // Manda 5 V a los pines por lo que enciende los 2 LED rojos y el zumbador digitalWrite (ledRojo1, HIGH); digitalWrite (ledRojo2, HIGH); digitalWrite (zumbadorPiezo, HIGH); // Quita 5V de los otros pines por lo que apaga los 2 LED verdes digitalWrite (ledVerde1, LOW); digitalWrite (ledVerde2, LOW); }