Sensore di movimento

Salve a tutti ho comprato un sensore di movimento da qui:

Volevo fare un esperimento cioè quando passavo la mano davanti al sensore si accendesse un led.
Prima cosa ho collegato il led solo che già da qui sono iniziati i pimi problemi perchè ho collegato il gambo più lungo del led ad una resistenza che poi da li va al gnd mentre l'altro gambo quello più corto ad uno dei pin (nel mio caso pin 13) ho scritto questo programma:

int ledRed   = 13;
 
void setup()
{
  pinMode( ledRed, OUTPUT ); 
  digitalWrite( ledRed, LOW );
  Serial.begin(9600);
}
 
void loop()
{
 digitalWrite(ledRed, HIGH); 
  Serial.print(digitalRead(ledRed)); 
  delay(1000);             
  digitalWrite(ledRed, LOW);
  Serial.print(digitalRead(ledRed));  
  delay(1000);     
}

solo che il led non si accendeva ho invertito il led mettendo il gambo più lungo collegato al pin 13 e l'altro gambo alla resistenza che poi va in gnd e così funziona. Come mai deve essere collegato così gli esempi in rete collegano il gambo più corto al pin 13 mentre quello più lungo passa dalla resistenza e va in gnd.

Successivamente ho collegato il pir con dei cavi, dato che no sapevo come collegare i cavi al pir in quanto il pir ha solo dei forellini ho infilato la punta dei cavi nei forellini e lo poggiato sul tavolo senza muoverlo più. Ho collegato il vcc al 5v, il gnd al gnd e l'out al pin 2.
Poi ho scritto questo codice:

int ledRed   = 13;
int segnal = 2;
 
void setup()
{
  pinMode( ledRed, OUTPUT ); 
  pinMode(segnal, INPUT);
  digitalWrite( ledRed, LOW );
  Serial.begin(9600);
}
 
void loop()
{
  int pirSegnal = digitalRead( segnal );
  Serial.print(pirSegnal);
  
  if(pirSegnal==HIGH){
    digitalWrite(ledRed, HIGH);
  }else{
    digitalWrite(ledRed, LOW);
   } 
  delay(1000);     
}

solo che nel monitor anche se non passavo la mano davanti al sensore risultava movimento infatti nel monitor seriale venivano stampati 1 e 0 a casaccio ecco un esempio:
110001111111001010101

Come mai ho questi problemi? Chi mi può dare una delucidazione?

Grazie millle per l'aiuto.

Per il LED hai già compreso come funziona: non sempre gli esempi sono esatti.

Il fatto che tu non abbia saldato i terminali potrebbe creare falsi contatti: comprati un saldatore anche da pochi euro oppure fatti saldare da un amico tre fili al PIR.

cyberhs:
Per il LED hai già compreso come funziona: non sempre gli esempi sono esatti.

Il fatto che tu non abbia saldato i terminali potrebbe creare falsi contatti: comprati un saldatore anche da pochi euro oppure fatti saldare da un amico tre fili al PIR.

Quindi può dipendere dal fatto che non sono saldati, comunque il codice va bene per testare il pir?

Sì, lo sketch dovrebbe funzionare ed il LED dovrebbe commutare da uno stato al'altro.

cyberhs:
Sì, lo sketch dovrebbe funzionare ed il LED dovrebbe commutare da uno stato al'altro.

Ho saldato i pin solo che il led si accende e spegne da solo senza che passi la mano davanti al sensore, il print continua a stampare 1 e 0 a casaccio perchè non funziona? :frowning:

Hai messo una resistenza di pulldown (10K va bene) tra il pin2 (dove hai collegato il pir) e gnd?

marinaio67:
Hai messo una resistenza di pulldown (10K va bene) tra il pin2 (dove hai collegato il pir) e gnd?

No la resistenza lo messa solo sul led. Quindi devo mettere una resistenza tra il pin gnd del sensore e l'ingresso gnd di arduino giusto? Ma a che serve?

Edit: ho seguito questo esempio:

Solo che il led continua a lampeggiare da solo

No, i GND vanno in comune, ovviamente (altrimenti non funzionera’ mai nulla … il sensore non lo alimenti da Arduino ?), la resistenza di pull-up (o pull down, dipende dal tuo sensore) serve per tenere il pin di Arduino ad uno stato preciso quando il sensore non da uscita …

Ad esempio, quello che hai linkato tu non e’ molto chiaro, perche’ dice “3V high , 0V low, 0V trigger” il che probabilmente significa che porta a zero l’uscita quando c’e’ movimento, ma quando non c’e’, rimane a 3V, non a 5 … se Arduino si aspetta livelli logici fra 0 e 5 V, tenere un pin a 3V non da un segnale molto chiaro …

Potresti usare un “trucco” … collega l’uscita del sensore (out) ad Arduino con una resistenza da 1K, e metti un’altra resistenza da 10K fra il pin di Arduino ed il +5V … non risolve il problema, ma dovrebbe spostare i livelli a sufficenza da fargli sentire la differenza fra i due stati un po meglio …

