0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32项目分享:智能台灯系统

机智云 2024-11-29 01:02 次阅读

项目成品图片:

7edd1428-adaa-11ef-8084-92fbcf53809c.jpg

01

项目简介

1.功能详解


基于STM32智能台灯系统。

功能如下:


亮度控制:按键控制照明灯的亮度(5挡亮度)

计时功能:按键启动计时,累计台灯运行时间(作息时间)

OLED显示:显示当前模式、环境光强、超声波距离

控制模式:通过按键控制照明灯为自动模式/手动模式

蓝牙APP控制:通过蓝牙APP控制照明灯模式选取、亮度调节、计时功能

智能调光:自动模式下根据外界光线变化,LED照明灯自动调节亮度

人体姿态提醒:超声波距离近于5cm触发蜂鸣器报警,提醒纠正人体姿态

2.材料清单

STM32F103C8T6最小系统板

OLED显示屏(4针I2C协议)

光敏传感器

大功率LED照明灯模块

HC-SR04超声波传感器

HC-SR501人体红外传感器

蓝牙模块(BT04-A)

蜂鸣器

02


原理图设计

7eff81ca-adaa-11ef-8084-92fbcf53809c.png

03


PCB硬件设计


1.PCB图

7f1def3e-adaa-11ef-8084-92fbcf53809c.jpg

7f41e97a-adaa-11ef-8084-92fbcf53809c.jpg

2.PCB板及元器件7f5e0024-adaa-11ef-8084-92fbcf53809c.jpg

04


程序设计

int main(void){ unsigned char p[16]=" "; u8 datatemp[SIZE]; unsigned int STEP=0; //步数临时替换值 _Bool Heart_OK = 0; //读取到正确心率标志位 unsigned char Heart = 0; //心率值 short temperature = 0;

//温度值 STEPS_DIS = 1; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);

//设置中断优先级分组为组3:2位抢占优先级,2位响应优先级 LED_Init(); //初始化与控制设备连接的硬件接口 OLED_Init(); //OLED初始化 delay_ms(50); OLED_CLS();

//清屏 OLED_ShowCN(32,2,0); //万事可期(欢迎使用) OLED_ShowCN(32+16,2,1); OLED_ShowCN(32+32,2,2); OLED_ShowCN(32+32+16,2,3); ADXL345_Init(); while(ADXL345_Init()) //3D加速度传感器初始化

{ OLED_ShowStr(0,0,"ADXL345 Error",2); delay_ms(200); OLED_ShowStr(0,0," ",2);

delay_ms(200); } while(DS18B20_Init()) //DS18B20初始化 { OLED_ShowStr(0,0,"DS18B20 Error",2);

delay_ms(200); OLED_ShowStr(0,0," ",2); delay_ms(200); } delay_ms(100); while(DS18B20_Get_Temp()==850); //DS18B20刚上电时候 读取的值是850 这里等待 直到不是850才开始下一步 delay_ms(5000); OLED_CLS(); //清屏 Adc_Init(); TIM3_Int_Init(1999,71);

//定时2ms中断 uart_init(9600); //串口一初始化为9600 TIM2_Int_Init(199,7199); //10Khz的计数频率,计数到500为20ms KEY_Init();

//IO初始化 EXTIX_Init(); //外部中断初始化 OLED_CLS(); //清屏 Dis_Init(); STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE); //flash中读出步数 STEPS = (datatemp[0]-0x30)*10000+(datatemp[1]-0x30)*1000+(datatemp[2]-0x30)*100+(datatemp[3]-0x30)*10+(datatemp[4]-0x30);

//读到值转换为步数 RTC_Init(); // RTC_Set(2019,8,5,20,43,55);

//设置时间 while(1) { if(Timer_Flag==1)

//500ms到 读取数据 { Timer_Flag = 0; //清除标志 TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE ); //使能指定的TIM3中断,允许更新中断 TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );

//使能指定的TIM3中断,允许更新中断 temperature=DS18B20_Get_Temp(); //读取温度 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );

//使能指定的TIM3中断,允许更新中断 TIM_Cmd(TIM2, ENABLE); //使能TIMx if (QS == true) //读取到了心率信号 { QS = false; //清除标志 等待下一次读取 if(BPM>HEART_MIN_ERROR&&BPM

//读取到的值再正常心率区间 40-160内 { Heart_OK = 1; //标志位置一 Heart = BPM; //心率传递给Heart } else { Heart_OK = 0; //标志位清零 Heart = 0; //设置为0 } } }

if(ADXL345_FLAG==1) //20ms到? { ADXL345_FLAG = 0; //清除标志位 step_counter(); }// printf("三轴加速器: %d \r\n",ADXL345_FLAG);

//串口发送出去 delay_ms(20); if(STEP!=STEPS) //步数发生改变 存储一次 { STEP = STEPS; TEXT_Buffer[0]=(u16)STEPS/10000+0x30; TEXT_Buffer[1]=(u16)STEPS%10000/1000+0x30; TEXT_Buffer[2]=(u16)STEPS%10000%1000/100+0x30; TEXT_Buffer[3]=(u16)STEPS%10000%1000%100/10+0x30; TEXT_Buffer[4]=(u16)STEPS%10000%1000%100%10+0x30;

STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE); } if(calendar.hour==0&&calendar.min==0&&(calendar.sec==0||calendar.sec==1||calendar.sec==2)) //凌晨0000 清除步数 { STEPS = 0; TEXT_Buffer[0]=(u16)STEPS/10000+0x30; TEXT_Buffer[1]=(u16)STEPS%10000/1000+0x30; TEXT_Buffer[2]=(u16)STEPS%10000%1000/100+0x30; TEXT_Buffer[3]=(u16)STEPS%10000%1000%100/10+0x30; TEXT_Buffer[4]=(u16)STEPS%10000%1000%100%10+0x30; STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE); delay_ms(500); } Key_set();

//时间设置 if(KEY0==0) //KEY0切换显示按键 { while(KEY0==0); //等待松开 OLED_CLS();

//清屏 if(Dis_mode==0) //如果上一次是显示心率、步数、体温 的 则显示时间 Dis_mode = 1; else //如果上一次不是显示心率、步数、体温 的 则心率、步数、体温 { Dis_mode = 0; Dis_Init(); //显示汉字信息 } } if(KEY2==0) //清除步数 { while(KEY2==0); STEPS = 0; TEXT_Buffer[0]=(u16)'0';

TEXT_Buffer[1]=(u16)'0'; TEXT_Buffer[2]=(u16)'0'; TEXT_Buffer[3]=(u16)'0'; TEXT_Buffer[4]=(u16)'0'; STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE); //清除后存储一次数据 } if(update_flag==1) //2S标志到 发送一次数据到手机APP { update_flag = 0; printf("Step:%5d H:%3d T:%4.1f \r\n",STEPS,Heart,(float)temperature/10); //串口发送出去 } switch(Dis_mode) { case 0: //显示传感器数据 if(STEPS_DIS==1) //刷新计步 { sprintf((char*)p,":%-5d ",STEPS); //显示步数 OLED_ShowStr(32,2,p,2);

} sprintf((char*)p,":%4.1f ",(float)temperature/10); OLED_ShowStr(32,4,p,2); //显示温度 if(Heart_OK==1) //读取到正确心率 { sprintf((char*)p,":%3dr/min",Heart);

//显示心率 OLED_ShowStr(32,0,p,2); } else { sprintf((char*)p,":---r/min"); OLED_ShowStr(32,0,p,2); } break; case 1: //显示时间 日期等信息 RTC_Display(); //显示时钟 break; } } }

05


实验效果


7f8b07f4-adaa-11ef-8084-92fbcf53809c.jpg

