Algoritmos y Lenguajes de Programación

Tercer parcial, Práctica 7: Utilización de Arreglos

Objetivo:

El objetivo de esta práctica es construir un sistema de detección de proximidad haciendo uso de Arreglos para generar ayudas visuales.

Materiales:

Pasos a seguir:

Esquema:

Conectar todos los componentes en el protoboard siguiendo el esquema de conexiones

conexión arduino

Código:





 
        #include <LiquidCrystal.h>
        #include <Servo.h>

        // Inicialización de la pantalla LCD con los pines
        LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

        // Inicialización del servomotor
        Servo myServo;

        // Pines de los LEDs y otros dispositivos
        const int devicePins[8] = {6, 7, 8, A0, A1, A2, A3, A4}; // 6-8 para LEDs, A0-A3 para pines adicionales, A4 para buzzer

        // Pines del sensor ultrasónico
        const int trigPin = 9;  // Pin de disparo
        const int echoPin = 10; // Pin de eco

        // Variable para almacenar la distancia medida por el sensor ultrasónico
        long duration;
        int distance;

        // Umbral de activación para el sensor ultrasónico (en cm)
        const int threshold = 15; // Ajusta este valor según las necesidades del sensor

        void setup() {
            // Configuración de los pines de los LEDs y otros dispositivos
            for (int i = 0; i < 8; i++) {
                pinMode(devicePins[i], OUTPUT);
            }

            // Configuración de los pines del sensor ultrasónico
            pinMode(trigPin, OUTPUT);
            pinMode(echoPin, INPUT);

            // Inicialización de la pantalla LCD
            lcd.begin(16, 2);
            lcd.print("Sistema Listo");

            // Inicialización del servomotor
            myServo.attach(13);

            // Inicialización de la comunicación serial
            Serial.begin(9600);
            Serial.println("Sistema Listo");
        }

        void loop() {
            // Enviar un pulso de 10 microsegundos en el pin de disparo
            digitalWrite(trigPin, LOW);
            delayMicroseconds(2);
            digitalWrite(trigPin, HIGH);
            delayMicroseconds(10);
            digitalWrite(trigPin, LOW);

            // Leer la duración del pulso en el pin de eco
            duration = pulseIn(echoPin, HIGH);

            // Calcular la distancia en cm
            distance = duration * 0.034 / 2;

            // Imprimir la distancia medida en el monitor serial
            Serial.print("Distancia: ");
            Serial.print(distance);
            Serial.println(" cm");

            // Comprobar si la distancia medida está por debajo del umbral
            if (distance < threshold) {
                // Activar LEDs y otros dispositivos
                for (int i = 0; i < 8; i++) {
                    digitalWrite(devicePins[i], HIGH);
                }

                // Mostrar mensaje en LCD
                lcd.clear();
                lcd.print("Proximidad Detectada");

                // Imprimir mensaje en el monitor serial
                Serial.println("Proximidad Detectada");

                // Mover servomotor
                moveServo();

                delay(2000); // Esperar 2 segundos

                // Apagar LEDs y otros dispositivos
                for (int i = 0; i < 8; i++) {
                    digitalWrite(devicePins[i], LOW);
                }

                // Limpiar pantalla LCD
                lcd.clear();
                lcd.print("Sistema Listo");

                // Imprimir mensaje en el monitor serial
                Serial.println("Sistema Listo");
            }
        }

        void moveServo() {
            for (int servoPos = 0; servoPos <= 180; servoPos += 1) {
                myServo.write(servoPos);
                delay(15);
            }
            for (int servoPos = 180; servoPos >= 0; servoPos -= 1) {
                myServo.write(servoPos);
                // Hacer que los LEDs y otros dispositivos parpadeen
                for (int i = 0; i < 8; i++) {
                    digitalWrite(devicePins[i], HIGH);
                }
                delay(100);
                for (int i = 0; i < 8; i++) {
                    digitalWrite(devicePins[i], LOW);
                }
                delay(100);
            }
        }
    

Variaciones: