Modulo PIR+Arduino*DFplayer, dopo UN ORA si BLOCCA TUTTO!

Ciao a tutti,
ho questo problema che non riesco a risolvere:

Sto usando Arduino NANO su expansion shield, con modulo PIR e il DFplayer Mini e un modulo RELE (il classico modulo con rele blu a logica inversa)
Cassa collegata al GND e al DAC del DFplayer.

Lo scketch caricato è questo:

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

int PIRpin = 9; 
int Pir_Stato = 0;
int LedVERDE = 13;
int RELE = 4; 

SoftwareSerial ss(3, 2); 
DFRobotDFPlayerMini mp3; 

//# SETUP
void setup() {
digitalWrite(RELE, LOW);
delay(1000);

  pinMode(LedVERDE, OUTPUT);
  pinMode(RELE, OUTPUT);
  pinMode(PIRpin, INPUT);

digitalWrite(LedVERDE, LOW);
 
 
//# === Setting DFPlayer  
  delay(1000);   
  ss.begin(9600); 
  delay(1000);
  if (!mp3.begin(ss)) {
    for (;;); 
    } //# controllo DFPlayer
    
  delay(1000);
  mp3.disableLoopAll();
  mp3.disableLoop();
  mp3.EQ(DFPLAYER_EQ_NORMAL);
  mp3.enableDAC();
  mp3.volume(30); //# VOLUME: massimo =30

} //# FINE Setup



//# .........INIZIO LOOP
void loop() {
delay(300);

Pir_Stato = digitalRead(PIRpin);
if (Pir_Stato == HIGH) {
 
  mp3.enableDAC();
  digitalWrite(RELE, HIGH);
  digitalWrite(LedVERDE, HIGH);
  delay(200);

  mp3.volume(30); 
  digitalWrite(RELE, HIGH);
  delay(200);
  
  mp3.play(1);     
 delay(72000);  

 delay(500);
 digitalWrite(RELE, LOW);
 digitalWrite(LedVERDE, LOW);
 delay(500);  
 digitalWrite(RELE, LOW);
} //# Fine Allarme

Dopo avere ricevuto il segnale di allarme PIR, il RELE commuta per dare corrente alla cassa alimentata esternamente, attende e poi fa partire l'unico .MP3 che c'è sulla SD.
Attende i 72secondi del MP3 poi spegne la cassa.
Hoi messo il LED interno Pin13 come visualizzazione del segnale PIR allarme ricevuto.

Il tutto FUNZIONA, il PIR da il segnale di avvio anche a distanza di 15 minuti tra un allarme e l'altro... MA SE ASPETTO circa un ora, e passo davanti al PIR per farlo partire, NON funziona più nulla.
Neppure il LED interno si accende.... in questa fare di "blocco" ho provato a scollegare e ricollegare i tre fili del PIR, ma non si è sbloccata la situazione.
Sono costretto a premere il Reset su Arduino.

Nota: I collegamenti sono tutti fatti con fili molto corti.

PS: L'unica cosa un po strana che ho fatto è alimentare tutto da un alimentatore 5Vcc a spina da 2Ampere, e Arduino lo alimento dando il +5Vcc e GND direttamente ai Pin della Expansion shield e non via USB o Jack 12Vcc o +Vin (che deve avere 12Vcc)
Nonostante questa aliemntazine non usuale però il tutto funziona per decine di minuti!

Cosa posso fare per capire la causa?? Lo sketch così come è è corretto o puo fare andare in stallo aArduino?

Che cosa interrompe esattamente detto relè?

Intendi un LED che è montato sul sensore PIR o il LED da te controllato su Arduino?

Se l'alimentatore da veramente 5V non vedo cosa ci sia di strano ... si può tranquillamente alimentare Arduino NANO dal pin 5V.

Non è esatto, normalmente da Jack o da VIN si può entrare con una tensione che va dai 7V ai 12V (massimo consigliato).

Comunque se entri con i 5V stabilizzati è meglio, eviti di passare tramite il regolatore che è sulla scheda.

Guglielmo

Ciao, grazie per la risposta:

  1. Il rele TAGLIA alimentazione della cassa amplificata, lo faccio per spegnerla e per eliminare in ronzio di fondo (è una cassa vecchia per PC a 5Vcc USB)

  2. Il "LedVERDE" sul PIN 13 è il led interno sulla scheda Arduino, lo uso per capire se il PIR ha dato segnale... vedendo il programma è corretto cio giusto? Quindi se non si accende è perchè NON riceve il segnale PIR.

Ma appunto, nella fase di "stallo" anche scollegando completamente il PIR e ricollegandolo non ri "riprende" e non funziona comunque... non so se è il PIR il problema... oppure puo essere qualcosa altro che blocca il programma /Arduino?

Non mi hai risposto ... ho capito che taglia l'alimentazione, ma ... a monte o a valle dell'alimentatore (REGOLAMENTO, punto 15)?

Guglielmo

La cassa amplificata richiede alimentazione di soli 5Volt (Infatti aveva solo il cavo USB per collegarla al PC ed accenderla.)

Il rele taglia il +5Vcc che arriva dall'alimentatore a 5Vcc.
Il 5Vcc entra nel COMUNE del relè, L'uscita NC è collegata al filo +5V della cassa. Il GND alimentatore è collegato direttamente al GND cassa.
Lo stesso +5Vcc e GND alimenta 1) Arduino Nano che alimenta poi il DFplayer, 2) la parte di potenza del modulo Rele blu.

