Как отобрать у квартирного радиатора немного тепла
- Войдите на сайт для отправки комментариев
Итак, как это обычно и бывает зима наступила внезапно :) и ничего не предвещало ее приход.
В комнате имеется очень старый пластинчатый радиатор вот такого типа:
единственным плюсом которого является очеь хороший экран, с помощью которого можно сформировать направленный воздушный поток.
Как обычно батареи горячими не бывают, а площадь комнаты 21 м2 (52,5 м3). В интернете есть достаточное количество описаний подобных реализаций, но ардуину и температурный датчик к этому делу еще никто ранее не привязывал.
Итак было куплено 5 компьютерных вентиляторов 80*80 (12В, 120 мА). После чего они были связаны между собой обыкновенной стяжкой:
Запитал вентиляторы от 7,5В (чтобы медленней и тише крутились). Питание завел через реле. Реле управляется ардуинкой.
Также взял два датчика ds18b20. Один датчик клеится на радиатор и измеряет его температуру, второй измеряет температуру в комнате. Общий вид получился вот такой:
Собранная конструкция очень хорошо крепится на радиатор снизу, экран радиатора формрует воздушный поток. Вентиляторы прямо шикарно продувают воздух сквозь радиатор.
При температуре радиатора в 56 С потребовалось 3 часа работы, чтобы температуру комнаты поднять с 23 С до 28 С. При этом энергозатраты на работу 7,5В * 300 мА * 1ч = 0,00225 кВт/ч, что гораздо эффективней маслянного радиатора.
#include <Adafruit_NeoPixel.h> #include <OneWire.h> #include <DallasTemperature.h> // Пин Arduino куда подключен датчик #define ONE_WIRE_BUS 5 #define Relay 6 #define PIN 2 #define NUMPIXELS 4 #define low_tem 23.0 //температура ниже которой включается вентилятор #define high_tem 26.0 //температура выше которой выключается вентилятор #define bat_tem 42.0 //температура батареи при которой работает система // Объявляем переменные OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress insideThermometer, insideThermometer2; float temp_ds_1, temp_ds_2 ; boolean flag = false; Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup(void) { Serial.begin(9600); // Поиск устройств на выбранном пине Serial.print("Find devices..."); sensors.begin(); Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" pcs."); if (!sensors.getAddress(insideThermometer, 0)) Serial.println("The adress didn't found "); else printAddress(insideThermometer); if (!sensors.getAddress(insideThermometer2, 1)) Serial.println("The adress didn't found "); else printAddress(insideThermometer2); sensors.setResolution(insideThermometer, 10); sensors.setResolution(insideThermometer2, 10); pinMode(Relay, OUTPUT); digitalWrite(Relay, LOW); strip.begin(); strip.show(); } void loop(void) { delay(5000); sensors.requestTemperatures(); // Отправка команды на получение температуры temp_ds_1 = sensors.getTempC(insideThermometer); //температура в помещении temp_ds_2 = sensors.getTempC(insideThermometer2); //температура батареи if ((flag == false) && (temp_ds_1 < low_tem)) {flag = true;} if ((flag == true) && (temp_ds_1 < high_tem) && (temp_ds_2 > bat_tem)) { digitalWrite(Relay, HIGH); Serial.println("ON"); Serial.println(temp_ds_1); Serial.println(temp_ds_2); } if ((flag == true) && (temp_ds_1 > high_tem) && (temp_ds_2 > bat_tem)) { digitalWrite(Relay, LOW); Serial.println("OFF"); Serial.println(temp_ds_1); Serial.println(temp_ds_2); flag = false; } if (temp_ds_1 < low_tem) { for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,0,127)); // Moderately bright green color. strip.show(); // This sends the updated pixel color to the hardware. } } if (temp_ds_1 > low_tem) { for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,127,0)); // Moderately bright green color. strip.show(); // This sends the updated pixel color to the hardware. } } if (temp_ds_2 < bat_tem) { for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(127,0,0)); // Moderately bright green color. strip.show(); // This sends the updated pixel color to the hardware. } } } void printAddress(DeviceAddress deviceAddress) { Serial.print("Adress "); for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } Serial.println(); }
Сейчас, чтобы как-то понимать режимы работы, был прикручен фрагмент светодиодной ленты. Но уже где-то на подходе с али очередная esp'шка, так что полный контроль температурной обстановки в комнате и управлять режимами планирую осуществлять со смартфона.