基于单片机的智能电饭煲控制系统的设计


这篇博客主要是用15单片机(和51单片机差不多)做一个智能电饭煲系统。


文章目录

  • 基于单片机的智能电饭煲控制系统的设计
  • 一、整体功能
  • 二、米粒识别
  • 三、FSR400压力传感器
  • 四、主程序
  • 五、需要注意的地方
  • 六、完整工程文件

一、整体功能

本篇博客介绍的系统功能如下:

  • 根据放入电饭煲谷物的类型和数量,计算出进水量和最佳工作温度,并计算出加热时间,最后将谷物类型,重量,和当前系统工作的温度和当前剩余的加热时间显示出来。


如图所示:

    1. 摄像头和K60芯片来对谷物拍照,并将照片以串口通信的形式传送给15单片机;
    1. 15单片机通过FSR400压力传感器计算出加入谷物的重量;
    1. 根据谷物类型和重量,计算出所需加水量,适合的工作温度,和加热时间
    1. DS18B20测试当前温度
    1. LCD1602液晶显示屏将谷物类型,重量,和当前系统工作的温度和当前剩余的加热时间显示出来

实物图如图所示:

  • 本来想只用15单片机做的,15单片机IO口又不够给摄像头用,就用了K60来连接摄像头然后把照片发给15单片机。
  • 根据图片识别米粒,牵扯到AI,咱当时也没这水平,想了个办法,盒子上面扣个洞,摄像头塞进去,这样放进盒子里不同大小的米粒,对应的图片里米粒的大小就不同了,就能直接区分开了。
  • 加热,没有加热电阻丝,留一个IO口给它,IO口高电平表示加热,否则不加热;
  • 水泵,额,也没有,同上,留一个IO口给它,IO口高电平表示加水,否则不加水;

电路连接图和算法流程图如图所示:


二、米粒识别

米粒识别是通过K60芯片,连接摄像头拍照实现的, K60用串口通信发给15单片机;K60比较麻烦,而且这个摄像头拍照和串口发送图片数组,都是例程,没啥可说的。这篇博客主要写15单片机部分的内容;

15单片机串口中断接收图片数组的程序如下:

