logotype

Погреб на балконе, термо шкаф для хранения овощей.

- 09 Ноября 2014.

Так случилось, что с переездом в новую квартиру остро встал вопрос с зимним хранением  солений и овощей. Мы люди старой закалки и египетскую картошку из супермаркета не едим. Поэтому по старинке каждую осень  запасаем не свою , но фермерскую.



Итак решено одну из лоджий оставить холодной и там устроить погреб по городскому. Т.е. поддерживать температуру от 2 до 7 градусов. Поскольку к лету все съедается, то там хранится барахло (см.фото) и охлаждения на летний период не будет.


Сооружаем утепленный шкаф. Каркас дерево. Гипсокартон с двух сторон, внутри утеплитель. Дверь  (теклопакет) нашлась бесплатно.

Чтобы внутри тепло равномерно распределялось, нужно было сделать продуваемые полки и отсек для овощей и обеспечить циркуляцию воздуха.


Исходя из этого я сделал внутренний каркас, который позволял оставить расстояние от полок до боковых стенок основного каркаса. Кроме того сами полки были сделаны из сетки 30х30мм положенной на арматуру.  Отсек для овощей из такой же сетки, включая дно.



Через все полки проходит вентиляционная труба, сверху которой находится вентилятор. Низ трубы заканчивается тройником, распределяющим поток в две стороны.



Первоначально идея была такова: внизу напротив выходов тройника устанавливались два прожектора по 150вт. , которые включались вместе с вентилятором. Теплый воздух проходил по бокам полок, а так же через овощи и остальные полки вверх где и засасывался вентилятором.

Потом от идеи прожекторов пришлось отказаться. Был установлен один конвектор на 500вт.


Первоначально включением нагрева и вентилятора управлял термодатчик с магнитным пускателем. Температуру внутри/снаружи показывала китайская поделка. Свет включался вручную. И вот решил я заменить это дело Arduino.




Задача:

  1. Поддержание температурного режима внутри герметичного шкафа в пределах 2-7 гр. в холодном помещении.
  2. Отображение температуры и влажности внутри и снаружи шкафа
  3. Управление обогревателем и конвекцией внутри шкафа (термодатчик)
  4. Управление  освещением  по откр./закр. Двери (геркон)
  5. Управление подсветкой экрана ( включение от кнопки на корпусе на несколько секунд  и при включении обогрева)

Необходимые детали:


