智能垃圾桶+蓝牙功能(定时器2)
智能垃圾桶+蓝牙功能(定时器2)
主控:
STC89C52RC单片机
所需模块及材料:
蓝牙模块、超声波模块、舵机、桌面垃圾桶、杜邦线若干、手机(连蓝牙用)
接线:
程序:
跟之前的垃圾桶代码差不多,但之前的超声波使用了定时器1,舵机使用定时器0,因为这次多了蓝牙模块,而蓝牙是通过串口与单片机通信的,要用到定时器1作波特率发生器,所以这次超声波使用了平时少用的定时器2,定时器1留给蓝牙
蓝牙——定时器1,产生波特率
超声波——定时器2,计算时间
舵机——定时器0,PWM控制
程序文件
1.main.c:主函数中调用定时器0、定时器2和串口的初始化函数,循环内判断距离从而开盖关盖
2.Timer0.c:定时器0初始化函数,中断处理中PWM控制舵机旋转
3.Delay.c:延时函数
4.key.c:按键检测函数,也可用按键开盖
5.Timer2.c:定时器2初始化函数,不开启中断,用于超声波测距定时
6.Usart.c:串口初始化函数,发送一个字符、发送一个字符串函数,串口中断中判断指令“ope”、“clo”从而开盖或关盖
7.HC-SR04.c:超声波起始信号,测距函数,开盖或关盖的函数
下面是对于上次垃圾桶进行修改的代码,其他部分不变
Timer2.c:增加定时器2,可通过STC-ISP工具生成配置函数,省去看手册的时间,将设置定时初值和定时重载值置0,同时关闭计时,到超声波发波时才开始计时
#include <REGX52.H>void Timer2Init(void) //1毫秒@11.0592MHz
{T2MOD = 0; //初始化模式寄存器T2CON = 0; //初始化控制寄存器TL2 = 0; //设置定时初值TH2 = 0; //设置定时初值RCAP2L = 0; //设置定时重载值RCAP2H = 0; //设置定时重载值TR2 = 0; //定时器2开始计时
}
HC-SR04.c:超声波模块,主要是测距函数中开启定时器改为TR2 = 1,计数器位也要改为TH2和TL2
/*** @brief超声波测距* @param无* @retval返回测到的距离,单位cm*/
double ultrasonic()
{double time;double distance;Trig_Start();while(Echo == 0);TR2 = 1;while(Echo == 1);TR2 = 0;time = (TH2*256+TL2)*1.085;distance = time*0.017;TH2 = 0;TL2 = 0;return distance;
}
Usart.c:串口中断处理,根据串口接收到的字符串修改compare的值,从而开盖和关盖
/*** @brief串口中断处理函数,用于蓝牙* @param无* @retval无*/
void Uart_Rountine() interrupt 4
{static unsigned int p = 0;if(RI){RI = 0;rec[p] = SBUF;Usart_SendChar(rec[p]);p++;if(p >= SIZE){p = 0;}if(strstr(rec,"ope")){compare = 3; //舵机旋转90度,开盖p = 0;memset(rec,'\0',SIZE);}if(strstr(rec,"clo")){compare = 1; //舵机旋转0度,关盖p = 0;memset(rec,'\0',SIZE);}}
}
main.c:
主函数中记得要将所有定时器和串口的初始化函数调用进来
开盖条件跟之前不太一样,之前距离小于20cm则开盖,大于20cm都关盖,在超声波没检测到障碍物靠近时,距离大于20cm,是会一直执行CloseDusbin()关盖函数的,compare 一直等于1,因为这次加入了蓝牙功能,如果还是按上次的判断条件,串口收到“open”开盖指令后,CPU去执行中断处理函数,compare会等于3,但又会马上回来执行CloseDusbin()关盖函数,compare又会被置1,导致蓝牙无法开盖,或者开盖一瞬间又关盖了
按下面修改判断条件后,只有检测到小于20cm的距离垃圾桶开盖,因为开盖函数OpenDusbin()里有2秒的延时,所以2秒后就会关盖,此时用蓝牙也能通过“open”和“close”指令控制开关盖,超声波和蓝牙互不影响
void main()
{double dis;Timer0Init();Timer2Init();Uart_Init();while(1){dis = ultrasonic();if(dis < 20){OpenDusbin(); //开盖CloseDusbin(); //2秒后关盖}KeyNumber(); //按键检测开盖}
}
智能垃圾桶+蓝牙功能(定时器2)相关推荐
- 基于物联网的智能垃圾桶设计
前言 目前我国各城市包括首都正在深入开展争创国家卫生城市活动,这是全国爱国卫生运动委员会办公室评选命名的国家级卫生优秀城市的最高荣誉,是一个城市综合素质的重要标志.沈阳市正在深入开展创建国家卫生城市和 ...
- 智能会议系统(24)---linphone-去掉蓝牙功能
linphone-去掉蓝牙功能 说明 突然有一天, 我发现了linphone的蓝牙耳机功能, 但是由于功能进度的需要,打算将蓝牙去掉. 步骤 1. 线去掉核心. 主要是BluetoothManager ...
- 智能手环功能模块设计_基于51单片机的智能手环蓝牙模块设计
龙源期刊网 http://www.qikan.com.cn 基于 51 单片机的智能手环蓝牙模块设计 作者:王烈进 王游司 陈洪燕 孙超 卢宇 来源:<电脑知识与技术> 2018 年第 2 ...
- 基于视觉与板球系统的智能垃圾桶
沈阳航空航天大学 创新能力训练报告 2019.12.29 题目 基于视觉与板球系统的智能垃圾桶设计 班 级 学 号 学 生 姓 名 刘一博 指 导 教 师 基于视觉与板球系统的智能垃圾桶 刘一博 沈阳 ...
- stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>.<基于STM32的智能垃圾桶之语音识别>和<基于STM32 ...
- 单片机的智能垃圾桶设计
一.硬件方案 本设计主要是利用单片机设计并制作一套智能垃圾箱.要求以单片机为控制核心,通过红外传感器检测是否有人扔垃圾,并自动打开垃圾箱盖,扔完垃圾后再自动关闭.电路主要由51单片机+独立按键+电机驱 ...
- 基于STM32F103c8t6的智能垃圾桶项目
基于STM32F103c8t6的智能垃圾桶项目 写在前头 软件配置 硬件部分 1. 主控芯片 2. HC-SR04超声波模块 模块简介 模块参数 工作原理 GPIO配置 3. SG90舵机 模块简介 ...
- 单片机设计_语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)
想要更多项目私wo!!! 一.电路设计 离线语音识别识别垃圾种类并且垃圾桶自动翻盖:说出唤醒词"垃圾桶"后,再说一句垃圾名称,语音识别模块端识别到相应关键词,便会将 ...
- 基于51单片机的红外感应的智能垃圾桶设计
目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1本文研究背景和意义 1 1.2智能垃圾桶控制系统发展状况 1 1.2.1国外发展状况 1 1.2.2国内发展状况 2 1.3本课题应 ...
最新文章
- Solaris的md5sum和sha1sum命令
- 2021-01-26 粒子群优化算法(PSO)以及Matlab实现
- byte数组存的是什么_结构体内存对齐是什么鬼?
- web控件开发系列(四) 自定义控件属性(下)
- HbuliderX + vue项目(初始化创建) - 准备篇
- UNICODE与ASCII码的关系(MTK)
- 基于proteus的一个微程序CPU
- FileUtils常用方法 - commons-io常用工具类
- 用JavaScript写的U校园自动答题浏览器分析
- 全国计算机二级C语言考试难不难?应该怎么备考?
- iTextSharp 添加表格
- rand和randc有什么区别
- ICRA 2020轨迹预测竞赛冠军的方法总结
- HTML实现两行两列单元表
- 使用Jetpack Compose竟能做出如此漂亮的倒计时APP
- java写 狐狸找兔子_狐狸找兔 算法分析
- 差异表达分析(DEG)时 row.names'里不能有重复的名字 的解决方案
- Linux命令行与shell脚本编程大全第三版 学习笔记
- 基于LLVM编译器的IDA自动结构体分析插件
- 从服务业突然决定转行进入IT界