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

Форум самогонщиков, пивоваров, виноделов Оборудование Автоматика
1 2 3 4 ... 12 1
C-Bell Научный сотрудник Улан-Удэ 1731 1231
07 Февр. 14, 09:28
Smart Distiller (Умный дистиллятор с управлением по интернет)

Предыстория
Заняться этой темой меня подтолкнули коллеги Ruslanmaz и Andrey_33, которые в теме Aндроид предложили управлять перегонным процессом с Android да еще через блютуз. Схема измерения и управления при таком подходе получается несложной, весь алгоритм управления прописывается в Android. Я уже было схватился изучать, как писать программы под Android, но, поразмыслив и посоветовавшись с грамотными людьми, начал приходить к пониманию, что блютуз даст возможность управлять не далее чем 10 метров от аппаратуры, а программа под Андроид будет требовать наличия моего смартфона в пределах этих 10 метров. И, если случится какой сбой в связи, или, допустим, разрядится аккумулятор смартфона, аппаратура останется в неопределенном состоянии, что чревато нехорошими последствиями.

Автоматика, управляющая дистиллятором или ректификационной колонной, должна работать автономно, сама реализовывать алгоритмы управления процессом перегона. Связь же ей нужна для мониторинга состояния дистиллятора и корректировки параметров управления.
Автоматика на базе процессора PIC, предложенная коллегой Andrey_33 в теме Автоматизация на PIC, DS18B20, Bluetooth, Android ещё пока в состоянии создания, да и требует подготовки печатной платы, пайки и программирования под свои нужды, что по силам далеко не каждому самогонщику.

Размышляя далее, пришел к выводу (к которому давно пришел коллега GIVI в теме Автоматика + удалённый контроль через Ethernet/Inet/Wi-Fi и т.д.), что ограничивать контроль только одной операционной платформой типа Android – означает сузить круг коллег, которые смогут пользоваться таким решением.
Для обеспечения кросс-платформенности управления, нужно, чтобы автоматика имела WEB-интерфейс в своем составе и, соответственно, связь с интернетом. WEB-интерфейс доступен через интернет посредством интернет-браузера. Интернет-браузеры реализованы почти на всех платформах.
Такое решение позволит мониторить состояние аппаратуры и управлять параметрами перегонки как со смартфона, так и с планшетника и с компьютера, имеющих доступ в интернет и практически из любой точки планеты.

Первым начал контролировать состояние аппаратуры через интернет коллега Игорь еще в далеком 2008 году. Правда обратная связь у него была через телефонную сеть посредством исполнительного механизма типа жена.
Тему управления через интернет также поднимал коллега KD в теме Аппаратная платформа Arduino для автоматизации наших процессов, только он не написал, что у него из этого вышло.

Требования
Постарался формализовать требования к умной автоматике, что она должна иметь:
  • набор готовых блоков (чтобы их просто соединить, а не травить платы и не паять);
  • аппаратный интерфейс (цифровые и аналоговые входы/выходы);
  • готовые программные блоки и решения;
  • возможность создания WEB-интерфейса (WEB-сервер);
  • несложный программный интерфейс (чтобы почти неподготовленный самогонщик мог самостоятельно реализовать свой алгоритм управления и дизайн web-интерфейса);
  • модуль беспроводного подключения к интернету (Wi-Fi);
  • доступную цену.

Поиск решения
Наиболее полно этим требованиям отвечает платформа Arduino, тем более что имеет в своем составе WEB-сервер. Она была первой, которая рассматривалась в качестве платформы для реализации умной автоматики.
Arduino имеет продуманные аппаратный и программный интерфейсы, много готовых измерительных/исполнительных модулей, огромную кучу решений.
Однако ни разу не гуманный ценник на модуль Wi-Fi шилд резко охладил едва вспыхнувшую страсть к Arduino.

pcDuino
Естественно, что поиски доступного решения пришлось продолжить, и в результате нашлась ардуиноподобная плата pcDuino V2. Даже беглого взгляда на её возможности было достаточно, чтобы забыть ради неё Arduino. Эта кроха представляет собой настоящий одноплатный компьютер, умещающийся на ладони, с предустановленной Linux Ubuntu, одноядерным процессором на 1 гигагерц, оперативной памятью 1 гигабайт, 2-мя гигабайтами флэш-памяти, слотом для microSD до 32 гигабайт.
Окончательное решение в пользу применения pcDuino в качестве платформы для умного дистиллятора определило наличие ардуинообразных аппаратного порта и системы подготовки спичей (программ), наличие на борту Wi-Fi и цена чуть больше цены Wi-Fi шилд для Arduino.
pcDuino можно не только легко поставить взамен Arduino, но и использовать шилды и прочие прибамбасы из набора последней.
WEB-сервер, поднятый под Линухом, будет давать куда больше возможностей для WEB-интерфейса, нежели WEB-сервер платформы Arduino. Установка системы управления базами данных (типа MySql) даст возможность хранить много состояний аппаратуры (можно анализировать, рисовать графики).
Для программирования и настройки pcDuino не нужно подключать к компьютеру (он сам компьютер), к pcDuino подключаются монитор (разъем HDMI), клавиатура/мышь (через USB), кабель Eternet. Маленько нудное видео.
Недостатки:
- меньшая, по сравнению с Arduino, нагрузочная способность портов;
- отсутствие русскоязычных проектов на pcDuino.

Решение
Далее я привожу решение для своего дистиллятора, оно может быть другим в зависимости от конкретного устройства дистиллятора/ректификационной колонны и используемых алгоритмов перегона.
Аппаратная часть на pcDuino реализуется весьма просто. Для своего дистиллятора, в котором нужно управлять двумя электроклапанами и двумя ТЭНами на основе данных о температуре в различных частях колонны нарисовал такую структуру:
stryktyra_ymnoi_avtomatiki.png
 
Основа умного дистиллятора – одноплатный компьютер pcDuino V2.
Информация о температурах различных участков колонны получается с цифровых термометров DS18B20 по шине 1-Wire через адаптер с USB-шиной DS9490R (паразитное питание НЕ ИСПОЛЬЗОВАТЬ!!!).
Для включения/выключения электроклапанов и ТЭНов к pcDuino подключается четырехрелейный модуль от Arduino. Контакты реле рассчитаны на напряжение 220V и ток 10A (нагрузка до 2kW).
Совсем без пайки не обойтись, паять придется цифровые термометры DS18B20 к шине 1-Wire, остальное соединяется колодками.

Структура программной части
Для ускорения и упрощения создания умного дистиллятора, основные программы будут использоваться или стандартные или готовые, благо в интернете их полно.
Основу составит база данных (скорее MySql), которая будет содержать данные о подключенных устройствах и их прошлых и текущих состояниях.
Драйверы датчиков будут наполнять базу данных (в моем случае) данными о температуре различных частей колонны.
Управление исполнительными устройствами (реле) будет осуществлять отдельная программа, которая периодически запрашивает из базы данных необходимые состояния исполнителей, и включает соответствующие реле.
Алгоритмы управления будут реализованы на скриптовом языке (возможно PHP), чтобы легко можно было их переписать даже неподготовленным самогонщиком. Они также периодически читают из базы показания датчиков и на основе этих показаний записывают в базу новые значения состояний исполнителей.
Графический интерфейс с пользователем реализуется посредством WEB-интерфейса на базе WEB-сервера (типа Apach). Через WEB-интерфейс можно будет не только увидеть состояние дистиллятора, но и изменить параметры управления, вплоть до выключения всех систем.
stryktyra_programm.png
 
