通过附加的 I2CStepper 板(带一台步进电机和四个继电器)扩展 Samovar 的功能。
该模块可以作为独立设备使用。既可以用 16x2 LCD 屏幕上的菜单和编码器单独控制,也可以连接到 Samovar 使用。
扩展器通过 I2C 总线用四根线连接到 Samovar(与 LCD 屏幕相同)。Samovar 能识别到扩展器已连接,并可以控制它。
Samovar 7.00: 固件使用第 3 版协议与扩展板通信。总线上最多可以有十块板,I2C 地址为 1 到 10:奇数地址(1、3、5…)的板是搅拌器,偶数地址(2、4、6…)的板是泵(连续泵送或灌装设定体积)。每块板会告诉 Samovar 自己能做什么:搅拌、泵送、灌装、继电器、外部传感器。Samovar 启动时搜索扩展板,之后在后台轮询;只要找到至少一块,每个模式的主页面上都会出现“I2CStepper”按钮,用于打开扩展板控制页面。曾在总线上响应过的板会一直保留在列表中,直到 Samovar 重启;如果与它的通信中断,它会被标记为不可用。
运行过程中(精馏程序、Lua、“啤酒”和“奶酪”模式),Samovar 使用一台工作搅拌器和一台工作泵 — 即找到的板中地址最小的那块。它们在过程开始时确定,直到过程结束都不会改变,即使运行中出现了地址更小的板也一样。
在“啤酒”模式下,第一个继电器用于开关麦汁转移泵(例如让麦汁在煮锅中循环)。其余继电器固件不使用 — 用途由您决定,可以从 Lua 中切换。继电器由工作搅拌器负责(如果它声明支持继电器),否则由工作泵负责。
扩展板本身的设置(模式、转速、搅拌器运行时间和暂停时间、泵流量、灌装体积和速度、每毫升步数)保存在 Nano 的存储器中,在设置 → I2CStepper 选项卡(«Настройки → I2CStepper»)中编辑,见下文。“I2CStepper”页面只用于手动启动和停止。
“I2CStepper”页面
“I2CStepper”页面:已选择地址为 2 的泵板
 设备(«Устройство»)
在总线上找到的扩展板列表;有两块或更多板时显示。搅拌器为奇数地址,泵为偶数地址。
|
 扩展板状态
“运行中”(«Работает»)或“已停止”(«Остановлен»);下方是当前泵速和剩余体积。
|
 速度与体积
用于“启动”(«Запустить»)按钮的泵速(升/小时)和体积(毫升)。“停止”(«Стоп»)使泵停止。
|
 继电器 1
扩展板支持继电器时显示;切换扩展板的第一个继电器。
|
 外部泵校准