Etemenanki:
No, i GND vanno in comune, ovviamente (altrimenti non funzionera' mai nulla ... il sensore non lo alimenti da Arduino ?), la resistenza di pull-up (o pull down, dipende dal tuo sensore) serve per tenere il pin di Arduino ad uno stato preciso quando il sensore non da uscita ...

Ad esempio, quello che hai linkato tu non e' molto chiaro, perche' dice "3V high , 0V low, 0V trigger" il che probabilmente significa che porta a zero l'uscita quando c'e' movimento, ma quando non c'e', rimane a 3V, non a 5 ... se Arduino si aspetta livelli logici fra 0 e 5 V, tenere un pin a 3V non da un segnale molto chiaro ...

Potresti usare un "trucco" ... collega l'uscita del sensore (out) ad Arduino con una resistenza da 1K, e metti un'altra resistenza da 10K fra il pin di Arduino ed il +5V ... non risolve il problema, ma dovrebbe spostare i livelli a sufficenza da fargli sentire la differenza fra i due stati un po meglio ...

Ho solo resistenza da 330 ohm e 10K ohm. Ho provato così ho collegato l'out del sensore ad una resistenza di 330 ohm da qui ho collegato una resistenza da 10k ohm sul binario che collega il vcc del sensore ai 5Vinvece il gnd del sensore e collegato al gnd di arduino senza resistenza, solo che continua a non funzionare

Ho anche delle resistenze da 447 ohm come posso risolvere?

Finalmente funziona e ho scoperto il motivo, era l'alimentatore, leggendo in rete ho scoperto che dovevo collegare arduino tramite alimentatore da 12V e non tramite cavo usb adesso funziona anche senza resistenza di pull-down....da qui ho letto il tutto: http://electronics.stackexchange.com/questions/91040/pir-sensor-with-open-collector-arduino-anomalous-results

Ora vorrei capire perchè serve un alimentatore da 12V ?

Chi mi può dare delucidazioni?

Il sensore lavora tra 5 e 9V (vedi datasheet): usando 12V rischi di bruciarlo.

Se invece stai usando i 12V (ingresso jack) per alimentare Arduino e colleghi il PIR ai +5V di Arduino, puoi farlo, anche se l’alimentatore sarebbe meglio da 9V per non sovraccaricare il regolatore di tensione interno.

Piuttosto, leggendo l’articolo che ha risolto il problema, si evince che l’uscita è “open collector”: questo vuol dire che dovresti collegare un resistore da 2.2k-4.7k ohm tra l’uscita e i +5V.

Per la verità, la cosa dovrebbe essere indicata nel datasheet del PIR, cosa che invece non è.

cyberhs:
Il sensore lavora tra 5 e 9V (vedi datasheet): usando 12V rischi di bruciarlo.

Se invece stai usando i 12V (ingresso jack) per alimentare Arduino e colleghi il PIR ai +5V di Arduino, puoi farlo, anche se l'alimentatore sarebbe meglio da 9V per non sovraccaricare il regolatore di tensione interno.

Piuttosto, leggendo l'articolo che ha risolto il problema, si evince che l'uscita è "open collector": questo vuol dire che dovresti collegare un resistore da 2.2k-4.7k ohm tra l'uscita e i +5V.

Per la verità, la cosa dovrebbe essere indicata nel datasheet del PIR, cosa che invece non è.

Ciao grazie per la risposta comunque ho collegato il jack di arduino con un alimentatore di 12V ,ho letto che arduino lavora con 7-12 V quindi penso che il mio alimentatore vada bene perche non va bene?
Inoltre il sensore di movimento e collegato ad arduino senza resistenza, inoltre mi potresti spiegare (nel modo più semplice possibile in quanto sono inesperto nel campo elettrotecnico) cosa è un open collector e come faccio a sapere se il mio sensore è un open collector?
Ultima info ho solo resistenze da 10k ohm da 330 ohm e 447 ohm quale posso collegare tra il vcc e l'uscita del sensore?

Per stabilizzare la tensione a 5V, il regolatore deve dissipare la differenza di tensione in ingresso in calore.

Con 12V deve dissipare ben 7V mentre con 9V in ingresso, la differenza si riduce a 4V.

cyberhs:
Per stabilizzare la tensione a 5V, il regolatore deve dissipare la differenza di tensione in ingresso in calore.

Con 12V deve dissipare ben 7V mentre con 9V in ingresso, la differenza si riduce a 4V.

Ciao scusa il disturbo mi potresti dare delle ultime delucidazioni:

Il sensore di movimento e collegato ad arduino senza resistenza perchè serve la resistenza?, inoltre mi potresti spiegare (nel modo più semplice possibile in quanto sono inesperto nel campo elettrotecnico) cosa è un open collector e come faccio a sapere se il mio sensore è un open collector?
Ultima info ho solo resistenze da 10k ohm da 330 ohm e 447 ohm quale posso collegare tra il vcc e l'uscita del sensore?

Ripeto: il datasheet che hai fornito non dice che l'uscita è open collector.

Quindi in teoria non dovrebbe servire nessun resistore.

Comunque, prova con una da 10k oppure con due in parallelo da 10k (= 5k).