Схема подключения
Мой дистиллятор имеет два врезанных в куб ТЭНа от старых электрочайников на 1,25 kW, безнасадочную колонну в виде восходящей спирали из нержавеющей гофры, проходной холодильник-дефлегматор, проходной холодильник-конденсатор.
apparat.jpg
На рисунке ниже представлена подробная схема подключения умной автоматики.
shema_podkliycheniya.png
 
В схеме не используются специальные обозначения, чтобы проще было её читать.

Питается автоматика от зарядного устройства 5V через разъем micro USB

Соединение pcDuino с четырехрелейным модулем:
НазваниеpcDuino4 relay module
5VJ9-5VCC
GNDJ9-6GND
ДефлегматорJ11-1IN1
КонденсаторJ8-8IN2
ТЭН1J8-5IN3
ТЭН2J8-3IN4


Температура измеряется:
  • на выходе из куба;
  • под дефлегматором;
  • на выходе дефлегматора;
  • на выходе конденсатора.

По температуре на выходе из куба не только принимается решение об останове процесса дистилляции, но и регулируется мощность, подаваемая на ТЭНы (путем их периодического включения/отключения).
Данные о температуре под дефлегматором используются в режиме стабилизации/антипены и для корректировки мощности нагрева.
Температура над дефлегматором удерживается стабильной, но разной на режимах стабилизации, отбора голов и отбора тела.
Температура на выходе конденсатора также удерживается стабильной на уровне 20°C.

Что реально
Купил на ebay pcDuino V2, 4 Channel Relay Module Shield 5V For Arduino, DS9490R купил в Tesla Electronics (другие адаптеры не рекомендую применять, например адаптер USB9097 периодически отваливается от pcDuino), и ещё Dupont Wire Color Jumper Cabl 2.54mm 1P-1P Male to Female для соединения pcDuino с четырехрелейным модулем.
DS18B20 у меня есть, провода, колодки, вилку тоже найду. В местном магазине купил кабель-переходник HDMI-DVI для подключения pcDuino к монитору, зарядное устройство с кабелем microUSB на 2000 mA для питания pcDuino и USB Hub для подключения мыши-клавиатуры.
Сдвоенный электроклапан от стиралки купил в сервисном центре бытовой техники.
Пока pcDuino и четырехрелейный модуль идут с ebay, у меня есть месяц, чтобы определиться с составом программного обеспечения и научиться программирить pcDuino.

Дальнейший план:
  • Развернуть базу данных SQL;
  • Найти и установить библиотеки для работы с шиной 1-Wire, написать программу опроса термометров и сохранения данных в базе;
  • Написать программу управления реле по данным из базы SQL;
  • Написать алгоритмы управления для режимов разгона, стабилизации, отбора голов, тела и хвостов;
  • Развернуть WEB-сервер;
  • Создать WEB-интерфейс.
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.1  07 Февр. 14, 09:29, через 1 мин
Пакеты, базы данных, потоки и пр.
Пакеты, базы данных, потоки и пр.

Пакет

Программа, даже если это скрипт Python, рано или поздно разрастается и становится недоступной для понимания.
Чтобы не переходить границы разумных размеров, функционально законченные и независимые небольшие куски скрипта лучше хранить в разных файлах - модулях.
Чтобы правильно организовать взаимодействие таких модулей их нужно собрать в пакет.
Правильно собранный пакет дает возможность в дальнейшем распространять его на другие компьютеры.
Для сборки пакета создается папка, которая, как правило именуется именем пакета с его версией.
В корневую папку пакета включаются папка самого пакета, файлы setup.py, Readme.txt, возможно и другие файлы.
Папка самого проекта включает в обязательном порядке файл __init__.py и другие файлы и папки.
Текущая структура пакета Distiller следующая:
 Distiller-0.1         (Папка пакета)
 ├── Distiller         (Папка программ пакета)
 │   ├── actuators.py      (Функции включения/отключения исполнительных механизмов-реле)
 │   ├── Distiller.db      (База данных с таблицами)
 │   ├── DS18B20      (Папка с модулем интерфейса цифровых термометров)
 │   │   ├── __init__.py   (Модуль интерфейса цифровых термометров)
 │   ├── DS18B20db.py      (Модуль сохранения температур в БД)
 │   ├── gpio         (Папка с модулем интерфейса к GPIO pcDuino)
 │   │   ├── __init__.py   (Модуль интерфейса к GPIO pcDuino)
 │   ├── __init__.py      (Модуль пакета)
 │   └── testThread.py      (Тест работы потоков)
 ├── Readme.txt         (Описание пакета)
 └── setup.py         (Модуль установки пакета)

