Samovar 的取酒程序是一组文本命令,用来描述控制器随时间变化的行为。 每一行指定一个条件(传感器温度、时间、体积)、一个动作(开/关水泵、改变速度、停止过程)以及参数。语法: T(sensor) (operator) (value) → (action) (parameters)。示例: T2 > 78.5 → PUMP ON 30% 的意思是“当传感器 2 的温度超过 78.5°C 时,以 30% 功率开启水泵”。程序按顺序执行,并设有检查点——条件未满足时,控制器不会进入下一行。这样就能精确地分离馏分:酒头(78°C 以下)、酒心(78–92°C)、酒尾(92°C 以上)。程序存储在 ESP32 的非易失性存储器中,重启后依然保留。可以通过网页界面或 Lua 脚本编辑。
Samovar 的取酒程序是什么
取酒程序由若干行组成。每一行描述 Samovar 在某一时刻应该做什么。一行的运行时长,要么由水泵以设定速度需要输送的液体体积决定,要么由时间决定。

最简单的取酒程序可能是这样的:
H;250;0.10;1;0.00;120
B;2500;1.00;2;0.00;150
T;250;0.10;3;0.00;160
这些行是什么意思?我们来更详细地看看第一行。
我们必须告诉 Samovar,这一行里它究竟在取什么——酒头、酒心还是酒尾。取酒类型由第一个(拉丁)字母设定:H——酒头(Heads),B——酒心(Body),T——酒尾(Tail),此外还有一种附加类型,P——暂停(Pause)。在第一行中,我们取的是酒头。
第二个参数用分号与取酒类型隔开,定义在转到下一行之前需要取出多少体积的液体。在我们的例子中是 250 毫升。
第三个参数在分号之后,是 Samovar 取出该体积的速度,示例中第一行为 100 毫升每小时,即 0.1 升每小时。
第四个参数定义液体将被收集到哪个容器——示例中为 1。
第五个参数是取酒温度;目前并未使用,其值无关紧要——默认设为 0,以免出错。
第六个,也是最后一个参数,定义 Samovar 在运行这一行时应在调压器上设置多少电压,即 120 伏。
如果你在主界面上打开程序标签页,会看到一个用于输入程序的文本框,以及一份简短的速查表,说明每个参数的含义。
“暂停”程序类型值得单独一提。运行 P 类型的行时,Samovar 会停止水泵,并等待该行中设定的时间。除第六个参数——电压——之外,其他所有参数都会被忽略。比如当需要大幅升高(或降低)调压器电压时,就可以用暂停。由于蒸馏釜和塔的惯性相当大,这需要时间。要等多久,你得根据自己的经验来定。如果暂停设得比需要的长,你可以直接按“Start take-off”(开始取酒)按钮,Samovar 就会转到下一行。如果时间不够,你可以按“Pause”(暂停)按钮,Samovar 会让水泵暂停。要继续取酒,需要按“Continue take-off”(继续取酒)按钮。下面是一行取酒程序可能的样子——等待 120 秒,把调压器电压设为 140 伏:
P;120;0;0;0;140
如你所见,用程序控制 Samovar 一点也不难。难的是针对你的具体条件,确定取多少体积、以多快的速度、按什么比例取酒。当然你可以自己全部算出来。但还有一种更简单的办法。

在“Program”(程序)标签页上有一个“Calculate program”(计算程序)按钮;按下它会进入一个带有程序计算器的页面,其中有一个根据初馏酒的体积和酒精度来计算程序的示例。为了精确计算,你需要设定塔出口处的预期酒精度。你还可以为你的初馏酒设定酒头和酒尾的百分比(这取决于所用原料的类型)。

当你从 GitHub 下载 Samovar 运行所需的程序(sketch)文件夹和库文件夹时,也下载了 tools 文件夹。该文件夹里有三个文件——program_shugar.txt、program_grain.txt、program_fruit.txt——其中包含针对糖、水果和谷物计算取酒程序的模板。这些计算可以直接使用,用“Load program”(加载程序)按钮加载即可;也可以按你的想法调整,并保存到另一个文件夹,这样 Samovar 更新时改动就不会被覆盖(“Save program”(保存程序)按钮)。
如果你不想用取酒程序,更愿意自己控制 Samovar 怎么办?
这也是可以的。为此,你可以设定单独一行程序并运行它。例如这一行:
H;99999;0.10;1;0.00;120
在这种情况下,Samovar 会一直运行这个程序,直到取出 100 升为止,而在此期间,你可以控制取酒参数。你可以改变取酒速度和调压器电压。安全组也会照常工作。
