27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Smart Distiller (Умный дистиллятор с управлением по интернет)

Форум самогонщиков Автоматика
1 2 3 4 5 6 ... 13 3
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.40  23 Мая 14, 04:10
Для получения действительно качественного ректификата необходимо стабилизировать выходное напряжение вплоть до одного вольтаБратан, 22 Мая 14, 17:54
Такая стабилизация мощности нагрева - это, конечно, хорошо, позволяет стабилизировать процесс разделения.

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

При кубовой перегонке процент содержания спирта в кубовой жидкости постепенно уменьшается.
Для сохранения режима колонны нужно по мере уменьшения содержания спирта в кубовой жидкости увеличивать подводимую к кубу мощность и увеличивать охлаждение дефлегматора.

Количество подводимой к кубу мощности влияет только на производительность колонны.
Естественно, мощность ограничивается захлёбной характеристикой колонны.
ys1797 Доцент Санкт-Петербург 1K 339
Отв.41  23 Мая 14, 14:15
А почему не взять, например, HD-2522.10U или HD-2525.LA и регулировать напряжение фазовым способом? Разве нет возможности получить источник напряжения 0-10 вольт?

Реле - это хорошо, но интенсивная коммутация нагрузки в 2 киловатта со временем плохо скажется на контактах реле.
В конце-концов они залипнут и кирдык.
А тема "поменяй на светодиодные лампочки" - это прикольно. Еще и всем соседям за свой счет поменять придется.

По поводу охлаждения, твердотелку можно в железной коробке закрепить на заднюю стену, пусть сама коробка еще и тепло рассеивает.
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.42  26 Мая 14, 04:00
Удаленный рабочий стол pcDuino (клавиатура, мышь и дисплей через сеть)
Удаленный рабочий стол
Уже не терпится коробочку с pcDuino, релюхами и термометрами прикрутить к дистиллятору.
Хоть и без web-интерфейса, но управлять то аппаратурой сможет.
Единственное, что меня удерживало от этого – то, что нужно держать клавиатуру, мышь и громоздкий дисплей рядом с аппаратурой.
Просто поставить это хозяйство некуда.
Было бы неплохо подключиться через сеть к удаленному рабочему столу (RDP) как это делается в Windows.
Решения по использованию RDP, такие как TeamViewer, Google Chrome Remote Desktop, xrdp, на pcDuino не завелись, всё-таки несколько своеобразный процессор на плате.
К счастью, для Linux есть родное решение Virtual Network Computer (VNC).
Но прежде чем разворачивать и настраивать это решение, необходимо сделать некоторые шаги по первоначальной настройке платы pcDuino.

Первоначальная настройка платы pcDuino
1.   При первом включении pcDuino будет запрошена установка режима монитора, у меня работали режимы монитора с буквой R в конце.
2.   После первой загрузки, если плата с WiFi, необходимо подключиться к точке доступа WiFi, убедившись, что есть доступ в интернет, нужно перезагрузить систему.
3.   В процессе перезагрузки должна возникнуть красная надпись «Press [F8/A/1] to enter board-config menu», нужно нажать F8, в списке выбрать пункт update, затем пункт all и дождаться завершения обновления.
Если пункт update отсутствует, нужно будет обновить ядро pcDuino

Настройка x11vnc сервера на pcDuino
Запускаем LXTerminal.
Установка сервера x11vnc:
sudo apt-get install vino vinagre x11vnc
Установка пароля удаленного рабочего стола:
sudo x11vnc –storepasswd
Настройка пути хранения пароля:
sudo x11vnc -storepasswd password /etc/x11vnc.pass
(password нужно заменить на ваш пароль)

Настройка x11vnc сервера на автоматическую загрузку после включения или рестарта:
Запускаем редактор для редактирования файла конфигурации x11vnc:
sudo leafpad /etc/init/x11vnc.conf
в файле конфигурации прописываем следующие строки:
    start on login-session-start
   
   script
   x11vnc -display :0 -auth /var/run/lightdm/root/:0 -forever -bg -o /var/log/x11vnc.log -rfbauth /etc/x11vnc.pass -rfbport 5900
   end script
сохраняем файл.
И ещё нужно посмотреть, и записать IP-адрес pcDuino командой:
Ifconfig
Отключаем или перезагружаем плату.
Теперь плата pcDuino готова к удаленному подключению, можно отсоединять клавиатуру, мышь и дисплей, собрать аккуратно всё в коробочку.
Заходить на удаленный рабочий стол будем с другого компьютера.

