1 簡介
Hi,大家好,這里是丹成學(xué)長,今天向大家介紹一個 單片機項目
畢業(yè)設(shè)計 stm32智能語音垃圾分類系統(tǒng)(項目開源)
大家可用于 課程設(shè)計 或 畢業(yè)設(shè)計
?? 項目分享:
https://gitee.com/sinonfin/sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-817828.html
2 緒論
2.1 課題背景與目的
學(xué)長設(shè)計的系統(tǒng)主要使用 stm32單片機為基礎(chǔ)設(shè)計并開發(fā)一個智能垃圾桶系統(tǒng)。該系統(tǒng)實現(xiàn)智能開蓋, 垃圾裝滿語音報警的功能。設(shè)計主要以單片機為控制中心,通過紅外傳感器檢測探測范圍內(nèi)有人與否, 如果有, 經(jīng)過單片機控制啟動步進電機, 打開桶蓋, 再經(jīng)過延時設(shè)定時刻后, 自動關(guān)閉垃圾桶蓋。 步進電機通過線的正反纏繞實現(xiàn)桶蓋的開啟與關(guān)閉。 通過紅外對管模塊, 檢測垃圾桶內(nèi)的垃圾高度超過限定高度與否, 如果裝滿, 單片機控制語音播放芯片, 喇叭播放語音提示人們處理垃圾。
3 系統(tǒng)設(shè)計
這次學(xué)長設(shè)計的主要使用 stm32單片機為基礎(chǔ)設(shè)計并開發(fā)一個智能垃圾桶系統(tǒng)。該系統(tǒng)實現(xiàn)智能開蓋, 垃圾裝滿語音報警的功能。
設(shè)計主要以單片機為控制中心,通過紅外傳感器檢測探測范圍內(nèi)有人與否, 如果有, 經(jīng)過單片機控制啟動步進電機, 打開桶蓋, 再經(jīng)過延時設(shè)定時刻后, 自動關(guān)閉垃圾桶蓋。 步進電機通過線的正反纏繞實現(xiàn)桶蓋的開啟與關(guān)閉。 通過紅外對管模塊, 檢測垃圾桶內(nèi)的垃圾高度超過限定高度與否, 如果裝滿, 單片機控制語音播放芯片, 喇叭播放語音提示人們處理垃圾。
主要內(nèi)容包括:
-
- 人體檢測功能
-
- 步進電機驅(qū)動電路的設(shè)計
-
- 垃圾高度檢測功能
-
- 語音播放報警功能
3.1 系統(tǒng)架構(gòu)
此次語音識別垃圾箱控制系統(tǒng)所要實現(xiàn)的功能包括:語音命令識別功能、垃圾箱自動開關(guān)蓋功能、語音播報功能、狀態(tài)指示功能等。實現(xiàn)以上這些功能可以使用戶方便投放垃圾,將兩者初步隔離,且防止垃圾箱內(nèi)細菌滋生。設(shè)計使用STM32F103C8T6單片機為核心元件。下為系統(tǒng)整體框圖。
3.2 硬件部分
3.2.1 傳感器模塊
常用的用于檢測判斷移動物體的傳感器有熱釋電傳感器、 紅外對管傳感器和超聲波傳感器。 熱釋電傳感器廣泛應(yīng)用人體檢測, 比如樓道感應(yīng)燈, 但對人體的移動方向有要求, 平行于傳感器方向移動靈敏度最高。和熱釋電紅外傳感器對比,紅外對管傳感器能夠檢測的最小距離相對小, 反應(yīng)靈敏, 且不易受環(huán)境光干擾而產(chǎn)生誤輸出。 而超聲波測距模塊價格較高且感應(yīng)角度不大于 15 度, 使用條件非常有限。
3.2.2 語音模塊
語音模塊常用 ISD 系列產(chǎn)品, 比如 ISD1820 和 ISD4004。 ISD4004 模塊需要擴展很多外圍電路并需要使用額外單片機進行語音錄制存儲, 增加了電路的復(fù)雜度。 ISD1820 是美國 ISD 公司推出一種單片 8~20 秒語音錄制兼播放芯片, 它的基本結(jié)構(gòu)與 1110、 1420 系列完全相同, 只能錄放一段語音。
3.2.3 電機及其驅(qū)動模塊
由于該系統(tǒng)需要控制垃圾桶的開蓋及開蓋角度, 直流電機只能通過通電時間和電流極性來控制其工作, 不適合搭配單片機使用, 而步進電機可以很簡單精確地控制其輸出軸旋轉(zhuǎn)角度以及方向。 步進電機可分反應(yīng)式、 永磁式和混合式三種, 永磁式步進電機輸出力矩足夠本設(shè)計所需且動態(tài)性能較好。 所以本設(shè)計使用反應(yīng)式來驅(qū)動垃圾桶開蓋。
3.2.4 穩(wěn)壓模塊
中單片機所工作電壓為 5V, 其他模塊也均可以在 5V 電壓下運行,即需要將 7.5V 直流電源降壓為 5V 輸入電壓。 由于本次設(shè)計供電電源為 7.5V,LM78 系列壓差不能小于 3V, 而且經(jīng)查資料發(fā)現(xiàn), AMS1117-5.0 型號穩(wěn)壓芯片與LM7805 相比在發(fā)熱量上相比有很好的降低, 所以本次設(shè)計選用 AMS1117-5.0 型號穩(wěn)壓模塊。
3.3 軟件部分
程序工作流程如下: 紅外傳感器檢測到有人時, 單片機控制步進電機打開桶蓋, 傳感器模塊感應(yīng)到人離開后, 經(jīng)延時后垃圾箱蓋將自動關(guān)閉。 當(dāng)紅外對管傳感器檢測到垃圾高度超過設(shè)定時單片機控制語音模塊播放語音報警, 當(dāng)垃圾被清理后停止報警, 也可手動關(guān)閉。
3.3.1 自動翻蓋子程序設(shè)計
學(xué)長使用的是以單雙八拍方式工作的五線四相步進電機, 自動翻蓋的控制信號輸入為檢測人體距離的紅外對管傳感器, 輸出信號至步進電機驅(qū)動板, 由驅(qū)動板直接控制步進電機。
若有人扔垃圾則 1 秒防檢測后正轉(zhuǎn)開蓋, 人離開后延時3 秒, 反方向旋轉(zhuǎn)相同角度關(guān)蓋, 通過 delay() 子程序改變步進電機的旋轉(zhuǎn)速度, 通過設(shè)置 for 循環(huán)的次數(shù)來設(shè)置步進電機旋轉(zhuǎn)的角度, 從而使桶蓋開合合適的角度。 自動翻蓋程序流程圖如上圖所示, 紅外 1 傳感器指檢測是否有人扔垃圾的紅外對管傳感器。
3.4 實現(xiàn)效果
無人狀態(tài)下
當(dāng)周圍有人出現(xiàn)后,自動打開垃圾桶
3.5 部分相關(guān)代碼
//功能: 測試電機驅(qū)動功能和電機連線是否正確, 左電機反轉(zhuǎn), 右電機正轉(zhuǎn), 電機轉(zhuǎn)速
由小到大。
int INA = 4; //電機 A 正反轉(zhuǎn)控制端
int PWMA = 5; //電機 A 調(diào)速端
int INB = 7; //電機 B 正反轉(zhuǎn)控制端
int PWMB = 6; //電機 B 調(diào)速端
void setup(){
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT); //配置電機輸出 IO 口為輸出
}
void loop(){
int value;
for(value = 20 ; value <= 255;value+=2){ //循環(huán)每次速度增加 2 最大到 255
motosp(-value,value);//電機速度賦值, 左電機負值為反轉(zhuǎn), 右電機正轉(zhuǎn)。
delay(50);
}
}
void motosp(int sp1,int sp2)//聲明電機速度控制函數(shù)。 括號內(nèi)定義的變量分別為左右電機
速
{
if(sp1>0) {
digitalWrite(INA, HIGH);
}
else
{
digitalWrite(INA, LOW);
}
if(sp2>0)
{
digitalWrite(INB, HIGH);
}
else
{
digitalWrite(INB, LOW);
}
analogWrite(PWMA,abs (sp1));
analogWrite(PWMB,abs (sp2));
}
//紅外感應(yīng)模塊:
int Sensor = 2;
int ina = 13;
void setup() {
pinMode(ina, OUTPUT); //13 引腳定義為輸出
Serial.begin(9600); //設(shè)置下載程序的串口的波特率為 9600
pinMode(Sensor, INPUT); //2 引腳定義為輸入
}
void loop() {
int SensorState = digitalRead(Sensor);//讀取 2 引腳的電平
while(SensorState == 1){
SensorState = digitalRead(Sensor); //2 引腳為高電平時, 設(shè)置 13 引腳為高
digitalWrite(ina,HIGH);
delay(1000); //延時 1000ms
}
while(SensorState == 0){ //當(dāng) 2 引腳為低電平時, 設(shè)置 13 引腳為低
SensorState = digitalRead(Sensor);
digitalWrite(ina,LOW);
}
delay(100); //延時 100ms
}
// 避障模塊:
int Sensor1 = 2;
int Sensor2 = 4 ;
int ina = 13;
int inb = 12;
void setup() {
pinMode(ina, OUTPUT); //定義輸入、 輸出引腳
pinMode(inb, OUTPUT);
Serial.begin(9600);
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
}
void loop() {
int SensorState1 = digitalRead(Sensor1);//讀取數(shù)據(jù)
int SensorState2 = digitalRead(Sensor2);
boolean Write = true; //定義布爾變量
boolean Black = true;
if(SensorState1 == 1){
Write = false;
}
if(SensorState2 == 1){
Black = false;
}
if(Write && Black){ //當(dāng)量輸入引腳同時為高時, 兩輸出引腳為高
digitalWrite(ina,HIGH);
digitalWrite(inb,HIGH);
delay(1000);
}
digitalWrite(ina,LOW); //復(fù)位
digitalWrite(inb,LOW);
delay(100);
}
4 最后
?? 項目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-817828.html
https://gitee.com/sinonfin/sharing
到了這里,關(guān)于畢設(shè)開題分享 stm32智能語音垃圾分類系統(tǒng)(項目開源)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!