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