Настройка компьютера Windows для подключения к удаленному рабочему столу pcDuino.
Тут совершенно просто: заходим на страницу http://www.tightvnc.com/download.php, скачиваем соответствующий установщик и устанавливаем.
При установке можно отключить установку TightVNC Server.

Работаем с платой pcDuino с компьютера под управлением Windows.
Запускаем TightVNC Viewer из главного меню Windows.
В появившемся окне в поле Remote Host вводим IP-адрес pcDuino и через двойное двоеточие номер порта 5900.
У меня так: 192.168.0.101::5900
Жмем кнопку Connect, вводим тот пароль, который сохраняли на pcDuino и наслаждаемся удаленным управлением.
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


Такое решение позволит управлять пока только внутри сети, то есть, нет возможности заходить на удаленный рабочий стол pcDuino через интернет.
Еще заметил, что нет автоповтора клавиш, буфер Windows копируется только в окно LXTerminal, в leafpad не копируется.
Может есть и ещё какие особенности, но в целом вполне годится для отладки программ дистиллятора.
capsolo Профессор Зелик 5.3K 1.6K
Отв.43  27 Мая 14, 23:27
Ну ведь это уже кое-что. Учитывая наличие полноценной машины в сетке
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.44  29 Мая 14, 15:37
Привязка IP-адреса к плате pcDuino
Вечером включил pcDuino, включил компьютер и при попытке подключится к удаленному рабочему столу получил сообщение, что конечный компьютер отверг запрос.
Собственно оказалось, что внучка подключила свой сотовый к WiFi-роутеру и тот выделил ей IP-адрес, который был у pcDuino.
pcDuino, соответственно, получил другой IP-адрес.

Чтобы избежать в дальнейшем подобных недоразумений, настроил DHCP WiFi-роутера на выделение плате pcDuino постоянного IP-адреса.

WiFi-роутер у меня TP-LINK TL-MR3420, управляется посредством web-интерфейса.
Нужно в адресной строке браузера ввести его адрес 192.168.0.1 (он такой по-умолчанию, у других роутеров может быть другой, нужно смотреть документацию).
Ввести логин и пароль.
В меню левой панели выбрать пункт DHSP Client list:
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


в списке у меня можно увидеть компьютер, сотовый и pcDuino (ubuntu).
В списке нужно выделить и скопировать MAC Address ubuntu.
Далее нужно перейти в пункт DHSP Address Reservation и нажать кнопку Add New...
В поле MAC Address вставит скопированный MAC-адрес.
В поле Reserved IP Address ввести желаемый IP-адрес, который будет закреплен за платой pcDuino:
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


и нажать кнопку Save.
Роутер предложит перезагрузиться, чтобы изменения вступили в силу, соглашаемся с ним.
После перезагрузки в DHSP Client list увидим, что плата pcDuino (ubuntu) получила назначенный IP-адрес в постоянное пользование:
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


capsolo Профессор Зелик 5.3K 1.6K
Отв.45  29 Мая 14, 23:50
Да, необычно получится если собрался гнать, а айпишник заняли. Придется отложить Улыбающийся lease кончится и можно продолжать
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.46  12 Июня 14, 15:33
Регулятор мощности с алгоритмом Брезенхема
Регулятор мощности с алгоритмом Брезенхема
Для управления мощностью нагрева сделан отдельный модуль Power.py, который можно подключить к программам и использовать его три основные функции:
Power.On()   - запустить преобразователь Брезенхема;
Power.Off()   - остановить преобразователь Брезенхема;
Power.Set(P)   - установить мощность P (0…10), выдаваемую преобразователем.

Вся мощность делится на два канала.
Период преобразователя равен 5 секундам.
Для того, чтобы ТЭНы не включались одновременно, на второй ТЭН подается обращенная последовательность (инвертированное дополнение к этой части мощности).
#!/usr/bin/env python
#coding=utf8
"""
$Id: Power.py,v 1.2 2014/05/29 11:52:30 alfille Exp $

Copyright (c) 2014 C-Bell (VAGor). All rights reserved.

Модуль обеспечивает регулировку уровня выдаваемый на ТЭНы
мощности по алгоритму Брезенхема.

Для работы программы должны быть установлены пакеты:
    actuators
    gpio
"""


import actuators, threading, time
from actuators import *

Pmax=5
P=0
#Разрешитель работы потока преобразования Брезенхема
Convert=False

def On():
    """Стартует поток регулятора мощности"""
    global Convert
    Convert=True
    thrdPwr=threading.Thread(target=Power)
    print("Старт потока регулятора мощности")
    thrdPwr.start()

