/***************************************************************************************************************************** Auteur : FDES et LilianRM Pour LowTech Bordeaux Exemple de fichier Arduino pour 5 capteurs: - 1 capteur multicanaux, I2C (4 capteurs) - 1 capteur O2, analogique - 1 capteur CO2 MH-Z19B, UART (+ température intégrée) - 1 thermocouple, lecture analogique - 1 sonde de température Onewire, numérique. *****************************************************************************************************************************/ // setup des librairies et des variables globales #include #include #include #include #include #include GAS_GMXXX gas; #include #include int MHZ19B_PREHEATING_TIME = 3 * 60; #define O2_WIRE A2 #define ONE_WIRE_BUS 2 HighTemp ht(A1, A0); OneWire oneWire(ONE_WIRE_BUS); DallasTemperature dallasTemp(&oneWire); uint8_t tempAddress[8] = {0x28,0x46,0xBF,0x31,0x08,0,0,0x1B}; char data_sent[100]; char incomingInt; String data_string; MHZ co2capt(4,5, MHZ19B); // RX, TX, type // fonctions de conversion int Float2Int(float number){ return (int)number/1; } int Coma2Int(float number, int nbAfterComa){ number = number - (int)number; if(number < 0){ return (int)((-number)*pow(10, nbAfterComa)/1); }else{ return (int)(number*pow(10, nbAfterComa)/1); } } void setup() // setup des capteurs { delay(20000); for(int i = 0;i<10;i++){ co2capt.calibrate400ppm(); delay(10); } gas.begin(Wire, 0x08); // use the hardware I2C ht.begin(); dallasTemp.begin(); dallasTemp.setResolution(12); delay(10000); Serial.begin(9600); delay(20); Serial.println('0'); } void loop() { if(Serial.available() > 0){ // wait for serial to have data incomingInt = Serial.read() - '0'; if(incomingInt == 1){ // read data from captors and construct string Serial.flush(); // GM102B NO2 sensor int val102 = gas.getGM102B(); // GM102B alcool? sensor int val302 = gas.getGM302B(); // GM502B VOC sensor int val502 = gas.getGM502B(); // GM702B CO sensor int val702 = gas.getGM702B(); int valOxygen = analogRead(O2_WIRE); int gazco2ppm = co2capt.readCO2UART(); int tempco2ppm = co2capt.getLastTemperature(); float thermoCpl = ht.getThmc(); dallasTemp.requestTemperatures(); int onewireTemp = dallasTemp.getTemp(tempAddress); data_string = String(valOxygen) + "," + String(val102) + "," + String(val302) + "," + String(val502) + "," + String(val702) + "," + String(gazco2ppm) + "," + String(tempco2ppm) + "," + String(Float2Int(thermoCpl)) + "." + String(Coma2Int(thermoCpl,1)) + "," + String(Float2Int(onewireTemp)); data_string.toCharArray(data_sent, 100); }else if(incomingInt == 2){ // send data delay(10); Serial.flush(); Serial.println(data_sent); }else if(incomingInt == 0){ // send ready signal Serial.flush(); Serial.println('0'); }else{ Serial.flush(); } } }