Antifurto temporizzato

Progetti Arduino
Rispondi
Tommy Aggiustatutto
Messaggi: 138
Iscritto il: sab 13 lug 2019, 22:59
Località: Provincia di Novara
Contatta:

Antifurto temporizzato

Messaggio da Tommy Aggiustatutto »

Buonasera a tutti, sto costruendo un piccolo antifurto per delle arnie e ho collegato un esp01 ad un reedswitch così in caso venga sollevata l'arnia si apre il contatto e tramite la scheda esp e IFTTT mi arriva una chiamata sul telefono. Però volevo collegare anche una sirena che dopo circa 5 minuti smetta di suonare per evitare di scaricare tutta la batteria che alimenta il tutto. Così ho collegato un arduino e un relè e la mia idea era di fare in modo che quando viene aperto il contatto del reed, l'arduino faccia scattare il relè e dia alimentazione alla sirena per 5 minuti, e poi smetta. Non ho trovato nessuno scketch del genere in rete. riuscireste a darmi una mano per cortesia?
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Antifurto temporizzato

Messaggio da pgv »

Manca (e' implicito ma meglio chiedere) una specificazione di che cosa deve succedere se:

1. il coperchio viene richiuso prima dei 5 minuti di sirena;
2. il coperchio viene richiuso dopo i 5 minuti di sirena;
3. il coperchio non viene mai richiuso.

Assumendo che la risposta e' "la sirena suona per 5 minuti dopo la prima apertura dell'arnia, indipendentemente da una eventuale chiusura. La sirena non viene riarmata se non chiudendo l'arnia, e allora una nuova apertura causa altri cinque minuti di sirena.", allora puo' bastare

Codice: Seleziona tutto

// N.B.: tutti questi valori possono essere adattati alla situazione "reale". 
// Sono raggruppati qui per comodita' di accesso

// Definiamo che pin sono collegati al sensore di apertura dell'arnia
#define PINARNIA 1
// Il valore letto quando l'arnia e' chiusa/aperta
#define ARNIA_CHIUSA HIGH
#define ARNIA_APERTA LOW
// e al comando della sirena
#define PINSIRENA 2
// nonche' il valore di uscita per far suonare la sirena
#define SIRENA_ON HIGH
#define SIRENA_OFF LOW

uint8_t allarme;

void setup() {
// Definisci la direzione dei pin utilizzati
  pinMode(PINARNIA, INPUT);
  pinMode(PINSIRENA, OUTPUT);
  digitalWrite(PINSIRENA, SIRENA_OFF);
  allarme = false;
}

void loop() {
  int iterazioni;
  
  if (allarme == false) {
  // L'arnia era chiusa l'ultima volta che ho guardato...
    if (digitalRead(PINARNIA) == ARNIA_APERTA) {
    // Oh no! Hanno aperto l'arnia! Occorre agire
      allarme = true; // Ricordiamoci che siamo gia' passati di qui
      digitalWrite(PINSIRENA, SIRENA_ON);  // Accendiamo la sirena
      delay(300000L); // Aspettiamo 5 minuti * 30 secondi/minuti * 1000 millisecondi/secondo
      digitalWrite(PINSIRENA, SIRENA_OFF); // Spegniamo la sirena
    } 
  } else {
  // Siamo gia' passati per un ciclo di allarme, vediamo se hanno richiuso l'arnia
    if (digitalRead(PINARNIA) == ARNIA_CHIUSA) {
    // Hanno richiuso l'arma, resettiamo l'allarme
      allarme = false;
    }
  }
}
Ammetto di averlo compilato ma non eseguito. Come base di partenza dovrebbe andar bene, ovviamente ci si possono aggiungere molte cose.
Rispondi