/* The source of the program is taken from several reference sources, then I modify it as needed */ #include #include #include #define DHT11_PIN 3 #define RL 47 //The value of resistor RL is 47K #define m -0.263 //Enter calculated Slope #define b 0.42 //Enter calculated intercept #define Ro 24 //Enter found Ro value #define MQ_sensor 4 //Sensor is connected to A4 // Include the AccelStepper library: #include // Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver: #define dirPin 6 #define stepPin 7 #define enPin 0 #define motorInterfaceType 1 #define irPin 5 #define ledPinR 11 #define ledPinG 13 #define ledPinB 12 #define BuzPin 10 int count=0; // Create a new instance of the AccelStepper class: AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); DFRobot_DHT11 DHT; void setup() { Serial.begin(9600); //Initialise serial COM for displaying the value // Set the maximum speed and acceleration: stepper.setMaxSpeed(500); stepper.setAcceleration(100); pinMode(enPin, OUTPUT); pinMode(irPin, INPUT); pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); pinMode(BuzPin, OUTPUT); digitalWrite(ledPinR, LOW); //led strip off digitalWrite(ledPinG, LOW); //led Green on digitalWrite(ledPinB, HIGH); //led Blue off digitalWrite(BuzPin, HIGH); //buzzer off digitalWrite(enPin, HIGH); } void loop() { float VRL; //Voltage drop across the MQ sensor float Rs; //Sensor resistance at gas concentration float ratio; //Define variable for ratio DHT.read(DHT11_PIN); VRL = analogRead(MQ_sensor)*(5.0/1023.0); //Measure the voltage drop and convert to 0-5V Rs = ((5.0*RL)/VRL)-RL; //Use formula to get Rs value ratio = Rs/Ro; // find ratio Rs/Ro float ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm Serial.print("NH3(ppm) = "); //Display a ammonia in ppm Serial.print(ppm); Serial.print(" Temp(\u00b0C) = "); Serial.print(DHT.temperature); Serial.print(" Humi(%) = "); Serial.println(DHT.humidity); Serial.println("Empty-Ready for use"); int irSensorValue = digitalRead(irPin); if(irSensorValue==1){ digitalWrite(ledPinR, LOW); //led strip off digitalWrite(ledPinG, HIGH); //led Green of digitalWrite(ledPinB, LOW); //led Blue on digitalWrite(BuzPin, HIGH); //buzzer off Serial.println("In USE"); count = 1; delay (5000); } else { if (count==1){ digitalWrite(enPin, LOW); digitalWrite(ledPinG, HIGH); //led Green of digitalWrite(ledPinB, LOW); //led Blue on digitalWrite(ledPinR, HIGH); //led strip on Serial.println("Cleaning"); // Set the target position: stepper.moveTo(3600); // Run to target position with set speed and acceleration/deceleration: stepper.runToPosition(); delay(1000); // Move back to zero: stepper.moveTo(0); stepper.runToPosition(); delay(1000); count=0; digitalWrite(ledPinR, HIGH); digitalWrite(ledPinB, HIGH); digitalWrite(BuzPin, LOW); digitalWrite(ledPinB, LOW); delay(500); digitalWrite(BuzPin, HIGH); digitalWrite(ledPinB, HIGH); Serial.println("Cleaning"); delay(700); digitalWrite(BuzPin, LOW); digitalWrite(ledPinB, LOW); delay(500); digitalWrite(BuzPin, HIGH); digitalWrite(ledPinB, HIGH); Serial.println("Cleaning"); delay(700); digitalWrite(BuzPin, LOW); digitalWrite(ledPinB, LOW); delay(500); digitalWrite(BuzPin, HIGH); digitalWrite(ledPinB, HIGH); Serial.println("Cleaning"); delay(700); digitalWrite(ledPinB, LOW); delay(500); digitalWrite(BuzPin, HIGH); digitalWrite(ledPinB, HIGH); Serial.println("Finish"); delay(1000); } } digitalWrite(enPin, HIGH); digitalWrite(ledPinR, LOW); //led strip off digitalWrite(ledPinG, LOW); //led Green on digitalWrite(ledPinB, HIGH); //led Blue off digitalWrite(BuzPin, HIGH); //buzzer off delay (300); }