Мобильная версия Форум Arduino Документация Гарантийные условия 0 0
UA RU
График работы магазина:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Вс: выходной
Каталог
Напиши статью и получи скидку!

Ящик для сушіння трав або пилку

2016-05-05

Все статьи →

Viktor Lesiuk

Всім привіт!

Маю маленьку пасіку, тому зіткнувся з проблемою висушування пилку в невеликих об’ємах. А саме: зібравши пилок його потрібно висушити до відносної вологості 6-8% при температурі не вище 40 градусів за Цельсієм, і найважливіше – без попадання на пилок прямих сонячних променів.

Готові сушарки не по кишені, та й для великих об’ємів. Тому вирішив зробити сам з допомогою Arduino. Ідея така: має бути якийсь ящик, в ньому нагрівач, давач температури і вологості, вентилятор для витягування вологи, дисплей куди все висвічується та якось має встановлюватися необхідна температура.

Зроблено ящик із ДВП, всередині стінок пінопласт, всередині ящика термоізол. Є два отвори для вентиляторів.

Також потрібно було:

  • блок живлення 8-12V;
  • DC-DC знижуючий конвертер;
  • давач температури і вологості DHT22;
  • LCD дисплей 16х2;
  • 2-канальний модуль реле;
  • макетна плата 3х7;
  • Arduino Nano v3;
  • потенціометр 10 кОм – 3шт.;
  • кулер комп’ютерний – 2шт.;
  • звичайна кнопка;
  • ТЕН;
  • корпус в який це все можна заховати.

Всі елементи.

Схема підключення елементів до Arduino.

В Інтернеті багато інформації про те як підключити LCD дисплей і давач DHT22 до Arduino, а решту елементів підключити не важко. Логічна частина і мотори живляться від блоку живлення, а ТЕН від 220В. Мотори підключені перед DC-DC конвертером, для того щоб вберегти схему від викидів напруги. До кнопки і до анода підсвітки дисплея підключені стягуючі резистори. Змінний резистор біля моторів встановлено для регулювання оборотів.

Розміщення елементів у корпусі.

Одразу хочу попередити, що управління оборотами моторів з допомогою потенціометра не найкращий варіант, PWM набагато розумніше рішення, але для цього необхідно драйвер моторів.

Блок реле працює якось дивно. При подачі напруги на модуль, реле міняють свій стан – включаться, а виключаються високим логічним рівнем на керуючому вході. Тобто ТЕН включається відзразу при включенні Arduino і модулю реле. Тому повністю довірився мікроконтролеру в управлінні нагрівачем.

Якщо ж вибрати другий варіант підключення ТЕНа до реле, то при виключеному модулі реле і Arduino ТЕН буде увімкнений, а це недопустимо.

Для роботи дисплею використав бібліотеку LiquidCrystal, для DHT22 бібліотеку DHT.

Чому саме давач 22 серії? Бо він має ширший діапазон вимірювання вологи. Встановлювати температуру вирішив з допомогою потенціометра, так як аналогових портів є багато, його значення зберігається після вимкнення Arduino. Дуже корисна функція – map, яка перевела вхід з потенціометра в діапазон температур.

Тен обрав на 0,25 кВат, встановив на дні бокса над керамічною плиткою. Плитка потрібна щоб не нагрівалося дно. Вентилятор, який обдуває тен, підключений безпосередньо від блоку живлення і регулюється тільки змінним резистором.

Скеч:

#include <LiquidCrystal.h> // бібліотека LCD

LiquidCrystal lcd(2,3,4,5,6,7);

#include <DHT.h> // бібліотека давача температури і вологості

#define DHTPIN 12 // пін, до якого підключено давач

#define DHTTYPE DHT22 // DHT 22 (AM2302)

DHT dht(DHTPIN, DHTTYPE);

int POT = 0; // вхід потенціометра для налаштування температури

int tset; // тут зберігаємо дані з потенціометра

int tsetlast =0; //останнє значення температури

int ledLCD = 8; // підсвітка LCD

int REL1 = 10; // управління вентилятором

int REL2 = 9; // управління тентом

int button = 11; // кнопка вкл. підсвітки

int tsetHIGH = 1023; // верхнє значення потенціометра

int tsetLOW = 0; // нижнє значення потенціометра

unsigned long currentTime; //поточний час

unsigned long loopTime; // збережений час

const long interval = 5000; //час затримки

byte degree[8] = { // символ градус

B00110,

B01001,

B01001,

B00110,

B00000,

B00000,

B00000,

B00000,

};

