- Portada
- Ensamblaje mecánico
-
Montaje electrónico y Programación
-
Introducción al Montaje Electrónico
-
Resistencias y Ejemplos de cálculo
-
La protoboard y los LEDs
-
Actividad 1: LEDs del Puente
-
El pulsador
-
Actividad 2: Control de luces con Pulsadores
-
El Zumbador
-
Actividad 3: Aviso sonoro
-
Motores DC
-
Puente en H
-
Actividad 4: Mover el Puente Levadizo
-
El Servomotor
-
Actividad 5: Barrera de control de acceso
-
Sensor de proximidad por ultrasonidos
-
Actividad 6: Detección de obstáculos
-
- Para terminar
Actividad 6: Detección de obstáculos
Actividad 6

Detección de obstáculos
Esta actividad consiste en incluir en nuestra maqueta la detección de obstáculos debajo del Puente Levadizo utilizando el sensor ultrasonidos, por lo que necesitarás lo siguiente para completar esta actividad:
1 x Sensor Ultrasonidos HC-SR04.
El montaje completo se muestra a continuación:

Las conexiones del Arduino son las siguientes:
Trigger del Ultrasonidos: Pin 6.
Echo del Ultrasonidos: Pin 7.
Debemos programar el Arduino UNO para que el Puente mantenga las funcionalidades implementadas hasta ahora y que, además, no pueda descender el puente si detecta algún obstáculo.
Pista 1: Librería necesaria
Recuerda que para poder utilizar el sensor ultrasonidos debes incluir la librería "HCSR04" al comienzo de tu programa de la siguiente manera:
#include <HCSR04.h>
Esta librería no viene por defecto instalada con el Arduino IDE y es necesario instalarla. Para ello hay que ir en el IDE a:Pestaña "Sketch" > Opción "Incluir librería" > Opción "Gestionar librerías" y buscar "HCSR04 ultrasonic sensor" e instalar la librería del autor "gamegine".
Pista 2: Crear el objeto de la librería
Cuando utilizamos una librería, normalmente debemos crear lo que se llama un Objeto para poder utilizar las funciones añadidas. Para este caso concreto, debemos crear un Objeto del tipo HCSR04 que nos permita obtener las medidas del sensor ultrasonidos. La creación es como sigue:
HCSR04 miObjeto(pinTrigger, pinEcho);
donde "miObjeto" es el nombre que queremos dar a la variable que vamos a crear para acceder a todas las funciones de la librería, "pinTrigger" es el Pin donde tenemos conectado el Trigger del ultrasonidos y "pinEcho" es el Pin donde tenemos conectado el Echo del sensor. En este caso, al crear la librería debemos indicarle los pines de conexión del sensor.
La creación del objeto debe estar ubicada antes del Setup.
HCSR04 miObjeto(pinTrigger, pinEcho);
donde "miObjeto" es el nombre que queremos dar a la variable que vamos a crear para acceder a todas las funciones de la librería, "pinTrigger" es el Pin donde tenemos conectado el Trigger del ultrasonidos y "pinEcho" es el Pin donde tenemos conectado el Echo del sensor. En este caso, al crear la librería debemos indicarle los pines de conexión del sensor.
La creación del objeto debe estar ubicada antes del Setup.
Pista 3: Medir distancia del sensor de ultrasonidos
Recuerda que para obtener la distancia del sensor hay que utilizar la siguiente función:
donde "miObjetoHCSR04" es el Objeto de tipo HCSR04 que hemos creado previamente. La función devuelve un valor de tipo "float" (número decimal o de coma flotante) que corresponde a la distancia medida por el ultrasonidos en centímetros.
miObjetoHCSR04.dist();
donde "miObjetoHCSR04" es el Objeto de tipo HCSR04 que hemos creado previamente. La función devuelve un valor de tipo "float" (número decimal o de coma flotante) que corresponde a la distancia medida por el ultrasonidos en centímetros.
Solución código C++
#include <HCSR04.h>
#include <Servo.h>
int pinLedRojos = 13; // Pin de los LEDs Rojos
int pinLedVerdes = 12; // Pin de los LEDs Verdes
int pinPulsadorSubida = 5; // Pin del Pulsador de Arranque
int pinPulsadorBajada = 4; // Pin del Pulsador de Parada
int pinZumbador = 8; // Pin del Zumbador Pasivo
int pinVelocidadMotor = 9; // Pin para controlar la velocidad del Motor
int pinDireccionMotor1 = 10; // Pin para controlar Motor en una dirección
int pinDireccionMotor2 = 11; // Pin para controlar Motor en otra dirección
int pinServomotor = 3; // Pin para controlar el Servomotor
int pinTrigger = 6; // Pin del trigger del Ultrasonidos
int pinEcho = 7; // Pin del echo del Ultrasonidos
bool arriba = false; // Variable para guardar el estado del puente
Servo servomotor; // Creamos un objeto del tipo Servo
HCSR04 ultrasonidos(pinTrigger, pinEcho); // Creamos un objeto del tipo HCSR04
void setup() {
// Configuramos como salida los pines donde están los LEDs
pinMode(pinLedRojos, OUTPUT);
pinMode(pinLedVerdes, OUTPUT);
// Configuramos como entrada los pines donde están los Pulsadores
pinMode(pinPulsadorSubida, INPUT);
pinMode(pinPulsadorBajada, INPUT);
// Configuramos como salida el pin donde se encuentra el Zumbador
pinMode(pinZumbador, OUTPUT);
// Configuramos como salida los pines relacionados con el Motor
pinMode(pinVelocidadMotor, OUTPUT);
pinMode(pinDireccionMotor1, OUTPUT);
pinMode(pinDireccionMotor2, OUTPUT);
// Asignamos el pin a nuestro objeto Servo
servomotor.attach(pinServomotor);
// Configuramos la posición inicial del Servo
servomotor.write(90);
}
void loop() {
// Comprobamos el botón de subida y que el puente esté abajo
if((digitalRead(pinPulsadorSubida) == HIGH) && (arriba == false)) {
// Bajamos la barrera del Servo
servomotor.write(180);
// Comenzamos el ascenso del puente
digitalWrite(pinDireccionMotor1, HIGH);
digitalWrite(pinDireccionMotor2, LOW);
analogWrite(pinVelocidadMotor, 255);
// Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
digitalWrite(pinLedRojos, HIGH);
digitalWrite(pinLedVerdes, LOW);
// Generamos el tono con el Zumbador
// Frecuencia 1000 Hz, duración 500 ms
tone(pinZumbador, 1000, 500);
// Hacemos una pausa de 1 segundo
delay(600);
// Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
digitalWrite(pinLedRojos, LOW);
digitalWrite(pinLedVerdes, HIGH);
// Hacemos una pausa de 1 segundo
delay(600);
// Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
digitalWrite(pinLedRojos, HIGH);
digitalWrite(pinLedVerdes, LOW);
// Generamos el tono con el Zumbador
// Frecuencia 1000 Hz, duración 500 ms
tone(pinZumbador, 1000, 500);
// Hacemos una pausa de 1 segundo
delay(600);
// Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
digitalWrite(pinLedRojos, LOW);
digitalWrite(pinLedVerdes, HIGH);
// Hacemos una pausa de 1 segundo
delay(600);
// Pausamos el ascenso del puente
digitalWrite(pinDireccionMotor1, LOW);
digitalWrite(pinDireccionMotor2, LOW);
analogWrite(pinVelocidadMotor, 0);
// Guardamos en la variable que estamos arriba
arriba = true;
}
// Tomamos la medida del sensor ultrasonidos
float distancia = ultrasonidos.dist();
// Comprobamos el botón de bajada y que el puente esté arriba
if((digitalRead(pinPulsadorBajada) == HIGH) && (arriba == true)) {
// La distancia desde el sensor hasta la pared es de 23 - 24 cm
// Si hay obstáculos bajo el puente, la medida deberá ser menor
if(distancia > 22.00) {
// Comenzamos el descenso del puente
digitalWrite(pinDireccionMotor1, LOW);
digitalWrite(pinDireccionMotor2, HIGH);
analogWrite(pinVelocidadMotor, 255);
// Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
digitalWrite(pinLedRojos, HIGH);
digitalWrite(pinLedVerdes, LOW);
// Generamos el tono con el Zumbador
// Frecuencia 1000 Hz, duración 500 ms
tone(pinZumbador, 1000, 500);
// Hacemos una pausa de 1 segundo
delay(450);
// Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
digitalWrite(pinLedRojos, LOW);
digitalWrite(pinLedVerdes, HIGH);
// Hacemos una pausa de 1 segundo
delay(450);
// Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
digitalWrite(pinLedRojos, HIGH);
digitalWrite(pinLedVerdes, LOW);
// Generamos el tono con el Zumbador
// Frecuencia 1000 Hz, duración 500 ms
tone(pinZumbador, 1000, 500);
// Hacemos una pausa de 1 segundo
delay(450);
// Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
digitalWrite(pinLedRojos, LOW);
digitalWrite(pinLedVerdes, HIGH);
// Hacemos una pausa de 1 segundo
delay(450);
// Pausamos el ascenso del puente
digitalWrite(pinDireccionMotor1, LOW);
digitalWrite(pinDireccionMotor2, LOW);
analogWrite(pinVelocidadMotor, 0);
// Subimos la barrera del Servo
servomotor.write(90);
// Guardamos en la variable que estamos abajo
arriba = false;
}
}
}
| Vistas | |
|---|---|
| 2 | Número de vistas |
| 2 | Vistas de miembros |
| 0 | Vistas públicas |
Compartir por correo
Por favor iniciar sesión para compartir esto webpage por correo.