Lecture des valeurs du capteur de particules
#include <OneWire.h> //Temperature chip i/o OneWire ds(Thermometer); void setup(){ //initialise the pin serial.begin(9600); //thermometer byte Thermometer = 2; pinMode(Thermometer, INPUT); float ThermometerValue = 0; float ThermometerValueEnable = 22.0; float ThermometerValueDesable = 20.0; //NOX sensor byte NOXSensor = A1; pinMode(NOXSensor, INPUT); int NOXSensorValue = 0; int NOXSensorValueSumm = 0; float NOXSensorValueAverage = 0; float NOXSensorValueTreshold = 400; //COV sensor byte COVSensor = A2; pinMode(COVSensor, INPUT); int COVSensorValue = 0; int COVSensorValueSumm = 0; float COVSensorValueAverage =0; float COVSensorValueTreshold = 400; /* PM sensor PMSensorValue PMSensorValueSumm PMSensorValueAverage PMSensorValueTreshold */ //peletier byte Peletier = 13; pinMode(Peletier, OUTPUT); boolean PeletierStatus = 0; //Bottom Fan byte BotFan = 12; pinMode(BotFan, OUTPUT); boolean BotFanStatus = 0; //Top Fan byte TopFan = 10; pinMode(TopFan, OUTPUT); boolean TopFanStatus = 0; // brumisateur byte Atomizer = 11; pinMode(Atomizer, OUTPUT); boolean AtomizerStatus = 0; int SensorTimer = 0; int ThermometherTimer = 0; int AtomizerTimer = 0; int AtomizerTimeOn = 900000;// 15 minutes int AtomizerTimeOff = 1800000;// 30 minutes byte CompteurValue = 0; } void loop(){ //Record every second COVSensor, NOXSensor, PMSensor. Do the summ over 1 minute. if (SensorTimer-millis()>= 1000) { COVSensorValue = analogRead(COVSensor); NOXSensorValue = analogRead(NOXSensor); //Ici je mettrais la reception du PMSensor if (CompteurValue <= 60){ COVSensorValueSumm += COVSensorValue; NOXSensorValueSumm += NOXSensorValue; //Ici PMSensorValueSumm if (CompteurValue>= 60){ COVSensorValueAverage = COVSensorValueSumm / CompteurValue; NOXSensorValueAverage = NOXSensorValueSumm / CompteurValue; // ici je mettrais la valeur PMSensorValueAverage CompteurValue = 0; } else { CompteurValue++ } } SensorTimer = millis(); // test line serial.print('NOX Value is' + NOXSensorValueAverage); serial.print('COV Value is' + COVSensorValueAverage); } //Check the temperature every two minutes if (ThermometherTimer-millis()>= 120000){ ThermometerValue = getTemp(); ThermometherTimer = millis() } //Activate or deactivate the peletier depending on water's temperature if (ThermometerValue>= ThermometerValueEnable && PeletierStatus == 0){ digitalWrite(Peletier,1); PeletierStatus = 1; } if (ThermometerValue <= ThermometerValueDesable && PeletierStatus == 1){ digitalWrite(Peletier,0); PeletierStatus = 0; } /* //Activate or deactivate the BotFan depending on sensor value and peletier activation if ((PeletierStatus == 1 || COVSensorValueAverage>= COVSensorValueTreshold || NOXSensorValueAverage>= NOXSensorValueTreshold || TopFanStatus == 1) && BotFanStatus== 0){ digitalWrite(BotFan,1); BotFanStatus = 1; } if ((PeletierStatus == 0 && COVSensorValueAverage <COVSensorValueTreshold && NOXSensorValueAverage <NOXSensorValueTreshold && TopFanStatus == 0 && BotFanStatus == 1){ digitalWrite(BotFan,0); BotFanStatus = 0; } */ //Yet to be done, triger the TopFan depending on PM sensor value /*if (PMSensorValueAverage>= PMSensorValueTreshold && TopFanStatus == 0){ digitalWrite(TopFan,1); TopFanStatus = 1; } if (PMSensorValueAverage <PMSensorValueTreshold && TopFanStatus == 1){ digitalWrite(TopFan,0); TopFanStatus = 0; } */ //Activate or deactivate atomizer if (AtomizerStatus == 0 && AtomizerTimer-millis() == AtomizerTimeOff){ digitalWrite(Atomizer,1); AtomizerStatus == 1; AtomizerTimer = millis(); } if (AtomizerStatus == 1 && AtomizerTimer-millis() == AtomizerTimeOn){ digitalWrite(Atomizer,0); AtomizerStatus == 0; AtomizerTimer = millis(); } } //Not our code, function to get temperature float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i <9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB <<8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; }