背景:
隨着人們的生活水平不斷提高,家居生活現代化是個必然的趨勢。智能垃圾桶很好的解決了無需接觸垃圾桶就可投放垃圾,防止交叉感染等問題。減少生活當中各種病菌交叉感染的幾率;無異味溢出。但其存在需要經常更換電池,電池壽命問題。
目的:
第一:通過這篇文章,大致能了解目前市面上智能垃圾桶的工作原理。
第二:當使用電池供電,可能對於此產品來講,功耗會偏大。采用外部供電方式,是否能滿足需求。
第三:設計一個產品模型可能不需要考慮很多因素,但設計一款產品考慮因素還有哪些,討論一下。
實驗材料
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控制板,能否將產品做出來,解決我們生活當中的痛點,以方便我們的生活嗎?