摘要:以上寫有程序及註釋,可根據自己需求修改參數(主要是修改舵機角度以及延時時間—servo.write(70)。//轉動舵機70°       delay(5000)。

背景:

隨着人們的生活水平不斷提高,家居生活現代化是個必然的趨勢。智能垃圾桶很好的解決了無需接觸垃圾桶就可投放垃圾,防止交叉感染等問題。減少生活當中各種病菌交叉感染的幾率;無異味溢出。但其存在需要經常更換電池,電池壽命問題。

目的

第一:通過這篇文章,大致能瞭解目前市面上智能垃圾桶的工作原理。

第二:當使用電池供電,可能對於此產品來講,功耗會偏大。採用外部供電方式,是否能滿足需求。

第三:設計一個產品模型可能不需要考慮很多因素,但設計一款產品考慮因素還有哪些,討論一下。

實驗材料

Arduino控制板      9G舵機     超聲波模塊

什麼是Arduino控制板

它是一款便捷靈活、方便上手的開源型平臺。對於初學者是一款極易上手的硬件。

超聲波模塊的工作原理

通過Trig引腳發一個 10US 以上的高電平,就可以在Echo接收口等待高電平輸出;一有輸出就可以開定時器計時,當此口變爲低電平時就可以讀定時器的值,此時就爲此次測距的時間,方可算出距離.如此不斷的週期測,就可以達到你移動測量的值了。

可能您對此還有疑惑,我們將其換成程序流程:

a.單片機引腳觸發Trig測距,給至少 10us 的高電平信號;

b.模塊自動發送 8 個 40khz 的方波,自動檢測是否有信號返回;

c.有信號返回,通過 IO 輸出一高電平,並單片機定時器計算高電平持續的時間;

d.超聲波從發射到返回的時間.

計算公式:測試距離=(高電平時間*聲速(340M/S))/2;

接下來,我們來上系統連接圖

舵機連接圖如下:

橙色:信號線 D9   紅色:5V    灰色:GND

超聲波模塊連接如下:

GND——GND

Echo——數字信號 D2

Trig——數字信號  D3

GND——GND

連接好以後,就要編寫程序了

#include <Servo.h>   //調用庫函數

Servo servo;      //定義舵機變量名

int servoPin = 9;   //定義舵機接口9,只有9或者10可用

int trigPin =2;    // // trig接2端口

int echoPin = 3;   // echo接3端口

long duration, distance;   //定義變量,用於存取數據

long aver[3];   //定義數組,用於存取數據

void setup() {     

servo.attach(servoPin);   //設定舵機的接口,9或者10接口可利用

pinMode(trigPin, OUTPUT);   //設置爲輸出模式 觸發

pinMode(echoPin, INPUT);   //設置其爲輸入模式  回聲

servo.write(0);    //用於設定舵機旋轉角度的語句,可設定的角度 範圍 是0°到180°。

delay(1000);     //延時1S;

servo.detach();  //使舵機與其接口分離,該接口9可繼續被用作PWM接口。

}

//超聲波測距,子程序

void measure() {  

digitalWrite(trigPin, LOW);//給一個低電平

delayMicroseconds(5);//時間爲5毫秒

digitalWrite(trigPin, HIGH);//給一個高電平

delayMicroseconds(15);//時間爲15毫秒

digitalWrite(trigPin, LOW);//再給一個低電平

duration = pulseIn(echoPin, HIGH);//接收高電平時間

distance = duration *0.034 / 2;//計算距離

}

void loop() {

//將測量數值記錄在數組裏面

for (int i=0;i<=2;i++) {   

measure();               

aver[i]=distance;     

delay(50);           

}

//算三次的平均值

distance=(aver[0]+aver[1]+aver[2])/3;

Serial.println(distance);   //打印

//如果距離小於40,轉動舵機70°

if (distance<40) {

servo.attach(servoPin); //設定舵機的接口,9接口可利用  

delay(1);

servo.write(70);  //轉動舵機70°

delay(5000);  //延時5秒

servo.write(0);    //轉回0°

delay(1000);//延時1秒

servo.detach();      //使舵機與其接口分離,該接口9可繼續被用作PWM接口。

}

}

以上寫有程序及註釋,可根據自己需求修改參數(主要是修改舵機角度以及延時時間—servo.write(70);  //轉動舵機70°       delay(5000);  //延時5秒)

根據上述描述過程,我們就可以實現自動感應扔垃圾的需求。當然,我們可以將超聲波檢測模塊更換成熱釋紅外模塊、觸摸模塊。

感想

通過製作智能垃圾桶模型,我們知道了智能垃圾桶的實現原理,在垃圾桶上安裝一個傳感器模塊,用來檢測外部環境的變化,當外部環境發生變化時,做出反應,以達到智能的效果。

在製作模型時,選用模塊安裝固定還相對容易,但用在現實生活中就相對比較困難,首先,普通垃圾桶沒有蓋子,有蓋子的垃圾桶舵機安裝有問題等,還有就是供電問題,Arduino可採用9V或12V充電器進行外部供電,但會受地方限制;如採用電池供電,由於模塊耗電量大而容易經常更換電池。

思考

智能的真正目的是使人們的生活更加方便,而採用Arduino控制板,能否將產品做出來,解決我們生活當中的痛點,以方便我們的生活嗎?

相關文章