1 (2015-07-02 15:24:28 отредактировано Николя)

Тема: Автоматика на 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

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

2 (2015-07-06 11:26:44 отредактировано Николя)

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Сразу написал для дисплея LCD Display Module 20х4. Дисплей подключен по  I2C шине (пин А4 и А5 ардуины).

//АвтоСамогон, автоматика для самогоноварения и прочего винокурения. Версия: v_1 LCD 20x4
//Проект открытый и доступен на сайте https://alcodistillers.ru 
// Связь с автором проекта krdub@ya.ru



#include <Wire.h> 
#include <OneWire.h>
OneWire  ds(10);  // Подключаем датчик к 10 цифровому пину
// Для дисплея
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // инициализация библиотеки с перечнем задействованных выводов

float setTmp; // переменная для заданного значения температуры
float celsius; // переменная для текущего значения температуры


int buttFixPin = 2;     // Пин кнопки
int buttFixPinCurentState = LOW;       // текущее состояние кнопки 
const int ledPin =  13;      //  LED pin
//int buttonState = 0;         // статус кнопки

void setup(void) 
{
lcd.init();  
lcd.backlight();

  pinMode(buttFixPin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
  pinMode(ledPin, OUTPUT);      //13 пин светодиод -индикация нажатия кнопки
  pinMode(3, OUTPUT); // Пин реле клапана отбора
  
  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);
  
 //Работа Дисплея
   lcd.setCursor(0, 0);  // устанавливаем курсор в 0-ом столбце,0 строка (начинается с 0)
   lcd.print("RECTIFICAT AutoSem"); // наименование процесса
   lcd.setCursor(0, 1);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)
   lcd.print(" Steam temp. ");     
   lcd.print(celsius);              // Температура в верхней точке колонны
   lcd.print((char)223);            // Знак градуса
   lcd.setCursor(0, 2);                
   lcd.print("Valve Selection");
   if (digitalRead(3)) lcd.print(" ON"); // показываем состояние выхода
   else lcd.print(" OFF"); 
   lcd.print("   ");
   lcd.setCursor(0, 3);             // устанавливаем курсор в 0-ом столбце, 3 строка (начинается с 0)
   lcd.print("SetTemp  ");     
   lcd.print(setTmp);              // Температура в верхней точке колонны
   lcd.print((char)223);            // Знак градуса 

 }
  
 

Библиотеки для дисплея здесь
https://drive.google.com/file/d/0B5BI-x … sp=sharing
https://drive.google.com/file/d/0B5BI-x … sp=sharing


Ну и версия для LCD 16x2. Здесь добавлено время с начала запуска блока управления.

//АвтоСамогон, автоматика для самогоноварения и прочего винокурения.
#include <Wire.h> 
#include <OneWire.h>
OneWire  ds(10);  // Подключаем датчик к 10 цифровому пину
// Для дисплея
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // инициализация библиотеки с перечнем задействованных выводов

float setTmp; // переменная для заданного значения температуры
float celsius; // переменная для текущего значения температуры


int buttFixPin = 2;     // пин кнопки
int buttFixPinCurentState = LOW;       // текущее состояние кнопки 
const int ledPin =  13;      //  LED pin
//int buttonState = 0;         // статус кнопки

unsigned long time; // объявление переменной time типа unsigned long

