влажность и вытяжка на кухне
- Войдите на сайт для отправки комментариев
Чт, 30/03/2017 - 10:43
[code] #define DEBUG 1 #include <Average.h> #include "SparkFunBME280.h" #include "Wire.h" Average<float> ave(10); // Для усреднения последних значений с датчика создаём массив на 10 шт. float unsigned long runInterval = 600000; // Если включаем вентилятор, то не меньше, чем на 5 минут (5 * 60 * 1'000 миллисекунд = 300'000) unsigned long idleInterval = 12000; // Какая бы ни была влажность, после выключения даём мотору 2 минуты передышки const long interval = 2000; // Опрашиваем датчик BME280 mySensor; void setup() { mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; mySensor.settings.runMode = 3; //Normal mode mySensor.settings.tStandby = 0; mySensor.settings.filter = 4; mySensor.settings.tempOverSample = 5; mySensor.settings.pressOverSample = 5; mySensor.settings.humidOverSample = 5; pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); if (DEBUG == 1) { Serial.begin(9600); Serial.print("Starting, humidity treshold set to: "); // Serial.print(treshold); Serial.println("%."); } mySensor.begin(); } void loop() { float t = mySensor.readTempC(); float h = mySensor.readFloatHumidity(); if (isnan(h) || isnan(t)) { Serial.println("Sensor error!"); delay(interval); return; } else { ave.push(h); // Кладём результат измерения влажности в массив. В массиве помещается 10 измерений, новоприбывшее выталкивает самое старое. if (DEBUG == 1) { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %"); Serial.print("Humidity running average: "); Serial.print(ave.mean()); Serial.print(" %"); Serial.print("Temp.: "); Serial.print(t); Serial.println("C"); } float b = ave.mean()+1; Serial.print(h); Serial.print(b); if (h >= b || t >34 || h >76 ) { digitalWrite(LED_BUILTIN, HIGH); if (DEBUG == 1) { Serial.println("Fan started."); } delay(runInterval); digitalWrite(LED_BUILTIN, LOW); if (DEBUG == 1) { Serial.println("Fan will cool down."); } flushData(); // После того, как мы остудили мотор, надо "прочистить" массив с замерами влажности актуальными замерами. Иначе мотор будет врубаться снова и снова. delay(idleInterval); } } delay(interval); } void flushData() { int k = 0; if (DEBUG == 1) { Serial.println("Flushing sensor readings."); } while (k < 10) { float t = mySensor.readTempC(); float h = mySensor.readFloatHumidity(); if (isnan(h) || isnan(t)) { Serial.println("Sensor error!"); delay(interval); return; } else { ave.push(h); // Кладём результат измерения влажности в массив. В массиве помещается 10 измерений, новоприбывшее выталкивает самое старое. } k++; delay(100); } } [/code]
не нашёл подобной реализации.
датчик ВМЕ280 следит за увеличение влажности на 1 %(найдено практически). строка 50, 53. модель работает. если на кухне ничего не происходит то колебания измерений не превышают 1%. проблема в том как сделать теперь выключаться вытяжке. сейчас строки 6, 58 задают строгий интервал на выключение. хотелось бы чтобы это как то увязать с приготовлением пищи
сделай еще пин на кнопку включил значит идет готовка. соответственно в теле лупа проверку и ставь другой интервал при этом условии
Ну тогда ардуино вообще не надо. Так и было до этого, кнопкой включил выключил. Надо что-то подобное как включение только наоборот, чтобы с высокого уровня влажности происходило падение и это было сигналом выключения
сделал новую версию программы. у старой была большая проблема что програма отслеживала не нормальный рост влажности на кухне, что практически всегда совпадает с приготовлением пищи, однако вентилятор крутился строго заданный перид времени и выключался.
новая версия также смотрит чтобы влажность повысилась за пределы погрешности, фиксирует значение влажности в этот момент и дальше период работы вентилятора, потом смотрим если влажность выше зафиксированной влажности в момент включения вентилятора то продолжаем крутить его. если влажность меньше то выключаем вентилятор и снова ждём когда влажность выйдет за усреднённый предел.
прошу прощения за код я не програмист. просто ИНОГДА есть время свободное и мне интересно это.
было бы здорово замечания по коду