hi guys i am forever trying to improve on my system, i have built a control system for a grow room incorporating a cs811 air quality sensor, and although it uploads and gives me a display it seems to reset its self very frequently but funny thing is it does not reset when the serial monitor is open i am not sure how to solve this problem, i am using a arduino nano with a keystudio sth31 and a keystudio cs811 sensor
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "Adafruit_CCS811.h"
#include "Adafruit_SHT31.h"
Adafruit_CCS811 ccs;
#define EXHAUST 9
#define HUMIDIFIER 10
#define SETPOINT 88.0
#define DEADBAND 2.0
#define ON false
#define OFF true
LiquidCrystal_I2C lcd(0X27, 2, 1, 0, 4, 5, 6, 7);
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
Serial.begin(9600);
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Couldn't find SHT31");
while (1) delay(1000);
}
if (!ccs.begin()) {
Serial.println("Failed to start sensor! Please check your wiring.");
while (1);
}
// Wait for the sensor to be ready
while (!ccs.available());
lcd.begin(20, 4);
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(17, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity");
lcd.setCursor(17, 1);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("CO2");
lcd.setCursor(17, 2);
lcd.print("PPM");
Serial.println("CCS811 test");
pinMode(HUMIDIFIER, OUTPUT);
Serial.println("SHT31 test");
}
void loop() {
if (ccs.available()) {
if (!ccs.readData()) {
Serial.print("CO2: ");
Serial.print(ccs.geteCO2());
Serial.print("ppm, TVOC: ");
Serial.println(ccs.getTVOC());
float t = sht31.readTemperature();
float h = sht31.readHumidity();
lcd.setCursor(0, 0);
lcd.setCursor(11, 0);
lcd.print(t, 2);
lcd.setCursor(11, 1);
lcd.print(h, 2);
lcd.setCursor(11, 2);
lcd.print(ccs.geteCO2());
if(ccs.geteCO2()>1000)
{
digitalWrite(EXHAUST, ON);
}
else
{
digitalWrite(EXHAUST, OFF);
}
if (digitalRead(HUMIDIFIER) == OFF)
{
if (h > SETPOINT + DEADBAND)
{
digitalWrite(HUMIDIFIER, ON);
}
}
else
{
if (h < SETPOINT - DEADBAND)
digitalWrite(HUMIDIFIER, OFF);
}
}
delay(1000);
}
}