def Off():
    """Останавливает поток регулятора"""
    print("Останов потока регулятора мощности")
    global Convert
    Convert=False

def Set(Pwr):
    """Установка мощности"""
    global P
    P=Pwr
    if P>10:
        P=10
    if P<0:
        P=0

def Power():
    """Реализация алгоритма Брезенхема для распределения мощности
    на два ТЭНа"""

    while Convert:
        #print("P=%s",P)
        P1=P/2
        P2=P-P1
        ErrP1=Pmax-P1
        ErrP2=Pmax-(Pmax-P2)
        for x in range(Pmax):
            if ErrP1<Pmax/2:
                ErrP1+=Pmax
                OnTEH1()
            else:
                OffTEH1()
            ErrP1-=P1
            if ErrP2<Pmax/2:
                ErrP2+=Pmax
                OffTEH2()
            else:
                OnTEH2()
            ErrP2-=Pmax-P2
            time.sleep(1)
        OffTEH1()
        OffTEH2()

def main():
    """Ручная установка мощности и тестовое преобразование"""
    Set(input("Значение мощности (0...10):"))
    On()
    while True:
        End=raw_input("Новое значение мощности (Enter для останова):")
        if End=="":
            Off()
            break
        try:
            Set(int(End))
        except ValueError:
            print("Введите значение мощности (0...10)")
    Off()

if __name__=="__main__":
    try:
        main()
    finally:
        Off()


--------------------------------------
Colored with http://dumpz.org


Если запустить Power.py автономно, можно будет поиграться со значениями мощности.

Необходимые для работы модуля пакеты - в прикрепленном архиве.
actuators.zip 2.6 Кб
КонстантинН Магистр Владивосток 261 44
Отв.47  12 Июня 14, 17:12
Прошу прощения за офф, хочу поделиться. Брат себе заместо старого огромного компа выписал http://ru.aliexpress.com/...1874548578.html
винды любые и линуксы идут, мощности проца вполне на ультрахд фильмы, и игрухи даже кое-киакие идут. Главное - тишина. Там кстати есть и дешевые варианты с более слабыми процами, бубунты пойдут. Да и наши проги тоже. Я к тому, что можно винду поставить для привыкших.
Сам сижу на бубунте.

snimok_ekrana_ot_2014-06-13_001310.png
Snimok_ekrana_ot_2014-06-13_001310. Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.48  12 Июня 14, 17:47, через 35 мин
КонстантинН, нет у этого бэрибона портов GPIO как у Ардуины или pcDuino.
Некуда будет подцеплять исполнительные механизмы (блоки реле).
Да и ценник у него не гуманный.
capsolo Профессор Зелик 5.3K 1.6K
Отв.49  12 Июня 14, 17:51, через 5 мин
Расскажи как подключить в коде самописные библиотеки
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.50  12 Июня 14, 17:54, через 3 мин
import <имя модуля>
capsolo Профессор Зелик 5.3K 1.6K
Отв.51  12 Июня 14, 22:54
А как путь компилятор узнает? Или надо куда то в конкретное место?
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.52  13 Июня 14, 07:55
Компилятора нет (почти нет), есть интерпретатор.
Ложишь модуль в ту же папку и всё.

Можно прописать путь в переменной окружения PYTHONPATH.
КонстантинН Магистр Владивосток 261 44
Отв.53  13 Июня 14, 16:31
Есть кстати хороший пакет программирования в визуальном режиме. Для лохов как я.
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.54  13 Июня 14, 18:20
Собираем автоматику.
Собираем автоматику.
Для сборки купил подходящих размеров электробокс ЩРН-П-8 (на 8 модулей).
В нем разместились:
1. одноплатный компьютер pcDuino Lite WiFi
2. 1-wire USB адаптер.
3. 4-х релейный модуль
4. блок питания 5V 2000mA microUSB
5. трехконтактный аудиоразъем для подключения электроклапанов.
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


Плата pcDuino закреплена на пластмассовых стойках с таким расчетом, чтобы в подключенный к её USB-разъему 1-wire адаптер можно было подключать разъем Jack 3,5 гирлянды цифровых термометров DS18B20 через отверстие в стенке электробокса.
Плата 4-х релейного модуля приклеена двусторонним скотчем к задней стенке электробокса через кусок пористого теплоизолятора с целью снижения звука щелчков переключения реле.
Провода с розетками самоварных ТЭНов подключены непосредственно к контактам 1-го и 2-го реле (слева).
Разводка 220V сделана с использованием неизолированных колодок электробокса, поэтому перед включением нужно закрывать крышкой.
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


