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