基于单片机的智能电饭煲控制系统的设计(附代码)
基于單片機(jī)的智能電飯煲控制系統(tǒng)的設(shè)計
這篇博客主要是用15單片機(jī)(和51單片機(jī)差不多)做一個智能電飯煲系統(tǒng)。
文章目錄
- 基于單片機(jī)的智能電飯煲控制系統(tǒng)的設(shè)計
- 一、整體功能
- 二、米粒識別
- 三、FSR400壓力傳感器
- 四、主程序
- 五、需要注意的地方
- 六、完整工程文件
一、整體功能
本篇博客介紹的系統(tǒng)功能如下:
- 根據(jù)放入電飯煲谷物的類型和數(shù)量,計算出進(jìn)水量和最佳工作溫度,并計算出加熱時間,最后將谷物類型,重量,和當(dāng)前系統(tǒng)工作的溫度和當(dāng)前剩余的加熱時間顯示出來。
 如圖所示:
- 攝像頭和K60芯片來對谷物拍照,并將照片以串口通信的形式傳送給15單片機(jī);
- 15單片機(jī)通過FSR400壓力傳感器計算出加入谷物的重量;
- 根據(jù)谷物類型和重量,計算出所需加水量,適合的工作溫度,和加熱時間
- DS18B20測試當(dāng)前溫度
- LCD1602液晶顯示屏將谷物類型,重量,和當(dāng)前系統(tǒng)工作的溫度和當(dāng)前剩余的加熱時間顯示出來
實物圖如圖所示:
- 本來想只用15單片機(jī)做的,15單片機(jī)IO口又不夠給攝像頭用,就用了K60來連接攝像頭然后把照片發(fā)給15單片機(jī)。
- 根據(jù)圖片識別米粒,牽扯到AI,咱當(dāng)時也沒這水平,想了個辦法,盒子上面扣個洞,攝像頭塞進(jìn)去,這樣放進(jìn)盒子里不同大小的米粒,對應(yīng)的圖片里米粒的大小就不同了,就能直接區(qū)分開了。
- 加熱,沒有加熱電阻絲,留一個IO口給它,IO口高電平表示加熱,否則不加熱;
- 水泵,額,也沒有,同上,留一個IO口給它,IO口高電平表示加水,否則不加水;
電路連接圖和算法流程圖如圖所示:
 
 
二、米粒識別
米粒識別是通過K60芯片,連接攝像頭拍照實現(xiàn)的, K60用串口通信發(fā)給15單片機(jī);K60比較麻煩,而且這個攝像頭拍照和串口發(fā)送圖片數(shù)組,都是例程,沒啥可說的。這篇博客主要寫15單片機(jī)部分的內(nèi)容;
15單片機(jī)串口中斷接收圖片數(shù)組的程序如下:
void serial() interrupt 4 {int p;if(RI){RI=0;p=SBUF; //串口通信接收圖片數(shù)組,一次接受8個像素點ch=ch+(p&0x01); ch=ch+((p>>1)&0x01);ch=ch+((p>>2)&0x01);ch=ch+((p>>3)&0x01);ch=ch+((p>>4)&0x01);ch=ch+((p>>5)&0x01);ch=ch+((p>>6)&0x01);ch=ch+((p>>7)&0x01); //ch為圖片中1的個數(shù)}計算1的個數(shù)是因為,我采用的是二值化攝像頭,圖片只有黑白,1是黑色,0是白色,谷物越大,1的個數(shù)越多,因此我們可以通過統(tǒng)計接收到的‘1’的個數(shù),將谷物分為三類;
三、FSR400壓力傳感器
FSR400壓力傳感器,是一個壓敏電阻,壓力和阻值有關(guān),因此我們使用單片機(jī)的ADC來讀取模擬電壓,從而計算出加入谷物重量
init_ADC(); Delay10ms(); while(!(ADC_CONTR & ADC_FLAG)); ch=((ADC_RES*256)&0x300)+(ADC_RESL&0xff);四、主程序
思路感覺差不多說清楚了,整體程序如下:
#include <STC15.h> #include "lcd1602.h" //這個文件里放著LCD1602的一些程序,網(wǎng)上都有 #include "UART.h" //這個文件里放著串口驅(qū)動的一些程序,網(wǎng)上都有 #include "ADC.h" //這個文件里放著15單片機(jī)ADC的驅(qū)動程序 #include "DS18b20.h" //這個文件里放著DS15B20的驅(qū)動 #define water_pin P23 //水泵控制引腳 #define R_pin P22 //加熱電阻控制引腳 int ch=0; int pwm=0; int T=0; void delay(unsigned int i) //延時函數(shù) {while(i--); } void Delay2000ms() //延時函數(shù) {unsigned char i, j, k;i = 85;j = 12;k = 155;do{do{while (--k);} while (--j);} while (--i); } void Timer0Init(void) //定時器中斷初始化 {AUXR |= 0x80; //?????1T??TMOD &= 0xF0; //???????TL0 = 0xCD; //??????TH0 = 0xD4; //??????TF0 = 0; //??TF0??TR0 = 1; //???0????EA=1; } void main() {int water=0;float f=0.0;int t=0;unsigned char pi[11]; //LCD1602液晶屏的顯示數(shù)組Init_UART1(115200); Enable_UART1_INT();LCD_Init();while(!RI);Delay2000ms(); Disable_UART1_INT(); //初始化LCD顯示屏和串口,并通過串口通信接收圖片數(shù)組,在中斷函數(shù)中計算圖片數(shù)組中黑色像素點的數(shù)量if(ch<45 && ch>0) pi[0]='1';else if(ch<110 && ch>50) pi[0]='2';else pi[0]='3'; //根據(jù)黑色像素點數(shù)量,將谷物分為三類;init_ADC(); //初始化ADCDelay10ms();while(!(ADC_CONTR & ADC_FLAG));ch=((ADC_RES*256)&0x300)+(ADC_RESL&0xff);//讀出ADC的模擬電壓(相當(dāng)于谷物重量)pi[1]=' ';pi[2]=ch/100+'0';pi[3]=ch%100/10+'0';pi[4]=ch%10+'0';pi[5]=' '; // 將重量顯示在LCD上T=21*ch/100+pi[0]-'0'; //計算加熱時間water=ch/100+pi[0]-'0'; //加水量water_pin=1; //加水while(water--); water_pin=0; //停止加水Timer0Init(); while(1){ET0=0;f=Read_Temperature();//讀取DS18B20溫度傳感器的溫度ET0=1;t=(int)f;t=t*10;pi[6]=t%1000/100+'0'; //顯示溫度pi[7]=t%100/10+'0';pi[8]=' ';if(t>40) pwm=0; //動態(tài)調(diào)節(jié)溫度,pwm表示加熱電阻工作的占空比else pwm=(40-t)*25; if(T==0) //剩余加熱時間為0,停止工作{pi[9]='0';pi[10]=' ';ET0=0;R_pin=0;} else //否則顯示剩余加熱時間,倒計時通過定時器中斷來實現(xiàn){pi[9]=T/10+'0';pi[10]=T%10+'0';}pi[11]=' ';LCD_Display(0,0,pi);} } void T0Function() interrupt 1 //定時器中斷 {static m=0;if(m<pwm) {m++;R_pin=1;}else if(m<1000){m++;R_pin=0;}else{T--;m=0;} } void serial() interrupt 4 //串口接收照片數(shù)組 {int p;if(RI){RI=0;p=SBUF;ch=ch+(p&0x01);ch=ch+((p>>1)&0x01);ch=ch+((p>>2)&0x01);ch=ch+((p>>3)&0x01);ch=ch+((p>>4)&0x01);ch=ch+((p>>5)&0x01);ch=ch+((p>>6)&0x01);ch=ch+((p>>7)&0x01);} }
 實驗結(jié)果如圖,‘3’表示加入的是第三種類型谷物(最大),259表示谷物重量為259,‘24’表示當(dāng)前工作溫度為24℃,‘53’表示還有53秒的加熱時間。
五、需要注意的地方
- DSB18B20讀取溫度的過程不能被中斷,否則會出錯,所以讀取溫度時,要關(guān)閉其他中斷;
六、完整工程文件
驅(qū)動程序,各個模塊的測試程序已打包上傳:基于單片機(jī)的智能電飯煲控制系統(tǒng)的設(shè)計
 
- 15.zip 為15單片機(jī)的項目文件,就比這篇博客里多了驅(qū)動文件
- K60.zip 是K60芯片讀取攝像頭照片,并將照片數(shù)組以UART的方式發(fā)給15單片機(jī)
- 其他的是一些小模塊的測試程序
總結(jié)
以上是生活随笔為你收集整理的基于单片机的智能电饭煲控制系统的设计(附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        