实践项目2-自动计价电子秤

自动计价电子秤

一、功能说明

基于AVR单片机设计一自动计价电子秤。根据输入的价格以及检测的重量自动计算总价并打印(串口模拟)。

二、具体要求

1、开机后实时检测重量并显示;

2、通过按键输入并显示价格,具有修改功能;

3、确认后自动计算并显示总价;

4、实时显示单价、重量和总价信息;

5、按下“打印”键后,通过串口发送单价、重量和总价信息;

6、,具有故障检测报警功能;

三、自动计价电子秤报告

摘要:自动计价电子秤使用AVR系列的ATmega16单片机作为主控芯片,通过采集压力传感器MPX4115产生的模拟信号,并将其通过其内部的ADC资源将模拟信号转换成对应的数字信号,并将其显示在八位共阳数码管上。同时设置了四个按键作为系统的单价加、减、计算总价、以及串口显示的功能。我们不仅可以通过数码管,也可以通过串口助手实时的显示出对应的单价、重量、总价的数据。

关键词:ATmega16  压力传感器  ADC  串口

1 设计要求   

该自动报价系统要求能够实时的显示出设置的单价、称重的重量,并且在确认好之后计算总价并显示出来。首先该系统需要加入压力传感器得出重量数据,然后通过按键系统能够改变对应物品的单价,这时显示模块就会实时显示物品的重量和单价,待确认之后,按下确认按键计算出对应物品的总价。最后一个按键是串口打印的功能按键,可以通过串口向外发送单价、重量、总价信息。还有,当出现故障的时候,可以进行故障检测的报警提示。

   

2 总体设计

2.1 系统组成及工作原理

根据题目中的要求,系统共分为单片机处理模块、重量检测模块、按键控制模块、数码管显示模块、串口发送模块。系统的总体框图如图2.1所示。

图2.1 系统总体框图

  (1)、单片机处理模块:单片机处理模块负责将重力传感器传递的模拟信号用其内部的ADC通道进行AD转换,同时检测按键数据进行相应的逻辑运算,最后将数据通过串口和数码管显示出来。

  (2)、质量检测模块:给单片机的ADC通道传递所称物理重量的模拟信号,以便其进行AD转换。

  (3)、按键控制模块:总共四个按键,牵连个按键对物品的单价进行加或减,第三个按键负责计算总价,第四个按键是串口打印按键,将处理好的重量、单价、总价通过串口发送出去。

  (4)、串口发送模块:待串口配置好以及数据处理完之后,将对应的数据发送出去,并可以通过串口助手显示出来。

  (5)、数码管显示模块:负责显示物品的重量和单价,待计算总价按钮按下之后,显示物品的总价。

2.2 称重传感器测量原理

       称重传感器是用来将重量信号或压力信号转换成电量信号的转换装置。称重传感器采用金属电阻应变计组成测量桥路,利用金属电阻丝在张力作用下伸长变细,电阻增加的原理,即金属电阻随所受应变而变化的效应而制成的(应变,就是尺寸的变化)。称重传感器的构造原理金属电阻具有阻碍电流流动的性质,即具有电阻,其阻值依金属的种类而异。同一种金属丝,一般来讲,越是细长,其电阻值就越大。当金属电阻丝受外力作用而伸缩时,其电阻值就会在某一范围内增减。因此,将金属丝(或膜)紧贴在被测物体上,而且这种丝或膜又很细或很薄,粘贴又十分完善,那么,当被测物体受外力而伸缩时,金属电阻丝(膜)也会按比例伸缩,其阻值也会相应变化。称重传感器就是将金属电阻应变计粘贴在金属称重梁上进行测量重量信号的。

3 硬件设计

