Pin schaltet ohne angeschlossen zu sein

hallo
ich habe ein arduino mit einem led auf pin 13 und einem lautsprecher auf pin 10 mit widerstand 220 Ω. nun wollte ich einen pir auf pin 2 anschliessen. ich habe erst den draht auf pin 2 gesteckt und noch nirgends angeschlossen - und es schaltet bereits ! was mache ich falsch?

hier ist der code und ein bild

// Uses a PIR sensor to detect movement, buzzes a buzzer
// more info here: http://blog.makezine.com/projects/pir-sensor-arduino-alarm/
// 
// based upon:
// PIR sensor tester by Limor Fried of Adafruit
// tone code by michael@thegrebs.com

 
int ledPin = 13;                // choose the pin for the LED
int inputPin = 2;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
int pinSpeaker = 10;           //Set up a speaker on a PWM pin (digital 9, 10, or 11)

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
  pinMode(pinSpeaker, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    playTone(300, 160);
    delay(150);

    
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
      digitalWrite(ledPin, LOW); // turn LED OFF
      playTone(0, 0);
      delay(300);    
      if (pirState == HIGH){
      // we have just turned off
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
    duration *= 1000;
    int period = (1.0 / freq) * 1000000;
    long elapsed_time = 0;
    while (elapsed_time < duration) {
        digitalWrite(pinSpeaker,HIGH);
        delayMicroseconds(period / 2);
        digitalWrite(pinSpeaker, LOW);
        delayMicroseconds(period / 2);
        elapsed_time += (period);
    }
}

Du hast eine Antenne an Pin 2, die alles auffängt, was da so zufällig in der Luft ist.
Schließe den Eingang komplett an (also den PIR - Link bitte)

Gruß Tommy

ich hab jetzt den pir angeschlossen - die drähte funktionieren wohl immer noch als antenne. es löst auch hinter dem mit einem alurohr abgeschirmten pir aus. was kann ich dagegen tun?

Die Frage nach dem PIR beantworten könnte helfen.

Gruß Tommy

Aktiviere mal versuchsweise den Pullup am Input-Pin

Deshalb hatte ich nach dem PIR gefragt. Das wäre dann sinnvoll / notwendig, wenn der einen Opendrain-/Opencollector-Ausgang hätte.

Gruß Tommy

wenn ich das mit dem pullup mache, funktioniert gar nichts mehr

der pir ist mit HSP1137 09044208 angeschrieben

Wie lang ist Denn Deine Zuleitung? Hast Du es mit abgeschirmten Kabel versucht?
Sind GND von PIR und Arduino verbunden?

Gruß Tommy

... und nun den PIR entfernen uns stattdessen einen Draht als Schalter auf 0V verwenden...
Was passiert?

nicht lang - und ja - gnd pir und arduino sind verbunden - der pir ist im alurohr

ich habe jetzt den pir direkt am arduino angehängt und den code aufs nötigste gekürzt - hilf nichts - es macht, was es will - es dauert ewig, bis es endlich ausschaltet und wenn es aus irgendwelchen gründen wieder einschaltet, dauert es wieder ewig bis es ausschaltet

int ledPin = 13;                // choose the pin for the LED
int inputPin = 2;               // choose the input pin (for PIR sensor)
int pirState = HIGH;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
int pinSpeaker = 10;           //Set up a speaker on a PWM pin (digital 9, 10, or 11)

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
  pinMode(pinSpeaker, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  
  val = digitalRead(inputPin);//pir  // read input value
  
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    Serial.print(val); Serial.println(" pir high! bewegung");
    
    delay(100);  
    
    }     
    
  if (val == LOW) { 
      digitalWrite(ledPin, LOW); // turn LED OFF
      Serial.print(val); Serial.println("       pir low! ");

      delay(10);        
      }
}

Kein Wunder, der braucht ja auch einen Pulldown.
Einen recht hochohmigen, evtl. einen Impedanzwandler

Kein wunder!

Fragmente aus dem Datenblatt:

Ausgang
Offen, wenn kein Objekt erkannt wird

Hast Du es auch schon ohne das Rohr getestet?

Gruß Tommy

... ich würde erstmal ohne PIR testen ob das Programm das gewünschte Verhalten zeigt.
erst dann den PIR auf die funktionierende Software loslassen...

offen, wenn kein objekt erkannt wird - und was heisst das jetzt? ich hab nicht mal das datenblatt gefunden...
ich hab's mit einem 100 kΩ widerstand als pulldown versucht. hat nichts geholfen. was ist ein Impedanzwandler?

Hast du den nackten Sensor oder ein komplettes Board in Verwendung ?
Und ein Datenblatt sollte dein Lieferant dir geben bzw. verlinken können.

Sensoren anschließen, ohne dass dir die Daten bekannt sind?
Abenteuerlich!
Risikofreudig.

Auch wenn wir es hier mit Gleichpannung zu tun haben:
Impedanzwandler – Wikipedia

Gönne der LED bitte ein Widerstand. Sie mag den vielen Strom nicht und wird früher oder später durch Hitze sterben.

ja das datenblatt habe ich auch - aber es ist wohl nicht das passende. jedenfalls steht da nichts von der nummer, die auf dem pir steht. daher dachte ich, dass es vielleicht ein passendes gibt.
den pir habe ich geschenkt bekommen. deshalb weiss ich nicht, woher er ist.
die led, die angeblich nach einem widerstand schreit, steckt auf pin 13 - interner wiederstand - da braucht es keinen zusätzlichen widerstand.
ich hab jetzt einen anderen, grösseren pir (auf einer kleinen platine - siehe bild) genommen und den code nochmals vereinfacht. jetzt läuft es, ist aber recht träge.
mit dem kleinen nackten pir hat es nicht richtig funktioniert. offensichtlich geht es nicht mit einem nackten pir. was müsste ich ändern, dass es damit auch gehen würde?

eigentlich suche ich nach einer lösung, die wie eine lichtschranke funktioniert - aber auf grössere distanz. also eine bewegung wahrnehmen können aber gezielt, punktuell und nicht raumgreifend. infrarot- und ultraschallsensoren kommen nicht in frage, da sie eine harte oberfläche brauchen, um zu funktionieren. mit stoff/kleidern haben sie ihre liebe mühe. hat jemand eine idee, was ich dafür nehmen könnte? es sollte eine günstige lösung sein, da ich für ein projekt sicher gegen 100 sensoren brauchen würde.

Hast du einen Link zu der LED?

Was meinst du mit "recht träge"? Reagiert er zu langsam auf Bewegung oder erkennt er eine nachfolgende Bewegung, nachdem eine erste detektiert wurde erst später und geht zwischendurch aus?
Eventuell hilft dir diese Anleitung zum Umgang mit dem HC-SR501 weiter, besonders der Abschnitt mit den Poti- und Trigger-Einstellungen. Bitte bedenke auch, daß der Sensor nach Inbetriebnahme eine Aufwärmzeit von ca 30-60 Sekunden benötigt.