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

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

3天内不再提示

STM32项目分享:智能语音三色灯

机智云 2026-05-24 10:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

项目成品图片:


bb3c25d4-5714-11f1-ab55-92fbcf53809c.jpg

01

项目简介


1.功能详解


STM32智能语音三色灯

功能如下:


检测功能:系统检测周围 温湿度数据、距离、人体信号、光照强度。

显示功能:将检测到的数据显示在oled屏幕上。

控制功能:系统可以通过PWM对其进行亮度和冷光、暖光、中性光的调节。

手动模式:通过按键控制台灯的亮度。

自动模式:当环境亮度低于阈值,并且有人时,会自动调节台灯亮度;

语音控制:通过语音指令可以控制LED灯的开启,以及亮度调节和冷暖光调节和系统模式切换等;

定时提醒:用户可以设置提醒时间,当到达时间后蜂鸣器会进行提醒。

护眼功能:当系统检测到人距离台灯过近时蜂鸣器报警。

阈值调节:系统传感器阈值大小可以通过按键或者APP自行设置调节。

接入云平台:系统通过ESP8266 WIFI模块连接网络,接入机智云服务器。

远程控制:可以通过APP查看传感器数据,以及远程控制台灯、远程调节阈值。



2.材料清单

STM32F103C8T6单片机

OLED 屏幕

DHT11温湿度传感器

HC-SR501人体红外传感器

光敏传感器

HC-SR04超声波传感器

SNR8016语音模块

有源蜂鸣器

三色灯板

ESP8266-01S(WIFI模块)



02


原理图设计


bb5c33f6-5714-11f1-ab55-92fbcf53809c.png


03


PCB硬件设计


PCB图

bb6e906e-5714-11f1-ab55-92fbcf53809c.pngbb7aafac-5714-11f1-ab55-92fbcf53809c.png


04

程序设计


#include"stm32f10x.h" // Device header#include"adcx.h"#include"ldr.h"#include"oled.h"#include"dht11.h"#include"pwm.h"#include"led.h"#include"key.h"#include"tim2.h" #include"tim3.h" #include"hc_sr501.h"#include"hc_sr04.h"#include"sensormodules.h"#include"usart.h"#include"gizwits_product.h"#include"myrtc.h"#include"flash.h"#include"iwdg.h"#include"usart3.h"
#defineKEY_Long111
#defineKEY_11#defineKEY_22#defineKEY_33#defineKEY_44
#defineFLASH_START_ADDR0x0801f000//写入的起始地址
uint8_thc501;//存储人体信号uint8_tsystemModel =0;//存储系统当前模式
uint8_thour,minute,second;//时 分 秒uint8_tmenu =1;//显示菜单变量uint8_tgizwitsModeFlag;// 配网标志位
SensorModules sensorData;//声明传感器数据结构体变量SensorThresholdValue Sensorthreshold;//声明传感器阈值结构体变量

intmain(void){Buzzer_Init();LDR_Init();OLED_Init();DHT11_Init();Key_Init();HC_SR501_Init();HC_SR04_Init();
ADCX_Init();PWM_Init(100-1,720-1);Timer2_Init(9,14398);Uart2_Init(9600);Uart1_Init(115200);IWDG_Init();//初始化看门狗Uart3_Init();
MyRTC_Init();LED_Init();
Sensorthreshold.Illumination_threshold =FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASHSensorthreshold.Distance_threshold =FLASH_R(FLASH_START_ADDR+2);//从指定页的地址读FLASHSensorthreshold.timing =FLASH_R(FLASH_START_ADDR+4);//从指定页的地址读FLASH
GENERAL_TIM_Init();userInit();//完成机智云初始赋值gizwitsInit();//开辟一个环形缓冲区
Delay_ms(1000);//scanGizwitsModeKey();gizwitsSetMode(WIFI_AIRLINK_MODE);Delay_ms(1000);while(1){IWDG_ReloadCounter();//重新加载计数值 喂狗sensorScan();//获取传感器数据SNR8016();//执行语音指令
switch(menu){casedisplay_page:
MyRTC_ReadTime();//调用此函数后,RTC硬件电路里时间值将刷新到全局数组OLED_Menu_SensorData();//显示主页面传感器数据、系统模式等内容OLED_Menu();//显示主页面的固定内容TimingAlarm();if(!systemModel){LED_PWM_KEY();//按键控制LED的PWM}
//切换系统模式if(KeyNum == KEY_1){KeyNum =0;systemModel = ~systemModel;if(systemModel){currentDataPoint.valueModel =1;ledDutyRatio =0;TIM_SetCompare1(TIM1, ledDutyRatio);
}else{currentDataPoint.valueModel =0;ledDutyRatio =0;TIM_SetCompare1(TIM1, ledDutyRatio);Buzzer_OFF();}}
//判断是否进入阈值设置界面if(KeyNum == KEY_Long1){KeyNum =0;OLED_Clear();//清屏menu = settingsPage;//跳转到阈值设置界面}break;
casesettingsPage: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,Sensorthreshold.timing);
currentDataPoint.valueIllumination_threshold = Sensorthreshold.Illumination_threshold;currentDataPoint.valueDistance_threshold = Sensorthreshold.Distance_threshold;currentDataPoint.valuetiming = Sensorthreshold.timing;}break;
casetimeSettingsPage:OLED_ThresholdTime();//显示时间设置界面的内容OLED_Time_Option(SetTimeSelection());//实现间设置界面的选择功能TimeModification(SetTimeSelection());//实现时间调节功能
//判断是否退出时间设置界面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;
casegizwitsMode:if(gizwitsModeFlag ==1){//显示“热点配网”OLED_ShowChinese(2,3,38);OLED_ShowChinese(2,4,39);OLED_ShowChinese(2,5,40);OLED_ShowChinese(2,6,41);}elseif(gizwitsModeFlag ==2){//显示“一键配网”OLED_ShowChinese(2,3,34);OLED_ShowChinese(2,4,35);OLED_ShowChinese(2,5,36);OLED_ShowChinese(2,6,37);}if(!gizwitsModeFlag){KeyNum =0;OLED_Clear();menu = display_page;}break;
default:break;}
//判断上位机是否更改阈值,如更改则保存至flash中if(valueFlashflag){valueFlashflag =0;//存储修改的传感器阈值至flash内FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold,Sensorthreshold.timing);}
userHandle();//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)¤tDataPoint);//数据上传至机智云}}


