Arduinon testaamista PIR motion sensorin kanssa
– Sebastian Nikkonen
– Otso Siniketo
Työvälineet:
– Arduino uno
– ledlamppuja
– hyppylankoja
– PIR motion sensor
– koekytkentälevy
Aloitimme testaamalla kaikkien työvälineiden toimintakunnon, suosittelemme tätä vahvasti ettei tule yllätyksiä myöhemmin.
Kytkimme aluksi yhden ledin kiinni, kuten alkuperäisessä mallissa oli tehty. Ensimmäinen kokeilu ei toiminut.
Seuraavana teimme mallin, jossa palaa yksi ledi kun liikettä havaitaan. Vaikeutimme kuitenkin tehtävää hieman ja kytkimme kolme lediä kiinni:
Lähdekoodi:
int calibrationTime = 15;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 7;
int ledPin = 8;
int ledPin2 = 4;
int ledPin3 = 2;
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
digitalWrite(pirPin, LOW);
Serial.print("calibrating sensor ");
for(int i = 0; i pause){
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
if(lockLow){
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
if(takeLowTime){
lowIn = millis();
takeLowTime = false;
}
if(!lockLow && millis() - lowIn > pause){
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}
Lisenssi: GPL v2.
Lähteet:
http://terokarvinen.com/2013/aikataulu-%E2%80%93-prototyypin-rakentaminen-bus4tn007-5-alkukevat-2014