在這個項目中,我們將研究一個創(chuàng)新的Arduino項目創(chuàng)意,在這里我們可以通過使用顏色傳感器和Arduino感知紙幣來計算紙幣筆記并計算其數(shù)量。TCS230顏色傳感器將用于檢測貨幣音符,并將Arduino Uno用于處理數(shù)據(jù)并顯示16x2 LCD上的剩余余額。
所需組件:
Arduino UNO
TCS230顏色傳感器
紅外傳感器
面包板
16*2 字母數(shù)字液晶屏
連接電線
TCS3200 顏色傳感器工作
TCS3200顏色傳感器用于感知各種顏色。我們以前將TCS3200顏色傳感器與Arduino和Raspberry Pi聯(lián)系起來,還構(gòu)建了一些有用的項目,例如顏色分類機。
TCS230傳感器具有內(nèi)置的紅外LED,用于點亮要檢測到的顏色的物體。這樣可以確保外部光不會對物體產(chǎn)生影響。該傳感器讀取8*8陣列的光電二極管,該光電二極管由16個帶有紅色過濾器的光二極管,帶有藍色過濾器的16個,帶有16個帶有綠色過濾器的光電二極管,沒有任何過濾器。根據(jù)要求,分別選擇了這三個陣列中的每個傳感器陣列。因此,它被稱為 可編程傳感器。該模塊可以以感知特定的顏色并留下其他模塊。它包含用于選擇目的的過濾器。有第四模式稱為“無濾波器模式” ,其中傳感器檢測到白光。
TCS230顏色傳感器的輸出信號是一個方波,其占空比為50%,其頻率與所選濾波器的光強度成正比。
TCS3200顏色傳感器的引腳:
GND-顏色傳感器的地面參考引腳
S0,S1-輸出頻率縮放選擇輸入
S2,S3-照片二極管類型選擇輸入
顏色傳感器的輸出銷
OE-啟用PIN的輸出頻率
我們還在該項目中使用了紅外傳感器,該項目可以通過以下鏈接來理解其工作。
電路原理圖
以下是Arduino貨幣計數(shù)器的電路圖:
在這里,我制作了一個小型結(jié)構(gòu),例如使用卡板的POS貨幣刷卡機。在該結(jié)構(gòu)中,顏色傳感器和IR傳感器用紙板固定,如下圖所示。
在這里,IR 傳感器用于感應(yīng)插槽內(nèi)是否存在貨幣,如果有紙幣,則顏色傳感器將檢測紙幣的顏色并將顏色值發(fā)送到 Arduino。并且 Arduino 進一步根據(jù)紙幣的顏色計算貨幣價值。
代碼說明
在文章的末尾給出了完整的代碼以及演示視頻。在這里,下面給出了完整代碼的逐步說明。
首先,包括程序中的所有庫。在這里,我們只需要在程序中包含LCD庫即可。然后聲明代碼中使用的所有變量。
#include整數(shù)輸出 = 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 上打印歡迎信息并定義此項目中使用的數(shù)字引腳的所有數(shù)據(jù)方向。接下來,設(shè)置顏色傳感器的輸出頻率縮放,在我的例子中,它設(shè)置為 20%,可以通過給 S0 給高脈沖和給 S1 給低脈沖來設(shè)置。
無效設(shè)置() { 序列號.開始(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 數(shù)字寫入(2,高); DigitalWrite(3,低); }
在無限循環(huán)()內(nèi)部,讀取傳感器中的所有數(shù)據(jù)輸出。可以通過讀取A0引腳和輸出顏色頻率來找到IR傳感器的輸出,可以通過稱為Red(),blue()和green()的單個函數(shù)來找到。然后在串行顯示器上打印所有它們。當(dāng)我們需要在項目中添加新貨幣時,這是需要的。
int傳感器= DigitalRead(A0); int red1 = red(); int blue1 = blue(); int green1 = green(); serial.println(red1); serial.println(blue1); serial.println(green1); serial.println(“ ----------------------------------------”);
接下來,寫所有條件,以使用我們之前設(shè)置的參考頻率檢查顏色傳感器的輸出頻率。如果匹配,則從錢包余額中扣除指定的金額。
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盧比!!!”); 總計=總數(shù)10; 延遲(1500); lcd.clear(); } }
在這里,我們只設(shè)置了10盧比和50盧比顏色的條件,您可以設(shè)置更多條件以檢測更多否。貨幣筆記。
注意:在您的情況下,頻率輸出可能會有所不同,具體取決于外部照明和傳感器設(shè)置。因此,建議檢查貨幣的輸出頻率并相應(yīng)地設(shè)置參考值。
以下代碼將顯示16x2 LCD錢包中的可用余額。
lcd.setCursor(0, 0); lcd.print(“總BAL:”); lcd.setcursor(11,0); lcd.print(總計); 延遲(1000);
以下功能將獲得貨幣中紅色內(nèi)容的輸出顏色頻率。同樣,我們可以編寫其他功能以獲得藍色和綠色內(nèi)容的價值。
int red() { DigitalWrite(11,低); DigitalWrite(12,低); 頻率=脈搏蛋白(輸出,低); 返回頻率; }
因此,這就是可以使用幾個組件輕松構(gòu)建基于Arduino的貨幣計數(shù)器的方式。
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;
無效設(shè)置()
{
序列.開始(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);
數(shù)字寫入(12,低);
頻率=脈沖輸入(輸出,低);
返回頻率;
}
int blue()
{
digitalWrite(11, HIGH);
數(shù)字寫入(12,高);
頻率=脈沖輸入(輸出,低);
返回頻率;
}
int green()
{
digitalWrite(11, LOW);
數(shù)字寫入(12,高);
頻率=脈沖輸入(輸出,低);
返回頻率;
}
-
計數(shù)器
+關(guān)注
關(guān)注
32文章
2259瀏覽量
94800 -
顏色傳感器
+關(guān)注
關(guān)注
2文章
96瀏覽量
18197 -
Arduino
+關(guān)注
關(guān)注
188文章
6473瀏覽量
187419
發(fā)布評論請先 登錄
相關(guān)推薦
評論