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.

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".
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.
Recuerda que para obtener la distancia del sensor hay que utilizar la siguiente función:

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.
#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;

        }

    }

}

90% Completado
Vistas
2 Número de vistas
2 Vistas de miembros
0 Vistas públicas
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.