大約71%的地表都被水覆蓋,但遺憾的是只有2.5%的水是可以飲用。隨著人口增加、污染嚴重以及氣候變化,預計到2025年我們將遇到長期的水資源短缺。一方面,各國和各州之間就共享河水已經發生了輕微的爭議,另一方面,由于我們的疏忽,人類浪費了大量的飲用水。
剛開始時可能問題不大,但如果你的水龍頭每秒滴一滴水,你只需要花費大約五個小時就可以浪費一加侖水,這對普通人來說是足夠的水來生存兩個天。那么可以做些什么來阻止這種情況呢?一如既往,答案就在于技術的進步。如果我們用自動打開和關閉的智能水龍頭替換所有手動水龍頭,我們不僅可以節約用水,還可以擁有更健康的生活方式,因為我們不需要用臟手操作水龍頭。因此,在這個項目中,我們將使用Arduino開發板和電磁閥制作一個自動飲水機,當杯子放在它附近時,它可以自動放滿水。聽起來很酷吧!那么讓我們建立一個......
所需的材料
● 電磁閥
● Arduino Uno開發板
● 1k和10k電阻
● 面包板
● 連接導線
自動飲水機背后的概念非常簡單。我們將使用HCSR04超聲波傳感器檢查飲水機前是否有物體,如玻璃杯。電磁閥將用于控制水流,當通電時水將流出,當斷電時水將停止。因此我們將編寫一個Arduino程序,它始終檢查是否有物體放置在水龍頭附近,如果是,則電磁閥將打開并等待物體被移除,一旦物體被移除,電磁閥將自動關閉,從而關閉供水。
電路原理圖
基于Arduino的飲水機的完整電路圖如下所示
本項目使用的電磁閥是12V閥門,最大額定電流為1.2A,額定電流為700mA。也就是說,當閥門打開時,它會消耗大約700mA的電流來保持閥門開啟。我們知道Arduino開發板是一個以5V工作的開發板,因此我們需要一個開關驅動電路,讓電磁閥開啟和關閉它。
該項目中使用的開關器件是IRF540N N溝道MOSFET。它有3個引腳,分別是柵極、源極和漏極。如電路圖所示,電磁閥的正極端子由Arduino的Vin引腳供電。因為我們將使用12V適配器為Arduino供電,因此Vin引腳將輸出12V,可用于控制電磁閥。電磁閥的負極端子通過MOSFET的源極和漏極引腳連接到地。因此,只有在MOSFET導通時才會為電磁閥供電。
MOSFET的柵極引腳用于打開或關閉它。如果柵極引腳接地,它將保持關閉狀態,如果施加柵極電壓,它將導通。為了在沒有電壓施加到柵極引腳時保持MOSFET關斷,柵極引腳通過10k電阻接地。 Arduino引腳12用于打開或關閉MOSFET,因此D12引腳通過1K電阻連接到柵極引腳。該1K電阻用于限流目的。
超聲波傳感器由Arduino的+ 5V和接地引腳供電。 Echo和Trigger引腳分別連接到引腳8和引腳9。然后我們可以對Arduino進行編程,使用超聲波傳感器測量距離,并在檢測到物體時打開MOSFET。整個電路很簡單,因此可以很容易地在面包板上構建。在建立連接后,看起來像下面這樣的東西。
編程Arduino開發板
對于這個項目,我們必須編寫一個程序,該程序使用HCSR-04超聲波傳感器來測量物體前方的距離。當距離小于10cm時,我們必須打開MOSFET,否則我們必須關閉MOSFET。我們還將使用連接到引腳13的板載LED并將其與MOSFET一起切換,以便我們可以確保MOSFET是處于開啟還是關閉狀態。接下來,我將其分解為小的有意義的片段來解釋該程序。
該程序以宏定義開始。我們有超聲波傳感器的觸發和回聲引腳,MOSFET柵極引腳和LED作為我們Arduino的I / O。所以我們已經定義了它們將連接到哪個引腳。在我們的硬件中,我們將Echo和Trigger引腳分別連接到第8和第9個數字引腳。然后MOSFET引腳連接到引腳12,默認情況下板載LED連接到引腳13。我們使用以下代碼定義引腳
#define trigger 9
#define echo 8
#define LED 13
#define MOSFET 12
在setup函數中,我們聲明哪些引腳是輸入的,哪些是輸出的。在我們的硬件中,只有超聲波傳感器的Echo引腳是輸入引腳,其余都是輸出引腳。因此我們使用Arduino的pinMode函數來指定如下所示
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(LED,OUTPUT);
pinMode(MOSFET,OUTPUT);
在主loop函數內部,我們調用了名為measure_distance()的函數。此功能使用超聲波傳感器測量物體前方的距離,并將值更新為變量“distance”。要使用超聲波傳感器測量距離,必須首先將觸發引腳保持低電平兩微秒,然后保持高電平持續10微秒并再次保持低電平持續2微秒。這將向空氣中發出超聲波信號的聲波,它將被前方的物體反射,回聲引腳將拾取由它反射的信號。然后我們使用時間值來計算傳感器前方物體的距離。計算距離的程序如下
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
一旦計算出距離,我們就必須使用簡單的if語句比較距離值,如果值小于10cm,我們會使MOSFET和LED變為高電平,在緊接著的else語句中我們將MOSFET和LED設置為低電平。程序如下所示。
if(distance<10)
{
digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH);
}
else
{
digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW);
}
自動飲水機的工作過程
按照電路中所示進行連接,并將下面給出的程序上傳到Arduino開發板。做一些簡單的安裝,將電磁閥連接到進水口,并使用12V適配器將電路連接到Arduino板的DC插孔。確保板載LED指示燈熄滅,這樣可確保電磁閥也關閉。
如您所見,我已將超聲波傳感器直接放置在電磁閥下方,這樣當玻璃杯放置在電磁閥下方時,它會直接與超聲波傳感器相對。超聲波傳感器將探測到這個物體,并且MOSFET和LED一起打開,從而使電磁閥打開,水流下來。
同樣,當移除玻璃杯后,超聲波傳感器告訴Arduino開發板,它前面沒有玻璃杯,因此Arduino關閉了閥門。如果您對此工作過程有任何疑問,請在本帖下面進行回復。
注意:不同的電磁閥有不同的工作電壓和額定電流,確保電磁閥工作在12V,最大功耗不超過1.5A。
代碼
本篇文章使用的完整代碼如下所示:
#define trigger 9
#define echo 8
#define LED 13
#define MOSFET 12
float time=0,distance=0;
void setup()
{
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(LED,OUTPUT);
pinMode(MOSFET,OUTPUT);
delay(2000);
}
void loop()
{
measure_distance();
if(distance<10)
{
digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH);
}
else
{
digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW);
}
delay(500);
}
void measure_distance()
{
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
}
編輯:hfy
-
電磁閥
+關注
關注
14文章
508瀏覽量
31349 -
超聲波傳感器
+關注
關注
18文章
577瀏覽量
35900 -
Arduino
+關注
關注
187文章
6464瀏覽量
186651 -
Arduino開發板
+關注
關注
0文章
8瀏覽量
7420
發布評論請先 登錄
相關推薦
評論