В водорозетку, куда была подключена стиралка, вкрутил удлинитель, в удлинитель - тройник, в тройник - два угловых шаровых крана для стирали.
Один кран - для стиральной машины.
Второй - для дистиллятора.
В этот кран вставил пластмассовую шайбу-жиклер с проходным отверстием диаметром 2,5 мм, чтобы снизить поток воды.
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


Сдвоенный электроклапан от стиральной машины прикрепил хомутом из нержавейки к двум виткам колонны.
Соответственно соединил ПВХ-трубками электроклапаны с дефлегматором и холодильником-конденсатором.
ПВХ-трубки зафиксировал хомутами из медной проволоки в изоляции.
Цифровые термометры DS18B20 намазал термопастой и также закрепил на нержавеющей гофре колонны в нужных местах хомутами из медной проволоки в изоляции.
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.

capsolo Профессор Зелик 5.3K 1.6K
Отв.55  13 Июня 14, 19:30
Прикольно сдвоенный электроклапан выглядит Улыбающийся аппарат - мужик однозначно! А кабели лучше наверное через гермовводы завести. Случаи всякие бывают.
КонстантинН Магистр Владивосток 261 44
Отв.56  14 Июня 14, 02:27
capsolo, нужно просто на стену повесить
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.57  14 Июня 14, 02:32, через 5 мин
Автоопределение мест установки термометров DS18B20 (добавляем интеллекта)
И всё-таки она гонится!!!

На самом деле, сейчас идет уже пятая перегонка браги под управлением новой автоматики на pcDuino.
Отладка и настройка её отнимают всё время, не успеваю отписываться.
Но всё по порядку.

Автоопределение мест установки термометров.

После сборки всей схемы и установки цифровых термометров встал вопрос определения где какой термометр стоит.
Но ведь у нас в распоряжении целый компьютер, хоть и под Linux-ом.
Поручим ему эту задачу.
Нужно только задать условия, как компьютер сможет различить термометры.
Различить термометры несложно.
Если будем кипятить кубовую жидкость и одновременно подавать охлаждение на холодильник-конденсатор и дефлегматор, то температура по пути следования пара и конденсата распределится следующим образом:
- температура на выходе из куба будет выше, чем температура в середине колонны;
- температура в середине колонны будет выше, чем температура верха колонны;
- и так далее...
Математически это выглядит так:
Tкуба>Tсередины>Tверха>Tдефлегматора>Tконденсатора
Smart Distiller (Умный дистиллятор с управлением по интернет)
Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


Запуск процесса определения мест делается на воде, заодно можно определить температуру на выходе из куба, по которой будем останавливать процесс перегона.
(у меня она оказалась =83°C)

Алгоритм автоопределения мест установки DS18B20:
1. включение нагрева;
2. ожидание превышения 75°C максимальной из температур термометров;
3. включение электроклапанов конденсатора и дефлегматора, снижение мощности до 30%;
4. 20-ти секундная стабилизирующая пауза;
5. увеличение мощности до 50%;
6. 50-ти секундная стабилизирующая пауза;
7. ожидание стабилизации максимальной из температур всех 5-ти DS18B20;
8. сортировка значений температур по убыванию и присвоение термометрам соответствующих названий и сохранением в БД;
9. отключение нагрева и электроклапанов.

Определение максимальной температуры и сортировка значений температур легко осуществляются средствами SQLite.
Алгоритм реализован в модуле DS18B20autolocation.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
$Id: DS18B20autolocation.py,v 1.2 2014/05/31 11:52:30 alfille Exp $

Copyright (c) 2014 C-Bell (VAGor). All rights reserved.

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

Нужно аппаратуру заправить водой и запустить данный модуль.
По завершении его работы в БД будут сохранены места расположения
цифровых термометров DS18B20 (в таблице DS18B20cur).

