在这个项目中,我们正在使用红外传感器构建一个Arduino 计数机。这台机器在红外传感器的帮助下对不同部分的硬币进行计数和分类。在这里,布置了红外传感器以感应不同的硬币,Arduino UNO 用于处理数据并在16x2 LCD上显示总计数值。
所需组件
Arduino UNO
红外传感器
面包板
16*2 字母数字液晶屏
用于 16x2 (1602) 字母数字 LCD 的 I2C 模块
连接电线
为 Arduino 硬币分拣机制作结构
步骤 1:取一张纸板并标记不同的硬币尺寸,如下图所示。然后小心地切割标记的部分。这些部分的切割必须准确;否则,该项目可能无法完美运行。
第 2 步:按照下图所示,将上述装置放置在斜坡结构中。布置好后,通过在斜坡上插入不同的硬币来检查它,以确保布置完美无缺。如果硬币没有正确插入,则根据硬币稍微增加孔的大小并重新检查直到成功操作。
第 3 步:将 IR 传感器放置在单个硬币的输出路径附近。正确放置传感器并使用电位计校准它们非常重要。然后再次插入硬币以检查传感器操作。在此处了解有关IR 传感器威廉希尔官方网站 的更多信息。
威廉希尔官方网站 原理图
下面是Arduino计数机的威廉希尔官方网站 图:
在这里,红外传感器被放置在硬币分拣机的不同输出路径上以感应硬币。当硬币插入这个 Arduino 硬币计数器时,它会根据机械设计进入专用路径,相应的 IR 传感器会感应硬币并向 Arduino 提供 HIGH 输出值,该值可由 Arduino 的模拟引脚读取。给出 HIGH 值的 IR 传感器决定硬币的价值,如卢比 2/5/10。
这里一个 16x2 字母数字 LCD 使用 I2C 模块与 Arduino 连接,以显示放入盒子中的硬币数量。此LCD 也可以不使用 I2C 模块直接连接到 Arduino,但这需要更多的连接数。所以为了更简单,I2C 模块与 LCD 一起使用,它只使用 2 个引脚,即 SCL、SDA 来连接 LCD 和 Arduino。为 Arduino 供电,使用 12VDC,1 AMP AC-DC 适配器,可直接连接到 Arduino 的电源插孔。
稍作修改后,基于 Arduino 的硬币分拣机的完整设置如下所示:
对 Arduino 进行编程
硬件连接成功后,现在是时候对 Arduino 进行编程了。Arduino 的完整代码在本教程的底部给出。代码的逐步解释如下:
在程序中要做的第一件事是包含所有必需的库。在我的例子中,我包含了用于使用 LCD 的 I2C 接口的“ LiquidCrystal_I2C.h”库和用于在 Arduino 上使用 I2C 功能的“ Wire.h ”。
#include#include LiquidCrystal_I2C lcd(0x27,16,2);
在setup() 中,编写了 LCD 命令用于在 LCD 上显示欢迎消息。
液晶显示器(); 液晶背光(); lcd.setCursor(0,0); lcd.print("基于 ARDUINO"); lcd.setCursor(0,1); lcd.print("硬币排序"); 延迟(2000); lcd.clear();
在loop() 内部, analogRead函数用于从 Arduino 的不同模拟通道读取红外传感器值并将它们存储在不同的变量中。
int s1=analogRead(A0); int s2=analogRead(A1); int s3=analogRead(A2);
然后,编写下面的代码来检测硬币并增加硬币计数器的值。这里使用标志值 f1 来避免多次计数硬币。
如果(s1>=200 && f1==0) { f1=1; } 否则如果(s1<200 && f1==1) { f1=0; c1++; }
最后,使用以下命令将计数值显示在 LCD 上。
lcd.setCursor(0,0); lcd.print("RS10 RS2 RS5"); lcd.setCursor(1,1); lcd.print(c1); lcd.setCursor(7,1); lcd.print(c2); lcd.setCursor(14,1); lcd.print(c3);
Arduino硬币计数器的操作
完成设置并上传代码后,打开 12V 直流电源。首先,欢迎信息将显示在 LCD 上,几秒钟后,LCD 上将显示所有可用硬币数量的屏幕。一开始,它会显示为零,因为我们还没有插入任何硬币。
接下来,在写有“ Insert Coin ”的机器顶部插入任何硬币(Rs. 2/5/10)。现在您将看到必须在 LCD 上更新硬币计数的值。然后插入多个不同价值的硬币,并在 LCD 上检查各个硬币的计数。
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2);
诠释 f1=0,f2=0,f3=0;
诠释 c1=0,c2=0,c3=0;
无效设置()
{
lcd.init();
液晶背光();
lcd.setCursor(0,0);
lcd.print("基于 ARDUINO");
lcd.setCursor(0,1);
lcd.print("硬币排序");
延迟(2000);
lcd.clear();
}
无效循环()
{
int s1=analogRead(A0);
int s2=analogRead(A1);
int s3=analogRead(A2);
lcd.setCursor(0,0);
lcd.print("RS10 RS2 RS5");
如果(s1>=200 && f1==0)
{
f1=1;
}
否则如果(s1<200 && f1==1)
{
f1=0;
c1++;
}
if(s2>=200 && f2==0)
{
f2=1;
}
否则 if(s2<200 && f2==1)
{
f2=0;
c2++;
}
if(s3>=200 && f3==0)
{
f3=1;
}
否则 if(s3<200 && f3==1)
{
f3=0;
c3++;
}
lcd.setCursor(1,1);
lcd.print(c1);
lcd.setCursor(7,1);
lcd.print(c2);
lcd.setCursor(14,1);
lcd.print(c3);
}
全部0条评论
快来发表一下你的评论吧 !