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

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

Форум самогонщиков Автоматика
1 ... 10 11 12 13 13
SVRyzhov Новичок Нижний Новгород 1
Отв.240  19 Марта 21, 11:48
Дефицит времени, связанный с завершением дачного сезона, не позволяет пока подробно описать все изменения.
Да и новая версия ещё не совсем доделана - отсутствует автозапуск.C-Bell, 26 Сент. 20, 02:43
Доброго дня! Как продвигаются дела с новой версией? Есть ли какие-нибудь вести с полей?
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.241  30 Апр. 21, 10:55
Цифровой вольтметр - аппаратная часть
Переход на установку мощности нагрева не в процентах от максимальной мощности а в абсолютных величинах требует два параметра:
1. Напряжение сети.
2. Ток, потребляемый нагревателем (либо сопротивление этого нагревателя).
Соответственно, мощность можно вычислить как произведение напряжения сети на потребляемый ток P=U*I (1)
Либо как отношение квадрата напряжения сети к сопротивлению нагревателя P=U*U/R (2)
Чтобы не использовать довольно дорогой PZEM или не ставить два измерителя и напряжения и тока, отдано предпочтение добавлению в конфигурацию параметра сопротивления нагревателя и одному измерителю сетевого напряжения. При использовании только измерителя напряжения сети мощность можно рассчитывать по формуле 2.

Так как у Raspberry Pi нет встроенных аналого-цифровых преобразователей, то нужен соответствующий отдельный модуль. Под рукой был 8-битный модуль PCF8591 с управлением по I2C, его и применил. Как оказалось, разрядности вполне хватает для точной регулировки мощности.
PCF8591.jpg
PCF8591. Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.

Осталось только преобразовать высокое переменное напряжение сети в соответствующее ему низкое постоянное напряжение с гальванической развязкой.
На Алиэкспрессе есть такой модуль для Arduino, но у него на выходе сдвинутая синусоида, повторяющая форму напряжения сети. И как этот модуль использовать с Raspberry Pi я не нашёл.
zmpt101b.jpg
Zmpt101b. Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.

Проще оказалось собрать свой модуль на основе такого-же инструментального трансформатора.

Ниже показана схема цифрового вольтметра и его подключение к Raspberry Pi
AC-sensor_МП.png
AC-sensor_МП. Smart Distiller (Умный дистиллятор с управлением по интернет). Автоматика.


Перед сборкой необходимо с помощью двух вольтметров настроить подстроечным резистором преобразователь высокого переменного напряжения в низкое постоянное.
При входном напряжении 220V постоянное напряжение на выходе должно быть 2,2V.

ВНИМАНИЕ! НА СХЕМЕ ПРИСУТСТВУЕТ ВЫСОКОЕ НАПРЯЖЕНИЕ, ОПАСНОЕ ДЛЯ ЖИЗНИ!
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.242  30 Апр. 21, 13:08
Цифровой вольтметр - программная часть
Так как аналого-цифровой преобразователь управляется по I2C предварительно нужно эту шину разрешить в конфигурации Raspberry Pi (через главное меню - параметры).

Измерение производится классом-потоком с интервалом 0,5 сек.
Получить измеренное напряжение можно запросив у этого класса параметр value


import threading
import time

#подгружаем модуль
#для работы с шиной I2C в Python "python-smbus"
from smbus import SMBus

DEV_ADDR = 0x48 # адрес модуля PCF8591 на шине I2C

class Voltmeter(threading.Thread):
    """Класс обеспечивает измерение напряжения сети 220V
    с помощью АЦП модуля PCF8591"""

    def __init__(self):
        super(Voltmeter, self).__init__()
        self._V=self.GetVoltage()
        self._Run=False

    @property
    def value(self):
        return self._V

    def run(self):
        self._Run=True
        while(self._Run):
            self._V=self.GetVoltage()
            time.sleep(0.5)

    def stop(self):
        self._Run=False

    def GetVoltage(self):
        return self.MeasureVoltage()

    def MeasureVoltage(self):
        SMBus(1).write_byte(DEV_ADDR, 0b1000010) # select ADC1
        SMBus(1).read_byte(DEV_ADDR) # read last value
        SMBus(1).read_byte(DEV_ADDR) # repeat reading last value
        return round(SMBus(1).read_byte(DEV_ADDR))


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