STM32项目分享:智能台灯(机智云)系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1My411q7fE/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的智能台灯(机智云)系统

功能如下:

  1. 检测功能:系统检测周围 温湿度数据、距离、人体信号、光照强度
  2. 显示功能:将检测到的数据显示在oled屏幕上
  3. 控制功能:系统通过PWM对台灯进行无极调光
  4. 模式选择:可选择手动模式或者自动模式
  5. 护眼功能:当系统检测到人距离台灯过近时蜂鸣器报警
  6. 阈值调节:系统传感器阈值大小可以通过按键或者APP自行设置调节
  7. 云平台:系统通过WIFI模块连接网络,接入机智云服务器
  8. 远程控制:可以通过APP查看数据、远程控制台灯、远程调节阈值

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(4针I2C协议)
  • WiFi模块(ESP8266-01s)
  • 大功率LED模块
  • HC-SR04超声波传感器
  • HC-SR501人体红外传感器
  • 光敏电阻传感器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

int main(void)
{ADCX_Init();PWM_Init(100 - 1, 720 - 1);Timer2_Init(9,14398);Uart2_Init(9600);Uart1_Init(115200);IWDG_Init();	//初始化看门狗LDR_Init();OLED_Init();DHT11_Init();LED_Init();Key_Init();HC_SR501_Init();HC_SR04_Init();Buzzer_Init();MyRTC_Init();Sensorthreshold.Illumination_threshold = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASHSensorthreshold.Distance_threshold = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASHGENERAL_TIM_Init();userInit();		//完成机智云初始赋值gizwitsInit();	//开辟一个环形缓冲区
//	GPIO_SetBits(Buzzer_PROT, Buzzer);
//	Delay_ms(1200);while (1){IWDG_ReloadCounter(); //重新加载计数值 喂狗sensorScan();	//获取传感器数据switch (menu){case display_page:MyRTC_ReadTime();	//调用此函数后,RTC硬件电路里时间值将刷新到全局数组OLED_Menu_SensorData();	//显示主页面传感器数据、系统模式等内容OLED_Menu();	//显示主页面的固定内容if (!systemModel){LED_PWM_KEY();	//按键控制LED的PWM			}//切换系统模式if (KeyNum == KEY_1){KeyNum = 0;systemModel = ~systemModel;if (systemModel){currentDataPoint.valueModel = 1;}else{currentDataPoint.valueModel = 0;}}				//判断是否进入阈值设置界面if (KeyNum == KEY_Long1){KeyNum = 0;OLED_Clear();	//清屏menu = settingsPage;	//跳转到阈值设置界面}break;case settingsPage:OLED_SetInterfacevoid();	//显示阈值设置界面的固定内容OLED_Option(SetSelection());	//实现阈值设置页面的选择功能ThresholdModification(SetSelection());	//实现阈值调节功能	//判断是否退出阈值设置界面if (KeyNum == KEY_2){KeyNum = 0;OLED_Clear();	//清屏menu = display_page;	//跳转到主界面//存储修改的传感器阈值至flash内				FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold);currentDataPoint.valueIllumination_threshold = Sensorthreshold.Illumination_threshold;currentDataPoint.valueDistance_threshold = Sensorthreshold.Distance_threshold;}break;case timeSettingsPage:OLED_ThresholdTime();	//显示时间设置界面的内容OLED_Time_Option(SetSelection());	//实现间设置界面的选择功能TimeModification(SetSelection());	//实现时间调节功能	//判断是否退出时间设置界面if (KeyNum == KEY_2){KeyNum = 0;//将更改的数据赋值回RTC数组中MyRTC_Time[3] = hour;	MyRTC_Time[4] = minute;MyRTC_Time[5] = second;		MyRTC_SetTime();	//调用此函数后,全局数组里时间值将刷新到RTC硬件电路	OLED_Clear();	//清屏menu = settingsPage;	//回到阈值设置界面}break;}	//判断上位机是否更改阈值,如更改则保存至flash中if (valueFlashflag){valueFlashflag = 0;//存储修改的传感器阈值至flash内				FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold);}userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云					}
}

六、实验效果 

七、资料内容

项目分享

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

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

相关文章

CheckBox实现原理分析

CheckBox 是 Android 中的一个常用控件,用于实现复选框的功能。它继承自 CompoundButton,后者又继承自 Button。CheckBox 可以用来表示一个布尔值的选择状态,通常用于收集用户的选择,例如在表单中选择多个选项。 接下来&#xff…

小白学大模型:LLaMA-Factory 介绍与使用

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…

基于CentOS Stream 9平台安装MySQL Community Server 9.0.1 Innovation

1. 安装之前 1.1 查看系统版本 cat /etc/redhat-releaseCentOS Stream release 9 1.2 查看cpu架构 lscpu架构: x86_64 CPU 运行模式: 32-bit, 64-bit 2. 官网下载 https://dev.mysql.com/downloads/mysql/ 要多看看 官方9.0文档:https://d…

C语言——输入你的身高和体重,测试你的健康状况。

输入你的身高和体重,测试你的健康状况。 计算bmi的值, bmi (体重/身高的平方) 如果bmi 小于18.5,则显示“偏瘦,注意加强营养” 如果bmi 在18.5和23.9之间,则显示“体重指数良好,注意保持” 如果…

NSL-KDD入侵检测系统的设计与实现系列预告

