如今,自动售货机非常受欢迎,因为它们易于使用、多用例且无需人工干预。它可以通过插入货币硬币来分发饮料、门票、零食等产品。自动售货机出现在公共和私人区域,如商场、市场、办公室等,用于各种应用。在这个项目中,我们将使用 Arduino 构建一个便携式饮用水自动售货机,可用于任何公共场所,如旅游场所,使用货币硬币分配饮用水或任何其他饮料。该自动售货机使用单个硬币接收器模块来接收货币硬币,并使用TRIAC和光电耦合器电路来分配水。
建造饮用水自动售货机所需的组件:
Arduino UNO
硬币接收器模块
BT136 可控硅
MOC3021 光耦
点阵穿孔板
连接电线
引领
230V交流水泵
管道和配件
饮用水自动售货机工作
如上面的框图所示,硬币接收器模块充当输入设备,当它检测到插入其中的有效硬币时,它会向 Arduino 发出信号。Arduino 接收信号并向 Opto 隔离器发出数字命令,该隔离器触发 TRIAC 在特定持续时间内打开/关闭水泵。同样,连接一个 LED 以指示分配动作。
硬币接收器模块工作
硬币接收器模块接收可适用于各种自动售货机的货币硬币。硬币接收器模块有多个类别,包括 单硬币接收器、类似类型硬币接收器、多硬币接收 器等。单硬币接收器专门设计用于仅接收特定硬币。类似类型的硬币接收器用于接收与硬币接收器放置的硬币相似的硬币。多硬币接受器可以用一台机器接受不同的硬币,并向微控制器输出不同的信号。在这个项目中,使用单个硬币接受器。
硬币接收设备有一个内置的微控制器,它从设备内部的传感器获取数据并收集不同的硬币。使用这些数据,微控制器知道该硬币是否需要被接受或退回。使用位于顶部的按钮可以轻松对该设备进行编程。硬币接收器在输出引脚上为每个插入的硬币提供一个脉冲信号,通过计算脉冲我们知道已经插入了多少硬币。它还具有三个开关,我们使用它们来选择我们想要在输出上获得的信号类型。第一个开关有三个位置来选择脉冲长度。如图所示,第二个开关用于将信号设置为+5 V(NC)或0 V(NO)。使用第三个开关,可以选择设备的精度。
硬币接收器模块的培训
要针对特定硬币训练模块,请按照以下步骤操作:
首先,按住顶部的按钮并按住 4-5 秒,直到红色 LED 亮起,然后松开。
当红色 LED 亮起时,插入我们要为其编程的硬币。例如,如果我们想为 2 卢比硬币编程,那么我们在编程时将只插入 2 卢比硬币。
将同一枚硬币插入设备 30 次,以训练硬币记忆。编程结束后,LED 将熄灭,设备即可使用。
TRIAC电路工作
TRIAC 是一种三端交流开关,可由其栅极端的低能量信号触发。在 SCR 中,它仅在一个方向上导通,但在 TRIAC 的情况下,可以在两个方向上控制功率。此处 BT136 TRIAC 用于交流泵开关的开/关目的。
如上图所示,通过向 TRIAC 施加一个小的栅极脉冲信号以 90 度的触发角触发 TRIAC。时间“t1”是我们必须根据我们的应用要求给出的延迟时间。例如,在这种情况下,由于触发角为 90%,因此平均功率输出将减半。如果我们想要打开设备,我们需要将其完全打开,即 t1=0。
光耦合器
光耦也称为光隔离器。它用于保持两个电路(如直流和交流信号)之间的隔离。基本上,它由一个发射红外光的 LED 和一个检测红外光的光电传感器组成。这里 MOC3021 光耦合器用于从我们的微控制器信号控制交流泵,这是一个直流信号。
饮水机电路图
TRIAC和光耦连接电路图
为自动售货机编程 Arduino
在这里,我们将对 Arduino 进行编程以检测硬币插入和硬币类型。成功检测后,它将打开泵以分配水。完整的代码在文档末尾给出。在这里,在下面的几行中,我们将解释代码的重要部分。
首先,定义硬件中使用的引脚,如下所示。数字引脚 2 用作输入中断引脚,数字引脚 6 和 12 分别用于 TRIAC 和 LED。
常量 int 硬币 = 2;
常量 int TRIAC = 6;
常量 int LED=12;
boolean Coin_insert = false;
整数计数=0;
接下来,在设置函数内部,将配置一个外部中断引脚来检测设备中的硬币插入。这里使用了一个名为attachInterrupt的函数,它将 Arduino 的数字引脚 2 配置为外部中断,当它在其引脚上检测到任何中断时,它将调用名为coinInterrupt的函数。
无效设置(){
序列号.开始(9600);
attachInterrupt(digitalPinToInterrupt(COIN), coinInterrupt, RISING);
pinMode(TRIAC,输出);
pinMode(LED,输出);
}
在Loop()内部,检查投币状态,如果检测到投币成功,则触发 TRIAC 特定持续时间以打开泵以分配水,完成后触发关闭。
无效循环(){
如果(硬币插入){
数字写入(LED,高);
延迟(1000);
数字写入(TRIAC,高);
延迟(12000);
数字写入(TRIAC,低);
延迟(2000);
硬币插入 = 假;
}
别的 {
数字写入(LED,低);
数字写入(TRIAC,低);
}
}
当检测到硬件中断时调用函数coinInterrupt,即当硬币接收器检测到有效硬币时。
无效硬币中断(){
硬币插入=真;
}
组件组装和测试
现在,在按照电路图连接组件并对 Arduino 进行编程之后,让我们构建一个类似于自动售货机的外壳,如下图所示。
将所有单元组装在一个外壳中后,设置如下所示:
产品的背面图如下所示。
要测试Arduino 自动售货机,请打开电源并将玻璃放在水龙头内以收集水。现在将 2 卢比硬币放入接受器中。一旦它检测到硬币,绿色 LED 应该会发光并且应该开始出水。玻璃装满后,LED 和泵应关闭。
这就是您如何构建饮用水自动售货机Arduino 和投币器模块的方法。如果您有任何问题或建议,您可以将它们放在评论部分或使用我们的论坛。
代码
常量 int 硬币 = 2;
常量 int TRIAC = 6;
常量 int LED=12;
boolean Coin_insert = false;
整数计数=0;
无效设置()
{
序列号.开始(9600);
attachInterrupt(digitalPinToInterrupt(COIN), coinInterrupt, RISING);
pinMode(TRIAC,输出);
pinMode(LED,输出);
}
无效循环()
{
如果(硬币插入)
{
数字写入(LED,高);
延迟(1000);
数字写入(TRIAC,高);
延迟(12000);
数字写入(TRIAC,低);
延迟(2000);
硬币插入 = 假;
}
别的
{
数字写入(LED,低);
数字写入(TRIAC,低);
}
}
无效硬币中断()
{
硬币插入=真;
}