problema su progetto allarme

salve a tutti, ho realizzato un piccolo allarme con arduino uno: 2 sensori pir, un piezo e 2 led(1 rosso e 1 verde) solo che ho incontrato questo tipo di problema...innanzitutto il piezo mi suona sempre...la luce dei led è veramente bassa ma cosa più importante è che prima che mettessi i led tutto funzionava benissimo ora invece incontro quei problemi che ho scritto prima...
ecco il codice:

const byte SegnalePin1 = 2;
const byte SegnalePin2 = 3;
const byte SuonoPin = 8;
const byte LedVerde = 4;
const byte LedRosso = 5;

void setup(){
  pinMode(SegnalePin1, INPUT);
  pinMode(SegnalePin2, INPUT);
  pinMode(LedVerde, OUTPUT);
  pinMode(LedRosso, OUTPUT);
  pinMode(SuonoPin, OUTPUT);
}
void loop(){
  int SegnalePir1 = digitalRead(SegnalePir1);
  int SegnalePir2 = digitalRead(SegnalePir2);
  if (SegnalePir1 == HIGH){
    digitalWrite(LedVerde, HIGH);
    digitalWrite(LedRosso, LOW);    
    tone(SuonoPin, 660, 100);
    delay(150);
  }
  
    else{
      digitalWrite(LedVerde, LOW);
      digitalWrite(LedRosso, LOW);
      noTone(SuonoPin);
      delay(150);
    }
    
  if(SegnalePir2 == HIGH){
    digitalWrite(LedVerde, LOW);
    digitalWrite(LedRosso, HIGH);    
    tone(SuonoPin, 660, 100);
    delay(150);
    }
    
      else{
      digitalWrite(LedVerde, LOW);
      digitalWrite(LedRosso, LOW);
      noTone(SuonoPin);
      delay(150);
      }
}

e inoltre i led mi lampeggiano in un modo alternato mentre io vorrei che quando rileva qualcosa il pir1 si accende un led e invece quando rileva qualcosa il pir2 si accende l'altro led...cmq grazie mille per l'aiuto :slight_smile:

Hai messo le resistenze in serie con i led? che valore hanno?

Guarda anche questo esempio --> http://arduino.cc/en/Tutorial/ButtonStateChange

Sei sicuro dei collegamenti ?
Il codice mi pare corretto. Se il piezo suona sempre allora uno o tutti e due i pir rilevano sempre qualcosa.
Riesci a fare foto o disegno dei collegamenti?