1PCS Nano V3.0 AVR ATMEGA328P-AU Moudle Board +Mini USB Cable FOR Arduino`s IDE


$13.99 Free shipping


New 5V 2-Channel Relay Module Shield for Arduino ARM PIC AVR DSP Electronic 10A

Item picture

$2.59 Free shipping


DHT22/AM2302 Digital Temperature And Humidity Sensor Data Logger Home Appliance


$4.79



New 1602 16x2 Character LCD Display Module HD44780 Controller Blue Blacklight

$2.35 Free shipping


Автоматически созданный замещающий текст: 4- -w. — _____.‚

Датчик двери, магнитный

150р.

Автоматически созданный замещающий текст:

Кнопка без фиксации. Я использовал для кратковременного включения подсветки экрана.

30р.

Автоматически созданный замещающий текст:

Блок питания на 5, 7.5 или 9 вольт.

50р.


Корпус по вкусу.



Всего примерно 1100р.

К этому всему надо еще паяльник, голову и руки.


Назначение входов ардуино:


D2

- выход реле нагрева

D3

- выход реле свет

D4-D10

- выход LCD

D11

- вход датчика тепмература/влажность снаружи

D12

- вход датчика тепмература/влажность внутри

A7

- датчик двери

A0

- кнопка вкл. подсветки


СКЕТЧ:

#include <LiquidCrystal.h>

#include "DHT.h"


// назначение вх/вых

/*

d2 - выход реле нагрева

d3 - выход реле свет

d4-d10 - выход LCD

d11 - вход температура снаружи

d12 - вход температура внутри

A7 - вход дверь

A0  - вкл. подсветки

*/

//init DHT

#define DHTPIN1 12     // what pin we're connected to

#define DHTTYPE1 DHT22   // DHT 22

DHT dht1(DHTPIN1, DHTTYPE1);


#define DHTPIN2 11     // what pin we're connected to

#define DHTTYPE2 DHT22   // DHT 22

DHT dht2(DHTPIN2, DHTTYPE2);

int on=2;// переменная с порогом вкл

int off=7;// переменная с порогом выкл

// вход от геркона

int analogPin = 0;

int val = 0;

int val2= 0;

// подсветка

int ledPin = 10;


LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

void setup() {

//pinMode(A0, INPUT); // кнопка подсветки

//pinMode(A7, INPUT); // кнопка подсветки

digitalWrite(A0, HIGH);

digitalWrite(A1, HIGH);

// выключим подсветку

pinMode(ledPin, OUTPUT);

digitalWrite(ledPin, LOW); // подсветка off

pinMode(2, OUTPUT); //нагрев

pinMode(3, OUTPUT); //свет

digitalWrite(2,HIGH); // rele 2 off

digitalWrite(3,HIGH); // rele 3 off

//инициируем lcd

lcd.begin(16, 2);

dht1.begin();

}

void loop() {

// вывод температуры и влажности 1

int h = dht1.readHumidity();

float t = dht1.readTemperature();

// check if returns are valid, if they are NaN (not a number) then something went wrong!

lcd.setCursor(0, 0);

if (isnan(t) || isnan(h)) {

lcd.println("Failed read from DHT");

} else {

lcd.print("In  T=");

lcd.print(t);

lcd.setCursor(13, 0);

lcd.print(h);

lcd.print("%");

}

// вывод температуры и влажности 2

int h2 = dht2.readHumidity();

float t2 = dht2.readTemperature();


// check if returns are valid, if they are NaN (not a number) then something went wrong!

lcd.setCursor(0, 1);

if (isnan(t2) || isnan(h2)) {

lcd.println("Failed read from DHT");

} else {

lcd.print("Out T=");

lcd.print(t2);

lcd.setCursor(13, 1);

lcd.print(h2);

lcd.print("%");

}

// если температура больше заданной выключаем нагрев и подсветку

if (t>=off) {

digitalWrite(ledPin, LOW); // подсветка выкл

digitalWrite(2,HIGH); // нагрев выкл

}

else if (t<=on)  // включим нагрев и подсветку

{

digitalWrite(ledPin, HIGH); // подсветка вкл

digitalWrite(2,LOW); // нагрев вкл

}


// читаем вход с кнопки

val = digitalRead(A0);    // read the input pin

if (val==LOW)

{

digitalWrite(ledPin, HIGH); // подсветка on

delay (3000);

}

else if (t>on && val==HIGH)

{

digitalWrite(ledPin, LOW); // подсветка off

}

val2 = digitalRead(A1); //читаем геркон

if (val2==HIGH)

{

digitalWrite(3, LOW); // реле свет вкл

digitalWrite(ledPin, HIGH); // подсветка on

delay (100);

}

else

{

digitalWrite(3, HIGH); // реле свет выкл

digitalWrite(ledPin, LOW); // подсветка off

delay (100);

}


//lcd.setCursor(15, 0);

//lcd.print(!(digitalRead(2)));

//lcd.setCursor(15, 1);

//lcd.print(!(val2));

}



Вот так выглядит наружний блок:



Сверху видна кнопка включения подсветки экрана и наружний температурный датчик.

Внутренний датчик такой же марки находится в центре шкафа внутри. Снизу разъем micro-USB на случай апгрейда софта.


Вся эта конструкция пережила уже несколько зим. Вот перечень недостатков, которые выявились:

  • При хранении овощей внутри здорово повышается влажность. Как решить пока не знаю. Просто иногда проветриваю шкаф. Возможно поставлю тихоходный вентилятор выдувающий воздух наружу. Как скажется на темп. режиме ?
  • Иногда экран начинает моргать сам по себе, после открытия/закрытия двери. Похоже на косяк в моей первой программе. Лечится перезагрузкой. Буду разбираться.