Stap 3: Codering:-
#include servo myservo; Hiermee maakt u een servo-object //a maximaal acht servo objecten kunnen worden createdint pos = 0; variabele servo positie opslaan / / bedrag van tijd geven we de sensor kalibreren (10-60 sec volgens het gegevensblad)
int calibrationTime = 30; //the tijd wanneer de sensor output met een lage impulselong unsigned
int lowIn; het aantal milliseconden die de sensor worden lage moet / / voordat we aannemen dat alle beweging heeft stoppedlong unsigned
int pauze = 5000;
Boole lockLow = waar;
Booleaanse takeLowTime;
int pirPin = 12; digitale pin aangesloten op de PIR van outputint pirPos = 13; wordt aangesloten op de PIR van 5V pin
VOID Setup {}
myservo.attach(4); hecht servo naar pin 4 Serial.begin(9600); seriële communicatie begint
pinMode (pirPin, INPUT);
pinMode (pirPos, OUTPUT);
digitalWrite (pirPos, hoge); de tijd van de sensor om te kalibreren
Serial.println ("kalibreren sensor");
for (int i = 0; ik < calibrationTime; i ++) {}
Serial.Print(calibrationTime-i);
Serial.Print("-");
delay(1000); }
Serial.println();
Serial.println("Done"); terwijl het maken van dit Instructable, had ik wat problemen met de PIR van uitvoer //going HIGH onmiddellijk na het kalibreren //this wacht totdat de PIR van uitvoer laag is voordat setup eindigend
terwijl (digitalRead(pirPin) == HIGH) {}
delay(500);
Serial.Print("."); }
Serial.Print ("SENSOR actief");}
void loop {}
if(digitalRead(pirPin) == HIGH) {//if de PIR-output is hoog, draai servo / * servo van 0 tot 180 graden en terug het doet dit door het verhogen van de variabele 'pos' draait door 1 elke 5 milliseconden totdat het hits 180 en instellen van de servo's positie in graden naar "pos" elke 5 milliseconden het dan het in omgekeerde richting doet te laten terugkeren naar meer informatie over dit , google "for-lussen" om te wijzigen hoeveel graden de servo bochten, het aantal wijzigen 180 aan het aantal graden die u wilt om te schakelen ** /
voor (pos = 0; pos < 180; pos += 1) //goes van 0 tot 180 graden {//in stappen van één graad
myservo.write(POS); vertelt servo naar positie in de variabele 'pos' delay(5); wacht tot de servo om de positie te bereiken}
voor (pos = 180; pos > = 1; pos-= 1) //goes van 180 tot 0 graden {}
myservo.write(POS); om de servo sneller gaan, het verminderen van de tijd in vertragingen voor delay(5); om het langzamer gaan, door het getal te verhogen. }
if(lockLow) {//makes ervoor dat we wachten op een overgang naar lage voordat verdere uitvoer plaatsvindt
lockLow = false;
Serial.println("---");
Serial.Print ("bewegingsdetectie op");
Serial.Print(Millis()/1000);
Serial.println ("sec");
delay(50); }
takeLowTime = true; }
if(digitalRead(pirPin) == LOW) {}
if(takeLowTime) {}
lowIn = millis(); opslaan van het tijdstip van de overgang van hoog naar laag
takeLowTime = false; Zorg ervoor dat dit gebeurt alleen bij het begin van een lage fase} //if de sensor wordt laag voor meer dan de gegeven pauze, //we kunnen aannemen de motie is gestopt
Als (! lockLow & & millis() - lowIn > onderbreken) {//makes zeker dit blok code wordt alleen opnieuw uitgevoerd nadat //a nieuwe motie sequentie is geconstateerd
lockLow = true; Serial.Print ("motion eindigde op"); uitgang
Serial.Print((Millis() - onderbreken) / 1000);
Serial.println ("sec");
delay(50); } }
}