Motion Tracker med PIRs, Arduino och en Servo (4 / 4 steg)
Steg 4: Ladda upp program
Jag ursprungligen ställa upp för 5 PIRs men ledningar selar var dålig så snarare än att dra sönder hela konstruktionen och fixa det jag gick med bara 4 PIRs.
Programmet gör två andra saker. Om den en PIR är hög och servo är redan på att PIRs motsvarande position, inte flytta den.
Dessutom använder jag en annan array för att spåra om PIR har använts eftersom den gick hög. Jag tillåter endast att användas en gång för varje hög stat. Om du inte gör att du få läggas mellan intilliggande PIRs som inte är nödvändiga.
Jag slå bara på lampan när en PIR är hög så jag kan berätta genom att titta på Arduino om det finns någon aktivitet i PIRs.
#include < Servo.h >
författare: jim demello feb 2014 / /
booleska pirStatus;
Servo servo1;
int servangle = 0; servo vinkel variabel
int pirNo [] = {3,4,5,6,7}. PIR pin-koder
int pirPrevLow [] = {1,1,1,1,1}. tidigare låg flagga värdet true
int pirPrevUsed [] = {0,0,0,0,0}. pir å använts innan låg
int pirPos [] = {10,60,100,140,170}. positioner för servo (0-180)
int curPosPir = 0;
int pirPin = 3;
int ledPin = 13.
void setup() {
Serial.BEGIN(9600);
servo1.attach(9);
för (int jag = 0; jag < 4; i ++) {
pinMode (pirNo [i], ingång);
}
pinMode (ledPin, produktionen);
Delay(10000); kalibrera för ca 10 sekunder
servo1.write(90); sätta servo vid center för att börja
}
////////////////////////////
HUVUDLOOP
//////////////////
void loop() {
för (int j = 0; j < 4; j ++) {/ / för varje PIR
pirPin = pirNo [j];
pirStatus = digitalRead(pirPin);
om (pirStatus == hög) {
digitalWrite (ledPin, hög); den ledde visualiserar sensorer utdata pin staten
IF(pirPrevLow[j]) {
om (curPosPir! = pirPin & & pirPrevUsed [j] == 0) {/ / om hög PIR är annorlunda än nuvarande position PIR då flytta till ny position
servo1.write(pirPos[j]);
Serial.println(j);
Delay(50);
curPosPir = pirPin; behålla nuvarande PIR
pirPrevUsed [j] = 1;
}
pirPrevLow [j] = 0; PIR är nu inte låg
}
}
annat {
digitalWrite (ledPin, låg); den ledde visualiserar sensorer utdata pin staten
pirPrevLow [j] = 1; PIR är nu låg
pirPrevUsed [j] = 0;
}
} / / end j antal pirs loop
} / / end oändlig loop