每日进阶-基于机器学习的入侵检测系统——打怪升级之道 在当今的数字时代,网络安全不仅是防御,更是主动出击。你是否想知道如何用机器学习技术设计一套入侵检测系统(IDS),让黑客无所遁形?本系列文章将为您揭…

unity2D游戏开发12单例

单例 我们先了解一种被称为单例的软件设计模式。当应用程序需要在生命周期内创建特定类的单个实例时,可以使用单例。当一个类提供了游戏中其他几个类使用的功能时,单例会很有用,例如,在Game Manager 类中协调游戏逻辑,单例可以提供对该类及其功能的公共统一访问入口。单例…

入门 PyQt6 看过来(案例)14~ 分组

本文分享一个分组框功能,采用pyqt6里的QGroupBox​控件,效果如下:性别和专业分开为两个分组框内: ​ 1 功能实现思路 ui页面布局设计 性别和专业要设计成两个分组框: ​ 逻辑实现 引入信号和槽函数来实现点击单选…

搞懂数据结构与Java实现

文章链接:搞懂数据结构与Java实现 (qq.com) 代码链接: Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

代码随想录算法训练营第33天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

打卡Day33 1.动态规划基础2.509. 斐波那契数3.70. 爬楼梯4.746. 使用最小花费爬楼梯 1.动态规划基础 文档讲解: 代码随想录 对于动态规划,拆解为五步: (1)dp数组以及下标的含义 (2)递推公式 &…

从区块链到股票市场的全方位布局,广辉团队创新引领共创财富未来!

广辉团队作为一家涉足互联网投资领域的团队,在短短几年内迅速崛起,成为行业中的佼佼者。这支团队汇聚了来自各行各业的商业精英,并在互联网金融领域创造了巨大的财富。业务范畴涵盖了资产管理、资本市场、消费金融、保险市场、零售银行及财富…

【C++入门】类的继承

文章目录 前言继承是什么?为什么需要继承? 在 C 中如何继承另一个类?访问修饰符 类的多继承菱形继承 继承中的构造函数和析构函数无参数的构造函数有参数的构造函数代码解释输出结果 继承的好处与问题继承的好处继承的潜在问题示例代码 总结 …

UDP通信 单播,广播,组播

UDP通信实现 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); - 参数&#xff1a; struct sockaddr *src_addr, socklen_t *addrlen…

最长连号(不会dp解法)

这题咋dp啊 #include<bits/stdc.h> using namespace std; int main() {int a;cin>>a;vector<int>s(a,0);vector<int>dp(a);dp[0]1; // s.push_back(1);for(int i0;i<a;i){ // cout<<s[i];cin>>s[i];}for(int i1;i<a;i){if(s[i-1]1…

数据库期末复习

数据库期末复习 分析题 1 &#xff08;1&#xff09;使用数据库系统可以大大提高应用开发的效率&#xff0c;方便用户的使用减轻数据库系统管理人员维护的负担&#xff0c;请回答数据库系统有哪些部分组成&#xff1f;什么是数据库管理系统&#xff0c;其主要功能包括哪些方而&…

vue3项目报错集合

目录 一、does not provide an export named default 一、does not provide an export named default 报错截图&#xff1a; 原因&#xff1a; vite对commonjs兼容性太差&#xff0c;导致无法引入jsoneditor&#xff0c;可以使用originjs/vite-plugin-commonjs插件解决。&am…

ThinkPHP事件的使用

技术说明 1.ThinkPHP版本&#xff1a;支持6.0、8.0 2.使用场景&#xff1a;用户登陆后日志记录、通知消息发送等主流程、次流程分离等场景 3.说明&#xff1a;网上很多帖子说的不明不白的&#xff0c;建议大家自己手动尝试总结一下 4.事件手动绑定的时候&#xff0c;一定要…

Cocos Creator2D游戏开发(7)-飞机大战(5)-让子弹飞

飞机大战(5)-碰撞及积分 参考敌机的生成 子弹由飞机生成,放在player_node节点子弹重复使用,要使用预制体;子弹新增了动画 ①创建一个预制体 命名为playerBullet_prefab ② 双击预制体将bullet1图片拖入预制体 保存,关闭(场景编辑器里面的) ③ 发射子弹 player加入代码 prop…

【网络安全】破解邀请码实现未经授权的访问和账户接管

未经许可&#xff0c;不得转载。 文章目录 前言1、邀请用户2、低级账户访问3、提取用户 ID 和 OTP4、准备字典5、攻击6、账户接管 前言 ExampleSpark&#xff08;化名&#xff09;是一个专为团队管理和项目协作而设计的强大平台。它提供了用于管理用户、项目和权限的综合工具。…

【Python中OGR和GDAL有什么区别】

OGR和GDAL在地理信息系统&#xff08;GIS&#xff09;和遥感领域都扮演着重要角色&#xff0c;但它们在功能和处理的数据类型上有所不同。以下是OGR和GDAL的主要区别&#xff1a; 一、定义与功能 GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 定义&#…

docker部署本地词向量模型

开源项目&#xff1a;GitHub - huggingface/text-embeddings-inference: A blazing fast inference solution for text embeddings models 1. 下载词向量模型 参考我的另一篇博客&#xff1a;langchain 加载本地词向量模型 2. 部署词向量模型 就三行命令 model/data/BAAI/…