构建一个基于Arduino的货币计数器

描述

  在这个项目中,我们将研究一个创新的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,高);

频率=脉冲输入(输出,低);

返回频率;

}

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

全部0条评论

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

×
20
完善资料,
赚取积分