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