Hello,
I am currently converting a small mini fridge into a meat curing chamber. The mini fridge has a glass door and I am installing LED strip lighting within, and also a small computer fan to bring in fresh air.
I am using an Arduino uno, a PIR sensor, and 2 relays.
I am mounting the PIR sensor so that whenever I wave my hand in front of the door, I would like the LED strip lighting within, to turn on. The computer fan will be used to bring in fresh air, which I only need to run for 2 minutes…once a day.
The issue I am having, is trying to get the PIR sensor to continuously function, while running a computer fan for 2 minutes out of a full day, and then delaying it the rest.
Any help would be greatly appreciated.
I have some of the delay’s set low at the moment for testing purposes.
Current Code:
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
//the time when the sensor outputs a low impulse
long unsigned int lowIn;
//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pir1 = 13; //the digital pin connected to the PIR sensor’s output
int relay1 = 12; //the digital pin connect to the relay output
int fanON = 7; //the digital pin connected to relay to turn on the fan
void setup() {
Serial.begin(9600);
pinMode(pir1, INPUT);
pinMode(relay1, OUTPUT);
digitalWrite(pir1, LOW);
digitalWrite(relay1, HIGH);
pinMode(fanON, OUTPUT);
digitalWrite(fanON, LOW);
//give the sensor some time to calibrate
Serial.print(“calibrating sensor “);
for(int i = 0; i < calibrationTime; i++){
Serial.print(”.”);
delay(1000);
}
Serial.println(" done");
Serial.println(“SENSOR ACTIVE”);
delay(50);
}
void loop() {
while(digitalRead(pir1) == HIGH){
delay(1500);
digitalWrite(relay1, LOW); //the led visualizes the sensors output pin state
if(lockLow){
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("—");
Serial.print(“motion detected at “);
Serial.print(millis()/1000);
Serial.println(” sec”);
delay(30000);
}
takeLowTime = true;
}
while(digitalRead(pir1) == LOW){
digitalWrite(relay1, HIGH); //the led visualizes the sensors output pin state
if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print(“motion ended at “); //output
Serial.print((millis() - pause)/1000);
Serial.println(” sec”);
delay(50);
{
if(digitalRead(fanON) == LOW)
delay(10000);
digitalWrite(fanON, HIGH);
if(digitalRead(fanON) == HIGH)
delay(20000);
digitalWrite(fanON, LOW);
}
}
}
}