Arduino grunderna: PIR-sensorer (3 / 4 steg)
Steg 3: kod
Denna kod lyfts från webbplatsen arduino.cc här, koden jag använde fästas också.
/*
* //////////////////////////////////////////////////
* //making känsla av Parallax PIR-sensorn produktion
* //////////////////////////////////////////////////
*
* Växlar en LED beroende på vilket av sensorerna produktionen stift.
* Anger början och slutet av kontinuerlig rörelsesekvenser.
*
* Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
* 3. September 2006
*
* kr1 (kluven) 2006
* släppt under en licens creative commons "Attribution-NonCommercial-ShareAlike 2.0"
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* Parallax PIR-sensorn är en lättanvänd digital infraröd rörelse Sensormodul.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* Sensorn utgångsstiftet går till hög om motion är närvarande.
* Även om motion finns det går dock till låg från tid till annan,
* som kan ge intryck av ingen motion är närvarande.
* Detta program behandlar denna fråga genom att ignorera låg-arrangerar gradvis kortare än en viss tid,
* under förutsättning att kontinuerlig rörelse är närvarande under dessa faser.
*
*/
/////////////////////////////
VARS
den tid som vi ger sensorn för att kalibrera (10-60 SEK enligt databladet)
int calibrationTime = 30.
tiden när sensorn utgångar en låga impuls
länge osignerade int lowIn;
mängden millisekunder sensorn har låg
innan vi antar all rörelse har slutat
länge osignerade int paus = 5000;
booleska lockLow = sant;
booleska takeLowTime;
int pirPin = 7. den digital pin ansluten till PIR-sensorns utgång
int ledPin = 8;
/////////////////////////////
SETUP
void setup() {
Serial.BEGIN(9600);
pinMode (pirPin, ingång);
pinMode (ledPin, produktionen);
digitalWrite (pirPin, låg);
ge sensorn lite tid att kalibrera
Serial.Print ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);
}
////////////////////////////
LOOP
void loop() {
IF(digitalRead(pirPin) == hög) {
digitalWrite (ledPin, hög); den ledde visualiserar sensorer utdata pin staten
IF(lockLow) {
ser till att vi väntar på en övergång till låg innan någon ytterligare utgång 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) {
digitalWrite (ledPin, låg); den ledde visualiserar sensorer utdata pin staten
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
}
om sensorn är låg för mer än den givna pausen,
Vi antar att ingen mer motion som kommer att hända
om (! lockLow & & millis() - lowIn > pausa) {
gör säkert detta kodblock endast körs igen efter
ett nytt 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);
}
}
}
Du kan se koden, sensorn först kalibrerar sig och sedan klockor för rörelse. När den upptäcker rörelse, går den blå lampan på. Du kan titta på serial bildskärmen för att se hur länge rörelsen varar.