付偉韜
垃圾桶是日常生活中的常用物品。傳統(tǒng)的垃圾桶開蓋時均需采用手動或腳踩方式實現(xiàn),既不衛(wèi)生又不方便。同時,隨著垃圾桶中垃圾的增多,細菌在其中滋生,如果不及時清理,會散發(fā)臭氣和有害物質(zhì),影響人體的健康。
我設計了一種智能垃圾桶,它無需手或腳接觸垃圾桶,只需讓手靠近垃圾桶頂部,垃圾桶的蓋子就會自動打開,投入垃圾后桶蓋自動關閉。當垃圾桶快裝滿時,會發(fā)出聲音和燈光提醒。
一、工作原理
1.自動感應開蓋
人體感應模塊可安裝在垃圾桶頂部,便于用戶接近時受到感應。觸發(fā)距離建議設在15cm左右,既能保證及時打開蓋子,又能防止誤觸發(fā)。開蓋動作可采用伺服電機驅動,便于根據(jù)桶蓋的開合角度設定電機的定位角度值。
2.垃圾桶裝滿提示
當垃圾將要裝滿時,超聲波信號被遮擋,傳感器測得的距離減小,系統(tǒng)計算的距離小于設定的閥值時,系統(tǒng)將進行警示,提醒及時處理垃圾。測距模塊可安裝在垃圾桶內(nèi)側頂部,并根據(jù)垃圾桶的口徑設定閥值??赏ㄟ^同時點亮LED燈和使蜂鳴器發(fā)聲進行警示。
智能垃圾桶的系統(tǒng)結構如下圖。
二、線路連接
所需的元器件有Arduino UNO R3開發(fā)板、紅外避障模塊、伺服電機SG90、測距模塊HC-SR04、LED燈(紅、綠)、蜂鳴器、9V電池、面包板、10K電阻、連接線。
把以上各組件分別和垃圾桶組裝在一起,通過導線連接各組件,輸入代碼程序測試各部位動作和信號。最終測試成功,同時發(fā)出聲、光提示信號。
三、編寫代碼
void openDoor() //檢測開門信號
{int SensorState =digitalRead(SensorPin); //讀取2引腳的電平
if (SensorState == 1){
digitalWrite(greenledPin,LOW);
myservo.write(180); //關門
openCheck=0;
}
else{ if (openCheck==1){
digitalWrite(greenledPin,HIGH);
myservo.write(90); //開門 }
else openCheck=1; //保存第一次檢測結果
} delay(2000); //防止開蓋誤判延時2秒
}
void fullCheck() //檢測桶滿信號
{ digitalWrite(TrigPin, HIGH); // 向TRIG接口發(fā)送高電平
delayMicroseconds(15); //延時15微秒
digitalWrite(TrigPin, LOW); // 向TRIG接口發(fā)送低電平
int pulseTime = pulseIn(EchoPin, HIGH); // 讀出脈沖時間,單位為微秒
distance= pulseTime*0.17; // 將脈沖時間轉化為距離,單位為毫米,聲速為340m/s
if (distance {digitalWrite(redledPin,HIGH); tone(tonePin,523);delay(200); tone(tonePin,578);delay(200); tone(tonePin,659);delay(200); noTone(tonePin); } else // 如果距離大于閥值警示燈熄滅,蜂鳴器不發(fā)聲 { digitalWrite(redledPin,LOW); noTone(tonePin); } 四、改進 智能垃圾桶功能基本實現(xiàn),但在測試過程中還存在如下問題。 1. 當有人或物體偶然從垃圾桶前經(jīng)過,可能會導致桶蓋誤開??稍谙到y(tǒng)第一次檢測到開門信號時,不立即開桶蓋,而是延遲2秒鐘后再次檢測,如果又接收到開門信號,才觸發(fā)伺服電機動作,打開桶蓋。這也要求手在感應器前至少停留2秒鐘才有效。 2. 消除伺服電機的抖動。在測試過程中,需使用USB線連接電腦、上傳代碼,發(fā)現(xiàn)伺服電機在固定角位有微小的顫動。這是由于伺服電機較敏感,在驅動伺服電機轉向時接入負載的變化會引起電壓的微小變化,導致伺服電機抖動。所以,可改用獨立的電源為伺服電機供電。 總之,Arduino電子互動平臺擁有使用簡單、功能多樣、價格低廉等優(yōu)點,每個愛上它的人都可以插上想象的翅膀,創(chuàng)造出一個個屬于自己的智能創(chuàng)意作品。