Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
wiki:projet:bnair:jourdfbdnal_de_bord [2016/03/20 16:47] gnounu créée |
wiki:projet:bnair:jourdfbdnal_de_bord [2020/10/05 14:39] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====Programation==== | + | ==== Programation ==== |
- | Capteur de particules | + | |
- | {{ : | + | Capteur de particules {{ : |
Lecture des valeurs du capteur de particules | Lecture des valeurs du capteur de particules | ||
+ | < | ||
+ | #include < | ||
+ | // | ||
+ | OneWire ds(Thermometer); | ||
+ | void setup(){ | ||
+ | // | ||
+ | serial.begin(9600); | ||
+ | // | ||
+ | byte Thermometer = 2; | ||
+ | pinMode(Thermometer, | ||
+ | float ThermometerValue = 0; | ||
+ | float ThermometerValueEnable = 22.0; | ||
+ | float ThermometerValueDesable = 20.0; | ||
+ | //NOX sensor | ||
+ | byte NOXSensor = A1; | ||
+ | pinMode(NOXSensor, | ||
+ | int NOXSensorValue = 0; | ||
+ | int NOXSensorValueSumm = 0; | ||
+ | float NOXSensorValueAverage = 0; | ||
+ | float NOXSensorValueTreshold = 400; | ||
- | < | + | //COV sensor |
+ | byte COVSensor = A2; | ||
+ | pinMode(COVSensor, | ||
+ | int COVSensorValue = 0; | ||
+ | int COVSensorValueSumm = 0; | ||
+ | float COVSensorValueAverage =0; | ||
+ | float COVSensorValueTreshold = 400; | ||
+ | |||
+ | /* | ||
+ | PM sensor | ||
+ | PMSensorValue | ||
+ | PMSensorValueSumm | ||
+ | PMSensorValueAverage | ||
+ | PMSensorValueTreshold | ||
+ | */ | ||
+ | |||
+ | // | ||
+ | byte Peletier = 13; | ||
+ | pinMode(Peletier, | ||
+ | boolean PeletierStatus = 0; | ||
+ | |||
+ | //Bottom Fan | ||
+ | byte BotFan = 12; | ||
+ | pinMode(BotFan, | ||
+ | boolean BotFanStatus = 0; | ||
+ | |||
+ | //Top Fan | ||
+ | byte TopFan = 10; | ||
+ | pinMode(TopFan, | ||
+ | boolean TopFanStatus = 0; | ||
+ | |||
+ | // brumisateur | ||
+ | byte Atomizer = 11; | ||
+ | pinMode(Atomizer, | ||
+ | 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; | ||
- | #include < | ||
- | #define LENG 32 | ||
- | char buf[LENG]; | ||
- | |||
- | int PM01Value=0; | ||
- | int PM2_5Value=0; | ||
- | int PM10Value=0; | ||
- | |||
- | void setup() | ||
- | { | ||
- | Serial.begin(9600); | ||
} | } | ||
- | + | ||
- | void loop() | + | void loop(){ |
- | { | + | |
- | if(Serial.available()) | + | //Record every second COVSensor, NOXSensor, PMSensor. Do the summ over 1 minute. |
- | | + | if (SensorTimer-millis()>= 1000) { |
- | | + | |
- | | + | |
- | if(checkValue(buf, | + | //Ici je mettrais la reception du PMSensor |
- | | + | |
- | | + | |
- | | + | |
- | | + | //Ici PMSensorValueSumm |
- | } | + | if (CompteurValue>= 60){ |
- | } | + | |
- | static unsigned long OledTimer=millis(); | + | |
- | | + | // ici je mettrais la valeur PMSensorValueAverage |
- | | + | CompteurValue = 0; |
- | | + | |
- | | + | else { |
- | | + | |
- | Serial.print(PM01Value); | + | } |
- | | + | } |
- | | + | SensorTimer = millis(); |
- | | + | // test line |
- | | + | |
- | | + | |
- | + | ||
- | Serial.print(" | + | |
- | | + | |
- | | + | |
} | } | ||
- | + | ||
+ | //Check the temperature every two minutes | ||
+ | if (ThermometherTimer-millis()> | ||
+ | ThermometerValue = getTemp(); | ||
+ | ThermometherTimer = millis() | ||
+ | } | ||
+ | |||
+ | //Activate or deactivate the peletier depending on water' | ||
+ | if (ThermometerValue> | ||
+ | digitalWrite(Peletier, | ||
+ | PeletierStatus = 1; | ||
+ | } | ||
+ | if (ThermometerValue <= ThermometerValueDesable && PeletierStatus == 1){ | ||
+ | digitalWrite(Peletier, | ||
+ | PeletierStatus = 0; | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | //Activate or deactivate the BotFan depending on sensor value and peletier activation | ||
+ | if ((PeletierStatus == 1 || COVSensorValueAverage> | ||
+ | digitalWrite(BotFan, | ||
+ | BotFanStatus = 1; | ||
+ | } | ||
+ | if ((PeletierStatus == 0 && COVSensorValueAverage < | ||
+ | digitalWrite(BotFan, | ||
+ | BotFanStatus = 0; | ||
+ | } | ||
+ | */ | ||
+ | |||
+ | //Yet to be done, triger the TopFan depending on PM sensor value | ||
+ | /*if (PMSensorValueAverage> | ||
+ | digitalWrite(TopFan, | ||
+ | TopFanStatus = 1; | ||
+ | } | ||
+ | if (PMSensorValueAverage < | ||
+ | digitalWrite(TopFan, | ||
+ | TopFanStatus = 0; | ||
+ | } | ||
+ | */ | ||
+ | |||
+ | //Activate or deactivate atomizer | ||
+ | if (AtomizerStatus == 0 && AtomizerTimer-millis() == AtomizerTimeOff){ | ||
+ | digitalWrite(Atomizer, | ||
+ | AtomizerStatus == 1; | ||
+ | AtomizerTimer = millis(); | ||
+ | } | ||
+ | if (AtomizerStatus == 1 && AtomizerTimer-millis() == AtomizerTimeOn){ | ||
+ | digitalWrite(Atomizer, | ||
+ | AtomizerStatus == 0; | ||
+ | AtomizerTimer = millis(); | ||
+ | } | ||
} | } | ||
- | char checkValue(char *thebuf, char leng) | + | |
- | { | + | //Not our code, function to get temperature |
- | | + | float getTemp(){ |
- | | + | |
- | | + | |
- | + | | |
- | | + | |
- | | + | |
- | | + | |
+ | //no more sensors on chain, reset search | ||
+ | ds.reset_search(); | ||
+ | return -1000; | ||
} | } | ||
- | | + | |
- | if(receiveSum==((thebuf[leng-2]<< | + | if ( OneWire:: |
- | | + | |
- | | + | |
- | | + | |
} | } | ||
- | return receiveflag; | + | |
- | } | + | |
- | + | | |
- | int transmitPM01(char *thebuf) | + | return |
- | { | + | |
- | | + | |
- | PM01Val=((thebuf[4]<<8) + thebuf[5]); //count PM1.0 value of the air detector module | + | |
- | return PM01Val; | + | |
- | } | + | |
- | + | ||
- | //transmit PM Value to PC | + | |
- | int transmitPM2_5(char *thebuf) | + | |
- | { | + | |
- | int PM2_5Val; | + | |
- | PM2_5Val=((thebuf[6]<< | + | |
- | return | + | |
} | } | ||
- | |||
- | //transmit PM Value to PC | ||
- | int transmitPM10(char *thebuf) | ||
- | { | ||
- | int PM10Val; | ||
- | PM10Val=((thebuf[8]<< | ||
- | return PM10Val; | ||
- | } | ||
+ | ds.reset(); | ||
+ | ds.select(addr); | ||
+ | ds.write(0x44, | ||
+ | |||
+ | byte present = ds.reset(); | ||
+ | ds.select(addr); | ||
+ | ds.write(0xBE); | ||
+ | |||
+ | 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; | ||
+ | |||
+ | } | ||
</ | </ | ||
+ | |||
[[http:// | [[http:// | ||
+ | |||
+ |