3.1 单片机处理电路

   单片机选型用的是AVR系列的ATmega16型单片机,ATmega16单片机是一款高性能、低功耗的8位AVR微处理器,具有先进的RISC结构,内部有大容量的ROM、RAM、Flash和EEPROM,集成4通道PWM,SPI串行外设接口,同时具有8路10位A/D转换器,对于数据采集系统而言,外部无需单独的A/D转换器,从而可节省成本.另外,该单片机提供JTAG调试接口,可采用自制的简易JTAG仿真器进行程序调试。

    单片机处理电路的仿真图如图3.1所示。

图3.1 单片机处理电路的仿真图

3.2 重量检测电路

    重量检测电路的是MPX4115模块,这是一款称重传感器,其工作原理在2.2中提到过,这里就不再叙述了。它的一脚对应是数据输出端,连接的是单片机的PA1口,对应的是ADC1通道,可以通过其加减对其当前称重的数据进行调整,用此方法来仿真其称重的具体数据。重量检测电路的仿真图如图3.2所示。

图3.2 重量检测电路的仿真图

3.3 按键控制电路

按键控制电路共设置了四个按键,连接到单片机的PC1-PC4口,不按下按键的时候,端口检测到的是高电平信号,按下去之后,端口检测的是低电平信号。共有四个按键,第一个和第二个按键是对物品单价进行加或减,第三个按键是开始计算总价,第四个按键是通过串口发送数据。按键控制电路的仿真图如图3.3所示。

图3.3 按键控制电路仿真图

3.4 数码管显示电路

本系统的数据显示电路用了八位共阴数码管进行显示,一开始数码管显示的数据左面是重量数据,右面是单价数据,按下去之后,则显示的是总价数据。数码管的位选和段选端接到单片机相应的IO口端。

图3.4 数码管显示电路仿真图

3.5 报警模块

   根据题目要求,该设计还设置了报警模块,当重量超过80的时候,对应的LED灯点亮,表示进行报警。报警模块的仿真图如图3.5所示。

图3.5 报警模块仿真图

3.6 串口发送模块

为了模拟串口发送,需要用到虚拟串口,则需要在仿真中加入RS232接口的串口元件,即图中的COMPIM,电脑中需要安装虚拟串口,配置完对应的串口和波特率、数据位、停止位等数据之后,就可以通过串口助手显示单片机发送的数据了。串口发送模块的仿真图如图3.6所示。

图3.6 串口发送模块仿真图

4. 程序设计

4.1 程序顶层设计

   按照题目中的要求,本设计的程序算法共分为按键检测与控制程序、串口发送程序、主程序。

4.2主程序设计

主程序的工作流程图如图4.1所示。首先进行单片机初始化,然后进行其他功能模块的初始化,接下来称重传感器工作输出所称物体的重量数据,然后单片机通过AD转换将重物的模拟数据转换成相应的数字数据,即得到物体重量。然后判断是否重量是否超过80,是的话就进行相应的报警。

然后通过第一个和第二个按键得到物体的单价,待单价和重量数据都准备好之后,计算总价,并且通过数码管和串口发送到串口助手进行数据显示。整个程序的完整工作流程即结束。

                                       图4.1 主程序的工作流程图

4.3 按键检测与控制程序

按键检测与控制程序的流程图如图4.2所示,首先进行按键初始化,然后判断单价按键是否按下,如果按下,则通过其按下的次数和组合得到单价数据,如果没有按下,则继续等待;然后判断计算总价按键是否按下,如果按下则计算得到总价数据,如果没有按下,则继续等待;接着判断串口打印按键。如果按下,则通过串口发送数据,如果没有按下,则继续等待。

4.4 串口发送程序流程图

串口发送程序的流程图如图4.4所示。首先进行初始化,然后设置波特率,然后设置串口的数据位、校验位、停止位等配置数据,然后就可以发送数据。

图4.3 按键检测与控制程序流程图

                           

                                                                  图4.4 串口发送程序流程图

5 仿真测试

