使用红外传感器构建一个Arduino计数机

描述

  在这个项目中,我们正在使用红外传感器构建一个Arduino 计数机。这台机器在红外传感器的帮助下对不同部分的硬币进行计数和分类。在这里,布置了红外传感器以感应不同的硬币,Arduino UNO 用于处理数据并在16x2 LCD上显示总计数值。

  所需组件

  Arduino UNO

  红外传感器

  面包板

  16*2 字母数字液晶屏

  用于 16x2 (1602) 字母数字 LCD 的 I2C 模块

  连接电线

  为 Arduino 硬币分拣机制作结构

  步骤 1:取一张纸板并标记不同的硬币尺寸,如下图所示。然后小心地切割标记的部分。这些部分的切割必须准确;否则,该项目可能无法完美运行。

Arduino

  第 2 步:按照下图所示,将上述装置放置在斜坡结构中。布置好后,通过在斜坡上插入不同的硬币来检查它,以确保布置完美无缺。如果硬币没有正确插入,则根据硬币稍微增加孔的大小并重新检查直到成功操作。

Arduino

Arduino

  第 3 步:将 IR 传感器放置在单个硬币的输出路径附近。正确放置传感器并使用电位计校准它们非常重要。然后再次插入硬币以检查传感器操作。在此处了解有关IR 传感器电路的更多信息。

Arduino

  电路原理图

  下面是Arduino计数机的电路图:

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 进行编程了。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 上检查各个硬币的计数。

Arduino
#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);

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分