Тема: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)
Автоматика на Arduino для ректификации и дистилляции. Схема сборки с прошивками для контроля и термостатирования дистилляторов и колонн.
Сейчас конечно есть готовые термушки для клапанов и прочие штучки, но хочется опять чего то самому изобразить!
В общем планирую проект с возможностью расширения функций. Каждая версия будет идти V_1, V_2 и так далее, дабы избежать путаницы.
Устройство которое сейчас буду показать прототип, но все функции работают. Проверил в железе на скорою руку.
-Индикация процесса "Ректификация" (планирую и дистилляцию, пиво тоже, что бы один блок все умел).
-Индикация положения клапана отбора. (ON/OFF)
-Индикация текущей температуры в колонне.
-Индикация зафиксированной температуры стабилизации. (От нее + 0,1 С -сработка клапана.)
-Передача на android устройства показаний датчиков.
Модули для сборки:
-Arduino Nano 328, 16 МГц, 5V (пойдет любая, хоть про мини).
-Дисплей (пойдет тоже любой, скетч подкорректировать). 0.96" IIC/I2C Serial 128x64 OLED
-Блютуз модуль. Bluetooth-RF-Transceiver-Module-HC-06-RS232
-Клапан отбора (по возможности приобретайте нержавейку)
-Модуль управления скоростью отбора (возможно в перспективе программно будет).
-Реле для коммутации питания клапана отбора.
Собственно, как это все работает. Когда колонна вышла на рабочий режим, температура стабилизировалась, нажимаем кнопку старт, и все. При увеличении температуры на 0,1 С, отключается реле, и напряжение питания снимается с клапана отбора, он закрыт, температура стабилизировалась, снова открыт.
Наслаждаемся, критикуем, вносим конструктивные изменения.
Пока для начала вроде как все.
Добавлено: 2015-07-01 19:31:39
Скетч пока в том виде как есть
//Автосамогон, автоматика самогоноварения и прочего винокурения. Версия: v_1 OLED 0.96" IIC/I2C Serial 128x64
//Проект открытый и доступен на сайте https://alcodistillers.ru
// Связь с автором проекта krdub@ya.ru
#include <OneWire.h>
OneWire ds(10); // Подключаем датчик к 10 цифровому пину
// Для дисплея
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
float setTmp; // переменная для заданного значения температуры
float celsius; // переменная для текущего значения температуры
int buttFixPin = 2; // пин кнопки
int buttFixPinCurentState = LOW; // текущее состояние кнопки
const int ledPin = 13; // LED pin
//int buttonState = 0; // статус кнопки
void setup(void) {
pinMode(buttFixPin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
pinMode(ledPin, OUTPUT); //13й вывод индикация нажатия кнопки
pinMode(3, OUTPUT); //пин реле клапана отбора
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
Serial.begin(9600);
}
void loop(void) {
// считываем состояние кнопок
buttFixPinCurentState = digitalRead(buttFixPin);
if (buttFixPinCurentState == LOW)digitalWrite(ledPin, HIGH ); //Зажигаем светодиод по нажатию кнопки
else digitalWrite(ledPin, LOW);
//Запись температуры фиксации в переменную
if (buttFixPinCurentState == LOW && setTmp == 0)
{setTmp=celsius; //Если нажата кнопка, пишем в переменную текущее значение температуры
Serial.println(setTmp);}
if (celsius > (setTmp+0.1))digitalWrite(3, LOW ); // Если температура выше зафиксированной на 0,1 С, клапан закрыт
else digitalWrite(3, HIGH);
byte i;
byte type_s;
byte data[12];
byte addr[8];
// Ищем адрес датчика
if ( !ds.search(addr))
{
ds.reset_search();
delay(250);
return;
}
// Проверяем не было ли помех при передаче
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// Определяем серию датчика
switch (addr[0]) {
case 0x10:
Serial.println(" RECTIFICAT");
type_s = 1;
break;
case 0x28:
Serial.println(" CRECTIFICAT");
type_s = 0;
break;
case 0x22:
Serial.println(" RECTIFICAT");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr); // Выбираем адрес
ds.write(0x44, 1); // Производим замер, в режиме паразитного питания
delay(1000);
ds.reset();
ds.select(addr);
ds.write(0xBE); // Считываем оперативную память датчика
for ( i = 0; i < 9; i++) {
data[i] = ds.read(); // Заполняем массив считанными данными
}
// Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
Serial.print("T = ");
Serial.print(celsius);
Serial.print(" C ");
Serial.print("setTmp ");
Serial.print(setTmp);
//Работа Дисплея
display.clearDisplay();
display.setCursor(0,5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("RECTIFICAT"); //Надпись сверху дисплея
display.setCursor(10,27);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("KLAPAN"); //Знак температуры
display.setCursor(60,23);
display.setTextSize(2);
display.setTextColor(WHITE);
if (digitalRead(3)) display.println("ON"); // показываем состояние выхода
else display.println(" OFF");
display.setCursor(0,39);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(celsius); //Выводим на дисплей текущую температуру в колонне
display.setCursor(98,42);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("O"); // знак градуса
display.setCursor(110,43);
display.setTextSize(3);
display.setTextColor(WHITE);
display.println("C"); // знак Цельсия
display.setCursor(0,57);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("setTmp"); //Выводим зафиксированную температуру на дисплей
display.setCursor(40,57);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(setTmp); //Выводим переменную зафиксированной температуры на дисплей
display.display();
delay(1000);
}
Все необходимые библиотеки, которые у меня работают.
https://drive.google.com/file/d/0B5BI-x … sp=sharing
Обновлено 31.01.17
Очередное продолжение версии что в начале темы на дисплее 0.96" IIC/I2C 128x64 OLED
Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)
На дисплей выводятся показания 4х датчиков ds18b20 и давления BMP 180
Код по ссылке https://drive.google.com/file/d/0B5BI-x … sp=sharing
С уважением, Николай.
Моё оборудование : → Винокурня Николя