Hilfe für DFPlayer PIR Sensor HC-SR501

Möchte gerne auf einem wemos was flashen.

Und zwar habe ich einen Pir Sensor. Sobald der Pir-sensor etwas erfasst, soll er eine Melodie vom DFPlayer mp3 abspielen.

Bekomme es einfach nicht hin.

Hat jemand einen funktionierenden Sketch ?

Vielen Dank

Reimund

Zeige was du hast

Dann zeige doch einfach deinen bisherigen Sketch sowie ein Schaltbild deines Projektes und beschreibe genau, was nicht funktioniert und was bisher funktioniert.

bin noch am probieren. wollte erst das hier versuchen.

https://cdn.shopify.com/s/files/1/1509/1638/files/Halloween_spider.ino?v=1760603778

https://cdn.shopify.com/s/files/1/1509/1638/files/flashing_eyes.ino?v=1760603782

aber da kommen nur fehlermeldungen. Habe nun einen anderen Sketch gefunden, den ich jetzt noch testen möchte

Danke für die super Informationen.

du musst schon Link zeigen nicht den Download Link.


// Halloween Spider
// Michael Klein | DL!MKP
// 20.Sept 2025 für das AZ-Blog

int i=0;
int k=0;
bool bewegung = false;

void setup() {
  pinMode(5, OUTPUT);   // D1: Rotes Auge links
  pinMode(4, OUTPUT);   // D2: Gelbes Auge links
  pinMode(0, OUTPUT);   // D3: Gelbes Auge rechts
  pinMode(2, OUTPUT);   // D4: Rotes Auge rechts
  pinMode(12, INPUT);   // PIR-Sensor Input
  pinMode(14, OUTPUT);  // DFPlayer Segment 0
  digitalWrite(14,HIGH);// DFPlayer Segment 0 inaktiv
  Serial.begin(9600);
}

void loop() {
  bewegung =digitalRead(12);
  if(bewegung == true){
    Serial.println("Objekt detektiert");
    flashing_eyes();
    digitalWrite(14, LOW); // DFPlayer starten
    delay(100); // DFPlayer bekommt nur einen Startimpuls
    digitalWrite(14, HIGH); // DFPlayer stoppen
    delay(10000);
  }
  bewegung = false; 
}

Was soll das? Das ist herauskopierter Teil aus einem größeren Sketch :wink:
Der PLAYER hat doch Beispiele, beschäftige sich erst damit. Nicht alles auf einmal, erst die Teile zum laufen bringen danach langsam sich einarbeiten.

Ja das stimmt. Hatte mich wohl etwas verrannt.

#include <DFPlayerMini_Fast.h>


#if !defined(UBRR1H)
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // DFPlayer RX, TX
#endif

DFPlayerMini_Fast myMP3;


int PIRPin = 2;               // HC-SR501 Pin
int pirState = LOW;             // beim Start wird keine Bewegung erkannt
int val = 0;                    // Variable zum Auslesen des Status



//
void setup () {
  Serial.begin(115200); //Serielle Kommunikation initalisieren
  mySerial.begin(9600);
  myMP3.begin(mySerial);
  
#if !defined(UBRR1H)
  mySerial.begin(9600);
  myMP3.begin(mySerial);
  
#else
  Serial.begin(9600);
  myMP3.begin(Serial1);
#endif
  Serial.println("Volume set");
  myMP3.volume(100);
  
  
 


                                                                    

 pinMode(PIRPin, INPUT);     // HC-SR501 Pin als Input deklarieren
}


//
void loop () 



{
                   
    
  val = digitalRead(PIRPin);  // HC-SR501 Pin auslesen
  if (val == HIGH) {            // Prüfe ob der Pin "High" ist     



  if (pirState == LOW) {
      // Start
      Serial.println("Bewegung erkannt!");
      // Output-Veraenderung ausgeben
      pirState = HIGH;
      Serial.println("Spiele Sound-Datei ab");
      delay(5000);
      myMP3.play(1); // Spiele die erste Datei ab
      
 

}
} else {


if (pirState == HIGH){
      // Ende
      Serial.println("Bewegung beendet!");
      // Output-Veraenderung ausgeben
      pirState = LOW;
        
        
 
       
}
}
}

Dieses läuft nun. . Muss nur noch sehen wie ich es verhindere, dass der Sketch immer wieder neu den Soundtrack auslöst, wenn nochmals ein Objekt erkannt wird, während der Soundtrack läuft.

Pin BUSY abfragen

Das

pirState = LOW;
pirState = HIGH; 

macht nicht was du willst

#include <DFPlayerMini_Fast.h>

#if !defined(UBRR1H)
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); // DFPlayer RX, TX
#endif

DFPlayerMini_Fast myMP3;

int PIRPin = 2;               // HC-SR501 Pin
int pirState = LOW;             // beim Start wird keine Bewegung erkannt
int val = 0;                    // Variable zum Auslesen des Status

//
void setup ()
{
  Serial.begin(115200); //Serielle Kommunikation initalisieren
  mySerial.begin(9600);
  myMP3.begin(mySerial);
#if !defined(UBRR1H)
  mySerial.begin(9600);
  myMP3.begin(mySerial);
#else
  Serial.begin(9600);
  myMP3.begin(Serial1);
#endif
  Serial.println("Volume set");
  myMP3.volume(100);
  pinMode(PIRPin, INPUT);     // HC-SR501 Pin als Input deklarieren
}

//
void loop ()

{
  val = digitalRead(PIRPin);  // HC-SR501 Pin auslesen

  if (val == HIGH)              // Prüfe ob der Pin "High" ist
  {
    if (pirState == LOW)
    {
      if (myMP3.playing() == false)   // player spielt nicht
      {
        // Start
        Serial.println("Bewegung erkannt!");
        // Output-Veraenderung ausgeben
        pirState = HIGH;
        Serial.println("Spiele Sound-Datei ab");
        myMP3.play(1); // Spiele die erste Datei ab
      }
    }
  }
  else
  {
    if (pirState == HIGH)
    {
      // Ende
      Serial.println("Bewegung beendet!");
      // Output-Veraenderung ausgeben
      pirState = LOW;
    }
  }
}

Pin BUSY abfragen dann brauch man die if Orgie nicht mehr :wink:
Noch was das mit dem pirState = LOW; oder High ist Unsinn wen der ist aktiviert bleibt er aktiviert bis die eingestellte (Je nach Model) Zeit abläuft, est gibt welsche die kann man nicht einstellen ohne alles.

Die Haltezeit des PIR-Ausgangs muss nicht mit der Länge des Sounds übereinstimmen.
Um diese Zeit von der Dauer des Sounds zu entkoppeln, ist das m.E. schon sinnvoll.