赞
踩
将单片机项目实训——51单片机电子秤(语音播报版)分享出来,如有不足,敬请指出。
【实验图片】
【演示视频】
【项目实训】51单片机电子秤(语音播报版)
目录
1.利用单片机对数字电子秤的各种功能进行控制。
2.数字电子秤能够显示商品的重量、单价,且自动完成商品总价的计算,可通过语音播报商品总价。
3.数字电子秤的测量范围要求达到5KG,测量精度要求达到1g。
1.设计思路
根据设计要求,首先要实现电子秤的称重基本功能,需要通过称重传感器采集到重量信号,经放大电路处理后,由模数转换成数字量,因此每一数字量就对应着一个物体的质量(在一定精度范围内),所以只要将转换成的数质量与物体质量建立映射关系,即可完成称重的要求。而其他的功能则可以通过程序运算来实现,并通过键盘进行控制。
总体结构框架图如下所示:
原理图如下所示:
2.控制器
本系统基于51单片机来实现,因为系统需要控制液晶显示和键盘,不宜采用大规模可编程逻辑器件,如CPLD、FPGA来实现。因为大规模可编程逻辑器件一般是使用状态机方式来实现的,即所解决的问题都是有规则的有限状态转化问题。本系统状态较多,难度较大。另外系统没有其他高标准的要求,最终选择STC89C52RC单片机来实现系统设计,其内部带有8K的程序存储器,可以满足系统设计需求。
3.数据采集部分
(1)传感器。传感器是测量机构最重要的部件,本系统选择的是电阻应变式压力传感器,电阻应变式压力传感器主要有弹性体、电阻应变片电缆线等组成。内部线路采用惠斯通电桥,当弹性体承受载荷产生的变形时,电阻应变片受到拉伸或压缩应变片变形后,它的阻值将会发生变化(增大或减小),从而电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。本系统要求测量范围是0~4.999Kg,考虑到秤台自重、振动和冲击分量,还要避免超重损坏传感器,所以传感器量程必须大于额定称重(4.999Kg),我们选择的称重传感器量程为5Kg,实物如下图所示。
(2)A/D转换器。所谓A/D转换器,是将输入的模拟信号转换成数字信号的器件,本设计采用的是HX711,HX711是24位高精度的A/D转换芯片,是一款专为高精度电子秤设计的,具有两路模拟通道输入,内部集成128倍增益可编程放大器,是一款理想的高精度、低成本的设计方案。
(3)液晶显示部分
由于显示需要,本系统选择1602液晶显示屏。
(4)键盘输入
选用带有16个按键的矩阵键盘,其中0~9数字按键、小数点按键用于输入单价;去皮按键用于仅显示物品净重;删除按键用于删除物品单价;校准+/校准-按键用于调节矫正系数,播报按键用于播报物品总价,矩阵键盘布局如图所示。
(5)语音模块
方案一:采用OTP语音芯片(一次性语音芯片)。一次性的语音芯片在厂家完成烧录后,语音内容就无法进行更改,所以需要事先和厂家沟通好,需要播报的语音内容,例如:
先将自己可能用到的语音,全部写入到语音芯片,然后烧写到语音芯片中。虽然OTP语音芯片不能重复烧写,但低成本的优势也让它占有了一定的市场份额,OTP语音芯片被广泛应用在儿童玩具、汽车电子、医疗器械、安防报警等行业。作者之前用到的一款OTP语音芯片,成本不超过2元,对于固定内容的播报,建议使用该方案,其硬件连接也很简单,比如如下图。
方案二:采用集成的语音模块,最好可以支持支持 FAT 文件系统、操作简单类似U盘,但成本是OTP芯片的几倍。考虑到作者后期作品可能涉及到语音播报,需要为后期作品预留可延续性实验,所以作者选择了该方案,电子秤作品中使用的是JQ8400-FL,只需制作好音频文件,通过类U盘操作拷贝至模块内存,然后“一线串口”发送文件名(数字)即可播报语音内容。
此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232 串口控制可选,为研发提供更多的选择性
(1)主程序
- void main()
- {
- System_Init();
- while(1)
- {
- Get_Weight();
- keycode = MatrixKey_RanksScan();
- if(keycode)
- {
- KeyPress(keycode);
- }
- }
- }
(2)流程图
<1>主程序流程图
<2>键盘扫描程序流程图
(1)PCB-3D视图
(2)实物演示
(1)作品演示视频链接
链接①:哔哩哔哩--------点击播放
链接②:优酷视频--------点击播放
链接③:爱奇艺--------点击播放
链接④:腾讯视频--------点击播放
链接⑤:快手视频--------点击播放
链接⑥:西瓜视频--------点击播放
(2)硬件电路分析视频
链接①:哔哩哔哩--------点击播放
链接②:优酷视频--------点击播放
链接③:爱奇艺--------点击播放
链接④:腾讯视频--------点击播放
链接⑤:快手视频--------点击播放
链接⑥:西瓜视频--------点击播放
(3)软件程序分析视频
链接①:哔哩哔哩--------点击播放
链接②:优酷视频--------点击播放
链接③:爱奇艺--------点击播放
链接④:腾讯视频--------点击播放
链接⑤:快手视频--------点击播放
链接⑥:西瓜视频--------点击播放
(4)原理图下载(PDF版)
(5)源程序下载
(1)如何实现数据的稳定输出?
数据的稳定输出主要依靠两个方面:①硬件电路 和 ②软件程序。
①先分析硬件电路,HX711为24位的AD模块,对微量的变动非常敏感,所以硬件电路部分一定要注意:
这是作者在设计第一版的电路板的时候的硬件链接,设计后完成发现数据输出不是很稳定,而在E+和E-之间连接一个电解电容,数据的稳定性会有所改善,具体实验过程如下如下:
①首先,E+和E-之间不连接电解电容,然后放置200g标准砝码,采用串口打印相关信息,采集20000次数据,重量数据作图得到:
可以看到,数据稳定性不好,数据范围在0.199Kg~0.202Kg,上下起伏为0.003Kg,即3g左右误差。具体统计如下:
重量值(Kg) | 出现次数 | 次数占比 |
0.199 | 689 | 3.445% |
0.2 | 15259 | 76.295% |
0.201 | 4047 | 20.235% |
0.202 | 5 | 0.025% |
也就是正确数据占比为76.295%。(实际上,经过作者实验,获取337143次数据,得到的正确数据仅占比46.647%)
②在E+和E-之间连接电解电容,再次实验,采集20000次数据,数据稳定性如下所示:
可以看到,数据稳定性有所好转,具体统计如下:
重量值 | 出现次数 | 次数比例 |
0.2 | 19998 | 99.990% |
0.201 | 2 | 0.010% |
也就是正确数据占比为99.990%。在E+和E-之间连接电解电容,20000次数据中只有2次数据出现异常,数据误差只是1g,数据准确性达到99.99%,稳定性较好。
综上所述,建议在E+和E-之间连接电解电容,有利于数据稳定性。
②再分析软件程序,对单片机获取到的重量值,可以采用软件滤波的方式,获取到较为稳定的数据,比如多次求值,然后求平均值,当然还有其他很多滤波方式,都可以去实验,本作品中作者未涉及,有兴趣的可以去试着做。
(2)如何保留小数点后两位有效数字?
- float money=0; //总价,单位为元
-
-
- money +=0.005; //用于四舍五入,保留总价有效数值到百分位
-
- //注意这里的技巧:巧妙利用数据类型转换,使得总价数值保留到百分位(一般金额精确到分)
- money = ((float)((unsigned long)(money*100)))/100;
该作品程序中,有这样两部分代码,摘抄这两句代码在一起。具体举例分析,假设money最开始等于22.986元,通过
money +=0.005; //用于四舍五入,保留总价有效数值到百分位
得到money等于22.991元,再通过:
- //注意这里的技巧:巧妙利用数据类型转换,使得总价数值保留到百分位(一般金额精确到分)
- money = ((float)((unsigned long)(money*100)))/100;
注意这里包含两次数据类型转换,第一次money先乘以100得到2299.1,然后强制转换为unsigned long类型数据,得到的就是2299元,然后再将其类型转换为float,得到2299.0元,然后除以100,得到的就是22.99元,得到的结果就是四舍五入后保留小数点后两位的结果。这里巧妙通过加法、两次数据类型转换就可以达到想要的结果,注意这些操作很有技巧性。(该方法是作者现有知识体系下较好的方法,如果有其他方法,欢迎留言评论分享)
微创电子工作室,刺客阿瑞原创
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。