PIC项目(9)——基于PIC16F877A的环境光照检测系统

news2025/1/17 21:53:41

1.课题背景

        近年来,城市光污染问题逐渐显现。白天,玻璃幕墙、釉面砖墙、磨光大理石和各种涂料等装饰反射光线,明晃刺眼;夜晚,商场、酒店、超市楼顶的广告牌、电子屏、霓虹灯炫烂夺目。面对这样的光污染,人们却往往忽视了它对儿童视力带来的伤害。

        显然我们需要一款能够测量环境光照强度的设备,当环境光照足够强时,发出警报,提醒人们需要采取必要的措施,进行一定的自我保护,如保护眼睛等。我们的设计就是在这样一个背景下产生的,我们的设计可以测量环境光照强度,并把强度转换为电压值显示出来,可以通过设定光照强度阈值,当环境光大于阈值的时候,就亮红灯,告诉用户环境光过于强,需要采取措施  保护眼睛。若环境光不强,则亮绿灯,用于提示用户现在的环境光照没那么强烈,不必担心会伤害到眼睛。

        对环境光的测量是通过光敏电阻实现的,光敏电阻在环境光照强度发生变化时,它的阻值就会发生变化,通过将光敏电阻和定值电阻串联,那么就可以将光敏电阻阻值的变化转变为电压的变化,通过PIC单片机的AD采集功能,可以检测到电压变化,通过电压变化就可以知道环境光照强度的变化了。此外,本系统还采用了EEPROM,可以保存设置的阈值,实现阈值掉电不丢失的效果。还使用了单片机的内部定时器,实时记录系统运行的时间,还使用串口将采集到的电压发送到上位机显示。

        本次设计的不足之处是,只使用了一路AD,只采集了环境里一个点位上的光照强度,用一个点上的光照代替整个环境的光照可能误差比较大。换句话说,就是一个点上的光照强度不能够代表整个环境上的光照强度,有时候具有偶然性。

        后期应该使用多路AD,采集环境中多个地方、多个点的光照强度,用以排除偶然性,增加可信度。

2.功能设计

功能框图:

功能描述:

  1. 利用单片机的AD功能,测量光敏电阻的电压,用以获得环境光照强度。
  2. 然后通过两个按键,设置光照强度的阈值,(通过设置电压阈值来实现),
  3. 当测得的电压大于设定的阈值电压时,子板上的红灯亮,否则,绿灯亮。其中,按键KEY1使用了外部中断的方法。
  4. 设定的阈值电压存储在了使用I2C接口的EEPROM的地址0001上,每次开机时,都会先从该地址中,读取出数据,通过按键设定的阈值也会被写入到该地址中,那么设定的阈值就会有一个掉电保存的效果。也就是本次重新开机,所使用的阈值其实是上一次使用该系统的时候设置的阈值。
  5. 另外,系统使用了一个定时器,用于测量系统已经开始运行的时间,
  6. 该时间会显示在LCD屏幕上。
  7. 测到的电压值也通过串口,向上位机发送。

3.硬件实现

本次使用的PIC单片机开发板如下图

它分为底板和子板,上层那个绿色的就是子板,下面红的是底板。

 底板全貌如下:

 其原理图如下:

子板的原理图如下:

 

实现过程中的一些实物图如下所示:

 

 

上位机显示如下:

 

4.课题意义 

设计PIC单片机环境光照检测的课题具有以下几个意义:

1. 学习和应用单片机和传感器技术:设计PIC单片机环境光照检测需要学习和应用单片机的基本原理和编程技术,以及光敏传感器的工作原理和使用方法。通过该课题,学生可以增强对单片机和传感器技术的理解和应用能力。

2. 熟悉模拟信号采集和处理:环境光照检测需要采集和处理模拟信号。学生在设计过程中可以学习和熟悉模拟信号采集技术,包括模拟信号的采样、滤波和转换为数字信号的方法。这可以帮助学生提高模拟信号处理的能力。

3. 实践电路设计和调试能力:设计环境光照检测电路需要设计和调试相关的电路,如传感器接口电路和模拟信号处理电路。学生可以通过该课题锻炼电路设计和调试的能力,学习电路原理和实际应用技巧。

