CONTROL SERVO MOTOR med RÖRELSESENSOR (3 / 3 steg)
Steg 3: Kodning:-
#include servo myservo; skapar servo objekt //a högst åtta servo objekt kan vara createdint pos = 0; variabel att lagra servo position / / belopp av tid vi ger sensorn för att kalibrera (10-60 SEK enligt databladet)
int calibrationTime = 30. //the tid när sensorn utgångar en låg impulselong osignerade
int lowIn; millisekunder sensorn måste vara låg / / innan vi antar all rörelse har stoppedlong osignerade
int paus = 5000;
booleska lockLow = sant;
booleska takeLowTime;
int pirPin = 12; Digital pin ansluten till den PIR outputint pirPos = 13. ansluter till den PIR 5V pin
void setup() {
myservo.attach(4); fäster servo till nåla fast 4 Serial.begin(9600); börjar seriell kommunikation
pinMode (pirPin, ingång);
pinMode (pirPos, produktionen);
digitalWrite (pirPos, hög); ge tid att kalibrera sensorn
Serial.println ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(calibrationTime-i);
Serial.Print("-");
Delay(1000); }
Serial.println();
Serial.println("Done"); samtidigt att göra detta Instructable, hade jag vissa problem med den PIR produktion //going hög omedelbart efter kalibreringen //this väntar tills den PIR utgång är låg innan du avslutar setup
medan (digitalRead(pirPin) == hög) {
Delay(500);
Serial.Print("."); }
Serial.Print ("sensorn aktiv");}
void loop() {
IF(digitalRead(pirPin) == hög) {//if PIR produktionen är hög, aktivera servo / * vänder servo från 0 till 180 grader och tillbaka det gör detta genom att öka variabeln "pos" av 1 var 5 millisekunder tills den träffar 180 och välja servo är position i grader som "pos" var 5 millisekunder den sedan gör det i omvänt att det går tillbaka till lära sig mer om detta , google "för loopar" för att ändra mängden grader servo svängar, ändra antalet 180 för hur många grader det ska vända ** /
för (pos = 0; pos < 180; pos + = 1) //goes från 0 till 180 grader {//in steg av en grad
myservo.write(POS); berättar servo gå till position i variabel "pos" delay(5); väntar på servo att nå ställning}
för (pos = 180, pos > = 1; pos-= 1) //goes från 180 till 0 grader {
myservo.write(POS); för att göra servo gå fortare, minska tid förseningar för delay(5); för att gå långsammare, öka antalet. }
IF(lockLow) {//makes säker på att vi väntar på en övergång till låg innan ytterligare produktionen görs
lockLow = false;
Serial.println("---");
Serial.Print ("rörelse upptäckts på");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50); }
takeLowTime = sant; }
IF(digitalRead(pirPin) == låg) {
IF(takeLowTime) {
lowIn = millis(); Spara tiden för övergången från hög till låg
takeLowTime = false; se till att detta görs endast i början av en låg fas} //if sensorn är låg för mer än given paus, //we kan anta förslaget har slutat
om (! lockLow & & millis() - lowIn > pausa) {//makes säker på detta block av kod körs endast igen efter //a nya förslag sekvens har upptäckts
lockLow = sant; Serial.Print ("motion slutade på"); utgång
Serial.Print((Millis() - paus) / 1000);
Serial.println ("sec");
Delay(50); } }
}