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?
// 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);
}
}
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?
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);
}
}
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?
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.
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.