void serial() interrupt 4
{int p;if(RI){RI=0;p=SBUF; //串口通信接收图片数组,一次接受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的个数}

计算1的个数是因为,我采用的是二值化摄像头,图片只有黑白,1是黑色,0是白色,谷物越大,1的个数越多,因此我们可以通过统计接收到的‘1’的个数,将谷物分为三类;


三、FSR400压力传感器

FSR400压力传感器,是一个压敏电阻,压力和阻值有关,因此我们使用单片机的ADC来读取模拟电压,从而计算出加入谷物重量

init_ADC();
Delay10ms();
while(!(ADC_CONTR & ADC_FLAG));
ch=((ADC_RES*256)&0x300)+(ADC_RESL&0xff);

四、主程序

思路感觉差不多说清楚了,整体程序如下:

#include <STC15.h>
#include "lcd1602.h" //这个文件里放着LCD1602的一些程序,网上都有
#include "UART.h" //这个文件里放着串口驱动的一些程序,网上都有
#include "ADC.h" //这个文件里放着15单片机ADC的驱动程序
#include "DS18b20.h" //这个文件里放着DS15B20的驱动
#define water_pin P23 //水泵控制引脚
#define R_pin P22 //加热电阻控制引脚
int ch=0;
int pwm=0;
int T=0;
void delay(unsigned int i) //延时函数
{while(i--);
}
void Delay2000ms()      //延时函数
{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液晶屏的显示数组Init_UART1(115200); Enable_UART1_INT();LCD_Init();while(!RI);Delay2000ms();  Disable_UART1_INT();  //初始化LCD显示屏和串口,并通过串口通信接收图片数组,在中断函数中计算图片数组中黑色像素点的数量if(ch<45 && ch>0)   pi[0]='1';else if(ch<110 && ch>50)     pi[0]='2';else   pi[0]='3'; //根据黑色像素点数量,将谷物分为三类;init_ADC(); //初始化ADCDelay10ms();while(!(ADC_CONTR & ADC_FLAG));ch=((ADC_RES*256)&0x300)+(ADC_RESL&0xff);//读出ADC的模拟电压(相当于谷物重量)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; //动态调节温度,pwm表示加热电阻工作的占空比else pwm=(40-t)*25; if(T==0) //剩余加热时间为0,停止工作{pi[9]='0';pi[10]=' ';ET0=0;R_pin=0;}         else //否则显示剩余加热时间,倒计时通过定时器中断来实现{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 //串口接收照片数组
{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);}
}


实验结果如图,‘3’表示加入的是第三种类型谷物(最大),259表示谷物重量为259,‘24’表示当前工作温度为24℃,‘53’表示还有53秒的加热时间。

五、需要注意的地方

  • DSB18B20读取温度的过程不能被中断,否则会出错,所以读取温度时,要关闭其他中断;

六、完整工程文件

驱动程序,各个模块的测试程序已打包上传:基于单片机的智能电饭煲控制系统的设计

  • 15.zip 为15单片机的项目文件,就比这篇博客里多了驱动文件
  • K60.zip 是K60芯片读取摄像头照片,并将照片数组以UART的方式发给15单片机
  • 其他的是一些小模块的测试程序

基于单片机的智能电饭煲控制系统的设计(附代码)相关推荐

  1. 基于单片机的智能教室控制系统的设计

     word完整版可点击如下下载>>>>>>>> 基于单片机的智能教室控制系统的设计_c++课程设计题目汇总-硬件开发文档类资源-CSDN下载内容包括详细 ...

  2. 毕业设计之基于单片机的智能窗帘控制系统的设计与实现——更新中...

    基于单片机的智能窗帘控制系统的设计与实现 单片机各模块设计脑图 时钟模块设计 时钟模块设计详细设计 光照感应模块 光照感应模块详细设计

  3. 基于单片机的智能窗帘控制系统的设计与实现

    链接: https://pan.baidu.com/s/1i_TsyfA9rD6jXIcPSTFfcQ 提取码: e6ne

  4. 基于单片机的智能路灯控制系统人体感应灯光控制系统的设计与实现

    功能介绍 以51单片机作为主控系统: LCD1602液晶显示当前时间.年月日.时分秒: 按键看看有设置自动手动模式: 3路红外探头用来感应当前3个区域是否有人: 按键可以设置当前时间.开启和关闭教室灯 ...

  5. 基于微信的智能家居控制系统的设计与实现

    基于微信的智能家居控制系统的设计与实现 目 录 1 绪论 6 1.1 课题研究的背景 6 1.2 智能家居系统的研究现状和发展前景 6 1.3 课题研究的意义 7 1.4 设计的研究内容 8 2 相关 ...

  6. 基于单片机的智能电表-交流电压电流互感器设计

    150[毕设课设]基于单片机的智能电表-交流电压电流互感器设计(电路图+程序+论文) [资源下载]下载地址如下: https://docs.qq.com/doc/DTlRSd01BZXNpRUxl 本 ...

  7. java智能家居_基于JAVA的智能家居控制系统的设计(毕业设计).doc

    基于JAVA的智能家居控制系统的设计(毕业设计) 基于JAVA的智能家居系统的设计--信息控制子系统 PAGE 4 目 录 TOC \o "1-3" \h \z \u HYPERL ...

  8. 【毕设狗】【单片机毕业设计】基于单片机的超市收银机控制系统的设计

    软件安装: Keil:点击下载 Proteus:点击下载 AD:点击下载 Visio:点击下载 设计简介: 本设计是基于单片机的超市收银机控制系统的设计,主要实现以下功能: 实现扫码枪扫码录入功能 实 ...

  9. 基于java智能家居,基于JAVA的智能家居控制系统的设计(信息控制端的设计)-论文二稿...

    基于JAVA的智能家居控制系统的设计(信息控制端的设计)-论文二稿 PINGDINGSHAN UNIVERSITY毕业论文 (设计 )题 目:基于 JAVA 的智能家居控制系 统的设计(信息控制端的设 ...

最新文章

  1. 滴滴千万级ElasticSearch平台发展之路!
  2. makefile中模式规则的引入和介绍------%:%.cpp
  3. 六. 异常处理9.finally块
  4. nyoj--86--找球号(一)(hashset二分)
  5. iOS----------使用cocoapods遇到的问题
  6. Python编程的Turtle 库画出“精美碎花小清新风格树”,速取代码!
  7. 【MyBatis框架】mapper配置文件-关于动态sql
  8. arch linux 树莓派,树莓派上安装配置Archlinux
  9. XidianOJ 1007 易碎的鸟蛋
  10. PDCA循环——快速提升软件质量的必备工具
  11. 利用dem生成横断面数据
  12. html表单变灰,excel菜单灰色 excel工具栏突然变灰了 怎么办
  13. (二)泛函分析(江泽坚)习题解答
  14. 2022-2028年中国全屋定制行业发展动态及投资前景分析报告
  15. [转载]看我花式绕过校园网计费认证
  16. JAVA服务器获取手机设备的IP地址
  17. RAKsmart云服务器全场7折
  18. 2022.3月份工作记录【日记】
  19. 关于工作中的相关问题的看法和建议 (一)JAVA小组的调整问题
  20. 独家思维导图!让你秒懂李宏毅2020机器学习(二)—— Classification分类

热门文章

  1. 全国省市县四级坐标地址库
  2. PHP搭建织梦网站,dedeCMS+PHPStudy帮助新手实现在本地搭建织梦网站
  3. 使用腾讯移动应用安全(原乐固)加固安卓APK
  4. 【物联网毕设】基于arduino与树莓派的智能鱼缸【一】
  5. 不懂商业就别谈数据 --- 车品觉
  6. [Swagger] Asciidoc 配置静态章节
  7. php之——php输出内容的三种方式
  8. Windows Key 烧录
  9. 波士顿动力真的无可企及吗?一步步剖析四足机器人技术(二)
  10. 分别使用BP/RBF/GRNN神经网络识别航迹异常matlab仿真