void setup(void) 
{
lcd.init();  
lcd.backlight();

  pinMode(buttFixPin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
  pinMode(ledPin, OUTPUT);      //13й вывод индикация нажатия кнопки
  pinMode(3, OUTPUT); //пин реле клапана отбора
  
  Serial.begin(9600);
 
}

void loop(void)
{
 
   lcd.setCursor(15,0);
     lcd.print("R"); 
     
if (time/60/60<10) {lcd.print ("0"); }
Serial.print (time/60/60);
Serial.print (":");  
if (time/60/60<10) { Serial.print ("0"); }
   lcd.setCursor(0, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)     
   lcd.print(time/60/60);   
   lcd.setCursor(2, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)     
   lcd.print(":");  
if (time/60%60<10) { Serial.print ("0"); }
Serial.print ((time/60)%60);
Serial.print (":");
if (time/60%60<10) { lcd.print ("0"); }
   lcd.setCursor(4, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)     
   lcd.print((time/60)%60);   
   lcd.setCursor(5, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)     
   //lcd.print(":");  
if (time%60<10) { Serial.print ("0"); }
Serial.println (time%60);
//if (time%60<10) {  lcd.print ("0"); }
   //lcd.setCursor(6, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)     
   //lcd.print(time%60);  
    
 time = millis()/1000;
 
 lcd.setCursor(9, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)
   //lcd.print(" Steam temp. ");     
   lcd.print(celsius);   

  
  //Работа Дисплея
   lcd.setCursor(7, 0);
   lcd.print("T="); 
   lcd.setCursor(9, 0);             // устанавливаем курсор в 0-ом столбце, 1 строка (начинается с 0)
   //lcd.print(" Steam temp. ");     
   lcd.print(celsius);              // Температура в верхней точке колонны
   lcd.print((char)223);   // Знак градуса
   lcd.setCursor(11, 1);                
   lcd.print("V");
   if (digitalRead(3)) lcd.print(" ON"); // показываем состояние выхода
   else lcd.print(" OFF"); 
   lcd.print("   ");
   lcd.setCursor(0, 1);             // устанавливаем курсор в 0-ом столбце, 3 строка (начинается с 0)
   lcd.print("SetT=");     
   lcd.print(setTmp);              // Температура в верхней точке колонны
   lcd.print((char)223);            // Знак градуса 
 
  // считываем состояние кнопок
   buttFixPinCurentState = digitalRead(buttFixPin);
  
 // float celsius=celsius; // переменная для текущего значения температуры 
 // buttonState = digitalRead(buttonPin);
  
  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, HIGH  );  // Если температура выше зафиксированной на 0,1 С, клапан закрыт         
  else digitalWrite(3, LOW); 
      
  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(750);    

  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);
  
 

 }
  
 
Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

3 (2015-07-02 14:39:21 отредактировано Николя)

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Чертить схему не стал, нет на рабочем компе спец программ, нарисовал  "от руки" для наглядности.

Программа для Android устройств здесь  https://play.google.com/store/apps/deta … th_Arduino

Там еще есть видео автора, тоже полезно будет посмотреть.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

4

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Так пока тестирую на столе. Работает стабильно.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

5

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Клапан откель выдернут?

У вас в жизни всегда будет все, что вы хотите, если вы будете помогать другим людям получать то, чего хотят они.

6 (2015-07-05 10:09:00 отредактировано Николя)

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

У китаИСЕВ заказывал, еще до нашего форума. Пару штук прислали. Хотел переключение с голов на тело автоматизировать. Когда банка с заранее настроенным противовесом на определенный вес,  замыкает контакт, первый клапан закрывается, а второй на тело открывается.

Отладил полностью, затолкал в коробушку, как только допаяю колонну, буду полевые испытания проводить, потом модернизация и добавление функций, для совсем ленивых. Наверное видео сниму, если соберусь, заодно разбор полетов первой полноценной ректификации потом проведем, надеюсь на это.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

7

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Уважаемые коллеги, требуется консультация. Что бы закончить процесс ректификации по температуре в кубе, из чего исходить, не отжимая хвосты до последнего?
Я вижу так:
- Температура в кубе привязана к количеству спирта в нем.
Если мы оставляем грубо 5% хвостов, то при какой то заданной (усредненной) температуре стоп машина. Какую температуру ставить???
Тоже самое для дистилляции.
Помогайте пожалуйста.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

8

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

закончить процесс ректификации по температуре в кубе,

Здравия всем. На температуру в кубе нельзя ориентироваться и строить процесс ректификации. Только термометр в колонне покажет  значения, по которым можно достоверно понимать, что  происходит внутри, какая фракция в данный момент отходит.
Все остальное это гадание на кофейной гуще.

9

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Ivanov & Co ©:

Только термометр в колонне покажет  значения, по которым можно достоверно понимать, что  происходит внутри,

Да, я это понимаю.
Вопрос наверно некорректно поставил, эти значения для автоматики, когда оператора нет рядом. Ведь наступит же момент когда клапан закроется а температура не десятку назад не вернется, вот этот момент конечно можно взять за основу, но я пока не готов. Вот по Т куба и интересует, можно завершить или нет.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

10

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

Что бы закончить процесс ректификации по температуре в кубе, из чего исходить, не отжимая хвосты до последнего?

Вам уже ответили. Я пользуюсь температурой паров в кубе чисто для прикидок, особенно при первичной дистилляции. Стоит продолжать процесс или забить).
данные не помню от куда.