"""

import DS18B20db
import actuators, sqlite3, time, Power
from actuators import *

#Отключение всех реле
OffAll()

#Запуск процесса сбора температурных данных
DS18B20db.StartMeasure()

#Установка полной мощности
Power.Set(10)

#Запуск преобразования Брезенхема
Power.On()
print("Включение 100% нагрева")

#Места расположения термометров:
locations=[u"Куб",u"1/2",u"Верх",u"Деф",u"Конд"]

#Cоединение с базой данных
db_con=sqlite3.connect("Distiller.db")
#Создание курсора БД
db_cur=db_con.cursor()

#Нужно подождать пару секунд, ибо измерение температуры не быстро делается
time.sleep(2)

#Хранилище максимальной температуры
Tmax=0

#Ждем нагрева до 75
while True:
   #Читаем максимальную температуру из БД
   db_cur.execute("SELECT MAX(T) FROM DS18B20cur")
   Tmax,=db_cur.fetchone()
   if Tmax>75:
       #Уменьшаем мощность до 30%
       Power.Set(3)
       print("Мощность снижена до 30%")
       #Включаем клапаны
       OnDeph()
       OnCond()
       print("Клапаны дефлегматора и конденсатора включены")
       break
   time.sleep(1.2)
print("Стабилизация 70 сек")
#Стабилизация 20 сек
time.sleep(20)
Power.Set(5)
print("Мощность увеличена до 50%")
time.sleep(50)

#Счетчик проверок стабильности температуры
count=10
print("Цикл ожидания стабилизации")
#Ждем стабилизации температуры
while count:
   db_cur.execute("SELECT MAX(T) FROM DS18B20cur")
   T,=db_cur.fetchone()
   if T-Tmax<0.25:
       count-=1
   else:
       count=10
       Tmax=T
   time.sleep(1.2)

#Запрашиваем из БД ID термометров в порядке убывания температур
db_cur.execute("SELECT ID FROM DS18B20cur ORDER BY T DESC")

#Запоминаем порядок
#order=db_cur.fetchall()
i=0

#Присваиваем названия в порядке убывания температур
for dt in db_cur.fetchall():
   ID,=dt
   db_cur.execute("UPDATE DS18B20cur SET Name=? WHERE ID=?", (locations[i],ID))
   i+=1
#Сохраняем БД
db_con.commit()
#Отключаем нарев
Power.Off()
#Отключаем всё
OffAll()

print ("Автоопределение мест подключения термометров завершено, данные сохранены в БД.")
db_cur.execute("SELECT * FROM DS18B20cur ORDER BY T DESC")
for dt in db_cur:
   print(u"%s %s %s"%dt)
##time.sleep(2)
##db_cur.execute("SELECT * FROM DS18B20cur WHERE Name='Куб'")
##T1=db_cur.fetchone()
##db_cur.execute("SELECT * FROM DS18B20cur WHERE Name='1/2'")
##T2=db_cur.fetchone()
##db_cur.execute("SELECT * FROM DS18B20cur WHERE Name='Верх'")
##T3=db_cur.fetchone()
##db_cur.execute("SELECT * FROM DS18B20cur WHERE Name='Деф'")
##T4=db_cur.fetchone()
##db_cur.execute("SELECT * FROM DS18B20cur WHERE Name='Конд'")
##T5=db_cur.fetchone()
##print("%s %s %s, %s %s %s, %s %s %s, %s %s %s, %s %s %s" % (T1[0],T1[1],T1[2],T2[0],T2[1],T2[2],T3[0],T3[1],T3[2],T4[0],T4[1],T4[2],T5[0],T5[1],T5[2]))

#Останавливаем запись температур в БД
DS18B20db.StopMeasure()

#print db_cur.fetchall()
#Закрываем соединение с БД
#db_con.close()

Autolocation1.png
Autolocation1.png Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.

Distiller-0.1.zip 210.5 Кб
capsolo Профессор Зелик 5.3K 1.6K
Отв.58  14 Июня 14, 10:35
Поясни с какой целью воду кипятить? Можно при помощи твоего примера по чтению т определить какой датчик имеет какой идентификатор и жестко забить соответствие при инициализации, промаркировав, соответственно, датчики. Потом вставлять согласно маркировке.
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.59  14 Июня 14, 12:02
Запуск процесса определения мест делается на воде, заодно можно определить температуру на выходе из куба, по которой будем останавливать процесс перегона.C-Bell, 14 Июня 14, 02:32

Можно при помощи твоего примера по чтению т определить какой датчик имеет какой идентификатор и жестко забить соответствие при инициализации, промаркировав, соответственно, датчики. Потом вставлять согласно маркировкеcapsolo, 14 Июня 14, 10:35
Это неудобно.
Получается, сначала надо каждый датчик подключить, посмотреть его адрес и промаркировать.
Потом паять в гирлянде согласно маркировке.

С автоопределением я паяю гирлянду и прикручиваю её сразу, не определяя, где какой термометр.
Заодно определяю температуру кипения воды - это и будет температура, при достижении которой процесс перегона должен быть остановлен.
Датчик закреплен в самом низу колонны, а не в кубе, поэтому его показания сильно отличаются от действительных.