Полную информацию по распространению Python модулей можно найти в документации (https://docs.python.org/2/distutils/index.html), есть также шаблон модуля установки (https://github.com/paltman/python-setup-template).

Для сборки пакета пришлось немного переписать программу работы с цифровыми термометрами DS18B20.
Теперь это модуль __init__.py в папке DS18B20, содержащий функции работы с DS18B20.
Модуль интерфейса к GPIO pcDuino взял готовый (папка gpio, модуль __init__.py).
В модуле actuators.py восемь функций включения/выключения каждого из 4-х реле и две функции включения/отключения всех реле одновременно.
Модуль DS18B20db.py содержит две основных функции: запуска/останова процесса наполнения базы данных значениями температур от цифровых термометров DS18B20.
Модуль DS18B20db.py также проверяет наличие базы данных, необходимых таблиц в ней, создает требуемую структуру базы данных, архивирует данные предыдущего перегона.
Далее пакет будет дополнен алгоритмами перегона, затем модулями, обеспечивающими web-интерфейс.

База данных

Исходя из аскетичности доступной оперативной и постоянной памяти pcDuino Lite WiFi, логично было использовать встроенный в Python легкий пакет для работы с базами данных SQLite3.
Модуль DS18B20db.py использует sqlite3 для организации хранения показаний цифровых термометров DS18B20 в процессе перегонки.

На текущий момент создается модулем DS18B20db.py создается база данных в файле Distiller.db, в ней организуются три таблицы:
- DS18B20cur – хранит перечень найденных на шине 1-wire цифровых термометров, их наименования и текущие показания температур (поля: ID – уникальный номер DS18B20, Name – название термометра, T-текущая температура);
- DS18B20 – хранит показания цифровых термометров в процессе перегонки, показания добавляются с периодичностью примерно раз в 1,33 сек (поля: DataTime –дата и время в формате YYYY.mm.dd HH:MM:SS фиксации показаний, T_ID1…T_IDn – показания соответствующих термометров);
- DS18B20old – копия DS18B20 делается при инициализации.
Понимаю, что мои SQL-конструкции неуклюжи и не отличаются изяществом, но они работают и заполняют базу данными.

Потоки.

Процесс измерения температур цифровыми термометрами занимает довольно продолжительное время.
Программа вынуждена ждать окончания процесса измерения температуры, ничего при этом не делая.
Чтобы остальные части пакета не зависели от процесса измерения и не ожидали его завершения, этот процесс запускается в отдельном потоке (thread).
Запуск процесса сбора и сохранения в базе данных показаний DS18B20 осуществляется вызовом функции StartMeasure() модуля DS18B20db.py.
Останов этого процесса осуществляется вызовом функции StoptMeasure() модуля DS18B20db.py.


В прикрепленном архиве пакет Distiller, можно позапускать входящие в него модули и посмотреть результаты.
Distiller-0.1.zip (11.4 Кб)
Distiller-0.1.zip (2.3 Мб)
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.2  07 Февр. 14, 09:30, через 1 мин
Считывание температуры с DS18B20
Lubuntu&DS18B20

После развертывания Lubuntu на виртуальной машине VirtualBox наступило время поближе познакомиться с Lubuntu, вступить с нею, так сказать, в интимные отношения.
А чтобы процесс знакомства был не только приятен, но и полезен, будем подключать к Lubuntu цифровой термометр DS18B20 через USB 1-Wire адаптер USB9097  (подключение через USB адаптер DS9490R от maximintegrated отличается незначительно и ещё проще).
Описание интерфейса 1-Wire можно почитать тут: http://radiokot.ru/articles/13/
Так как мы работаем в виртуальной машине, сначала адаптер необходимо подключить в Windows (основной операционной системе).
Далее нужно подключить адаптер к виртуальной машине, на которой установлена Lubuntu.
Запускаем виртуальную машину и в меню выбираем Устройства -> Устройства USB -> USB2.0-Serial

 
Должна появиться галочка рядом с этим устройством.
При этом из основной ОС устройство исчезает и появляется в Lubuntu.
Для обнаружения и установки программных пакетов виртуальная машина с Lubuntu должна быть подключена к интернет.
Как правило к интернет Lubuntu подключается при установке.


Для работы с устройствам, имеющими интерфейс 1-wire, в том числе с цифровыми термометрами DS18B20, будем использовать пакет пограмм owfs (one wire file system).
Этот пакет умеет обнаруживать устройства на шине 1-wire и обмениваться с ними информацией, умеет подавать питание через шину, обеспечивая «паразитное питание» устройств.
Он работает со многими адаптерами шины 1-wire, в том числе с недорогим USB 1-wire адаптером USB9097.
Попробуем установить этот пакет. Для этого запускаем менеджер пакетов Synaptic (кнопка Ласточка->Системные), находим в списке owfs, отмечаем его и нажимаем кнопку Применить:

 

Менеджер предлагает установить дополнительные связанные пакеты, соглашаемся нажатием кнопки Применить.

 

После скачивания пакеты будут установлены.
Теперь проверим как работает этот пакет.
Увы, запуск и настройку придется осуществлять в командной строке терминала.
Чтобы указать пакету owfs работать с шиной 1-Wire через адаптер USB9097, предварительно нужно выяснить, на какой последовательный порт этот адаптер подключен.
Для этого запускаем терминал (кнопка Ласточка->Стандартные->LXTerminal) и вводим команду «dmesg | grep tty»:

 
Адаптер отображается как ch341-uart converter, подключенный к последовательному uart порту ttyUSB0.
Если подключение осуществляется через USB адаптер DS9490R от maximintegrated, то искать его не нужно, owfs сделает это самостоятельно.

Пакет owfs содержит следующие основные части:
owfs – файловая система 1-Wire (one wire file system) или отражение 1-Wire сети в файловом пространстве Lubuntu (устройства, подключенные к шине 1–Wire отображаются каталогами, с именем по номеру устройства, параметры устройства можно прочитать/установит в файлах этого каталога);
owftpd – то же самое, что и owfs, только с доступом через ftp;
owhttpd – web-интерфейс доступа к устройствам 1-Wire и их параметрам;
owserver – сервер, предоставляющий сетевой интерфейс к 1-Wire сети для других программ и команд owfs.

Получим доступ к 1-Wire устройствам с помощью программы owfs.
Предварительно необходимо создать папку, в которую будет смонтировано отображение сети 1-Wire.
Насколько я понял, по умолчанию эта папка имеет имя 1-wire и должна располагаться в папке /mnt Lubuntu.
Для создания папки потребуются права суперпользователя, в терминале набираем команду: «sudo mkdir /mnt/1-wire», после ввода пароля папка будет создана.
Чтобы проверить это нужно набрать команду: «ls /mnt»

 
В списке увидим папку 1-wire синими буквами.
Запускаем (с правами суперпользователя) в командной строке терминала программу owfs с указанием в ее параметрах адаптера 1-Wire и папки для монтирования отражения шины в файловой системе: «sudo owfs –d /dev/ttyUSB0 –m /mnt/1-wire».
(Для адаптера DS9490R от maximintegrated: «sudo owfs –u –m /mnt/1-wire»).
Если посмотрим содержимое папки 1-wire, обнаружим в ней несколько подпапок.
Имя одной из них начинается с 28. В соответствии с описанием с сайта http://owfs.org/, это код семейства цифровых термометров DS18B20.
Следующие через точку символы – это индивидуальный серийный номер цифрового термометра DS18B20.
Если просмотрим содержимое этой папки командой «sudo ls /mnt/1-wire/28.0C56A8000000», увидим кучу разных файлов.
Пока нас волнует содержимое лишь одного из них – файла temperature.
Это содержимое можно посмотреть командой «sudo cat /mnt/1-wire/28.0C56A8000000/ temperature».
После выдачи этой команды отображаются показания цифрового термометра DS18B20 (цифра 26.125).

 

Если внимательно посмотреть на список папок в папке 1-wire, то можно обнаружить ещё два устройства: 05.4AEC29CDBAAB и 10.67C6697351FF. Это адресуемый ключ с открытым коллектором DS2405 и цифровой термометр DS18S20 соответственно, которые эмулируются пакетом owfs, очевидно для тестирования, и доступны также, как и другие устройства 1-Wire.
Их параметры принимают случайные значения.
Зачем установлен DS2405 – пока для меня загадка, но он вовсю работает, возможно он распараллеливает шину 1-Wire (у USB9097 два разъема Jack 3,5, куда подключаются две шины 1-Wire).

Доступ к 1-wire через owhttpd.
Запустим в терминале маленький web сервер owhttpd командой «sudo owhttpd –d /dev/ttyUSB0 –p 9097».
Здесь /dev/ttyUSB0 – адаптер USB9097, а 9097 – номер порта, на котором будет слушать web сервер (выбирается произвольно).
(Для адаптера DS9490R owhttpd запускается командой «sudo owhttpd –u –p 9097»)
Теперь можно посмотреть шину 1-Wire через браузер (в Lubuntu установлен Chromium, кнопка Ласточка->Интернет).
В адресной строке набираем «localhost:9097»

 

Нажав ссылку «28.0C56A8000000» попадаем на страницу параметров цифрового термометра.

 

Таким образом, с помощью пакета owfs и USB адаптера шины 1-Wire USB9097, мы научились исследовать шину 1-Wire и работать с устройствами, подключенными к этой шине.
LubuntuDS18B20-1.png
LubuntuDS18B20-2.png
LubuntuDS18B20-3.png
LubuntuDS18B20-4.png
LubuntuDS18B20-5.png
LubuntuDS18B20-6 LubuntuDS18B20-6.png
LubuntuDS18B20-7.png
LubuntuDS18B20-8.png
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.3  07 Февр. 14, 09:30, через 1 мин
Управление реле
Щелкать релюшками в pcDuino из программы на языке python чрезвычайно просто.

Скачиваем архив с примерами и библиотеками для работы с портами pcDuini командой (в терминале LXTerminal):
wget https://github.com/pcduino/python-pcduino/archive/master.zip

Распаковываем архив командой:
unzip master.zip

Должен появиться каталог “python-pcduino-master”.
В каталоге “python-pcduino-master/Samples/blink_led” есть файл примера скрипта на языке python “blink_led.py” и библиотека в папке “gpio” для управления портами GPIO платы pcDuino.

Управление реле подключаем к портам GPIO платы pcDuino, которые имеют функциональность только цифровых входов/выходов.
Сетка подключения реле к портам:
Реле №1 – GPIO2
Реле №2 – GPIO4
Реле №3 – GPIO7
Реле №4 – GPIO8

Немного подправим скрипт “blink_led.py” редактором Leafpad:
Leafpad python-pcduino-master/Samples/blink_led/blink_led.py

Чтобы проверить все четыре реле,  пишем в файл нижеследующий код и сохраняем:

#!/usr/bin/env python
# blink_led.py
# gpio test code for pcduino ( http://www.pcduino.com )
#

import gpio
import time

led_pin1 = "gpio2"
led_pin2 = "gpio4"
led_pin3 = "gpio7"
led_pin4 = "gpio8"

def delay(ms):
    time.sleep(1.0*ms/1000)

def setup():
    gpio.pinMode(led_pin1, gpio.OUTPUT)
    gpio.pinMode(led_pin2, gpio.OUTPUT)
    gpio.pinMode(led_pin3, gpio.OUTPUT)
    gpio.pinMode(led_pin4, gpio.OUTPUT)

def loop():
    while(1):
        gpio.digitalWrite(led_pin1, gpio.HIGH)
        gpio.digitalWrite(led_pin2, gpio.HIGH)
        gpio.digitalWrite(led_pin3, gpio.HIGH)
        gpio.digitalWrite(led_pin4, gpio.HIGH)
        delay(250)

        gpio.digitalWrite(led_pin1, gpio.LOW)
        gpio.digitalWrite(led_pin2, gpio.LOW)
        gpio.digitalWrite(led_pin3, gpio.LOW)
        gpio.digitalWrite(led_pin4, gpio.LOW)
        delay(750)

def main():
    setup()
    loop()

main()


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


Осталось проверить, как скрипт работает, запускаем его командой:
python python-pcduino-master/Samples/blink_led/blink_led.py

Небольшое видео, как счёлкают релюшки:


Правда, оказалось, что мои релюшки включаются наиборот, когда pcDuino выдает логический 0 на порты.
Придется учесть это в программе.
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.4  07 Февр. 14, 09:31, через 1 мин
Алгоритмы управления
Алгоритмы управления

Чтобы создать автоматику, необходимо хотя-бы в общих чертах представлять, какие процессы автоматизируются.
Всю теорию приводить не буду, изложу как я понимаю процессы, которые протекают в моей аппаратуре:
Базовым для очистки и разделения фракций является тепловой процесс испарения и конденсации.
Именно поэтому в своем составе дистиллятор содержит:
- куб с нагревателем кубовой жидкости;
- колонну в виде теплоизолированной восходящей спирали;
- дефлегматор (обратный холодильник);
- конденсатор (паров).

Схема:


Из кипящей кубовой жидкости образующийся пар поднимается вверх по виткам колонны.
Достигнув дефлегматора, пар конденсируется в жидкость, которая называется флегма.
Флегма стекает по виткам колонны навстречу поднимающемуся пару.
Вот это встречное движение и несет в себе чудо очистки и разделения фракций.
Горячий пар подогревает холодную флегму.
При этом часть фракций пара, имеющих большую температуру кипения, конденсируется и присоединяется к флегме.
Из подогретой паром флегмы же, в свою очередь, испаряются фракции, имеющие низкую температуру кипения.
В колонне, по всей её длине, происходит процесс тепломассоообмена.
При этом внизу колонны собираются фракции с наибольшей температурой кипения, вверху - с наименьшей.

Остается только отобрать необходимые фракции.

Скорость отбора (следовательно - флегмовое число) устанавливается охлаждением проходного дефлегматора.
Такой дефлегматор помимо своего прямого назначения,работает как запорный механизм.
Если подать много охлаждающей жидкости, то весь пар сконденсируется в флегму и вернется в колонну и далее в куб.
Если же не подавать охлаждения вовсе, то весь пар пройдет далее.

Прошедшая через дефлегматор часть пара будет сконденсирована будет сконденсирована в дистиллят прямым холодильником - конденсатором.

Исходя из вышеприведенных соображений установить режим работы колонны и величину отбора пара можно просто стабилизируя температуру дефлегматора на определенном уровне.
Алгоритм стабилизации температур дефлегматора и конденсатора приведен ниже:


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

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

Не намного сложнее алгоритм установки мощности.
Также в цикле ожидаются свежие данные о температуре в кубе (точнее - внизу колонны, поэтому завершение процесса при 84,2°C а не при 99°C).
Далее, в зависимости от этой температуры, устанавливается соответствующая мощность.
Алгоритм отражает захлёбную характеристику колонны.
При достижении температуры кипения воды процесс дистилляции завершается.



Собственно, это основные алгоритмы управления дистиллятором.
Алгоритмы, являющиеся сервисными для этих основных алгоритмов, здесь не привел, чтобы не засорять пост.
Схема аппарата.png
Стабилизация температур.png
Регулирование мощности.png
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.5  07 Февр. 14, 09:31, через 1 мин
WEB-сервер
WEB-сервер
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.6  07 Февр. 14, 09:31, через 1 мин
WEB-интерфейс
WEB-интерфейс
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.7  07 Февр. 14, 09:32, через 1 мин
Результаты
Результаты
сообщения удалены (13)
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.8  05 Марта 14, 11:18
Вчера получил посылки с блоком реле и с USB9097 1-Wire адаптером.
Блок реле будет ждать, пока не приедет pcDuino, чтобы сыграть их свадьбу.
А адаптер USB9097 1-Wire я просто не мог не проверить.
Быстро спаял цифровой термометр DS18B20, кусок двухпроводного кабеля в силиконовой изоляции и аудиоразъем Jack 3,5 стерео.
Скрытый текст
Проблема с аудиоразъем Jack 3,5 стерео: если у разъема пластмассовый корпус, то он может выступать над плоскостью притвора, тем самым мешая нормальному расположению разъема в гнезде. Лечится просто - обрезанием выступающей части пластмассового кожуха.
Места пайки изолировал термоусадочной трубкой.
Силиконовая изоляция кабеля хороша тем, что устойчива к термическим воздействиям.
DS18B20 подключен только двумя проводами (схема паразитного питания).
При этом ножки 1 (GND) и 3 (Vdd) DS18B20 спаиваются вместе и подключаются к наружному контакту (GND), а ножка 2 (DQ) DS18B20 подключается к среднему контакту (DATA) аудиоразъема Jack 3,5 стерео.

Далее расскажу, как запускал его под Windows7:
1. Установка драйвера USB-COM.
     Драйвер лучше скачать свежий (http://www.pcsensor.com/.../USB Driver.zip) с сайта производителя (http://www.pcsensor.com/)
ОЧЕНЬ  РЕКОМЕНДУЕТСЯ: до установки драйвера USB9097 к компьютеру НЕ ПОДКЛЮЧАТЬ!
Распаковав архив «USB Driver.zip», получим каталог USB Driver, в нём нужно перейти в подкаталог USB Driver\Windows\win7\DRIVER и запустить программу SETUP.exe.
В появившемся окне нажать кнопку INSTALL.
После копирования и регистрации необходимых библиотек появится сообщение об успешной установке драйвера с предложением подключить USB9097 к компьютеру и выбрать автоматическую установку устройства.
Если Windows будет задавать глупые вопросы, ответить ему, что всё-равно хотите установить ПО.
Чтобы проверить правильность установки и настроить адаптер, нужно нажать правой кнопкой мыши на пункт Компьютер меню Пуск, и выбрать из контекстного меню Управление.
В появившемся окне на левой панели выбрать Диспетчер устройств, в списке на правой панели нужно развернуть раздел Порты (COM и LPT).
В этом разделе должно быть устройство UCB-SERIAL CH340 (COMx).
Где x - номер COM порта, назначенного устройству, нужно убедиться, что в диапазоне 1…15 и запомнить номер.

2. Установка 1-Wire Drivers x86.
Перед установкой убедитесь, что у вас на компьютере установлена Java (http://www.java.com/inc/BrowserRedirect1.jsp?locale=ru)
На установочном диске, идущем в комплекте с USB9097, в каталоге Driver\1-Wire Driver есть две папки для 32-разрядных и 64-разрядных компьютеров соответственно.
Как правило,  устанавливается из папки x32, файл 1_wire_drivers_x32.msi
В окне мастера установки лучше оставить всё по-умолчанию.
Подтвердить системе безопасности Windows, что хотим поставить это ПО.
После установки компьютер нужно перезагрузить.

3. Настройка 1-Wire Drivers x86.
Из меню Пуск -> Все программы -> 1-Wire Drivers x86 выбрать Default 1-Wire Net.exe
В окне 1 Wire Net Port Selection можно попробовать нажать кнопку Auto-Detect.
Иногда она не срабатывает, тогда выбираем вкладку DS9097U-DS9480 и устанавливаем тот номер порта, который назначен в Диспетчере устройств устройству UCB-SERIAL CH340, и который мы запомнили.

4. Долгожданный момент получения температуры с помощью программы OneWireViewer.exe
Из меню Пуск -> Все программы -> 1-Wire Drivers x86 выбрать OneWireViewer.exe
Убедиться, что открыта вкладка DS9097U-DS9480 и стоит правильный номер порта, нажать кнопку Next>.
На левой панели должен быть серийный номер DS18B20, который подключен к USB9097.
Выбрав его и открыв вкладку Real-Time Tempersture наслаждаемся графиком изменения температуры.
Ура, заработало!!!


Реле.jpg
USB9097.jpg
DS18B20Jack3-5.jpg
OneWireViewer.png
OneWireViewer4.png
DS18B20.png
сообщения удалены (5)
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.9  06 Марта 14, 16:22
Linux&VirtualBox
Linux&VirtualBox

До того времени, как я создал эту тему, про Linux я только слышал.
После выбора в качестве интеллектуального компонента умной автоматики pcDuino придется погрузиться в мир Linux с головой.

Итак, начинаем знакомство.
Пробежав по интернету, уяснил, что ставить на компьютер с Windows вторую операционную систему (ОС) Linux мне будет не очень удобно.
Пока не освоился в Linux, лучше поставить эту операционную систему в виртуальной машине, которая работает под Windows.
При критических ситуациях, когда вдруг загоню Linux в глубокую задумчивость, я могу запросто похоронить задумчивую виртуальную машину и создать новую.

Развертывание виртуальной машины
Наиболее популярна и абсолютно бесплатна виртуальная машина фирмы Oracle: Oracle VM VirtualBox.
Поэтому заходим на страницу ее загрузки (http://www.oracle.com/...oads/index.html), выбираем из таблицы пакет для установленной у вас ОС и скачиваем его и запускаем.  Безопасность Windows много раз спросит устанавливать ли ПО, на что нужно дать разрешение

 
В результате установки откроется Менеджер Oracle VM VirtualBox

 
Нажатием кнопки Создать вызывается диалог создания новой виртуальной машины

 
Вводим имя виртуальной машины, например, Ubuntu, выбираем тип Linux и версию Ubuntu(32 bit), нажимаем Next.
Устанавливаем оперативку виртуальной машине 1024 МБ, нажимаем Next.

 
Создаем новый виртуальный диск кнопкой Создать

 
Оставляем тип VDI, нажимаем Next.

 
Оставляем Динамический виртуальный жесткий диск, нажимаем Next.

 
Оставляем всё как есть и жмём кнопку Создать
Таким образом, создан пустой виртуальный компьютер с 1ГБ оперативной памяти и диском на 8ГБ.
Теперь на этот виртуальный компьютер нужно поставить Linux

Установка Linux на виртуальной машине.
На одноплатный компьютер pcDuino устанавливается специально собранная версия Linux Ubuntu 12.4.
А точнее – Lubuntu 12.04
Скачиваем в какую-нибудь папку образ установочного диска (http://cdimage.ubuntu.com/...esktop-i386.iso)
Далее настраиваем виртуальную машину (нажимаем кнопку Настроить и выбираем Система)

 
В порядке загрузки Дискета нужно переместить ниже Жесткий диск.
CD/DVD должен остаться в вершине списка.
Подключаем образ загрузочного диска Lubuntu 12.04.
Для этого Выбираем Носители и нажимаем заначек диска с плюсиком рядом с Контроллером IDE, в появившемся окне нажимаем кнопку Выбрать образ


В появившемся проводнике найти скачанный образ и открыть его

 
Таким образом, как бы установили загрузочный CD диск.
Осталось включить виртуальную машину кнопкой Запустить
Начнется установка Lubuntu 12.04.
При установке будет предложено:
Выбрать язык (не стал выпендриваться и выбрал русский);
На страшный вопрос Стереть диск и установить Lubuntu нужно ответить кнопкой Продолжить (стирается виртуальный диск);
На карте нужно выбрать свое положение, чтобы получить соответствующее смещение часов;
Выбрать русскую раскладку клавиатуры;
Имя пользователя и пароль лучше использовать ubuntu/Ubuntu, такие по умолчанию на плате pcDuino.
Ждем, пока не завершится установка.
По окончании установки будет предложено перезагрузить машину, соглашаемся.
При перезагрузке нужно будет отключить образ установочного CD диска в настройках.
Ну вот она, ласточка, встречайте!!!

 

VirtualBox1.png
VirtualBox2.png
VirtualBox3.png
VirtualBox4.png
VirtualBox5.png
VirtualBox6.png
VirtualBox7.png
VirtualBox8.png
VirtualBox9.png
VirtualBox10.png
Lubuntu.png
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.10  10 Марта 14, 17:44
Сделал учебник, как считывать температуру в Linux с помощью пакета owfs и адаптера USB9097.
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.11  21 Марта 14, 18:43
Начальные настройки Lubuntu на pcDuino
Наконец то она к нам пришла, "наша прелесть"!!!

Подключение pcDuino и первое включение.


Установлены английская и китайская локализации.
Пришлось покорпеть с настройками, но в результате это сообщение пишу уже с pcDuino.
Привожу начальные настройки Lubuntu на pcDuino.

Подключение к интернет
Настраивать Lubuntu без подключения к интернет весьма затруднительно.
Все остальные настройки описываются в предположении, что интернет-соединение установлено.
Поэтому первое, что нужно сделать - это подключить pcDuino с Lubuntu к интернет.
К проводной сети Lubuntu цепляется автоматически, как только обнаруживает сетевое подключение.
Настройка нужна, если подключение к интернет осуществляется через прокси сервер.

Подключение к интернет через прокси
Подключение Lubuntu 12.04 к интернет через прокси оказалось нетривиальной задачей, которую лучше выполнять по частям.
1. Чтобы подключить WEB-браузер к интернет через прокси, нужно:
   - открыть LXTerminal, набрать в командной строке sudo leafpad /etc/environment
   -  в открывшемся в редакторе leafpad документе environment в конце добавить следующие строки:
      
http_proxy=http://IPproxy:PortProxy
https_proxy=https://IPproxy:PortProxy
ftp_proxy=ftp://IPproxy:PortProxy
   сохранить и закрыть окно редактора.
   IPproxy:PortProxy - IP адрес и порт прокси сервера, узнать можно у сетевого администратора.
   Если используется авторизация на прокси, то вместо IPproxy:PortProxy нужно набрать login:password@IPproxy:PortProxy
2. Менеджер пакетов Synatic, с помощью которого можно найти и установить необходимые пакеты программ, имеет собственную настройку на прокси.
   В меню Настройки (Settings) выбираем Параметры (Preferences), переходим на вкладку Сеть (Network) и осуществляем ручную настройку прокси (Manual proxy configuration), указав его адрес и порт.
3. Если обращение к интернет через прокси производится из окна терминала LXTerminal, то предварительно необходимо подключить соответствующий протокол прокси командой:
   
export http_proxy=http://IPproxy:PortProxy
или
export http_proxy=http://login:password@IPproxy:PortProxy
(для авторизации).
иногда может потребоваться
export https_proxy=https://IPproxy:PortProxy
и даже
export ftp_proxy=ftp://IPproxy:PortProxy

Подключение к интернет через WiFi
Запустить менеджер сетевых соединений (кнопка Система, которая с ласточкой ->Параметры->Сетевые соединения), перейти на вкладку беспроводные сети и нажать кнопку Добавить.
В открывшемся окне в поле SSID ввести имя доступной вам WiFi сети.
Перейти на вкладку Защита беспроводной сети, выбрать WPA/WPA2 Personal (это для большинства сетей) и ввести пароль для доступа к WiFi-сети.

Настройка языка и региональных стандартов вручную
Предварительно необходимо установить пакеты русификации для установленных программ, затем переключить в настройках язык и региональные стандарты.
Все пакеты устанавливаются командами терминала LXTerminal.
Установка переводов для системных программ
Локализация для основных программ, которые не зависят от окружения:
sudo apt-get install language-pack-ru
Локализация для компонентов окружения Gnome:
sudo apt-get install language-pack-gnome-ru
Локализация для компонентов окружения KDE:
sudo apt-get install language-pack-kde-ru
У окружений XFCE и LXDE переводы на разные языки устанавливаются вместе с программами.
Установка переводов для пользовательских программ
Локализация для веб браузера Firefox
sudo apt-get install firefox-locale-ru
Локализация для офисного пакета LibreOffice:
sudo apt-get install libreoffice-l10n-ru libreoffice-help-ru
Локализация для почтового клиента Thunderbird:
sudo apt-get install thunderbird-locale-ru
Русская справка для графического редактора GIMP:
sudo apt-get install gimp-help-ru
Словари
Русский словарь для проверки орфографии:
sudo apt-get install hunspell-ru
Тезаурус (словарь синонимов, антонимов и др.) для LibreOffice/OpenOffice.org:
sudo apt-get install mythes-ru
Англо-русский словарь в формате DICT:
sudo apt-get install mueller7-dict

Настройка локализации
Для русификации достаточно выполнить эту команду и перезайти в систему
sudo update-locale LANG=ru_RU.UTF-8
А теперь рассмотрим как русифицировать не используя эту команду.
Смотрим доступные локали
locale -a
Открываем файл с помощью текстового редактора
sudo leafpad /etc/default/locale
Заменяем содержимое на
LANG=ru_RU.UTF-8
Если вам нужны украинские стандарты, вместо ru_RU напишите ru_UA.
Сохраните файл и перезайдите в систему.

Переключение раскладки клавиатуры
Переключение раскладки клавиатуры в Lubuntu настраивается редактированием файла /etc/default/keyboard (с правами администратора):
sudo leafpad /etc/default/keyboard
Строка:
XKBLAYOUT="us,ru"
определяет язык (вернее, алфавит, который "навешивается" на кнопки клавиатуры).
Строка:
XKBVARIANT=""
определяет различные варианты размещения знаков алфавита (заданного параметром XKBLAYOUT).
Строка:
XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll"
определяет "поведение" или "расположение" модификаторов Control и Group (переключатель групп — это переключатель "языка", например, русский/латинский).

Настройка даты
В терминале набрать:
ubuntu@ubuntu:~$ sudo date -s '03/19/2014 10:45'
Ср. марта 19 10:45:00 UTC 2014
В связи с тем, что у pcDuino нет батарейки, которая бы позволила тикать бортовым часам в отсутствие внешнего питания, при выключении часы сбрасываются на 01.01.2010 00:00.
Но есть возможность получения точного времени из интернет.
Для этого необходимо установить пакет ntp:
В терминале набрать команду
sudo apt-get install ntpdate
Настраиваем часовой пояс, если этого не сделано на этапе установки самого Linux или сделано неправильно:
в терминале LXTerminal набираем команду
sudo dpkg-reconfigure tzdata
и следуем по подсказкам.
Добавляем серверы времени.
Открываем на редактирование файл ntp.conf командой sudo leafpad /etc/ntp.conf , добавляем строки:
server ru.pool.ntp.org
server ntp.sirius-p.ru
server ntp.xland.ru
server ntp2.aas.ru
server ntp21.vniiftri.ru
server ntp1.aas.ru
server rtr.firmacem.ru
server d0012.colocat.ru
и сохраняем
Автозапуск синхронизации.
Открываем на редактирование файл rc.conf командой
sudo leafpad /etc/rc.conf
, добавляем строку:
ntpd_enable=»YES»
Обратите внимание на кавычки. Такое написание правильное.
Через прокси синхронизировать время мне не удалось, возможно на прокси этот протокол под запретом.

Расширение NAND флэш-памяти с 2ГБ до 4ГБ
После всех вышеприведенных настроек свободная память сократилась с 600МБ до 200МБ.
Но мне повезло, так как версия моей платы имеет 4ГБ флэш-памяти на борту, нужно только добавить скрытые 2ГБ в доступный пул памяти.
Для этого скачиваем специальный скрипт  pcduino-nand-4g-fix по адресу http://files.homedistiller.ru//102391.zip
Рапаковываем его командой
unzip /home/ubuntu/Downloads/pcduino-nand-4g-fix.zip
И запускаем последовательностью команд:
chmod +x pcduino-nand-4g-fix
sudo ./pcduino-nand-4g-fix
после подтверждения изменения разделов pcDuino перезагрузится и объем доступной флэш памяти увеличится на 2ГБ.

Очистка системы
В процессе настройки Lubuntu места в NAND флэш-памяти становится всё меньше.
Это связано с тем, что Lubuntu не удаляет кэш и неиспользуемые пакеты, старые ядра.
Для очистки системы используется программа Ubuntu Tweak.
Для ее рабоды предварительно необходимо в Synaptic установить пакеты:
gir1.2-gconf-2.0
gir1.2-notify-0.7
gir1.2-soup-2.4
gir1.2-webkit-3.0
python-compizconfig
python-lxml
Скачать Ubuntu Tweak можно с адреса https://launchpad.net/...0.8.6-1_all.deb
Установить - введя в LXTerminal команду
sudo dpkg -i /home/ubuntu/Downloads/ubuntu-tweak_0.8.6-1_all.deb

IMG_20140317_171751.jpg
IMG_20140317_172012.jpg
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.12  31 Марта 14, 09:28
Первая программа для pcDuino
Настало время написать первую программу.
Так как мне было всё-равно, какой язык с нуля осваивать, был выбран python, по той причине, что он полегче C++ и на нем есть примеры для pcDuino.
Итак, я спаял гирлянду из 5 цифровых термометров DS18B20 и попытался прочитать их показания из скрипта на языке python.


Для начала нужно сделать python-скрипт, который бы читал и показывал значения температур цифровых термометров.
Изучение источников в интернете дало связку owserver из пакета owfs и библиотека python-ownet.
owserver непосредственно работает с адаптером 1-wire и отражает состояние сети 1-wire в виде дерева каталогов.
python-ownet по описанию выступает как интерфейс между программой на питоне и owserver.
И вот с этим то python-ownet я познал весь размер расплаты за использование бесплатного опен-сорц.
Я кучу времени убил, пытаясь заставить шевелиться это мертворожденное дитя, даже исправлял исходники, но на pcDuino этот пакет в упор не видел и не находил исправно работающий owserver.
В Lubuntu, работающей на виртуальной машине кое как работал, а на pcDuino никак.

И в момент, когда я уже было решил, что пора предаваться панике, пришла спасительная мысль: почему бы не попробовать использовать для тех же целей пакет python-ow, мимо которого я множество раз проходил в менеджере пакетов Synaptic.
Судя по аскетичному мануалу, этот пакет делает то же самое, что и python-ownet.
Выбор пакета python-ow оказался абсолютно правильным и мне удалось сваять первый, может не очень изящный, но работающий скрипт.

Для его работы потребуется:
1. В менеджере пакетов Synaptic найти пакеты owserver и python-ow и установить их.
2. Для подключения DS9490 в файле /etc/owfs.conf  в секции SOURCES раскомментировать строку 'server: usb = all' (удалить символ #),
   или,
   для подключения owserver к адаптеру USB9097 (не рекомендую) в файле /etc/owfs.conf  в секции OWSERVER добавить строки:
#1-wire adapter USB9097
server: device = /dev/ttyUSB0
server: timeout_volatile=1
timeout_volatile=1 - это продолжительность жизни кэша owserver в секундах.

Напомню, редактор нужно вызвать в LXTerminal командой:
sudo leafpad /etc/owfs.conf

3. Обеспечить автозапуск owserver, прописав в файле /etc/rc.local перед строкой:
exit 0
строку:
sudo service owserver start

Скрипт работает с версией python 2.7.
Для запуска нужно нижеприведенный код записать в файл (например /home/ubuntu/Documents/Temper.py) и запустить в терминале командой:
python /home/ubuntu/Documents/Temper.py

Программа поиска цифровых термометров на 1-Wire и вывода их показаний:

#coding=utf8
"""
$Id: MeasureTemperature.py,v 1.2 2014/03/30 14:30:30 alfille Exp $

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

Эта программа находит все температурные датчики на шине 1-wire
и выводит значения измеренных ими температур.

Для работы программы должны быть установлены пакеты:
owserver
python-ow

Должен быть запущен owserver командой:
sudo service owserver start
прописанной в файле /etc/rc.local перед строкой:
exit 0

В файле конфигурации /etc/owfs.conf в секции OWSERVER нужно добавить строки:
#1-wire adapter USB9097
server: device = /dev/ttyUSB0
server: timeout_volatile=1

"""


#
# описание единственного исключения, назначение которого - игнорировать данные
# из кэша
#

class exError(Exception):
    """base exception for all one wire raised exceptions."""

class exNoFirstReadSensor(exError):
    """Exception raised when not first read from sensor."""

# подключение необходимых библиотек
import time, ow

# инициализация ow - указание адреса и порта owserver (см. /etc/owfs.conf)
ow.init('localhost:4304')

# создание объекта, отражающего сеть 1-wire
onewire=ow.Sensor('/')

# отключение кэширования owserver
onewire.useCache(False)

# фиксация времени для измерения продолжительности обращения к термометрам
timelabel=time.time()

# цикл обращений к датчикам (для прерывания нажать Ctrl+C)
while True:
    # включение кэширования owserver (это чтобы ускорить чтение)
    onewire.useCache(True)
    # получение списка устройств на шине 1-wire
    sensors=onewire.sensorList()
    # ловля исключения
    try:
        # используется в проверке первый ли термометр
        i=0
        # опрос устройств на шине 1-wire
        for dt in sensors:
            # выбираем все цифровые термометры
            if hasattr(dt, 'type')&hasattr(dt,'temperature'):
                # чтение данных устройств
                Dtype,Daddress,Dtemperature = dt.type, dt.address,dt.temperature.strip()
                # проверка не из кэша ли читается первый термометр
                if (i==0)&((time.time()-timelabel)<1):
                    # если данные получены из кэша owserver, выдать специальное исключение
                    raise exNoFirstReadSensor("thise data from cash")
                # перейти к следующему термометру (его данные можно уже из кэша читать)
                i=i+1
                # вывод данных очередного термометра
                print 'Термометр %s-%s   Температура = %sград.C' % (Dtype,Daddress,Dtemperature)
                # просто дополнительная тестовая проверка
                if float(Dtemperature)>30:
                    print 'Температура датчика %s-%s больше 30град.C' % (Dtype,Daddress)
        # подсчет и вывод длительности опроса всех термометров (в сек)
        print 'Время измерения=%sсек' % (time.time()-timelabel)
        print
        # фиксация текущего времени для измерения длительности опроса термометров
        timelabel=time.time()
    # перехват исключения при чтении из кэша owserver (просто пропускаем)
    except exNoFirstReadSensor:
        pass
    # при любом раскладе отключаем кэш owserver, чтобы получить свежие данные
    finally:
        onewire.useCache(False)


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


так выглядит результат работы скрипта:
Гирлянда термометров.jpg
Термометры.png
Брагин Магистр Краснодар 278 71
Отв.13  01 Апр. 14, 23:46
C-Bell, спрошу сдесь
На рисунке ниже представлена подробная схема подключения умной автоматики.
какой из трех датчиков контролирует и какую температуру поддерживает термостат из темы про "зерновую баз пг"? на фото завитушек понять не смог под каким из холодильнников стоит термодатчик

а по теме для: для доступа удаленно к web интерфейсу необходим белый ip адрес, чего многие не имеют по причине мобильного интернета, да и провод потребует подключение статики\динамики рублей за 100-200. так что или по дому будет доступ за NATом (пятую точку до подвала не нести) или сразу рассмотри использование чего-нибудь типа тимвайвера или http://www.ammyy.com
capsolo Новичок Зелик 4784 1526
Отв.14  03 Апр. 14, 09:48
С нетерпением ждем когда начнешь релюшками щелкать Улыбающийся Пока все несложно, и язык изложения хороший.
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.15  24 Апр. 14, 14:25
Уменьшение времени измерения температуры DS18B20
Тяжело быть тупым…
Но только первые два года
Потом привыкаешь и даже
начинает нравиться
(военный фольклор)

Начинающий линуксоид чуть умом не тронулся, пытаясь заставить пакет OWFS запускать одновременное температурное преобразование всех пяти цифровых термометров, подключенных к однопроводной шине.
Не получалось никак. Продолжительность измерения температуры пяти DS18B20 оставалась более 6 секунд.


Естественно, что при частоте измерения 1 раз в шесть секунд ни о какой оперативности управления речи быть не может.
На разгадку этой тайны ушло несколько недель, были перепробованы различные версии пакета OWFS, другие пакеты, уже всерьёз стал задумываться о создании проприетарной библиотеки для работы с цифровыми термометрами.
Не забросил я пакет OWFS лишь потому, что с его помощью использование 1-wire устройств становится очень простым.

И вот вчера свершилось!
Разгадка оказалась тривиальной: OWFS НЕ ЗАПУСКАЕТ ОДНОВРЕМЕННОЕ ТЕМПЕРАТУРНОЕ ПРЕОБРАЗОВАНИЕ В СХЕМЕ С ПАРАЗИТНЫМ ПИТАНИЕМ!

Пришлось перепаивать гирлянду с DS18B20, добавив третий провод, обеспечивая им питание +5V от адаптера 1-wire USB9097.



В конфигурации пакета owfs убрал строку о продолжительности жизни кэша:
server timeout_volatile=1

Напомню, редактор нужно вызвать в LXTerminal командой:

sudo leafpad /etc/owfs.conf

Немного переписал программу, чтобы минимизировать затраты времени на измерение температур цифровых термометров DS18B20.
#coding=utf8
"""
$Id: MeasureTemperature.py,v 1.2 2014/04/22 10:54:30 alfille Exp $

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

Эта программа находит все температурные датчики на шине 1-wire
и периодически выводит значения измеренных ими температур.
Также выводится время, затраченное на измерение температуры.

Условия работы программы:
    должны быть установлены пакеты:
        owserver
        python-ow
    должен быть запущен owserver
    в файле /etc/owfs.conf должна быть добавлена строка:
        'server: device = /dev/ttyUSB0' (для USB9097)
        (или для DS9490 раскомментировать строку 'server: usb = all' )
"""


# подключение необходимых библиотек
import time, ow

# инициализация ow - указание адреса и порта owserver (см. /etc/owfs.conf)
ow.init('localhost:4304')
print ('инициализация ow на порт localhost:4304')

# создание объекта, отражающего сеть 1-wire
onewire=ow.Sensor('/')
print ('создание объекта Sensor')

# включение кэширования owserver
onewire.useCache(True)
print ('включение кэширования owserver')

# получение списка цифровых термометров DS18B20 на шине 1-wire
sensors=onewire.find(type='DS18B20')
print ('получение списка цифровых термометров DS18B20 на шине 1-wire')

# получение адресов термометров
termometrs=[]
for ts in sensors:
    termometrs.append('/'+ts.family+'.'+ts.id)
print ('получение адресов термометров')

#бесконечный цикл измерения температуры и времени ее измерения (прерывание Ctl+C)
while 1:
    #фиксация времени начала измерения
    timeStart=time.time()

    # запуск температурного преобразования всех термометров
    ow._put('/simultaneous/temperature','1')

    # спим сколько надо секунд
    time.sleep(0.95)

    # опрос и вывод показаний термометов на шине 1-wire
    for termometr in termometrs:
        print ('Термометр %s   Температура = %sград.C' % (termometr,ow._get(termometr+'/temperature').strip()))
    print ('Продолжительность измерения=%s сек' % (time.time()-timeStart))
    print ('')


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


Время ожидания завершения преобразования температуры (преобразование теперь выполняют одновременно все DS18B20) установлено 0,95 сек и добавляется время на чтение показаний термометров (около 0,1 сек на термометр), ещё некоторое время съедает пакет OWFS (приблизительно 0,4 сек).



5-DS18B20 с питанием.jpg
TestTemp3.png
Братан Специалист Юзовка 132 5
Отв.16  29 Апр. 14, 13:27
А дальше? (С)

Тема интересная, не бросай еë! Улыбающийся
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.17  29 Апр. 14, 15:27
На майские праздники постараюсь термостат изобразить.

Самому хочется завершить и запустить аппаратуру на новой автоматике.
Но не всегда время позволяет заниматься этим делом.
C-Bell Научный сотрудник Улан-Удэ 1731 1231
Отв.18  04 Мая 14, 19:45
Счёлкаем релюшками
     Купил на аукционе ebay.com две платы pcDuino Lite WiFi: a MiniPC with Arduino headers Ubuntu.
С доставкой обошлись по 805 руб каждая.
Они меньше по размерам, чем pcDuino V2, и память что оперативная, что NAND тоже меньше в два раза.
Но для реализации самогонной автоматики должно вполне хватить.

Купил в электромагазине провода, вилку, бокс ЩРН-П-10, собираю в нем всю автоматику.
Пока что платы ещё не закреплены, потому что нужно подключать к pcDuino мышь и клавиатуру.

С нетерпением ждем когда начнешь релюшками щелкать Улыбающийся Пока все несложно, и язык изложения хороший.
capsolo, 03 Апр. 14, 09:48

Смотри пост Управление реле
capsolo Новичок Зелик 4784 1526
Отв.19  04 Мая 14, 20:56
Ну вот ШИМ для клапана отбора уже можно софтварно изобразить. Последний компонент - управление питанием. Необходим выпрямитель с дискретной регулировкой напряжения и слвместимым каналом управления. А что за симпатичные релюшки и как их подключить?
Еще понадобятся сухие контакты для безопасности и автопереключения отбора между фазами