Каталог
|
Ящик для сушіння трав або пилку2016-05-05 Всі статті →Viktor Lesiuk Всім привіт! Маю маленьку пасіку, тому зіткнувся з проблемою висушування пилку в невеликих об’ємах. А саме: зібравши пилок його потрібно висушити до відносної вологості 6-8% при температурі не вище 40 градусів за Цельсієм, і найважливіше – без попадання на пилок прямих сонячних променів. Готові сушарки не по кишені, та й для великих об’ємів. Тому вирішив зробити сам з допомогою Arduino. Ідея така: має бути якийсь ящик, в ньому нагрівач, давач температури і вологості, вентилятор для витягування вологи, дисплей куди все висвічується та якось має встановлюватися необхідна температура.
Зроблено ящик із ДВП, всередині стінок пінопласт, всередині ящика термоізол. Є два отвори для вентиляторів. Також потрібно було:
Всі елементи.
Схема підключення елементів до 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 градусів. Це зроблено для того, щоб якомога швидше нагрівся бокс.
Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Максим
02.02.2019 09:16:34
Несложно, но вполне работоспособно. Скетч можно дополнять и дополнять.Единственное - не уверен в расположении датчика. Ну и тен лучше б оребренный.
Михаил
20.01.2019 19:45:33
Очень хорошая рациональная конструкция. Чувтвуется, что автор занимался конструированием профессионально
|