Алкоголь не помогает найти ответ,
он помогает забыть вопрос!

11

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

Когда банка с заранее настроенным противовесом на определенный вес,  замыкает контакт, первый клапан закрывается, а второй на тело открывается.

Зачем так мудрить? Два электрода в банку на нужный уровень. При замыкании их спиртом появляется проводимость (очень маленькая, но можно усилить, мне хватило одного кт3102е). Ориентируйся на сопротивление в 300-500КОм, хотя зависит от площади контакта.
Добавлено: 2015-07-06 19:26:25

Николя ©:

Вот по Т куба и интересует, можно завершить или нет.

Температура кипения в кубе зависит от концентрации спирта и других примесей, а так-же от давления в кубе. Не стоит брать её за основу, проверено. Уже наступал когда-то на эти грабли.

12

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

al ©:

Я пользуюсь температурой паров в кубе чисто для прикидок,

Спасибо за табличку, это и имел ввиду.

Vlad1975 ©:

Два электрода в банку на нужный уровень

Благодарю, сейчас такой вариант и рассматриваю, а с противовесом было до того. С проводимостью спирта был вопрос. Попробую, есть блок- усилитель сигнала, попробую с ним.
Добавлено: 2015-07-06 13:28:42

Vlad1975 ©:

Уже наступал когда-то на эти грабли.

Значит буду думать другой алгоритм.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

13

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

Значит буду думать другой алгоритм

Так, вариант один. Датчик на 2/3 высоты рк.
Добавлено: 2015-07-06 19:33:34

Николя ©:

Попробую, есть блок- усилитель сигнала, попробую с ним.

Вы в аналоговых схемах разбираетесь? Минимальных знаний достаточно, чтобы собрать усилитель постоянного сигнала (хоть на транзисторах хоть на операционнике). Могу помочь.

14

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Спасибо, сейчас отлучусь, попозже продолжим.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

15

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

Хотел переключение с голов на тело автоматизировать.

Количество голов всегда разное, зависит от состава браги. Испортите тело и все.

Алкоголь не помогает найти ответ,
он помогает забыть вопрос!

16

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Vlad1975 ©:

Так, вариант один. Датчик на 2/3 высоты рк.

Да, скорее всего именно это придется использовать, но я хотел сначала  несколько параметров использовать.

Vlad1975 ©:

чтобы собрать усилитель постоянного сигнала

Под рукой транзисторы китайские есть, операционники надо дома искать.
Сейчас пробую напрямую на аналоговый вход ардуинки с простым скетчем, работает, спирт тоже видит.
Добавлено: 2015-07-06 19:29:51

al ©:

Количество голов всегда разное, зависит от состава браги. Испортите тело и все.

Все эти прибамбасы я характеризую "для ленивых", на самом деле как вариант если вдруг проморгал, ну бывает такое, и переставить банку забыл. Тут хоть АвтоСем переключит. Уровень голов ставить естественно с запасом, ну потеряется немного товарного спирта.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

17

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

ну бывает такое, и переставить банку забыл. Тут хоть АвтоСем переключит

Всё равно РК без присмотра не оставить. Вместо клапанов можно поставить звуковую сигнализацию на определённые параметры (уровень жидкости, превышение или понижение Т воды на обратке, превышение Т на высоте 2/3 РК).

18

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Николя ©:

С проводимостью спирта был вопрос.

1.3 ома в 1 см если не ошибаюсь (в регламенте на ректификат видел). Это для концентрации 96.2.

У вас в жизни всегда будет все, что вы хотите, если вы будете помогать другим людям получать то, чего хотят они.

19

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Иван ©:

1.3 ома в 1 см если не ошибаюсь

Чистый спирт - не электролит (диэлектрик). В смеси с водой облалает не большой проводимостью. Сопротивление исчисляется Мегаомами, даже сотнями МОм.

20

Re: Автоматика на Arduino для ректификации и дистилляции (схема-прошивки)

Vlad1975 ©:

Иван пишет:
1.3 ома в 1 см если не ошибаюсь

Ардуинщикам повезло больше всех. Все уже у них есть, только надо знать что и где искать.
Например этот датчик воды используется и на "мокрый пол" и на наполнение емкости спиртом.
Цена вопроса до 100р.

ПС: если заранее определить обьем голов, то можно сделать так, чтобы этот датчик "позвал" оператора для смены емкости.