#include #include #include // Pines del sensor ultrasónico const int trigPin = 9; const int echoPin = 8; // Pines del motor (L298N) const int motorPWM = 5; const int motorDir = 7; // Pines de LEDs simples const int ledDetectado = 3; const int ledNoDetectado = 4; // Pines del micrófono y tira LED NeoPixel #define SOUND_SENSOR_PIN A0 #define NEOPIXEL_PIN 6 #define NUM_PIXELS 63 #define SOUND_THRESHOLD 128 // DFPlayer SoftwareSerial mp3Serial(10, 11); // RX, TX DFRobotDFPlayerMini mp3; bool mp3Ready = false; // NeoPixel Adafruit_NeoPixel strip(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800); // Control de tiempo unsigned long lastActivation = 0; unsigned long activationCooldown = 1000; void setup() { Serial.begin(9600); mp3Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorPWM, OUTPUT); pinMode(motorDir, OUTPUT); analogWrite(motorPWM, 0); digitalWrite(motorDir, LOW); pinMode(ledDetectado, OUTPUT); pinMode(ledNoDetectado, OUTPUT); strip.begin(); strip.clear(); strip.show(); if (mp3.begin(mp3Serial)) { mp3.volume(25); mp3Ready = true; Serial.println("DFPlayer listo."); } else { Serial.println("DFPlayer no responde."); } randomSeed(analogRead(0)); // Inicializar aleatoriedad } void loop() { bool trigger = false; // Sensor ultrasónico digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); float distance = duration * 0.034 / 2; if (distance > 0 && distance < 15) { trigger = true; } // Sensor de micrófono int soundLevel = analogRead(SOUND_SENSOR_PIN); if (soundLevel > SOUND_THRESHOLD) { trigger = true; } // Activación si alguno de los sensores se dispara if (trigger && millis() - lastActivation > activationCooldown) { lastActivation = millis(); activarSistema(); } delay(50); } void activarSistema() { Serial.println("Activación por sensor!"); // LEDs simples digitalWrite(ledDetectado, HIGH); digitalWrite(ledNoDetectado, LOW); // Tira LED con color aleatorio uint8_t r = random(50, 256); uint8_t g = random(50, 256); uint8_t b = random(50, 256); for (int i = 0; i < NUM_PIXELS; i++) { strip.setPixelColor(i, strip.Color(r, g, b)); } strip.show(); // DFPlayer if (mp3Ready) { mp3.play(1); } // Motor digitalWrite(motorDir, HIGH); analogWrite(motorPWM, 100); delay(200); analogWrite(motorPWM, 255); // Apagar después de 1 segundo delay(1000); strip.clear(); strip.show(); analogWrite(motorPWM, 0); digitalWrite(ledDetectado, LOW); digitalWrite(ledNoDetectado, HIGH); }