Outils pour utilisateurs

Outils du site


wiki:projet:bnair:jourdfbdnal_de_bord

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 + 
-{{ :wiki:projet:bnair:1125px-pm25_uno.png |}}+Capteur de particules {{  :wiki:projet:bnair:1125px-pm25_uno.png  }}
  
 Lecture des valeurs du capteur de particules Lecture des valeurs du capteur de particules
  
 +<code>
 +#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;
  
-<code>+    //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;
  
-#include <Arduino.h> 
-#define LENG 32 
-char buf[LENG]; 
-  
-int PM01Value=0;          //define PM1.0 value of the air detector module 
-int PM2_5Value=0;         //define PM2.5 value of the air detector module 
-int PM10Value=0;         //define PM10 value of the air detector module 
-  
-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) { 
-    Serial.readBytes(buf,LENG); +    COVSensorValue = analogRead(COVSensor); 
-    if(buf[0] == 0x42 && buf[1] == 0x4d){ +    NOXSensorValue = analogRead(NOXSensor); 
-      if(checkValue(buf,LENG)){ +    //Ici je mettrais la reception du PMSensor 
-        PM01Value=transmitPM01(buf)//count PM1.0 value of the air detector module +    if (CompteurValue <= 60){ 
-        PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module +        COVSensorValueSumm +COVSensorValue
-        PM10Value=transmitPM10(buf); //count PM10 value of the air detector module  +        NOXSensorValueSumm +NOXSensorValue
-                 +        //Ici PMSensorValueSumm 
-    }  +        if (CompteurValue>= 60){ 
-  } +            COVSensorValueAverage COVSensorValueSumm / CompteurValue
-  static unsigned long OledTimer=millis();   +            NOXSensorValueAverage = NOXSensorValueSumm / CompteurValue; 
-    if (millis() - OledTimer >=1000 +            // ici je mettrais la valeur PMSensorValueAverage 
-    +            CompteurValue = 0; 
-      OledTimer=millis();  +            } 
-        +        else { 
-      Serial.print("PM1.0: ");  //send PM1.data to bluetooth +            CompteurValue++ 
-      Serial.print(PM01Value)+            } 
-      Serial.println("  ug/m3");             +        } 
-      +    SensorTimer = millis(); 
-      Serial.print("PM2.5: ");  //send PM1.0 data to bluetooth +    // test line 
-      Serial.print(PM2_5Value); +    serial.print('NOX Value is' + NOXSensorValueAverage); 
-      Serial.println( ug/m3");      +    serial.print('COV Value is' + COVSensorValueAverage);
-        +
-      Serial.print("PM10:  ");  //send PM1.0 data to bluetooth +
-      Serial.print(PM10Value); +
-      Serial.println( ug/m3");   +
     }     }
-   + 
 +//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(); 
 +    } 
 } }
-char checkValue(char *thebufchar leng) + 
-  +//Not our codefunction to get temperature 
-  char receiveflag=0; +float getTemp()
-  int receiveSum=0+  //returns the temperature from one DS18S20 in DEG Celsius 
-  char i=0+ 
-  +  byte data[12]
-  for(i=0;i<leng;i++) +  byte addr[8]
-  + 
-  receiveSum=receiveSum+thebuf[i];+  if !ds.search(addr)) { 
 +      //no more sensors on chain, reset search 
 +      ds.reset_search(); 
 +      return -1000;
   }   }
-     + 
-  if(receiveSum==((thebuf[leng-2]<<8)+thebuf[leng-1]+thebuf[leng-2]+thebuf[leng-1]))  //check the serial data  +  if ( OneWire::crc8addr, 7!= addr[7]) { 
-  +      Serial.println("CRC is not valid!")
-    receiveSum=0+      return -1000;
-    receiveflag=1;+
   }   }
-  return receiveflag; + 
-+  if addr[0!= 0x10 && addr[0!= 0x28) { 
-  +      Serial.print("Device is not recognized"); 
-int transmitPM01(char *thebuf) +      return -1000;
-{ +
-  int PM01Val; +
-  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]<<8) + thebuf[7]);//count PM2.5 value of the air detector module +
-  return PM2_5Val;+
   }   }
-  
-//transmit PM Value to PC 
-int transmitPM10(char *thebuf) 
-{ 
-  int PM10Val; 
-  PM10Val=((thebuf[8]<<8) + thebuf[9]); //count PM10 value of the air detector module   
-  return PM10Val; 
-} 
  
 +  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;
 +
 +}
 </code> </code>
 +
 [[http://www.dfrobot.com/wiki/index.php?title=PM2.5_laser_dust_sensor_SKU:SEN0177|Source]] [[http://www.dfrobot.com/wiki/index.php?title=PM2.5_laser_dust_sensor_SKU:SEN0177|Source]]
 +
 +
wiki/projet/bnair/jourdfbdnal_de_bord.1458492442.txt.gz · Dernière modification: 2016/09/11 11:00 (modification externe)