在這個(gè)項(xiàng)目中,我們正在使用紅外傳感器構(gòu)建一個(gè)Arduino 計(jì)數(shù)機(jī)。這臺(tái)機(jī)器在紅外傳感器的幫助下對(duì)不同部分的硬幣進(jìn)行計(jì)數(shù)和分類。在這里,布置了紅外傳感器以感應(yīng)不同的硬幣,Arduino UNO 用于處理數(shù)據(jù)并在16x2 LCD上顯示總計(jì)數(shù)值。
所需組件
Arduino UNO
紅外傳感器
面包板
16*2 字母數(shù)字液晶屏
用于 16x2 (1602) 字母數(shù)字 LCD 的 I2C 模塊
連接電線
為 Arduino 硬幣分揀機(jī)制作結(jié)構(gòu)
步驟 1:取一張紙板并標(biāo)記不同的硬幣尺寸,如下圖所示。然后小心地切割標(biāo)記的部分。這些部分的切割必須準(zhǔn)確;否則,該項(xiàng)目可能無(wú)法完美運(yùn)行。
第 2 步:按照下圖所示,將上述裝置放置在斜坡結(jié)構(gòu)中。布置好后,通過(guò)在斜坡上插入不同的硬幣來(lái)檢查它,以確保布置完美無(wú)缺。如果硬幣沒(méi)有正確插入,則根據(jù)硬幣稍微增加孔的大小并重新檢查直到成功操作。
第 3 步:將 IR 傳感器放置在單個(gè)硬幣的輸出路徑附近。正確放置傳感器并使用電位計(jì)校準(zhǔn)它們非常重要。然后再次插入硬幣以檢查傳感器操作。在此處了解有關(guān)IR 傳感器電路的更多信息。
電路原理圖
下面是Arduino計(jì)數(shù)機(jī)的電路圖:
在這里,紅外傳感器被放置在硬幣分揀機(jī)的不同輸出路徑上以感應(yīng)硬幣。當(dāng)硬幣插入這個(gè) Arduino 硬幣計(jì)數(shù)器時(shí),它會(huì)根據(jù)機(jī)械設(shè)計(jì)進(jìn)入專用路徑,相應(yīng)的 IR 傳感器會(huì)感應(yīng)硬幣并向 Arduino 提供 HIGH 輸出值,該值可由 Arduino 的模擬引腳讀取。給出 HIGH 值的 IR 傳感器決定硬幣的價(jià)值,如盧比 2/5/10。
這里一個(gè) 16x2 字母數(shù)字 LCD 使用 I2C 模塊與 Arduino 連接,以顯示放入盒子中的硬幣數(shù)量。此LCD 也可以不使用 I2C 模塊直接連接到 Arduino,但這需要更多的連接數(shù)。所以為了更簡(jiǎn)單,I2C 模塊與 LCD 一起使用,它只使用 2 個(gè)引腳,即 SCL、SDA 來(lái)連接 LCD 和 Arduino。為 Arduino 供電,使用 12VDC,1 AMP AC-DC 適配器,可直接連接到 Arduino 的電源插孔。
稍作修改后,基于 Arduino 的硬幣分揀機(jī)的完整設(shè)置如下所示:
對(duì) Arduino 進(jìn)行編程
硬件連接成功后,現(xiàn)在是時(shí)候?qū)?Arduino 進(jìn)行編程了。Arduino 的完整代碼在本教程的底部給出。代碼的逐步解釋如下:
在程序中要做的第一件事是包含所有必需的庫(kù)。在我的例子中,我包含了用于使用 LCD 的 I2C 接口的“LiquidCrystal_I2C.h”庫(kù)和用于在 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() 內(nèi)部,analogRead函數(shù)用于從 Arduino 的不同模擬通道讀取紅外傳感器值并將它們存儲(chǔ)在不同的變量中。
int s1=analogRead(A0); int s2=analogRead(A1); int s3=analogRead(A2);
然后,編寫下面的代碼來(lái)檢測(cè)硬幣并增加硬幣計(jì)數(shù)器的值。這里使用標(biāo)志值 f1 來(lái)避免多次計(jì)數(shù)硬幣。
如果(s1>=200 && f1==0) { f1=1; } 否則如果(s1<200 && f1==1) { f1=0; c1++; }
最后,使用以下命令將計(jì)數(shù)值顯示在 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硬幣計(jì)數(shù)器的操作
完成設(shè)置并上傳代碼后,打開 12V 直流電源。首先,歡迎信息將顯示在 LCD 上,幾秒鐘后,LCD 上將顯示所有可用硬幣數(shù)量的屏幕。一開始,它會(huì)顯示為零,因?yàn)槲覀冞€沒(méi)有插入任何硬幣。
接下來(lái),在寫有“ Insert Coin ”的機(jī)器頂部插入任何硬幣(Rs. 2/5/10)?,F(xiàn)在您將看到必須在 LCD 上更新硬幣計(jì)數(shù)的值。然后插入多個(gè)不同價(jià)值的硬幣,并在 LCD 上檢查各個(gè)硬幣的計(jì)數(shù)。
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2);
詮釋 f1=0,f2=0,f3=0;
詮釋 c1=0,c2=0,c3=0;
無(wú)效設(shè)置()
{
lcd.init();
液晶背光();
lcd.setCursor(0,0);
lcd.print("基于 ARDUINO");
lcd.setCursor(0,1);
lcd.print("硬幣排序");
延遲(2000);
lcd.clear();
}
無(wú)效循環(huán)()
{
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);
}
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2253瀏覽量
94283 -
紅外傳感器
+關(guān)注
關(guān)注
9文章
508瀏覽量
47494 -
Arduino
+關(guān)注
關(guān)注
187文章
6457瀏覽量
186501
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論