5.1 称重数据显示

    数码管显示的数据分为两个,A后面的数据是物体的总重,B后面的数据是物体的单价。一开始物体的重量是73.8,对应数码管显示的数据为74.1,显示的效果如图5.1所示。然后改变物体重量为75,显示的数据为75.5,显示的效果图如图5.2所示。误差进不超过百分之1。

图5.1 实重为73.8的称重显示仿真图

图5.2 实重为75的称重显示仿真图

5.2 单价改变测试

单价需要通过前两个按键进行控制,每按一下,单价变化0.1,一开始按第一个按键3次,将其单价变为0.3,仿真效果图如图5.3所示,然后按第二个按键1次,将其单价变为0.2,仿真效果图如图5.4所示。

图5.3 单价变为0.3的仿真图

图5.4 单价变为0.2的仿真图

5.3 总重计算测试

首先重量显示为75.5,单价为0.3,按下计算总价按钮,总价应该为22.65显示效果图如图5.5所示;接着重量显示为75.5,单价为0.2,按下计算总价按钮,总价应为15.1,显示效果图如图5.6所示。

图5.5 总价为22.65的仿真图

图5.5 总价为15.1的仿真图

5.4 串口通信测试

首先需要安装虚拟串口,然后运行程序,发送单价、重量、和总价数据,单价为0.2,重量为74.2,总价为14.84,串口助手显示效果图如图5.6所示。

图5.6 串口助手显示数据图

5.5 故障检测测试

当检测的物体重量超过80,LED亮表示提示,设置温度为80.1,显示的效果图如图5.7所示。

图5.7 故障检测测试仿真图

7. 总结

本实验以ATmega16单片机作为控制核心,通过称重传感器检测物体的重量,单片机通过AD转换把物体重量的模拟数据转换为相应的数字数据,然后通过按键调整物体的单价,然后通过计算总价案件计算物体总结,接着通过数码管显示和串口助手显示。

本实验通过在PROTEUS上进行原理图仿真,ICCAVR上编写代码,基本上达到了题目中的要求,并且具有良好的兼容性。

附录

整体原理图

四、仿真和报告获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488067.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾

在数字化时代,开源已成为推动技术创新和知识共享的核心力量,尤其在数据领域,开源技术的涌现不仅促进了行业的快速发展,也让更多的开发者和技术爱好者得以参与其中。随着物联网、工业互联网等技术的广泛应用,时序数据库…

OpenGL ES详解——多个纹理实现混叠显示

目录 一、获取图片纹理数据 二、着色器编写 1. 顶点着色器 2. 片元着色器 三、绑定和绘制纹理 1. 绑定纹理 2. 绘制纹理 四、源码下载 一、获取图片纹理数据 获取图片纹理数据代码如下: //获取图片1纹理数据 mTextureId loadTexture(mContext, R.mipmap.…

基于SpringBoot+Vue的高校电动车租赁系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着环保意识的增强和绿色出行理念的普及,高校电动车租赁系统应运而生。这一系统专为高校师生设计,旨在提供一种便捷、环保的出行方式。高校校园通常面积较大,步行和自行车虽然环保&#xff0…

泷羽sec-burp(6)暴力破解与验证码识别绕过(上,在Kali上搭建ddddocr、aiohttp环境) 学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

【前端】JavaScript中的函数形式参数:预解析与作用域详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯示例代码💯1. 形式参数的预解析模拟预解析后的代码 💯2. 函数作用域与子函数的关系代码详解 💯3. 扩展:块作用域与变量提…

第一个C++程序--(蓝桥杯备考版)

第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出&#xff1a;在屏幕打印"hello world!" return 0;}main函数 main 函数是…

AMD-Vi completion-wait loop timed out

前言 内核大量打印"AMD-Vi completion-wait loop timed out"&#xff0c;同时伴随有soft lockup或者rcu cpu stall&#xff0c;如下&#xff1a; Dec 8 10:02:17 kernel: AMD-Vi: Completion-Wait loop timed out Dec 8 10:02:17 kernel: AMD-Vi: Completion-W…