仅用于泵板:打开所选板的“步/毫升”(«Шагов/мл»)校准页面。
|
如果找到两块或更多扩展板,顶部会出现“设备”(«Устройство»)列表 — 用它选择要操作的板:“搅拌器,地址 N”(«Мешалка, адрес N»)或“泵,地址 N”(«Насос, адрес N»)。只有一块板时该列表隐藏。如果所选的板不可用,面板位置会显示消息“所选 I2CStepper 不可用”(«Выбранный I2CStepper недоступен»)— 不会自动换成另一块板,需要在列表中手动选择。
对于所选的板,页面显示其类型和地址、状态(“运行中”(«Работает»)或“已停止”(«Остановлен»))、以每秒步数表示的当前速度以及停止前剩余的步数。数据每两秒刷新一次。
控制。“速度”(«Скорость»)是以每秒步数表示的电机速度(1 到 18000),“目标,步”(«Цель, шагов»)是要走的步数。“启动”(«Запустить»)按钮把这两个值发送给扩展板,并按 Nano 存储器中保存的模式启动电机:搅拌器为旋转,泵为按给定步数灌装。对于泵,按体积计算步数更方便:把所需毫升数乘以 Nano 设置中的“步/毫升”(«Шагов/мл»)。“停止”(«Стоп»)使电机停止。如果泵未校准(“步/毫升”为零),或 Samovar 此时正在切换模式,则无法启动 — 此时会显示错误消息。
继电器。如果扩展板声明支持继电器,会显示“打开继电器 1”(«Включить реле 1»)/“关闭继电器 1”(«Выключить реле 1»)按钮 — 它切换扩展板的第一个继电器(在“啤酒”模式下是麦汁泵)。继电器 2–4 不能在此页面上切换,只能从 Lua 中切换。
外部泵校准。该按钮仅对支持灌装的泵板可用。它会打开所选板的校准页面:准备一个量具,设定电机速度,然后点击“开始校准”(«Начать калибровку»)— 泵开始泵送。正好收集到 100 mL 时,点击“记录 100 mL”(«Зафиксировать 100 мл»):Samovar 计算出“步/毫升”,并把该值写入 Nano 存储器。更换驱动器微步设置、电机、泵头或管子后,请重新校准。
Samovar 设置
设置 → I2CStepper。“Nano I2CStepper 设置”(«Настройки Nano I2CStepper»)选项卡显示保存在扩展板自身存储器中的设置。“重新扫描 I2C 设备”(«Пересканировать I2C-устройства»)按钮重新在总线上搜索扩展板(例如在连接新板之后)。如果有多块板,在“设备”列表中选择需要的那块。字段:
“新地址”(«Новый адрес»)— 扩展板在总线上的地址,1 到 10。奇数地址使板成为搅拌器,偶数地址使板成为泵;已被占用的地址不能选择。新地址在 Nano 重启后生效。
“模式”(«Режим»)—“搅拌器”(«Мешалка»,仅限奇数地址)、“泵”(«Насос»)或“灌装”(«Наполнение»,仅限偶数地址)。点击“启动”时以及收到来自 Lua 和应用的命令时,扩展板按此模式工作。
“步/毫升”— 泵的校准系数:用于把毫升和升/小时换算成电机步数。通过校准(见上文)或手动填写。该值为零时,泵无法启动。
“搅拌器转速”(«Обороты мешалки»)、“搅拌器运行时间,s”(«Работа мешалки, с»)、“搅拌器暂停时间,s”(«Пауза мешалки, с»)— 扩展板独立工作时的搅拌器参数;暂停时间为 0 时搅拌器连续运转。
“泵流量,mL/h”(«Подача насоса, мл/ч»)和“泵暂停时间,s”(«Пауза насоса, с»)— 用于“泵”模式(连续泵送);“灌装体积,mL”(«Объём наполнения, мл»)和“灌装速度,mL/h”(«Скорость наполнения, мл/ч»)— 用于“灌装”模式。
“保存到 Nano”(«Сохранить в Nano»)按钮把这些字段写入扩展板的非易失性存储器;Samovar 和扩展板重启后数据都会保留。
设置 → 泵(«Настройки → Насос»)。如果找到 I2C 泵,该选项卡上会出现两个用于精馏的字段:
该泵以升/小时表示的速度按 Nano 存储器中的“步/毫升”换算成步数;Samovar 设置中已不再有单独的“I2C 泵步数”(«Количество шагов I2C насоса»)字段。
移动应用与网站
Samovar 应用和 samovar-tool.ru 网站上的 Samovar 控制页面每五秒接收一次扩展板列表及其状态(可用性、模式、速度、剩余量、继电器掩码),并可以启动和停止扩展板、切换继电器。Nano 设置和校准不能通过应用进行 — 只能通过 Samovar 网页界面。如果命令被拒绝,原因会以“Blynk V37 a=N: code”(«Blynk V37 a=N: код»)的形式出现在 Samovar 消息中。
电路图与接线
接线图
外设连接引脚:
// Pins for I2C Master - connecting the screen and potentially other devices
// SDA_PIN 0 //A0
// SCL_PIN 2 //D2
// Pins for I2C Slave - communication with Samovar
// SDA_PIN A4
// SCL_PIN A5
// Pins for the stepper motor
#define STEPPER_STEP 3
#define STEPPER_DIR 4
#define STEPPER_EN 5
//Pins for the relays
#define MIXER_PUMP_PIN 13 // RELE_PIN1
#define RELE_PIN2 10 // RELE_PIN2
#define RELE_PIN3 11 // RELE_PIN3
#define RELE_PIN4 12 // RELE_PIN4
// Pins for the encoder
#define ENC_CLK 7 //S2
#define ENC_DT 8 //S1
#define ENC_SW 9 //KEY
提示。
如果打算把扩展器做成装在独立外壳里的单独设备,用 USB A-B 线(电脑 - 打印机线)把它连接到 Samovar 是合理的选择。模块电源(+/- 5 伏)和两路 I2C 总线信号直接从 Samovar 的显示屏处引出。Samovar 外壳上安装 USB-B 插座。
扩展器外壳上安装 USB-A 插座。
这样,连接到 Samovar 时,Arduino Nano 同时获得电源和 I2C 总线。作为独立设备使用时,用单独的电源代替 Samovar,例如手机充电器。
使用内置电源时,在电源输出端装一个 USB-B 插座,用同一根 USB A-B 线供电,这样就排除了误把 +5 伏送入 Samovar 的可能。
外设。
继电器模块使用 5 伏,最好带光耦控制。也可以使用 12 伏继电器,接法与 Samovar 中相同。
可以使用任何泵:直流电机,或者交流单相、三相电机。泵电机的启停先经过继电器,再经过任意功率开关:接触器或固态继电器。小流量时可以考虑 15RM 磁力驱动泵。不锈钢材质,安静,流量好。
搅拌器或 NBK 可以使用任何双极步进电机,只要功率和扭矩足够即可。推荐使用 Nema 23 配匹配的驱动器。
控制步进电机和四个继电器的 Arduino Nano 最新草图(sketch)可以 通过此链接下载。需要使用协议 v3 的版本;从协议 v2 升级时,扩展板存储器会重新初始化 — 请重新检查地址、模式和“步/毫升”。它的主要用途是作为扩展模块与 Samovar 配合使用。必须使用 Samovar 附带的库。
从 Lua 控制
当固件带 Lua 编译时,以下函数可用(见
关于 Lua 脚本语言)。搅拌器函数作用于工作搅拌器,泵函数作用于工作泵(即地址最小的板,见上文)。所有启动函数在命令被扩展板接受时返回 1,否则返回 0 — 包括总线上没有所需扩展板的情况。
set_stepper_by_time(spd, direction, time) – 启动搅拌器:spd – 以每秒步数表示的速度,direction – 方向 0 或 1,time – 以秒为单位的运行时间。time = 0 时搅拌器连续旋转直到收到停止命令,spd = 0 时搅拌器停止。
set_stepper_target(spd, direction, target) – 以灌装模式启动泵:spd – 以每秒步数表示的速度(最高 18000),direction – 方向 0 或 1,target – 步数。spd = 0 或 target = 0 时泵停止。该函数不控制 Samovar 的标准步进电机。
get_stepper_status() – 泵还要走多少步(0 – 已停止或没有扩展板)。
i2cpump_start(rate, volume) – 以 rate L/h 的速度泵送 volume mL,按 Nano 存储器中的“步/毫升”换算成步数。如果泵板未连接、未校准或参数无效,返回 0。
i2cpump_stop() – 停止泵。
i2cpump_get_speed() – 以每秒步数表示的当前泵速。
i2cpump_get_target_ml() – 最近一次 i2cpump_start 命令设定的体积,mL。
i2cpump_get_remaining_ml() – 还剩多少要泵送,mL。
i2cpump_get_running() – 泵正在运行时为 1,否则为 0。
set_mixer_pump_target(Val) – 打开(1)或关闭(0)第一个继电器 – 麦汁泵。
get_mixer_pump_status() – 第一个继电器的状态:0 或 1;没有带继电器的扩展板时为 255。
set_i2c_rele_state(Num, Val) – 打开(1)或关闭(0)继电器 Num(1–4)。命令执行成功时返回 1。
get_i2c_rele_state(Num) – 继电器 Num(1–4)的状态:0 或 1;没有带继电器的扩展板时为 255。
check_I2C_device(Addr) – 检查地址为 Addr 的设备是否在 I2C 总线上响应;找到设备时返回其地址。
注意。继电器由工作搅拌器负责(如果它声明支持继电器);否则由工作泵负责。改变状态的函数在 Lua 模拟模式下以及 Samovar 切换模式期间不会执行。
示例:set_stepper_by_time(800, 0, 0) – 搅拌器以每秒 800 步连续旋转;set_stepper_by_time(0, 0, 0) – 停止搅拌器。i2cpump_start(6, 250) – 以 6 L/h 泵送 250 mL;当 i2cpump_get_running() == 1 时,泵正在运行。