4. 了解环境光照的影响和应用场景:环境光照检测可以用于自动调节照明系统、车辆灯光控制等场景。学生通过设计和实践环境光照检测课题,可以更好地了解环境光照的影响和应用场景,在智能化控制系统和自动化领域有实际应用。

5. 培养创新思维和解决问题的能力:在设计PIC单片机环境光照检测的过程中,学生可能会遇到各种问题和挑战,需要运用创新思维和解决问题的能力。通过培养解决问题的能力,学生可以更好地应对未来工程领域的挑战。

综上所述,设计PIC单片机环境光照检测的课题对于学生提高单片机和传感器技术、电路设计和创新能力非常有意义。同时,环境光照检测在智能和自动化领域有广泛应用,这也使得该课题具有实用性和可操作性,有助于学生将所学的知识应用到实际生活和工作中。

5.完整工程

基于PIC16F877A的环境监测系统资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/guangali/88673968?spm=1001.2014.3001.5503

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC学习与开发(四)

注&#xff1a;此为笔者学习狂神说SpringMVC的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 11、Ajax初体验 1、伪造Ajax 结果&#xff1a;并未有xhr异步请求 <!DOCTYPE html> &…

四.消息队列

目录 1 .消息队列概述 2.消息队列的特点 3.ftok函数 3 创建消息队列-msgget( ) 3.1发送消息-msgsnd( ) 3.2 接收消息-msgrcv( ) 4 消息队列的控制 1 .消息队列概述 消息队列是一种进程间通信的机制&#xff0c;允许不同进程在系统中传递数据。它们通常由内核维护&#x…

c语言-指针练习题

目录 前言一、题目一二、题目二总结 前言 为了巩固c语言中关于指针知识点的掌握&#xff0c;本篇文章记录关于指针的练习题。 一、题目一 有n个整数&#xff0c;使前面各数顺序往后移动m个位置&#xff0c;最后m个数变成最前面的m个数 写一函数实现以上功能&#xff0c;在主函…

【Vue2+3入门到实战】(5)Vue基础之Computed计算属性 详细示例

目录 一、今日学习目标1.computed计算属性 二、computed计算属性1.概念2.语法3.注意4.案例5.代码准备 三、computed计算属性 VS methods方法1.computed计算属性2.methods计算属性3.计算属性的优势4.总结 四、计算属性的完整写法五、综合案例-成绩案例六、Computed计算属性总结 …

荣耀之城(富饶之地)

规则简介 这是一个回合制的游戏&#xff0c;每个回合都是先选角色然后按照角色编号依次执行回合。 8个角色&#xff1a;刺客、小偷、魔术师、国王、住持、商人、建筑师、领主 根据人数的不同&#xff0c;按照不同的规则依次选取一个角色&#xff0c;国王第一个选&#xff0c…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(二)

Matplotlib绘图技巧&#xff08;二&#xff09; 写在前面2. 函数间区域填充函数fill_between()和fill()参数&#xff1a; 3. 散点图 scatter4. 直方图 hist5. 条形图 bar5.1 一个数据样本的条形图参数&#xff1a; 5.2 多个数据样本进行对比的直方图5.3 水平条形图参数 5.4 绘制…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

结构体:子网掩码

#include<iostream> using namespace std; union IP //创建共用体 {unsigned char a[4];unsigned int ip; }; IP getIP() //获取ip函数 {int a, b, c, d;scanf_s("%d.%d.%d.%d", &a, &b, &c, &d);IP address;address.a[3] a; address.a[2] …

C. Load Balancing 一个序列同时加一个数和减一个数,直到最大和最小之间相差最大为1(结论可记住)

题目&#xff1a; https://atcoder.jp/contests/abc313/tasks/abc313_c 思想&#xff1a;1.给定一个固定的B&#xff0c;求使A等于B所需的最小运算次数 2.在所有最大值和最小值最多相差1的B中&#xff0c;找出一个所需的运算次数最少的&#xff0c;即1 做法&#xff1a;构造…

Vue项目优化-组件配置化、插件使用