Il problema però è che Arduino sembra non ricevere più ( o non sia più in grado di "sentire" ) il segnale ON del PIR.
Non è un problema che non si sente l'audio dala cassa per problemi di alimentazione.

la parte di codice del loop:

mp3.enableDAC();
digitalWrite(RELE, HIGH);
digitalWrite(LedVERDE, HIGH);
delay(200);
mp3.volume(30); 

l'ho inserita perchè pensavo che il problema fosse il DFplayer che va in stand-by, ma non è cambiato nulla, dopo un ora il sistyema non risponde più.

Molto strano ... non vedo cose che possano riempire la SRAM e mandare in crash il tutto ...
... puoi fare una modifica? Metti nel loop() un lampeggio del LED indipendentemente dallo stato del PIR (al limite per indicare il funzionamento del PIR, usi un LED esterno collegato con una resistenza da 220Ω ad un altro pin di I/O) così vedi se il programma cessa proprio di girare ... :roll_eyes:

Guglielmo

Il modulo PIR come esce? Se dà solo una chiusura serve una resistenza di pull-down o pull-up.

e come mai lo usi al contrario di come dovrebbe essere

Se è collegato come dice, torna:

Ciao, Ale.

io mi riferivo alla tipologia del relè

Concordo.
L'unica cosa che mi viene in mente (a parte l'uso di delay che sostituirei con millis) è che forse si "impiccia" la libreria e bisogna usare esplicitamente uno stop. Inoltre vedo digitalWrite() prima del pinMode(), e vari inutili delay.
Poi usa la seriale per fare debug. Io proverei questo (apri il monitor seriale e vedi cosa succede, nel caso riporta qui tutto l'output con copia/incolla):

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

int PIRpin = 9; 
int Pir_Stato = 0;
int LedVERDE = 13;
int RELE = 4; 

SoftwareSerial ss(3, 2); 
DFRobotDFPlayerMini mp3; 

//# SETUP
void setup() {
  Serial.begin(9600);
  Serial.println("SETUP");
  pinMode(RELE, OUTPUT);
  digitalWrite(RELE, LOW);
  pinMode(PIRpin, INPUT);
  pinMode(LedVERDE, OUTPUT);
  digitalWrite(LedVERDE, LOW);
  
  //# === Setting DFPlayer  
  ss.begin(9600); 
  delay(1000);
  if (!mp3.begin(ss)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }	
  mp3.disableLoopAll();
  mp3.disableLoop();
  mp3.EQ(DFPLAYER_EQ_NORMAL);
  mp3.enableDAC();
  mp3.volume(30); //# VOLUME: massimo =30

  Serial.println("FINE SETUP");
} //# FINE Setup

//# .........INIZIO LOOP
void loop() {
  delay(300);
  Pir_Stato = digitalRead(PIRpin);
  if (Pir_Stato == HIGH) {
    Serial.println("ALLARME");
	digitalWrite(RELE, HIGH);
	digitalWrite(LedVERDE, HIGH);

    Serial.println(" + Riproduzione...");
	mp3.play(1);
	delay(72000);  
	mp3.stop();
    Serial.println(" + Fine allarme");
	digitalWrite(RELE, LOW);
	digitalWrite(LedVERDE, LOW);
  } //# Fine Allarme
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.