#include <ESP32Servo.h>
// --- CONFIGURACIÓN DE PINES ---
const int PIN_TRIG = 5;
const int PIN_ECHO = 18;
const int PIN_SERVO = 19;
const int PIN_BUZZER = 4;
Servo miServo;
// ==========================================================
// 🚩 SECCIÓN DE HACKEO
// ==========================================================
int setPointCm = 100; // DISTANCIA DE ACTIVACIÓN (Umbral)
int velocidadServo = 30; // VELOCIDAD: Cuánto avanza el servo en cada ciclo
int tiempoSonido = 50; // DURACIÓN: Qué tan largo es cada "pitido"
// ==========================================================
// Variables de control interno (No tocar para el hackeo básico)
int posicionActual = 0;
int direccion = 1; // 1 para derecha, -1 para izquierda
void setup() {
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_BUZZER, OUTPUT);
miServo.attach(PIN_SERVO);
miServo.write(posicionActual);
Serial.println(">>> SISTEMA DE MOVIMIENTO CONSTANTE LISTO <<<");
}
void loop() {
// 1. MEDICIÓN DE DISTANCIA
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long duracion = pulseIn(PIN_ECHO, HIGH);
int distancia = duracion * 0.034 / 2;
// 2. LÓGICA DE ACTIVACIÓN CONSTANTE
if (distancia > 0 && distancia < setPointCm) {
Serial.print("OBJETO DETECTADO A: ");
Serial.println(distancia);
// --- MOVIMIENTO CONSTANTE ---
// Actualizamos la posición sumando o restando según la dirección
posicionActual += (direccion * velocidadServo);
// Si llegamos a los límites (0 o 180), rebotamos
if (posicionActual >= 180) {
posicionActual = 180;
direccion = -1; // Cambia a la izquierda
}
if (posicionActual <= 0) {
posicionActual = 0;
direccion = 1; // Cambia a la derecha
}
miServo.write(posicionActual);
// --- SONIDO PROGRESIVO ---
// El sonido suena más rápido conforme te acercas
digitalWrite(PIN_BUZZER, HIGH);
delay(tiempoSonido);
digitalWrite(PIN_BUZZER, LOW);
// El silencio se acorta según la distancia (más velocidad de pitido)
delay(distancia * 5);
}
else {
// --- ESTADO DE REPOSO ---
digitalWrite(PIN_BUZZER, LOW);
// Opcional: El servo puede quedarse quieto o volver a 0
// miServo.write(0);
delay(50);
}
}
No hay comentarios:
Publicar un comentario