7fb06dfa-adaa-11ef-8084-92fbcf53809c.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10896

    浏览量

    355755
  • 智能台灯
    +关注

    关注

    9

    文章

    83

    浏览量

    21020
  • 系统
    +关注

    关注

    1

    文章

    1015

    浏览量

    21332
收藏 人收藏

    评论

    相关推荐

    诚接stm32项目

    诚接stm32项目价格私聊
    发表于 05-17 10:20

    stm32项目搭建基础

    初学者吧stm32项目搭建基础好吧进入主题,我们现在要搭建一个stm32项目我还是把问题写在最开始把1. 注册keil你的keil需要注册当你编写了几行类似于helloworld的小
    发表于 08-23 08:47

    如何在IAR for ARM中创建STM32项目

    如何在IAR for ARM中创建STM32项目
    发表于 11-30 07:16

    STM32项目开发中超级实用技巧分享

    STM32项目开发中超级实用技巧一. 利用软启动打补丁二. 优化等级尽量选择不优化三. 合理利用开关总中断所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!关于STM32其它
    发表于 01-21 06:22

    CubeMX如何创建stm32项目

    CubeMX如何创建stm32项目
    发表于 02-14 06:24

    基于HAL库的STM32项目问题描述

    问题描述最近在做的一个基于HAL库的STM32项目需要从多个SPI总线设备读取数据并通过DMA从串口发送,程序如下:(RxData为从SPI总线读取到的数据)sprintf(tempt, "
    发表于 02-28 11:25

    STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)

    STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)
    发表于 11-15 15:21 50次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>设计:基于<b class='flag-5'>STM32</b>F4的mp3、wav音乐播放器 (UCOSIII操作<b class='flag-5'>系统</b>、GUI控件)

    ADF2022项目开源

    电子发烧友网站提供《ADF2022项目开源.zip》资料免费下载
    发表于 07-05 09:42 2次下载
    ADF2022<b class='flag-5'>项目</b>开源

    STM32项目分享:智能家居(机智云)系统

    STM32项目分享:智能家居(机智云)系统
    的头像 发表于 07-28 08:10 1837次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>智能</b>家居(机智云)<b class='flag-5'>系统</b>

    STM32项目分享:智能大棚/智慧农业系统

    01—项目简介1.功能详解基于STM32的智慧农业系统。功能如下:温湿度采集:使用DHT11温湿度传感器采集环境温湿度土壤湿度采集:
    的头像 发表于 08-30 12:15 994次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>智能</b>大棚/智慧农业<b class='flag-5'>系统</b>

    STM32项目分享:智能门禁锁系统

    01—项目简介1.功能详解基于STM32智能门禁锁系统。功能如下:按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单门禁刷卡:通
    的头像 发表于 09-12 08:04 1580次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>分享:<b class='flag-5'>智能</b>门禁锁<b class='flag-5'>系统</b>

    STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码

    智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32
    的头像 发表于 10-17 16:16 758次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>F4的<b class='flag-5'>智能</b>灯光控制<b class='flag-5'>系统</b>(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的智能灯光控制系统(LVGL),附项目教程/源码

    智能灯光控制系统_STM32U5》项目完整文档、项目源码,点击免费领取。项目资料领取:http
    的头像 发表于 11-07 18:50 775次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的<b class='flag-5'>智能</b>灯光控制<b class='flag-5'>系统</b>(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的火灾报警系统(LVGL),附项目教程/源码

    《火灾报警系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyU
    的头像 发表于 11-13 14:18 562次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的火灾报警<b class='flag-5'>系统</b>(LVGL),附<b class='flag-5'>项目</b>教程/源码

    STM32项目实战:基于STM32U5的智能大棚温控系统(LVGL),附项目教程/源码

    智能大棚温控系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取h
    的头像 发表于 11-13 17:08 541次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>项目</b>实战:基于<b class='flag-5'>STM32</b>U5的<b class='flag-5'>智能</b>大棚温控<b class='flag-5'>系统</b>(LVGL),附<b class='flag-5'>项目</b>教程/源码