使用Arduino开发板自制一台简易自动售水机
自动售货机(Vending Machine)因其易于使用、多种用途且无需人工干预而在当今非常受欢迎。它可以通过投入货币来分发饮料、门票、小吃等产品。自动售货经常机出现在各种公共区域,例如商场、市场、办公场合等,用于各种应用。在本篇文章中,我们将使用Arduino开发板制作一台便携式自动售水机,可用于任何公共场所,例如旅游场所,使用货币售卖饮用水或其他饮料。这台自动售货机使用一个接收货币的硬币接收器模块,TRIAC和光电耦合器电路用于分配水。
所需的组件
● Arduino UNO开发板
● 硬币接收器模块
● BT136可控硅
● MOC3021光耦
● 万能板
● 连接电线
● LED灯
● 220V交流水泵
● 管道和配件
自动售水机的工作原理
![](https://www.geediy.net/wp-content/uploads/2024/06/image-146.png)
如上面的框图所示,硬币接收器模块充当输入设备,当它检测到投入有效的硬币时,它会向Arduino发出信号。 Arduino接收信号并向光电隔离器发出数字命令,该命令触发TRIAC在特定持续时间内打开/关闭水泵。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-147.png)
硬币接收模块接收货币硬币,可适用于各种自动售货机。投币器模块有多种类型,包括单币投币器、同类投币器、多币投币器等。单币投币器专为仅接收特定硬币而设计。类似类型的硬币接收器用于接收与放置在硬币接收器旁边的硬币相似的硬币。多币硬币接收器可以在一台机器上接收不同的硬币,并向微控制器输出不同的信号。在本文中,使用单个硬币接收器。
硬币接收设备有一个内置的微控制器,它从设备内部的传感器获取数据并收集不同的硬币。使用此数据,微控制器知道是否需要接收或退回该硬币。使用位于顶部的按钮可轻松对设备进行编程。对于每个插入的硬币,硬币接收器设备都会在输出引脚上为我们提供一个脉冲信号,通过计算脉冲我们知道已经插入了多少个硬币。它还具有三个开关,我们使用它们来选择我们想要在输出上获得的信号类型。第一个开关有三个位置来选择脉冲长度。第二个开关用于将信号设置为+5 V(NC) 或 0 V(NO),如图所示。使用第三个开关,可以选择设备的精度。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-148.png)
硬币接收器模块的训练
要针对特定硬币训练模块,请按照以下步骤操作:
首先,按下位于顶部的按钮并按住 4-5 秒,直到红色 LED 亮起,然后松开。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-149.png)
当红色 LED 亮起时,插入我们想要为其编程的硬币。例如,如果我们想为1元硬币编程,那么我们将在编程时只插入1元硬币
![](https://www.geediy.net/wp-content/uploads/2024/06/image-150.png)
将相同的硬币插入设备30次以训练硬币记忆。编程结束后,LED 将熄灭,设备准备就绪。
![](https://www.yiboard.com/data/attachment/forum/202201/06/103707j3pxhn2z31p360j2.jpg)
自动售水机的连接电路图
![](https://www.geediy.net/wp-content/uploads/2024/06/image-151.png)
自动售货机的Arduino编程
本文中我们将编程Arduino以检测硬币插入和硬币类型。成功检测后,它将打开泵以分发水。本节中我们将解释代码的重要部分。
首先,定义硬件中使用的引脚。数字引脚2用作输入中断引脚,数字引脚6和12分别用于TRIAC和LED灯。
const int COIN = 2;
const int TRIAC = 6;
const int LED=12;
boolean Coin_insert = false;
int count=0;
接下来,在setup()函数中,配置一个外部中断引脚来检测设备中的硬币插入。这里使用了一个名为attachInterrupt的函数,它将把Arduino的数字引脚2配置为外部中断,当它在其引脚上检测到任何中断时,它将调用名为coinInterrupt的函数。
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(COIN), coinInterrupt, RISING);
pinMode(TRIAC, OUTPUT);
pinMode(LED, OUTPUT);
}
在loop()函数中,检查硬币投入状态,如果检测到成功投入硬币,则触发TRIAC特定持续时间以打开泵以分发水,完成后触发关闭。
void loop() {
if(Coin_insert) {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(TRIAC, HIGH);
delay(12000);
digitalWrite(TRIAC, LOW);
delay(2000);
Coin_insert = false;
}
else {
digitalWrite(LED, LOW);
digitalWrite(TRIAC, LOW);
}
}
当检测到硬件中断时调用函数coinInterrupt,即当硬币接收器检测到有效硬币时。
void coinInterrupt() {
Coin_insert = true;
}
组件组装和测试
现在,在按照电路图连接组件并对Arduino进行编程后,让我们制作一个像自动售货机一样的外壳,如下所示。
![](https://www.yiboard.com/data/attachment/forum/202201/06/104150wikb9k9yholk4064.jpg)
在外壳中组装所有单元后,设备如下所示:
![](https://www.yiboard.com/data/attachment/forum/202201/06/104209f3uzbwqhqvuoj30w.jpg)
设备的背面视图如下所示。
![](https://www.yiboard.com/data/attachment/forum/202201/06/104218qyqo29e6tyte6z92.jpg)
要测试Arduino自动售水机,请打开电源。现在将1元硬币放入接收器内。一旦检测到硬币,绿色LED会亮起,并且开始出水。玻璃杯装满后,LED和泵关闭。
以上就是如何使用Arduino和硬币接收器模块制作自动售水机的方法。