Sistema Antifurto

Ho provato a fare uno sketch per un antifurto, solo che appena carico lo sketch su arduino, il BUZZER comincia immediatamente a suonare, e si accendono sia il ledON che il ledAllarme. Ho provato pure a scollegare il sensore di movimento, e sostituirlo con un terzo pulsante per "simulare" il sensore, pensando che potesse essere il sensore ad essere partito, ma così non è stato. Qualcuno che mi spiega dove sto sbagliando? Sono ancora alle primissime armi, non linciatemi.

Ho condiviso l'immagine dello sketch, oltre che al code, se volete avere una visione visiva migliore del codice.

int ledON = 2;
int ledOFF = 3;
int ledAllarme = 4;
int PIR_PIN = 5;
int tastoAccensione = 6;
int tastoSpegnimento = 7;
int BUZZER = 8;

void setup() {
  pinMode(ledON, OUTPUT);
  pinMode(ledOFF, OUTPUT);
  pinMode(ledAllarme, OUTPUT);
  pinMode(PIR_PIN, INPUT);
  pinMode(tastoAccensione, INPUT);
  pinMode(tastoSpegnimento, INPUT);
  pinMode(BUZZER, OUTPUT);
}

void loop() {


if (digitalRead(tastoAccensione) == HIGH) {
  digitalWrite(ledON, HIGH);  //Quindi, se premo il pulsante attivo un led che indica che "il sistema è attivo" (potrei farlo con un booleano in teoria(????))
} else if (digitalRead(tastoSpegnimento) == HIGH && digitalRead(ledON) == HIGH){
  digitalWrite(ledOFF, HIGH);
  delay(500);
  digitalWrite(ledOFF, LOW);
  digitalWrite(ledAllarme,LOW);
  noTone(BUZZER);
  // Se premo il secondo pulsante, disabilito tutto l'allarme, e non entrerà più in funziona, questo anche a causa dell'if che metterò dopo
}
if (digitalRead(ledON) == HIGH) {    // In questa sezione di if, volevo impostare che, se il ledON è acceso (che quindi si potrà accendere SOLO con la pressione del pulsanteAccensione) e se il PIR_PIN dovesse rivelare movimenti, allora
  if (digitalRead(PIR_PIN) == HIGH) {   // il buzzer ed il led allarme si accenderanno, mentre, se premerò il pulsanteSpegnimento, essi si spegneranno
    digitalWrite(ledAllarme, HIGH);
    tone(BUZZER, millis()%1000+200);
  }
}
}

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Tu sai che gli ingressi digitali di Arduino NON possono essere lasciati scollegati vero? ... quando lo sono, causa la loro altissima impedenza, captano qualsasi disturbo e passano tranquillamente da HIGH a LOW e viceversa senza motivo apparente. Mi auguro quindi che i vari bottono siano collegati ai pin in modo che, comunque, anche a bottone NON premuto, il pin venga tenuto ad un livello fisso da una resistenza o di pull-up, se il bottone chiude a massa, o di pull-down, se il bottone chiude a Vcc.

Confermaci che nel tuo schema questo è stato considerato e poi si prosegue con la ricerca del problema ...

Guglielmo

I pulsanti sono tutti collegati ai rispettivi PIN di arduino, per poi collegare lo stesso piedino al postivo della breadboard con un cavo, ed ho collegato l'altro piedino al negativo della breadboard, sempre con un cavo.
Quindi dovrei collegarli al negativo utilizzando una resistenza?

Marco

Skelenz_:
Quindi dovrei collegarli al negativo utilizzando una resistenza?

La logica è che se il pin deve fare qualcosa quando l'interruttore
lo collega a massa devi mettere una resistenza fissa tra il positivo e il pin, 10 k.
Viceversa se il pin deve fare qualcosa quando l'interruttore gli porta il positivo
La resistenza va messa tra il pin e la massa.
In questo modo il pin riceve solo due stati, e non resta nello stato incerto( aperto)
In questo caso amplifica di brutto i disturbi presenti nei pressi e da falsi interventi.
Come ti diceva anche Guglielmo.
Ciao.

Grazie per le risposte, sono riuscito a risolvere, ora il circuito funziona come dovrebbe, tranne che per una cosa: nonostante io abbia messo "tone(BUZZER, millis()%1000+200);" il BUZZER continua a fare un suono monotono e acuto, pensando che potesse essere colpa del BUZZER, ho provato ad impostare un millis pure nel led, e verificare che cosa sarebbe successo, risultato: il led non si accende e spegne come dovrebbe, quindi credo che qua ci sia un problema di codice, più che di circuito.

EDIT: Credo di aver capito il motivo, per caso c'entra il fatto che ho collegato il BUZZER ad un pin NON digitale? Stessa cosa per il led

Marco

Su Arduino UNO, tutti i pin sono digitali, anche quelli marcati analogici ... questi ultimo sono dei digitali che, tramite un circuito interno, possono essere collegati al ADC, ma se li usi come digitali ... non c'è alcun problema.

Piuttosto, credo che tu debba capire bene come usare millis() ... prova a studiare prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... vedrai che, alla fine, ti sarà tutto più chiaro :wink:

Guglielmo

Ho provato a caricare un secondo sketch su arduino per testare il millis, ed è il seguente:

int BUZZER = 3;

void setup() {
  // put your setup code here, to run once:
pinMode(BUZZER, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
tone(BUZZER, millis()%1000+200);
}

con solo questo il buzzer varia sempre la sua frequenza, simulando il suono di un allarme, quindi perché con lo sketch classico dell'antifurto, rimane un suono monotono?

Uptade: Fino ad ora avevo utilizzato un pulsante per "simulare" il sensore di movimento, ho sostituito codesto pulsante con il sensore di movimento per vedere come procedevano le cose, risultato:
Il fatto dell'"accendi/spegni" il circuito funziona, unico problema è il sensore che è come se rivelasse costantemente movimento, nonostante non ci passi nulla davanti. Aggiungo anche che sostituendo il pulsante con il sensore, il BUZZER ha cominciato a riprodurre il suono desiderao, ed il led cominciare a lampeggiare come dovrebbe fare