14.在 Vue 3 中使用 OpenLayers 自定义地图版权信息

在 WebGIS 开发中&#xff0c;默认的地图服务通常会带有版权信息&#xff0c;但有时候我们需要根据项目需求自定义版权信息或添加额外的版权声明。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;完成自定义地图版权信息的实现。 最终效果…

docker的网络类型和使用方式

docker的网络类型 5种网络类型 bridge 默认类型&#xff0c;桥接到宿主机docker0的网络&#xff0c;有点类似于VM虚拟机的NAT网络模型。 案例: docker run --rm -itd --network bridge --name wzy666wzy-bridge alpine host host类型&#xff0c;共享宿主机的网络空间&#…

Micropython 扩展C模块<HelloWorld>

开发环境 MCU&#xff1a;Pico1&#xff08;无wifi版&#xff09;使用固件&#xff1a;自编译版本开发环境&#xff1a;MacBook Pro Sonoma 14.5开发工具&#xff1a;Thonny 4.1.6开发语言&#xff1a;MicroPython 1.24 执行示例 在github上获取micropython&#xff0c;我使…

0002.简易酒店管理系统后台

一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习&#xff0c;虽然版本比较老但是部署方便&#xff0c;tomcat环境即可启用&#xff1b;代码简洁&#xff0c;前后端代码提供可统一学习&#xff1b;祝愿您能成尽快为一位合格的程序员&#xff0c;愿世界没有BUG; …

Android 车载虚拟化底层技术-Kernel 5.10 -Android12(multi-cards)技术实现

详细代码实现见 Android Display Graphics系列文章-汇总​​​​​​Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 本文主要包括部分&#xff1a; 一、Android12的Kernel 5.10版本 1.1 Kernel 5…

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念&#xff0c;并解决一个经典问题&#xff1a;斐波那契数列。学生将学习如何使用动态规划优化递归计算&#xff0c;并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

MySQL(数据类型)

目录 1. 数值类型 2. bit类型 3.小数类型 3. 字符串类型 4 日期和时间类型 5. enum和set 1. 数值类型 对标C语言&#xff1a; tinyint->char(1字节)&#xff1a; 有符号&#xff1a;127 ~ 255 无符号&#xff1a;0 ~ -128。 smalli…

1. Flink自定义Source

一. Source 简介 DataStream是Flink的低级API&#xff0c;用于进行数据的实时处理&#xff0c;Flink编程模型分为Source、Transformation、Sink三个部分&#xff0c;如下图所示。 默认Flink提供了大量的内置Source&#xff0c;常见的Source如下&#xff1a; 基于文件的Sour…

运维新手入门——KVM(Beginner‘s Guide to Operations and Maintenance - kvm)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

一个功能强大的视频翻译和本地化配音工具,支持影视级双语字幕/视频配音

家好&#xff0c;今天给大家分享一个功能强大的视频翻译和本地化配音工具VideoLingo&#xff0c;旨在为用户提供高质量的字幕和配音服务&#xff0c;让全世界的知识能够跨越语言的障碍共享。 项目介绍 VideoLingo项目的开发旨在解决视频内容创作者和翻译者面临的跨语言障碍问题…

力扣-图论-9【算法学习day.59】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

doxygen–自动生成文档工具

原文地址&#xff1a;doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档&#xff0c;解析类、函数、参数相关信息&#xff0c;并生…

上市公司投资效率Biddle模型数据(包括最终数据、原始数据及构造说明)2003-2022年

一、计算方式&#xff1a;参考《Journal of accounting and economics》Biddle G C&#xff0c;构建Biddle模型使用企业投资对成长机会的回归模型来估计企业的投资效率&#xff0c;这里成长机会用销售增长率来衡量。回归模型如下图所示: 二、资料范围&#xff1a;包括原始数据…