void setup() {

Serial.begin(9600);

dht.begin();

lcd.begin(16,2);

lcd.createChar(0,degree);

pinMode(ledLCD, OUTPUT);

pinMode(REL1, OUTPUT);

pinMode(REL2, OUTPUT);

pinMode(button, INPUT);

digitalWrite(REL1, LOW); //включаєм вентилятор

digitalWrite(REL2, LOW); //включаєм тент

digitalWrite(ledLCD, HIGH); //вкл. підсвітку

lcd.setCursor(0,0);

lcd.print(" TERMOBOX");

delay(2000);

lcd.clear(); // очистити екран

//виводимо незмінну інформацію на екран

lcd.print("T=");

lcd.setCursor(4,0);

lcd.write((byte)0); // виводимо символ градуса

lcd.setCursor(5,0);

lcd.print("C");

lcd.setCursor(8,0);

lcd.print("SET=");

lcd.setCursor(14,0);

lcd.write((byte)0); // виводимо символ градуса

lcd.setCursor(15,0);

lcd.print("C");

lcd.setCursor(0,1);

lcd.print("H=");

lcd.setCursor(4,1);

lcd.print("%");

lcd.setCursor(8,1);

lcd.print("heat:");

}

void loop() {

tset = analogRead(POT); // зчитуєм дані з потенціометра

tset = map(tset,tsetLOW,tsetHIGH,25,60); // масштабування даних потенціометра в межі

//встановлення температури

int (h) = dht.readHumidity(); // зчитуємо вологість в змінну h цілим числом

int (t) = dht.readTemperature(); // зчитуємо темперературу в змінну t цілим числом

lcd.setCursor(2,0);

lcd.print(t);

lcd.setCursor(2,1);

lcd.print(h);

lcd.setCursor(12,0);

lcd.print(tset);

//якщо дані прийшли в межах 0 до 95 градусів

if (t >= 0 || t<= 95 ){

if (t < tset-2) // якщо поточна температура менша за (встановлену-2) то

{

digitalWrite(REL2, LOW); // включити тент

lcd.setCursor(13,1);

lcd.print(" ON");

}

if (t >= tset) // якщо поточна темп. більша/рівна за встановлену то

{

digitalWrite(REL2, HIGH); //виключити тент

lcd.setCursor(13,1);

lcd.print("off");

}

// управління вентилятором

if (tset-t >=10) digitalWrite(REL1,HIGH); // викл. вент

else digitalWrite(REL1,LOW); // включити вентилятор

}

// якщо дані за межами норми

else{

digitalWrite(REL2, HIGH); //виключаємо тент

digitalWrite(REL1,HIGH); // виключити вентилятор

lcd.clear(); //очистити дисплей

lcd.setCursor(0,0);

lcd.print(" ERR TERMOMETR"); //вивести напис про помилку

delay(1000); //затримати напис на 1 с.

}

//якщо змінено температуру чи натиснуто кнопку то вкл. підсвітку

if (tset != tsetlast || digitalRead(button) == HIGH ){

digitalWrite(ledLCD, HIGH); //вкл. підсвітку

loopTime = millis(); //зберегли час ввімкн. підсвітки

tsetlast = tset; // зберегли останнє значення темп.

}

// якщо час вийшов то викл. підсвітку

currentTime = millis(); //зчитали поточний час

if (currentTime >= (loopTime + interval)){

digitalWrite(ledLCD, LOW); //виключити дисплей

}

}//останння дужка

Отже, в мене вийшов бокс який містить:

- дисплей із динамічною і статичною інформацію;

- змінний резистор для встановлення швидкості обертання вентиляторів;

- змінний резистор для встановлення температури;

- кнопку для включення підсвітки дисплею.

Кінцевий результат.

Програма працює наступним чином: нагріває бокс до заданої температури, після чого вимикає тен і дає боксу охолонути на 2 градуси і знову вмикає тен. При встановленні температури включається підсвітка на 5 секунд.

Так само підсвітка включається, якщо натиснути на кнопку.

Верхній вентилятор виключається, якщо різниця між поточною і встановленою температурами вища на 10 градусів. Це зроблено для того, щоб якомога швидше нагрівся бокс.

Ваша оценка статьи:

Отлично
Хорошо
Удовлетворительно
Плохо
Очень плохо

Общая оценка:

Оценка "Ящик для сушіння трав або пилку"
5 из 5
сделана на основе 2 оценок 2 клиентских отзывов.

Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Максим
02.02.2019 09:16:34
Несложно, но вполне работоспособно. Скетч можно дополнять и дополнять.Единственное - не уверен в расположении датчика. Ну и тен лучше б оребренный.
Михаил
20.01.2019 19:45:33
Очень хорошая рациональная конструкция. Чувтвуется, что автор занимался конструированием профессионально
оплата картами Visa и MasterCard