Для получения действительно качественного ректификата необходимо стабилизировать выходное напряжение вплоть до одного вольтаБратан, 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
сохраняем файл. И ещё нужно посмотреть, и записать 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 и наслаждаемся удаленным управлением.
Такое решение позволит управлять пока только внутри сети, то есть, нет возможности заходить на удаленный рабочий стол 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:
в списке у меня можно увидеть компьютер, сотовый и pcDuino (ubuntu). В списке нужно выделить и скопировать MAC Address ubuntu. Далее нужно перейти в пункт DHSP Address Reservation и нажать кнопку Add New... В поле MAC Address вставит скопированный MAC-адрес. В поле Reserved IP Address ввести желаемый IP-адрес, который будет закреплен за платой pcDuino:
и нажать кнопку Save. Роутер предложит перезагрузиться, чтобы изменения вступили в силу, соглашаемся с ним. После перезагрузки в DHSP Client list увидим, что плата pcDuino (ubuntu) получила назначенный IP-адрес в постоянное пользование:
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 секундам. Для того, чтобы ТЭНы не включались одновременно, на второй ТЭН подается обращенная последовательность (инвертированное дополнение к этой части мощности).
defSet(Pwr): """Установка мощности""" global P P=Pwr if P>10: P=10 if P<0: P=0
defPower(): """Реализация алгоритма Брезенхема для распределения мощности на два ТЭНа""" while Convert: #print("P=%s",P) P1=P/2 P2=P-P1 ErrP1=Pmax-P1 ErrP2=Pmax-(Pmax-P2) for x inrange(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()
defmain(): """Ручная установка мощности и тестовое преобразование""" Set(input("Значение мощности (0...10):")) On() whileTrue: End=raw_input("Новое значение мощности (Enter для останова):") if End=="": Off() break try: Set(int(End)) exceptValueError: print("Введите значение мощности (0...10)") Off()
if __name__=="__main__": try: main() finally: Off()
-------------------------------------- Colored with http://dumpz.org
Если запустить Power.py автономно, можно будет поиграться со значениями мощности.
Необходимые для работы модуля пакеты - в прикрепленном архиве.
Прошу прощения за офф, хочу поделиться. Брат себе заместо старого огромного компа выписал http://ru.aliexpress.com/...1874548578.html винды любые и линуксы идут, мощности проца вполне на ультрахд фильмы, и игрухи даже кое-киакие идут. Главное - тишина. Там кстати есть и дешевые варианты с более слабыми процами, бубунты пойдут. Да и наши проги тоже. Я к тому, что можно винду поставить для привыкших. Сам сижу на бубунте.
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. трехконтактный аудиоразъем для подключения электроклапанов.
Плата pcDuino закреплена на пластмассовых стойках с таким расчетом, чтобы в подключенный к её USB-разъему 1-wire адаптер можно было подключать разъем Jack 3,5 гирлянды цифровых термометров DS18B20 через отверстие в стенке электробокса. Плата 4-х релейного модуля приклеена двусторонним скотчем к задней стенке электробокса через кусок пористого теплоизолятора с целью снижения звука щелчков переключения реле. Провода с розетками самоварных ТЭНов подключены непосредственно к контактам 1-го и 2-го реле (слева). Разводка 220V сделана с использованием неизолированных колодок электробокса, поэтому перед включением нужно закрывать крышкой.
В водорозетку, куда была подключена стиралка, вкрутил удлинитель, в удлинитель - тройник, в тройник - два угловых шаровых крана для стирали. Один кран - для стиральной машины. Второй - для дистиллятора. В этот кран вставил пластмассовую шайбу-жиклер с проходным отверстием диаметром 2,5 мм, чтобы снизить поток воды.
Сдвоенный электроклапан от стиральной машины прикрепил хомутом из нержавейки к двум виткам колонны. Соответственно соединил ПВХ-трубками электроклапаны с дефлегматором и холодильником-конденсатором. ПВХ-трубки зафиксировал хомутами из медной проволоки в изоляции. Цифровые термометры DS18B20 намазал термопастой и также закрепил на нержавеющей гофре колонны в нужных местах хомутами из медной проволоки в изоляции.
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конденсатора
Запуск процесса определения мест делается на воде, заодно можно определить температуру на выходе из куба, по которой будем останавливать процесс перегона. (у меня она оказалась =83°C)
Алгоритм автоопределения мест установки DS18B20: 1. включение нагрева; 2. ожидание превышения 75°C максимальной из температур термометров; 3. включение электроклапанов конденсатора и дефлегматора, снижение мощности до 30%; 4. 20-ти секундная стабилизирующая пауза; 5. увеличение мощности до 50%; 6. 50-ти секундная стабилизирующая пауза; 7. ожидание стабилизации максимальной из температур всех 5-ти DS18B20; 8. сортировка значений температур по убыванию и присвоение термометрам соответствующих названий и сохранением в БД; 9. отключение нагрева и электроклапанов.
Определение максимальной температуры и сортировка значений температур легко осуществляются средствами SQLite. Алгоритм реализован в модуле DS18B20autolocation.py
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()
#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()
Поясни с какой целью воду кипятить? Можно при помощи твоего примера по чтению т определить какой датчик имеет какой идентификатор и жестко забить соответствие при инициализации, промаркировав, соответственно, датчики. Потом вставлять согласно маркировке.
C-Bell
Научный сотрудник
Улан-Удэ
1.8K 1.3K
Отв.59 14 Июня 14, 12:02
Запуск процесса определения мест делается на воде, заодно можно определить температуру на выходе из куба, по которой будем останавливать процесс перегона.C-Bell, 14 Июня 14, 02:32
Можно при помощи твоего примера по чтению т определить какой датчик имеет какой идентификатор и жестко забить соответствие при инициализации, промаркировав, соответственно, датчики. Потом вставлять согласно маркировкеcapsolo, 14 Июня 14, 10:35
Это неудобно. Получается, сначала надо каждый датчик подключить, посмотреть его адрес и промаркировать. Потом паять в гирлянде согласно маркировке.
С автоопределением я паяю гирлянду и прикручиваю её сразу, не определяя, где какой термометр. Заодно определяю температуру кипения воды - это и будет температура, при достижении которой процесс перегона должен быть остановлен. Датчик закреплен в самом низу колонны, а не в кубе, поэтому его показания сильно отличаются от действительных.