在这个项目中,我们将研究一个创新的Arduino项目创意,在这里我们可以通过使用颜色传感器和Arduino感知纸币来计算纸币笔记并计算其数量。TCS230颜色传感器将用于检测货币音符,并将Arduino Uno用于处理数据并显示16x2 LCD上的剩余余额。
所需组件:
Arduino UNO
TCS230颜色传感器
红外传感器
面包板
16*2 字母数字液晶屏
连接电线
TCS3200 颜色传感器工作
TCS3200颜色传感器用于感知各种颜色。我们以前将TCS3200颜色传感器与Arduino和Raspberry Pi联系起来,还构建了一些有用的项目,例如颜色分类机。
TCS230传感器具有内置的红外LED,用于点亮要检测到的颜色的物体。这样可以确保外部光不会对物体产生影响。该传感器读取8*8阵列的光电二极管,该光电二极管由16个带有红色过滤器的光二极管,带有蓝色过滤器的16个,带有16个带有绿色过滤器的光电二极管,没有任何过滤器。根据要求,分别选择了这三个阵列中的每个传感器阵列。因此,它被称为 可编程传感器。该模块可以以感知特定的颜色并留下其他模块。它包含用于选择目的的过滤器。有第四模式称为“无滤波器模式” ,其中传感器检测到白光。
TCS230颜色传感器的输出信号是一个方波,其占空比为50%,其频率与所选滤波器的光强度成正比。
TCS3200颜色传感器的引脚:
传感器的VDD-电压电源引脚。它提供了5V DC。
GND-颜色传感器的地面参考引脚
S0,S1-输出频率缩放选择输入
S2,S3-照片二极管类型选择输入
颜色传感器的输出销
OE-启用PIN的输出频率
我们还在该项目中使用了红外传感器,该项目可以通过以下链接来理解其工作。
电路原理图
以下是Arduino货币计数器的电路图:
在这里,我制作了一个小型结构,例如使用卡板的POS货币刷卡机。在该结构中,颜色传感器和IR传感器用纸板固定,如下图所示。
在这里,IR 传感器用于感应插槽内是否存在货币,如果有纸币,则颜色传感器将检测纸币的颜色并将颜色值发送到 Arduino。并且 Arduino 进一步根据纸币的颜色计算货币价值。
代码说明
在文章的末尾给出了完整的代码以及演示视频。在这里,下面给出了完整代码的逐步说明。
首先,包括程序中的所有库。在这里,我们只需要在程序中包含LCD库即可。然后声明代码中使用的所有变量。
#include整数输出 = 13; unsigned int频率= 0; 液晶液晶(4、6、7、8、9、10); int blue1; int red1; int green1; int a = 0,b = 0; int total = 1000;
在setup() 中,在 LCD 上打印欢迎信息并定义此项目中使用的数字引脚的所有数据方向。接下来,设置颜色传感器的输出频率缩放,在我的例子中,它设置为 20%,可以通过给 S0 给高脉冲和给 S1 给低脉冲来设置。
无效设置() { 序列号.开始(9600); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print(“智能钱包”); lcd.setCursor(0, 1); lcd.print(“电路摘要”); 延迟(2000); lcd.clear(); pinmode(2,输出); // S0 pinmode(3,输出); // S1 Pinmode(11,输出); // S2 Pinmode(12,输出); // S3 pinmode(13,输入); // out 数字写入(2,高); DigitalWrite(3,低); }
在无限循环()内部,读取传感器中的所有数据输出。可以通过读取A0引脚和输出颜色频率来找到IR传感器的输出,可以通过称为Red(),blue()和green()的单个函数来找到。然后在串行显示器上打印所有它们。当我们需要在项目中添加新货币时,这是需要的。
int传感器= DigitalRead(A0); int red1 = red(); int blue1 = blue(); int green1 = green(); serial.println(red1); serial.println(blue1); serial.println(green1); serial.println(“ ----------------------------------------”);
接下来,写所有条件,以使用我们之前设置的参考频率检查颜色传感器的输出频率。如果匹配,则从钱包余额中扣除指定的金额。
if(red1> = 20 && red1 <= 25 && blue1> = 30 && blue1 <= 35 && green1> = 30 && green1 <= 35 && a == 0 && sensor == high) { a = 1; } 否则if(传感器==低&& a == 1) { a = 0; 如果(总计>=10) { lcd.setCursor(0, 1); lcd.print(“ 10卢比!!!”); 总计=总数10; 延迟(1500); lcd.clear(); } }
在这里,我们只设置了10卢比和50卢比颜色的条件,您可以设置更多条件以检测更多否。货币笔记。
注意:在您的情况下,频率输出可能会有所不同,具体取决于外部照明和传感器设置。因此,建议检查货币的输出频率并相应地设置参考值。
以下代码将显示 16x2 LCD钱包中的可用余额。
lcd.setCursor(0, 0); lcd.print(“总BAL:”); lcd.setcursor(11,0); lcd.print(总计); 延迟(1000);
以下功能将获得货币中红色内容的输出颜色频率。同样,我们可以编写其他功能以获得蓝色和绿色内容的价值。
int red() { DigitalWrite(11,低); DigitalWrite(12,低); 频率=脉搏蛋白(输出,低); 返回频率; }
因此,这就是可以使用几个组件轻松构建基于Arduino的货币计数器的方式。
int输出= 13;
unsigned int频率= 0;
#include
LiquidCrystal LCD(4、6、7、8、9、10);
int blue1;
int red1;
int green1;
int a = 0,b = 0;
int total = 1000;
无效设置()
{
序列.开始(9600);
lcd.Begin(16,2);
lcd.setcursor(0,0);
lcd.print(“智能钱包”);
lcd.setcursor(0,1);
lcd.print(“电路摘要”);
延迟(2000);
lcd.clear();
pinMode(2, OUTPUT);//S0
pinMode(3, OUTPUT);//S1
pinMode(11, OUTPUT);//S2
pinMode(12, OUTPUT);//S3
pinMode(13, INPUT);//OUT
DigitalWrite(2,高);
DigitalWrite(3,低);
}
void loop()
{
int sensor = digitalread(a0);
int red1 = red();
int blue1 = blue();
int green1 = green();
serial.println(red1);
序列号.println(blue1);
serial.println(green1);
Serial.println("-----------------");
if(red1> = 20 && red1 <= 25 && blue1> = 30 && blue1 <= 35 && green1> = 30 && green1 <= 35 && a == 0 && sensor == high)
{
a = 1;
}
else if(sensor == low && a == 1)
{
a = 0;
if(total>=10)
{
lcd.setCursor(0, 1);
lcd.print("10 卢比!!!");
总计=总计-10;
延迟(1500);
lcd.clear();
}
}
if (red1 >= 25 && red1 <= 30 &&
{
b = 1;
}
else if (sensor == LOW && b == 1)
{
b = 0;
if(total>=50)
{
lcd.setCursor(0, 1);
lcd.print("50 卢比!!!");
总计=总50;
延迟(1500);
lcd.clear();
}
}
lcd.setCursor(0, 0);
lcd.print(“总BAL:”);
lcd.setcursor(11,0);
lcd.print(总计);
延迟(1000);
}
int red()
{
digitalWrite(11, LOW);
数字写入(12,低);
频率=脉冲输入(输出,低);
返回频率;
}
int blue()
{
digitalWrite(11, HIGH);
数字写入(12,高);
频率=脉冲输入(输出,低);
返回频率;
}
int green()
{
digitalWrite(11, LOW);
数字写入(12,高);
频率=脉冲输入(输出,低);
返回频率;
}
全部0条评论
快来发表一下你的评论吧 !