Étape 3: Code
Pour écrire ce code, j’ai combiné fondamentalement code j’ai trouvé pour un capteur PIR (http://playground.arduino.cc/Code/PIRsense) et le code pour un servo (http://arduino.cc/en/Tutorial/Sweep) et ensuite apporté des modifications chaque fois que j’ai pensé que cela permettrait d’améliorer le code.
Code :
/ * Ce code balaie un servo de 0 degré à 180 quand le capteur infrarouge détecte un mouvement.
Remerciement spécial à l’auteur du code capteur PIR, dont le code a énormément aidé
dans l’élaboration de ce code et cette Instructable.
auteur du code capteur PIR : Kristian Gohlke / gmail krigoo (_) (_) com / http://krx.at
**/
#include < Servo.h >
Servo myservo ; crée un objet de servo
vous pouvez créer un maximum de huit objets de servo
int pos = 0 ; variable pour stocker la position du servo
quantité de temps, nous donnons le capteur à étalonner (10 à 60 secondes selon la fiche technique)
int calibrationTime = 30 ;
le temps quand le capteur génère une impulsion faible
unsigned long int lowIn ;
la durée en millisecondes, que le capteur doit être faible
avant que nous supposons que tout mouvement a cessé
unsigned long int pause = 5000 ;
Boolean lockLow = true ;
Boolean takeLowTime ;
int pirPin = 12 ; broche numérique connecté à la sortie de la PIR
int pirPos = 13 ; se connecte à broches 5V de la PIR
void setup() {}
myservo.Attach(4) ; attache le servo à la borne 4
Serial.Begin(9600) ; commence la communication série
pinMode (pirPin, entrée) ;
pinMode (pirPos, sortie) ;
digitalWrite (pirPos, HIGH) ;
donner le temps de sonde pour calibrer
Serial.println ("calibrage capteur") ;
pour (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(calibrationTime-i) ;
Serial.Print("-") ;
Delay(1000) ;
}
Serial.println() ;
Serial.println("Done") ;
tout en faisant ce Instructable, j’ai eu quelques problèmes avec la sortie de la PIR
cours haute immédiatement après le calibrage
il attend jusqu'à ce que la sortie de la PIR est faible avant de terminer le programme d’installation
même si (digitalRead(pirPin) == HIGH) {}
Delay(500) ;
Serial.Print(".") ;
}
Serial.Print ("capteur actif") ;
}
void loop() {}
if(digitalRead(pirPin) == HIGH) {//if le PIR sortie est haute, tour servo
/ * tourne servo de 0 à 180 degrés et retour
Il fait ceci en augmentant la variable « pos » de 1 toutes les 5 millisecondes jusqu'à ce qu’il frappe 180
position du servo en degrés par rapport au « pos » en définissant toutes les 5 millisecondes
puis il le fait dans le sens inverse de la faire revenir en arrière
en savoir plus sur cette, google "pour les boucles"
pour modifier la quantité de degrés le servo tourne, changer le nombre de 180, au nombre de degrés souhaité à son tour
**/
pour (pos = 0; pos < 180; pos += 1) //goes de 0 à 180 degrés
{//in étapes d’un degré
myservo.Write(POS) ; raconte le servo pour aller à positionner dans la variable « pos »
Delay(5) ; attend que le servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) //goes de 180 à 0 degrés
{
myservo.Write(POS) ; pour rendre le servo à aller plus vite, réduire la durée des retards pour
Delay(5) ; pour le faire aller plus lentement, augmenter le nombre.
}
{if(lockLow)}
fait en sorte de que nous attendre à une transition vers le bas avant sortie supplémentaire est faite
lockLow = false ;
Serial.println("---") ;
Serial.Print ("mouvement détecté à") ;
Serial.Print(Millis()/1000) ;
Serial.println (« sec ») ;
Delay(50) ;
}
takeLowTime = true ;
}
if(digitalRead(pirPin) == faible) {}
{if(takeLowTime)}
lowIn = millis() ; économiser le temps de la transition entre la haute et basse
takeLowTime = false ; Veillez à ce que cela se fait uniquement au début d’une phase de faible
}
Si le capteur est faible plus la pause donnée,
Nous pouvons supposer que le mouvement n’a cessé
Si (! lockLow & & millis() - lowIn > pause) {}
fait bien sûr ce bloc de code est exécuté uniquement après
une nouvelle séquence de mouvement a été détectée
lockLow = true ;
Serial.Print ("requête s’est terminée à ») ; sortie
Serial.Print((Millis() - pause) / 1000) ;
Serial.println (« sec ») ;
Delay(50) ;
}
}
}