Dovresti imparare a farti un pò di debug, usando il Serial Monitor (pulsante a destra nell' IDE).
Primo nella setup() devi abilitare la comunicazione seriale aggiungendo 2 righe:

void setup() {
  delay(1000);
  Serial.begin(9600);
  .. resto del tuo codice
}

Nel programma potrai mandare messaggi al Monitor Seriale dell'IDE usando Serial.println("messaggio")
Ad esempio aggiungi 2 avvisi uno per ogni PIR attivato:

if (SegnalePir1 == HIGH) {
    Serial.println("PIR 1 attivo");        // msg al serial monitor
    digitalWrite(LedVerde, HIGH);
...
if(SegnalePir2 == HIGH) {
    Serial.println("PIR 2 attivo");        
    digitalWrite(LedVerde, LOW);
...

allora per quanto riguarda i led ho risolto...mi ero sbagliato a mettere le resistenze...(avevo messo non volendo delle resistenze da 10kohm). ora ho seguito il consiglio di nid69ita... a schermo mi stampa che il pir1 è attivo....e sinceramente nn riesco a capire il perchè....l'ho persino staccato e ancora mi dice che il pir 1 è attivo....

Oh, certo, solo ora ho visto l'errore.
Passi alla lettura NON il pin ma un valore (confusione tra Pir e Pin)

  int SegnalePir1 = digitalRead(SegnalePir1);
  int SegnalePir2 = digitalRead(SegnalePir2);

Modificalo in

  int SegnalePir1 = digitalRead(SegnalePin1);
  int SegnalePir2 = digitalRead(SegnalePin2);

Magari SegnalePin1 e SegnalePin2 falli diventare PirPin1 e PirPin2

ho corretto solo che ho notato una cosa....che quando mi rileva qualcosa a prescindere da quale pir lo faccia mi si accendono entrambi i led e andando a verificare sul monitor infatti trovo scritto che entrambi sono attivi quando invece ho persino staccato uno dei 2 pir....

... non è che quando i pir non sono in allarme ... il pin è flottante vero ??? Ovvero, hai messo delle resistenze di pull-down in modo da tenere il pin a LOW quando il pir non è attivo ???

Guglielmo

gpb01:
... non è che quando i pir non sono in allarme ... il pin è flottante vero ??? Ovvero, hai messo delle resistenze di pull-down in modo da tenere il pin a LOW quando il pir non è attivo ???

Guglielmo

emmm no... sai sono un novizio di arduino...mi potresti spiegare come fare?? grazie

Leggendo il codice immagino che, quando va in allarme, il PIR chiude un contatto verso il +Vcc ... ma, quando è aperto ... ti trovi i pin di Arduino "flottanti" e, dato che sono ad alta impedenza ... captano anche "il volare di una mosca", dandoti indicazioni totalmente sballate :grin:

MAI e ripeto MAI lasciare pin flottanti ... salvo appunto ... avere in input valori completamente causali !!!

  1. Soluzione senza cambiare il SW : metti su ciascun pin (quelli di input dove leggi i PIR) una resistenza da 10 KOhm verso massa che, quando il PIR è a riposo, tiene il pin LOW.

  2. Soluzione cambiando il SW, ma senza resistenza esterna : metti i PIR che quando vanno in allarme chiudono verso MASSA e nel software dichiari i pin in input come :

pinMode(SegnalePin1, INPUT_PULLUP);
pinMode(SegnalePin2, INPUT_PULLUP);

dopo di che la condizione di allarme si verifica quando il pin, invece che HIGH, è LOW :wink:

L'opzione INPUT_PULLUP attive delle resistenze INTERNE alla MCU che, quando il pin non è collegato a nulla, lo tengono verso il +Vcc.

Guglielmo

gpb01:
Leggendo il codice immagino che, quando va in allarme, il PIR chiude un contatto verso il +Vcc ... ma, quando è aperto ... ti trovi i pin di Arduino "flottanti" e, dato che sono ad alta impedenza ... captano anche "il volare di una mosca", dandoti indicazioni totalmente sballate :grin:

MAI e ripeto MAI lasciare pin flottanti ... salvo appunto ... avere in input valori completamente causali !!!

  1. Soluzione senza cambiare il SW : metti su ciascun pin (quelli di input dove leggi i PIR) una resistenza da 10 KOhm verso massa che, quando il PIR è a riposo, tiene il pin LOW.

  2. Soluzione cambiando il SW, ma senza resistenza esterna : metti i PIR che quando vanno in allarme chiudono verso MASSA e nel software dichiari i pin in input come :

pinMode(SegnalePin1, INPUT_PULLUP);

pinMode(SegnalePin2, INPUT_PULLUP);




dopo di che la condizione di allarme si verifica quando il pin, invece che HIGH, è LOW ;)

L'opzione INPUT_PULLUP attive delle resistenze INTERNE alla MCU che, quando il pin non è collegato a nulla, lo tengono verso il +Vcc.

Guglielmo

già le resistenze ci sono....le avevo messe come hai indicato tu...

simo9115:
già le resistenze ci sono....le avevo messe come hai indicato tu...

... ah .. bene .. e il risultato quale è ???

Guglielmo

P.S. : Quando riporti un "quote" riporta solo quello che è realmente necessario ... chi ha una linea lenta ... ti ringrazierà :wink:

il risultato è che a schermo mi dice che mi suonano entrambi contemporaneamente infatti i led sono entrambi accesi...quello che nn capisco è che sta mattina prima di inserire i led tutto funzionava perfettamente ora nn funziona + e nn riesco a capire il perchè mi fa questo scherzo...

Dobbiamo "fidarci" di quello che descrivi per i collegamenti. Secondo me è meglio se fai una foto (se puoi) in questo modo siamo sicuri. @Guglielmo ne sà qualcosa con me. Gli chiesi consiglio per un circuito con un errore, mi disse forse è una certa cosa ma io continuavo a dire che quel che mi indicava lui era corretto, mentre non lo era. :grin: :grin:

nid69ita:
Dobbiamo "fidarci" di quello che descrivi per i collegamenti. Secondo me è meglio se fai una foto (se puoi) in questo modo siamo sicuri. @Guglielmo ne sà qualcosa con me .....

... tranquillo ... non solo con te Nid :grin: :grin: :grin:

Si simo9115, ci deve essere qualche cosa nei collegamenti ... quindi schema disegnato BENE e foto NITIDA ... :wink:

Guglielmo

ecco qui la foto:

simo9115:
il risultato è che a schermo mi dice che mi suonano entrambi contemporaneamente infatti i led sono entrambi accesi...quello che nn capisco è che sta mattina prima di inserire i led tutto funzionava perfettamente ora nn funziona + e nn riesco a capire il perchè mi fa questo scherzo...

Hai perso alcune lettere sulla Tua tastiera?
Per favore non usare le abbreviazioni SMS. Siamo vecchi che non capiamo queste cose. :wink: :wink: :wink: :wink:
Ciao Uwe

Le resistenze pullup vanno dal pin di entrata a +5V.
Le resistenze pulldown vanno dal pin di entrata a massa.

Tu hai messe la resistenza in corto sul collegamento della breadboard. I collegamenti interni della breadbooard sono:

Ciao Uwe

uwefed:
Le resistenze pullup vanno dal pin di entrata a +5V.
Le resistenze pulldown vanno dal pin di entrata a massa.
Tu hai messe la resistenza in corto sul collegamento della breadboard.

C.V.D.

... ha sbagliato i collegamenti ... :roll_eyes:

Guglielmo

ok questo l'ho capito hihi potete spiegarmi bene come vanno collegati? io sono un neofita e non ho capito molto bene come devo mettere le resistenze...sono quelle dei pir che sono sbagliate giusto?

simo9115:
io sono un neofita e non ho capito molto bene come devo mettere le resistenze...sono quelle dei pir che sono sbagliate giusto?

... come le hai messe tu, praticamente è come se non ci fossero, visto che ... sono in parallelo da un "filo" ... guarda la foto di Uwe, questa :

tu le hai messe tra G e I che, come vedi ... sono tutti uniti ... :roll_eyes:

Le devi mettere tra I ed il negativo (-) ... per tenere, normalmente, il pin di Arduino verso massa ovvero a valore LOW !!!

Guglielmo

P.S. : Essere un "neofita" NON ti esime da studiare la teoria prima di fare il "praticone" senza capire ciò che stai facendo ...