Paso 3: Codificación:-
#include servo myservo; crea un servo objeto //a máximo ocho objetos servo pueden ser createdint pos = 0; variable para almacenar la posición del servo / / la cantidad de tiempo da el sensor a calibrar (10 a 60 segundos según la hoja de datos)
int calibrationTime = 30; unsigned //the momento cuando el sensor produce un impulselong bajo
int lowIn; la cantidad de milisegundos que el sensor tiene que ser bajo / / antes de que asumir todo el movimiento tiene stoppedlong unsigned
int pausa = 5000;
Boolean lockLow = true;
takeLowTime Boolean;
pirPin INT = 12; pin digital conectado a pirPos de outputint de PIR = 13; se conecta al pin de 5V de PIR
void setup() {}
myservo.Attach(4); servo se conecta al pin 4 Serial.begin(9600); comienza comunicación serial
pinMode (pirPin, entrada);
pinMode (pirPos, salida);
digitalWrite (pirPos, HIGH); darle tiempo al sensor a calibrar
Serial.println ("calibración sensor");
para (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(calibrationTime-i);
Serial.Print("-");
Delay(1000); }
Serial.println();
Serial.println("Done"); al hacer este Instructable, tuve algunos problemas con salida //going del PIR alta inmediatamente después de la calibración //this espera hasta que la salida del PIR es baja antes de terminar la instalación
mientras que (digitalRead(pirPin) == HIGH) {}
Delay(500);
Serial.Print("."); }
Serial.Print ("SENSOR activo");}
void loop() {}
if(digitalRead(pirPin) == HIGH) {//if la salida PIR es alto, girar el servo / * convierte servo de 0 a 180 grados y la espalda lo hace al aumentar la variable "pos" en 1 de cada 5 milisegundos hasta que llega a 180 y ajuste de posición del servo en grados de "pos" cada 5 milisegundos entonces lo hace en sentido inverso para que volver a aprender más sobre esto , google "loops" para cambiar la cantidad de grados el servo gira, cambiar el número 180 en el número de grados que desea que gire ** /
para (pos = 0; pos < 180; pos += 1) //goes de 0 a 180 grados {//in pasos de un grado
myservo.Write(POS); dice el servo a la posición en la variable "pos" delay(5); espera a que el servo a la posición}
para (pos = 180; pos > = 1; pos-= 1) //goes de 180 a 0 grados {}
myservo.Write(POS); para hacer que el servo ir más rápido, reducir el tiempo de demoras para delay(5); para hacer que vaya más lento, aumentar el número. }
if(lockLow) {//makes que esperamos una transición a la baja antes de la salida más
lockLow = false;
Serial.println("---");
Serial.Print ("movimiento detectado en");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50); }
takeLowTime = true; }
if(digitalRead(pirPin) == LOW) {}
{if(takeLowTime)}
lowIn = millis(); ahorrar el tiempo de la transición de alto a bajo
takeLowTime = false; Asegúrese de que esto sólo se hace en el inicio de una fase bajo} //if el sensor es baja por más de la pausa dada, //we puede asumir que el movimiento se ha detenido
Si (! lockLow & & millis() - lowIn > pausa) {//makes que este bloque de código sólo se ejecuta otra vez después de //a nueva secuencia de movimiento se ha detectado
lockLow = true; Serial.Print ("movimiento terminada en"); salida
Serial.Print((Millis() - pausa) / 1000);
Serial.println ("sec");
Delay(50); } }
}