Samovar 7.00: 参数既可以按下文介绍的方法在 Arduino IDE 中设置,也可以通过配置器设置。配置器把所选的值保存在 user_config_override.h 中,不改动主文件 Samovar_ini.h。固件会自动包含这个文件,其中的值优先于 Samovar_ini.h;也可以按 user_config_override.example.h 模板手工创建它。在配置器中,参数按分区排列(“分区”(«Раздел»)列表):基本(«Основные»)、温度(«Температуры»)、泵(«Насосы»)、NBK(«НБК»)、调节器(«Регулятор»)、设备(«Оборудование»)、精馏(«Ректификация»)、BK(«БК»)、网络(«Сеть»)、传感器(«Датчики»)、步进电机(«Шаговый двигатель»)。
要让草图适配您的设备配置,请在 Arduino IDE 中打开它,并修改 Samovar_ini.h 文件
在 Arduino IDE 中打开 Samovar.ino 文件,它位于文件夹 ...\Documents\Arduino\Samovar\ 中。
这样,..\Documents\Arduino\Samovar\ 文件夹中的所有文件都会加载到 Arduino IDE 中
在 Arduino IDE 顶部一行找到 Samovar_ini.h 选项卡,开始编辑。
要让某行代码不被编译、从而不被 Samovar 执行,请在该行前加上 // 字符(注释掉)。
反之,要让某行生效,请删除 // 字符(取消注释)
建议只排除与您没有的设备相关的行,而不要把您认为用不到的参数一股脑全部关掉。
为方便起见,文件中的代码分成若干块。
#define SAMOVAR_HOST "samovar"
Samovar 在网络中的名称。设备可通过 http://samovar.local(mDNS)访问;通过 WiFi 更新时,Arduino IDE 和配置器的网络端口中也显示这个名称。在配置器中:分区“基本”(«Основные»),“设备网络名称”(«Имя устройства в сети»)。
代码块
//选择所用的 ESP32 开发板
//********************************************
//#define BOARD DEVKIT
//#define BOARD LILYGO
//#define BOARD ESP32S3
//********************************************
这一块可以跳过。固件会根据 Arduino IDE 中选择的开发板(DOIT ESP32 DEVKIT V1 / ESP32 Dev Module - DEVKIT,ESP32S3 Dev Module - ESP32S3)或配置器中选择的开发板自动确定开发板类型。如果什么都没识别出来,则使用 DEVKIT。
从这一行开始,可以修改数值并启用/禁用代码行:
//向操作者报警的水温
#define ALARM_WATER_TEMP 70
这里的 70 是温度,单位为摄氏度。达到该温度时,会发出冷却液温度(下文简称 CT)达到临界值的消息。如果使用了蜂鸣器,并且在界面中启用了事件提醒,Samovar 还会发出声音报警。在温度降下来之前,报警会一直持续。如果希望在其他温度报警,请修改数字 70。
//切断电源的最高水温
#define MAX_WATER_TEMP 75
CT 达到 75° 时,Samovar 发出关闭加热的命令。
//切断电源的最高蒸汽温度
#define MAX_STEAM_TEMP 98.8
蒸汽传感器温度达到 98.8° 时,Samovar 发出关闭加热的命令。
//切断电源的 TCA 最高温度
#define MAX_ACP_TEMP 75
TCA 传感器温度达到 75° 时,Samovar 发出关闭加热的命令。
(另见TCA 传感器设定值)
//蒸汽传感器达到此温度时,塔从升温模式切换到工作模式;在蒸馏模式下,如装有蒸汽传感器,则以此判断开始沸腾
#define CHANGE_POWER_MODE_STEAM_TEMP 39
蒸汽传感器温度(或塔节上部传感器的温度)达到 39° 时,Samovar 向调节器发出“停止升温”命令,并在调节器上设置取酒程序第一行中指定的电压。在蒸馏模式下,Samovar 也用这一蒸汽传感器温度判断开始沸腾。在配置器中:“温度”(«Температуры»),“退出升温的温度,°C”(«Температура перехода из разгона, °C»)。
//蒸馏釜传感器达到此温度时,打开供水阀门并启动供水泵
#define OPEN_VALVE_TANK_TEMP 77
蒸馏釜温度达到 77° 时,发出打开供水阀门的命令,同时发送启动泵的 PWM 控制信号,并向操作者发送需要开水的消息。
无论是否使用泵或阀门、水是否已经打开,这条消息都会发送。
#define DELTA_T_CLOSE_VALVE 20
//设定的冷却水温度与实际水温之差:在蒸馏和精馏模式下,蒸馏过程结束后,泵会一直运转,直到水温降到这个差值。数值单位为 C°,可以修改。 强烈不建议禁用。 (详见
这里)
//泵的 PWM 调节下限值(百分比)。请选择能保证水流的数值
#define PWM_LOW_VALUE 10
众所周知,电机启动所需的电压比维持运转所需的电压高。这一行设置供水泵电机能够持续运转而不停转的最小值(百分比)。
//泵的 PWM 调节开始工作的下限值(百分比)。请选择能保证电机启动的数值
#define PWM_START_VALUE 40
能保证泵电机启动的电压,以额定电压的 % 表示。
也就是说,如果您的泵(已装入系统且其中有液体)在施加 6 伏及以上电压时能可靠启动,低于此电压则不启动,那么在额定电压 12 伏时,这相当于额定值的 50%。因此应把数字 40 改为 50。
//舵机转角修正。
int8_t servoDelta[11] = {0, -2, -3, -4, -3, -2, 0, 0, 0, 0, -2};
修正取酒转盘舵机的转角,以便精确定位。单位为度。每个位置单独修正,与相邻位置的修正无关。
例如,如果摇臂“越过”了 2 号位置,我们设置了负 10°,那么修正 3 号位置时不必考虑这个值(-10)。
//目标温度与当前温度之差(用于啤酒和低温慢煮模式),在差值大于此值时以全功率加热(升温模式)。
用于啤酒和低温慢煮模式。数值单位为摄氏度。该参数针对主加热器。含义是:只要实际温度与糖化程序行中设定温度之差大于 1°,就以全功率加热。一旦差值小于或等于 #define HEAT_DELTA 中指定的值,就让调节器减小加热,以便平稳达到设定温度和/或不明显超过它。
如果加热器功率较大,请增大该值,以免“冲过”目标温度。
//如果目标温度与当前温度之差(用于啤酒和低温慢煮模式)大于设定值,在使用 UART 控制的调节器时,4 号继电器会额外接通辅助加热管;差值较小时,辅助加热管关闭
#define ACCELERATION_HEATER_DELTA 4
用于啤酒和低温慢煮模式。数值单位为摄氏度。该参数只针对附加加热器。
如果蒸馏釜温度低于目标温度(此处为低 4°),附加加热器接通。
#define BOILING_TEMP 98.9
用于啤酒和低温慢煮模式。数值单位为摄氏度。该值需手动设置,告诉 Samovar 在您的设备上蒸馏釜中真正开始沸腾的温度。该值
影响主加热器和附加加热器的工作算法
//默认的蒸馏结束温度
#define DEFAULT_DIST_TEMP 99.9
用于蒸馏模式。如果蒸馏程序没有设定其他值,蒸馏釜达到此温度时结束运行。在配置器中:“温度”(«Температуры»),“蒸馏结束温度,°C”(«Температура завершения дистилляции, °C»)。
Samovar 子系统的使用设置
#define SAMOVAR_USE_BLYNK //在项目中使用 Blynk
如果不使用 Blynk,必须用 // 注释掉这一行。
#define BLYNK_SAMOVAR_TOOL "samovar-tool.ru" //使用免费的 Blynk 服务器 samovar-tool.ru,而不是 Blynk 云
如果您使用付费的 Blynk 服务器,而不是开发者提供的服务器,必须注释掉这一行。
//#define USE_MQTT //把读数发送到您自己的 MQTT 代理 把日志保存到云端不需要这个参数:只要在设置中填写了设备令牌并启用了 SAMOVAR_USE_BLYNK,Samovar 的日志和消息就会自动发送到 samovar-tool.ru 服务器。请在 www.samovar-tool.ru 网站注册,并在编辑个人资料时填入设备令牌;之后即可在网站上通过菜单“用户 - 日志”查看日志。详见章节 -
云端日志和图表。
USE_MQTT 是一项独立的可选功能,用于把简化的读数行发送到任意 MQTT 代理(不使用 TLS,运行过程中每 4 秒一次,空闲时每 5 秒一次)。Samovar_ini.h 中没有这一行:该参数在配置器中启用(分区“网络”(«Сеть»):“MQTT 服务器”(«Сервер MQTT»)、“MQTT 端口”(«Порт MQTT»)、“MQTT 用户”(«Пользователь MQTT»)、“MQTT 密码”(«Пароль MQTT»)、“MQTT 主题”(«Топик MQTT»)),或在 user_config_override.h 中启用,此时必须设置 MQTT_SERVER、MQTT_PORT、MQTT_USER、MQTT_PASSWORD 和 MQTT_TOPIC;缺少它们时,带 USE_MQTT 的编译会报错中止。
选择功率调节器
在 Samovar_ini.h 文件中,用以下普通代码行进行选择:
#define SAMOVAR_USE_POWER
//#define KVIC_USE_9600
//#define SAMOVAR_USE_RMVK
//#define SAMOVAR_USE_SEM_AVR
使用 Arduino IDE 编译时,这些行应保持如下状态:
KVIC:什么都不用改。原始文件中 SAMOVAR_USE_POWER 一行已经启用,RMVK 和 SEM_AVR 两行已被注释掉。
RMVK:只取消 SAMOVAR_USE_RMVK 一行的注释。固件会自动启用所需的通用调节器支持。
SEM_AVR:只取消 SAMOVAR_USE_SEM_AVR 一行的注释。固件会自动启用 RMVK 协议支持和通用调节器支持。
不使用 UART 控制的调节器:注释掉 SAMOVAR_USE_POWER、SAMOVAR_USE_RMVK 和 SAMOVAR_USE_SEM_AVR。
KVIC_USE_9600 参数只适用于 KVIC:调节器 UART 速率为 9600 时取消其注释。如果调节器使用 38400,则保持该行被注释。
使用
PlatformIO 编译时,不需要手动修改这些行:选择现成的环境
Samovar、
Samovar_no_power、
Samovar_rmvk 或
Samovar_sem 即可(另有用于 ESP32-S3 开发板的
Samovar_s3,以及
Samovar_lua 和
Samovar_alarm_button)。配置器会根据“功率调节器”(«Регулятор мощности»)组(不使用(«Не использовать»)/ KVIC / RMVK / SEM_AVR)和开发板自动选择环境。详见说明
使用 PlatformIO 编译和烧录。
NBK 参数
#define NBK_MULT_PAUSE_OVERFLOW 2 // 液泛后暂停的时长,以惯性时间的倍数计
#define NBK_PUMP_LIMIT 30 // “优化”时发酵醪泵的最大流量,l/h
#define NBK_WORK_PRESSURE_RATIO 0.5f // 工作压力上限 = 液泛压力的比例
#define NBK_PRESSURE_MARGIN 5 // 学习上限时,比液泛时刻压力低的毫米汞柱数
//#define USE_NBK_DELTA_PRESSURE // 根据酒糟排放口的压力修正酒糟温度
//#define USE_NBK_END_BY_STEAM_RISE // 蒸汽温度比最低值升高 NBK_END_STEAM_RISE 时结束 NBK 运行
#define NBK_END_STEAM_RISE 5.0f // 用于 USE_NBK_END_BY_STEAM_RISE 的蒸汽温度升高阈值(°C)
只在连续醪塔模式下需要;在配置器中:分区“NBK”(«НБК»)。如果不使用 NBK,保持原样即可。详见章节
NBK。
#define SAMOVAR_USE_POWER_START_TIME 2000 //向调节器发送升温命令前的延时。保证接触器 “冷”接通功率电路。
用于避免接触器主触点产生电弧。 发出“开启加热”(«Включить нагрев»)命令后,1 号继电器动作并接通接触器,接触器再接通加热器的功率电路。经过以毫秒设定的时间后,调节器才输出电压。
#define LCD_RESET_PERIOD_MS 240000UL //LCD 显示屏定期重新初始化的周期(ms),4 分钟
防止 I2C 显示屏“卡死”。无需修改。在配置器中:“设备”(«Оборудование»),“显示屏复位周期,ms”(«Период сброса дисплея, мс»)。
#define USE_WATERSENSOR //使用冷却水流量传感器。启用后,如果在设定时间内没有水流,Samovar 会关闭塔的加热
流量传感器基于霍尔传感器原理工作。有冷却液流动时,Samovar 会收到周期性的脉冲。如果没有脉冲或脉冲太少,Samovar 会关闭加热并发出报警。
#define WF_CALIBRATION 98 //流量传感器系数 F=98*Q(L/min);其他传感器请设置相应的值。
流量传感器修正。让 1 升水流过传感器,会收到 5880 个脉冲。实际上,不同水流速度下每升的脉冲数不同。可以通过修改数值 98 进行修正。
#define WATER_FLOW_MIN_PULSES 7 //每个周期的脉冲数不少于此阈值时,才认为确实有水流
关水时滤除流量传感器的零星脉冲。如果 Samovar 在没有水流时认为有水流,请增大该值;如果水流较弱时它关闭了加热,请减小该值。在配置器中:“泵”(«Насосы»),“最少流量脉冲数”(«Минимум импульсов потока»)。
#define USE_HEAD_LEVEL_SENSOR //使用塔头中的回流液位传感器(P-N-P 型传感器)。启用后,传感器触发时功率降低 1*PWR_FACTOR(KVIC:1 V,RMVK:2 V;SEM_AVR:当前值的 3%)
使用触发时输出逻辑 1 的回流液位传感器。
#define IGNORE_HEAD_LEVEL_SENSOR_SETTING //如果使用回流传感器,则忽略 WEB 界面中禁用传感器的命令。(如果注释掉这一行,界面的“设置”(«Настройки»)选项卡上会出现一个复选框,可用它启用或禁用回流传感器。)
//define USE_HEAD_LEVEL_SENSOR // 使用回流液位传感器……被注释掉,则不使用传感器,下一行处于什么状态(注释或未注释)都无所谓。
如果 #define USE_HEAD_LEVEL_SENSOR 这一行未被注释,则要考虑下一行的状态:
#define IGNORE_HEAD_LEVEL_SENSOR_SETTING - 如果它未被注释,WEB 界面中就没有控制回流传感器的复选框。 因此无法从 WEB 界面禁用传感器。
如果 //#define IGNORE_HEAD_LEVEL_SENSOR_SETTING 被注释掉,则可以从 WEB 界面 快速 启用和关闭(第 5 项)回流液位传感器的使用。
//#define WHLS_HIGH_PULL //使用 N-P-N 型液位传感器
使用触发时输出逻辑 0 的回流液位传感器。
#define USE_WATER_PUMP //对水泵使用 PWM 控制,和/或在啤酒模式下用于接通搅拌器
如果不使用自动维持 CT 的泵,也没有在啤酒模式下连接搅拌器,必须注释掉这一行。在配置器中:“泵”(«Насосы»),“控制水泵或搅拌器”(«Управлять насосом воды или мешалкой»)。
//#define USE_WATER_VALVE LOW //用阀门控制来调节水压
使用旁通阀时,必须取消这一行的注释。阀门接在泵的位置上。它按恒温器原理工作:温度高于设定值时阀门打开,低于设定值时关闭。详见这里。
如果旁通管路上使用常闭阀门,必须把 LOW 改为 HIGH。
如果 CT 由手动或其他第三方设备调节,必须注释掉这两行。
//#define USE_ALARM_BTN //使用紧急按钮。
按下它会停止供水并切断电源。可以安装漏水传感器(允许并联任意数量带“干接点”的装置),也可以使用普通按钮(它也可以与传感器并联)
#define USE_BODY_TEMP_AUTOSET //对酒头之后第一个酒心或预液泛取酒程序自动修正酒心温度;如果预液泛程序位于倒数第二个酒心或预液泛取酒程序之前,也对其修正
在标准的 Samovar 7.00 版本中,该功能已启用,且无法注释掉:固件会强制启用 USE_BODY_TEMP_AUTOSET(Samovar.h)。在配置器中位于“精馏”(«Ректификация»)分区(“酒心温度自动修正”(«Автокоррекция температуры тела»)),升温上限 BODY_TEMP_AUTOSET_MAX_RISE 也在那里(见下文)。
在以下条件下,取酒不会暂停:
对于酒心(«Тело»)行:酒心行紧接在酒头行之后,且其后有两行酒心或预液泛行(任意组合)。
对于预液泛(«Предзахлеб»)行:预液泛行位于取酒程序中的任意位置,且其后有两行酒心或预液泛行(任意组合)
//选择所用的压力传感器,只保留一行,其余行必须注释掉。
//#define USE_BMP180 //使用 BMP180/BMP085 压力传感器
//#define USE_BMP280 //使用 BMP280 压力传感器
//#define USE_BMP280_ALT //使用备用地址的 BMP280 压力传感器
//#define USE_BME280 //使用 BME280 压力传感器
#define USE_BME680 //使用 BME680 压力传感器
选择所用的大气压传感器,只保留一行,其余行必须注释掉。如果不使用大气压传感器,可以注释掉所有行,但这样 Samovar 就不会根据大气压修正沸腾温度。
#define USE_BTN //使用按钮
使用 Samovar 上的万能按钮。它接在 ESP32 的 D39 引脚上。按钮很方便,但如果不用,最好禁用。
#define USE_UPDATE_OTA //使用 ArduinoOTA 通过 WiFi 更新。便于调试;运行时会给 ESP32 增加额外负担
如果用串口有线连接更新 ESP32 草图,可以注释掉这一行。 这样就无法通过 WiFi 更新。使用 ESP32 核心 3.x 版本编译时,固件会自动禁用该参数。在配置器中:“网络”(«Сеть»),“允许通过 Wi-Fi 更新”(«Разрешить обновление по Wi-Fi»)。
//#define USE_EXPANDER 0x20 //使用 PCF8575 端口扩展器
//#define USE_ANALOG_EXPANDER 0x48 //使用 PCF8591 模拟端口扩展器
//#define USE_LUA //使用 Lua 编写控制 Samovar 和端口扩展器的脚本
启用端口扩展器和 Lua 脚本语言。详见章节
功能扩展
//选择塔内所用压力传感器的类型。只能使用一种。
//#define USE_PRESSURE_XGZ 32 //使用 XGZP6897D 压力传感器(或同类产品)。数值为传感器参数表中的 K 参数
//#define USE_PRESSURE_1WIRE {0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x55} //使用 1Wire 压力传感器
//#define USE_PRESSURE_MPX //使用 MPX5010D 压力传感器
塔内压力传感器(不要与上面的大气压传感器混淆)。NBK 和监测塔内压力需要它。只取消一行的注释;如果取消了两行或三行,则使用 MPX5010D。没有传感器时,三行都保持注释。在配置器中:“塔内压力传感器”(«Датчик давления в колонне»)组。
//#define USE_STEPPER_ACCELERATION //步进电机平滑启动和制动
启用取酒泵的平滑加速,停止时也会平滑减速。
//#define STEPPER_REVERSE //反转步进电机的旋转方向
如果需要取酒泵电机(Nema17)向另一方向旋转,必须取消这一行的注释。
//#define I2CStepperStepMl 16000 //I2CStepper 每 ml 的步数
仅在使用外部 I2CStepper 模块时需要。设置取酒泵的初始校准值(每毫升步数)。在配置器中:“步进电机”(«Шаговый двигатель»),“I2CStepper 每 ml 步数”(«Шагов на мл для I2CStepper»)。
//#define COLUMN_WETTING //如果装有回流液位传感器,精馏开始时让塔进入预液泛,以润湿填料
//#define WETTING_POWER 220 //润湿填料时调节器的电压/功率(用于 SEM_AVR)
精馏前润湿填料。只在使用回流液位传感器(USE_HEAD_LEVEL_SENSOR)时有效:升温结束后,Samovar 在调节器上保持程序第一行的电压(未设定时为 220 V;SEM_AVR 使用 WETTING_POWER),必要时逐步降到 80%,并等待回流液位传感器触发,最长 20 分钟。消息中显示:“开始润湿塔填料”(«Начало смачивания насадки колонны»)和“塔填料已成功润湿!”(«Насадка колонны успешно смочена!»)。在配置器中:“精馏”(«Ректификация»),“精馏前润湿填料”(«Смачивание насадки перед ректификацией»)和“填料润湿功率”(«Мощность смачивания насадки»)。
//#define NOT_USE_INTERFACE_UPDATE //启动时不更新界面
Samovar 会比较本地安装的界面版本与远程可用的版本,如果不一致就进行更新。
这种方式可以让您在 Samovar 中保留自己开发的文件。本地更新会覆盖所有内容,而通过互联网更新只更新界面,脚本和设置会保留。
安装新版本时无需上传界面,它会自动更新。
但事实证明,情况有所变化,这一功能并非对所有人都有效。
如果取消该参数的注释,界面将不会通过互联网更新。
//#define KVIC_DEBUG //把与 KVIC 调节器通信的调试信息输出到串口监视器
只在排查与调节器的通信故障时需要。在配置器中:“调节器”(«Регулятор»),“KVIC 调试信息”(«Отладочные сообщения KVIC»)。
精馏算法参数
#define PAUSE_RESUME_HYSTERESIS_DELTA 0.07f //按蒸汽/塔节温度进入暂停的阈值与退出阈值之间的回差(°C)
#define PROGRAM_ROW_STOP_PAUSE_LIMIT 3 //当前程序行内的停止暂停次数,达到后自动降低该行的基础速度
#define PROGRAM_ROW_STOP_PAUSE_SPEED_CUT_PCT 10 //PROGRAM_ROW_STOP_PAUSE_LIMIT 触发时,该行基础速度降低的百分比
#define PROGRAM_DONE_AUTO_POWEROFF_MIN 30 //保持“程序执行完毕”(«Выполнение программы завершено»)状态的时间(分钟)(泵已停止,加热继续),之后自动关闭。0 = 立即关闭
#define BODY_TEMP_AUTOSET_MAX_RISE 0.3f //一个程序行内酒心温度自动升高的上限(°C)
默认值适用于常见的塔,无必要请勿修改。在配置器中:分区“精馏”(«Ректификация»)。
BK 模式参数
#define BK_STEAM_SETPOINT_MIN 30 //BK 分凝器蒸汽温度设定值的下限(程序行第 5 个字段),°C;0 - 手动控制水
#define BK_STEAM_SETPOINT_MAX 100 //BK 分凝器蒸汽温度设定值的上限,°C
#define BK_WATER_ADJUST_PERIOD_MS 60000 //BK 水量调节的步进周期,ms
#define BK_WATER_DEADBAND 0.2f //BK 蒸汽设定值附近的死区(°C)
#define BK_WATER_PWM_STEP 30 //BK 水量 PWM 调节的步长(满量程 1023)
醪塔模式下设定值的范围和自动调水的步长。在配置器中:分区“BK”(«БК»)。
编辑完文件后,必须重新把草图上传到 ESP32。为此,点击 Arduino IDE 顶部工具栏上的箭头,等待上传完成。
您的 Samovar 已可以投入使用。
备注。
今后安装新版本时,不必每次都编辑 Samovar_ini.h。
通过 Arduino IDE 更新时,请比较新旧两个 Samovar_ini.h,只把您自己的数值转移过去。不要用旧文件整体替换新文件:新版本可能有新的参数,缺少它们配置就不完整。配置器会把用户的改动单独保存在 user_config_override.h 中。
最好直接编辑新文件,而不是把新代码中的行添加到旧文件中,以免出现意外错误(参见“更新草图”)。
比较和编辑时,可以使用能够对比两个文件、直观显示差异的专用程序。
注意。
建议从 此链接下载新版 Samovar 的压缩包。这是稳定且经过测试的版本。
________________________________________________________________________________________________________________
其他文件和代码行的说明:
文件 Samovar_pin.h
Samovar 7.00: 该文件中已没有 TARGET_WATER_TEMP 常量。在所有模式下(包括 NBK),泵的 PWM 调节所维持的水温都取自
设置 - 温度(«Настройки - Температура»)选项卡上的“水温传感器设定值”(«Уставка датчика воды»)字段;该字段为空时,固件使用 48°。过程结束后,当出水温度比设定值低 DELTA_T_CLOSE_VALVE(默认 20°,见上文)时,Samovar 停止泵,发出关闭水阀的命令,并发出需要关水的提醒。
文件 pumppwm.h
define PUMP_PWM_FREQ 15
冷却泵的最低 PWM 频率,单位为赫兹