Vue中可以根据需要去加载插件&#xff0c;一些自己写的插件在多个项目中都是需要用到的&#xff0c;通过把它们插件化&#xff0c;可以实现在需要用到的项目中便捷地复用&#xff0c;实现热拔插。 一、问题背景 以弹窗表单组件为例&#xff0c;平常我们使用弹窗组件都是通过页面…

C单片机数据类型与格式化

C语言数据类型 关键字位数表示范围stdint关键字ST关键字举例unsigned char80 ~ 255uint8_tu8u8 data 128char8-128 ~ 127int8_ts8s8 temperature 25unsigned short160 ~ 65535uint16_tu16u16 counter 5000short16-32768 ~ 32767int16_ts16s16 position 32767unsigned int3…

[Angular] 笔记 21:@ViewChild

chatgpt: 在 Angular 中&#xff0c;ViewChild 是一个装饰器&#xff0c;用于在组件类中获取对模板中子元素、指令或组件的引用。它允许你在组件类中访问模板中的特定元素&#xff0c;以便可以直接操作或与其交互。 例如&#xff0c;如果你在模板中有一个子组件或一个具有本地…

Autosar MCAL-RH850P1HC Dio配置

文章目录 DioDioGeneralDioCriticalSectionProtectionDioDevErrorDetectDioDeviceNameDioFlipChannelApiDioMaskedWritePortApiDioUseWriteVerifyErrorInterfaceDioVersionCheckExternalModulesDioVersionInfoApiDioWriteVerifyDioWriteVerifyErrorInterface DioPortP0-P9DioPo…

关于mysql8.0相关的升级

不知不觉&#xff0c;MySQL8.0已经有好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了&#xff0c;MySQL8.0版本基本已到稳定期&#xff0c;相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项&#xff0c;有想做版本升级的小伙伴…

技术探秘:在RISC Zero中验证FHE——RISC Zero应用的DevOps(2)

1. 引言 前序博客&#xff1a; 技术探秘&#xff1a;在RISC Zero中验证FHE——由隐藏到证明&#xff1a;FHE验证的ZK路径&#xff08;1&#xff09; 技术探秘&#xff1a;在RISC Zero中验证FHE——由隐藏到证明&#xff1a;FHE验证的ZK路径&#xff08;1&#xff09; 中&…

DDOS攻击原理,如何解读?

互联网安全现状 随着网络世界的高速发展&#xff0c;各行业数字化转型也在如火如荼的进行。但由于TCP/IP网络底层的安全性缺陷&#xff0c;钓鱼网站、木马程序、DDoS攻击等层出不穷的恶意攻击和高危漏洞正随时入侵企业的网络&#xff0c;如何保障网络安全成为网络建设中的刚性…

【JavaEE】多线程(7) -- 线程池的概念和简单实现

目录 1.线程池是什么 2.标准库中的线程池 2.1ThreadPoolExecutor 2.2构造方法参数介绍 2.3拒绝策略(面试易考) 2.4Executor的使用 3.实现线程池 1.线程池是什么 线程池是一种用来管理线程的机制&#xff0c;它可以有效地控制线程的创建、复用和销毁&#xff0c;从而提高程…

使用flutter开发windows桌面软件读取ACR22U设备的nfc卡片id,5分钟搞定demo

最近有个需求&#xff0c;要使用acr122u读卡器插入电脑usb口&#xff0c;然后读取nfc卡片的id&#xff0c;并和用户账号绑定&#xff0c;调研了很多方式&#xff0c;之前使用rust实现过一次&#xff0c;还有go实现过一次&#xff0c;然后使用electron的时候遇到安装pcsc-lite失…

2024年【危险化学品经营单位安全管理人员】复审考试及危险化学品经营单位安全管理人员模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员复审考试是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员模拟考试&#xff0c;安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习…

c++ 简单实用万能异常捕获

多层捕获异常&#xff0c;逐渐严格。并打印出错信息和位置&#xff1a;哪个文件&#xff0c;哪个函数&#xff0c;具体哪一行代码。 #include <stdexcept> // 包含标准异常类的头文件try {int a 2 / 0; }catch (const std::runtime_error& e) {// 捕获 std::runt…