05

实验效果


bb8c3bf0-5714-11f1-ab55-92fbcf53809c.jpgbb93be5c-5714-11f1-ab55-92fbcf53809c.jpg

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

    关注

    2313

    文章

    11210

    浏览量

    375265
  • 智能语音
    +关注

    关注

    11

    文章

    831

    浏览量

    50367
  • 三色灯
    +关注

    关注

    0

    文章

    7

    浏览量

    6385
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无线控制RGB三色灯系统

    项目说明:本设计基于安芯一号SLH89F5162以及蓝牙技术等实现了对RGB三色灯的无线控制功能。该设计将外形炫目,应用广泛的LED三色灯智能化技术巧妙结合后,可实现快速判定室内亮度
    发表于 11-15 14:37

    【GoKit申请】温度湿度三色指示

    项目名称或开发想法:刚刚接触arduino,希望和团队先实现样例中的宠物房监控,再实现三色灯指示温湿度等实例项目开发周期:4周以往项目开发或DIY经验:团队本职是ARM手机驱动相关,希
    发表于 04-28 15:19

    【Tisan物联网试用体验】Tisan IOT开发板 三色灯试验

    前天拿到了Tisan IOT开发板,今天先学习验证一下三色灯的试验!下面是我的试验步骤!1、下载“05开发板”开发包;2、看一下05 开发板\Tisan 教程\Tisan教程系列1——固件烧录文件夹
    发表于 11-25 16:29

    【Tisan物联网试用体验】+三色灯实验

    ` 本帖最后由 dianzi8266 于 2015-11-30 11:21 编辑 拿到了Tisan IOT开发板一段时间了,今天先学习验证一下三色灯的试验!下面是我的试验步骤!1、Tisan
    发表于 11-30 11:20

    PWM 三色灯的问题

    有人在用SDK的IOT例程中的PWM控制三色灯吗?我测试的不能彻底关闭是怎么回事?
    发表于 01-21 17:08

    请问HETDIR寄存器的置为0x08110034时,板子上的三色灯是该亮起么?那个三色灯亮起呈粉色是什么情况?是正常的么?

    本帖最后由 一只耳朵怪 于 2018-5-25 15:16 编辑 您好:我想问一下,当HETDIR寄存器的置为0x08110034时,板子上的三色灯是该亮起么?那个三色灯亮起呈粉色是什么情况?是正常的么?紧急!!
    发表于 05-25 01:47

    labview做的LED三色灯

    labview做的三色灯,每周一练习
    发表于 09-13 10:06

    微信小程序连接onenet远程控制RGB三色灯

    本次演示是基于小程序连接onenet,然后控制RGB三色灯项目,首先需要设备用MQTT上传到onenet,这部分内容在Github上已经开源。微信小程序通过https接口onenet开放接口控制设备
    发表于 10-25 16:21

    如何用个PWM去控制三色灯

    三色灯个基础颜色,用个PWM控制这个基础颜色的亮度,就能形成不同的颜色。随机给颜色,就是霓虹:固定RGB颜色变换就是跑马灯:强–>
    发表于 11-29 08:16

    【Start_DSC28034PNT湖人开发板免费体验】DSC28034PNT-基于定时器和PWM输出三色灯

    三色灯的精确控制,实现了三色灯的控制。该项目旨在通过控制不同的PWM占空比来调节三色灯的亮度,从而实现丰富多彩的灯光效果。本项目适用于工业
    发表于 07-31 21:42

    RGB三色灯的原理

    rgb的实现过程,通过定时器,进行RGB三色值得设置和百分比换算,从而改变占空比,实现颜色的调整和亮度的改变,以及渐变,闪烁等各种状态。
    发表于 01-18 15:05 266次下载

    ESP8266_app控制三色灯sdk以及app源码

    esp8266学习程序,通过手机APP来控制三色灯的变换,以及开关
    发表于 05-06 17:25 169次下载

    设备三色灯的特点

    三色灯来通知维护人员到现场进行维护,所以三色灯起到信息传递的作用是十分重要的,今天就来介绍下一款优秀的三色灯该拥有那些技术。 设备三色灯 这款无线塔
    发表于 11-09 09:15 3740次阅读

    基于RVB2601开发板的RGB三色呼吸及按键防抖

    ch2601_rgb_marquee_demo中已经有RGB三色灯的GPIO控制方式以及PWM控制方式,对其进行测试,但我拿到的测试板红色灯应该出了点问题,无法正常亮起。
    发表于 09-19 10:39 1827次阅读
    基于RVB2601开发板的RGB<b class='flag-5'>三色</b>呼吸<b class='flag-5'>灯</b>及按键防抖

    设备启停与三色灯FB块

    自动化控制设备中,每一台设备都需要启动与停止按钮,大部分的设备也都有显示设备运行状态的三色灯
    的头像 发表于 05-19 14:59 1151次阅读
    设备启停与<b class='flag-5'>三色灯</b>FB块