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
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: