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

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

3天内不再提示

基于stm32f407zgt6的夜间灯光照明系统设计

冬至子 来源:Anakin 作者:Anakin 2023-08-01 15:29 次阅读

项目开发背景

随着全球人口老龄化趋势日益明显,老年人的生活需求成为社会关注的焦点之一。在晚年,老年人在夜间的照明需求更为重要,因为他们在夜晚的活动较为频繁,可能需要多次起夜、进出卧室或浴室等。
老年人在夜间面临一系列独特的挑战,包括视力下降、平衡问题和容易产生夜间惊恐等。这些问题增加了老年人在黑暗中移动的风险,可能导致摔倒和其他意外事故。因此,为老年人设计一套安全、智能的夜间灯光照明系统,成为了提高老年人生活质量、增强其安全感的重要举措。
夜间灯光照明系统的开发背景还源于现代科技的进步。随着智能家居物联网等技术的迅速发展,人们越来越能够实现智能化、个性化的生活方式。对于老年群体,智能照明系统可以根据其活动习惯和需求,自动调节光线亮度和颜色,提供更为舒适、安全的环境。
此外,节能环保也是夜间灯光照明系统开发背景中的一个重要考虑因素。传统照明设备可能在老年人不需要时继续工作,造成能源浪费。而智能夜间灯光系统可以通过传感器检测老年人的活动,根据需求自动开关或调整光线,达到节能的目的。
综上所述,针对老年群体的夜间灯光照明系统是为了解决老年人在夜间活动中的安全和舒适问题,提高其生活质量,适应老龄化社会的需求,并兼顾节能环保的要求。这样的照明系统在为老年人提供更好的生活体验的同时,也体现了科技进步为社会带来的实际益处。

项目硬件选择

采用stm32f407zgt6芯片进行运算处理;
采用ap3216c传感器检测光强和距离;
采用rw007 wifi模块进行通信处理。
项目主要功能
通过接近与光强传感器感测人体靠近并开启灯光照明系统
统计老人夜间的如厕次数并将数据上传云端进行身体健康监测

项目具体实现

1、程序流程图

1.jpg

2、光强和距离数据的采集(判断是否有人接近,检测到人体后开启照明系统):

while (1)
    {
        rt_pin_write(PIN_LED3, PIN_LOW);
        rt_uint16_t ps_data;
        float brightness;
        /* 读 接 近 感 应 值 */
        ps_data = ap3216c_read_ps_data(dev);
        /* 读 光 照 强 度 值 */
        brightness = ap3216c_read_ambient_light(dev);
        if (brightness <= 0.5 && ps_data <= 20)
            {
                rt_pin_write(PIN_LED1, PIN_HIGH);
                rt_pin_write(PIN_LED2, PIN_HIGH);
            }
        else if (brightness <= 0.5 && ps_data > 20)
            {
                //LOG_D("ps:%d", ps_data);
                rt_pin_write(PIN_LED1, PIN_LOW);
                rt_pin_write(PIN_LED2, PIN_LOW);
                add();
                rt_thread_mdelay(10000);
            }
        else
            {
                rt_pin_write(PIN_LED1, PIN_HIGH);
                rt_pin_write(PIN_LED2, PIN_HIGH);
            }
        rt_thread_mdelay(399);
        rt_pin_write(PIN_LED3, PIN_HIGH);
        rt_thread_mdelay(399);
    }

3、自动联网功能:

#define WLAN_SSID "test"
#define WLAN_PASSWORD "12345678"
#define NET_READY_TIME_OUT (rt_tick_from_millisecond(15 * 1000))
static void print_wlan_information(struct rt_wlan_info info,int index);
static int wifi_autoconnect(void);
static struct rt_semaphore net_ready;
static struct rt_semaphore scan_done;
const char * ssid="test";
const char * key="12345678";
int main(void)
{
static int i = 0;
int result = RT_EOK;
struct rt_wlan_info info;
rt_wlan_connect(ssid, key);
/
等待 500 ms 以便 wifi 完成初始化 /
rt_thread_mdelay(500);
/
扫描热点 /
LOG_D("start to scan ap ...");
/
执行扫描 */
rt_sem_init(&scan_done,"scan_done",0,RT_IPC_FLAG_FIFO);
rt_wlan_register_event_handler(RT_WLAN_EVT_SCAN_REPORT, wlan_scan_report_hander,&i);
rt_wlan_register_event_handler(RT_WLAN_EVT_SCAN_DONE, wlan_scan_done_hander,RT_NULL);
if(rt_wlan_scan() == RT_EOK)
{
LOG_D("the scan is started... ");
}else
{
LOG_E("scan failed");
}
/*等待扫描完毕 /
rt_sem_take(&scan_done,RT_WAITING_FOREVER);
/
热点连接 /
LOG_D("start to connect ap ...");
rt_sem_init(&net_ready, "net_ready", 0, RT_IPC_FLAG_FIFO);
/
注册 wlan ready 回调函数 /
rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wlan_ready_handler, RT_NULL);
/
注册 wlan 断开回调函数 /
rt_wlan_register_event_handler(RT_WLAN_EVT_STA_DISCONNECTED, wlan_station_disconnect_handler, RT_NULL);
/
同步连接热点 /
result = rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);
if (result == RT_EOK)
{
rt_memset(&info, 0, sizeof(struct rt_wlan_info));
/
获取当前连接热点信息 /
rt_wlan_get_info(&info);
LOG_D("station information:");
print_wlan_information(&info,0);
/
等待成功获取 IP /
result = rt_sem_take(&net_ready, NET_READY_TIME_OUT);
if (result == RT_EOK)
{
LOG_D("networking ready!");
msh_exec("ifconfig", rt_strlen("ifconfig"));
}
else
{
LOG_D("wait ip got timeout!");
}
/
回收资源 /
rt_wlan_unregister_event_handler(RT_WLAN_EVT_READY);
rt_sem_detach(&net_ready);
}
else
{
LOG_E("The AP(%s) is connect failed!", WLAN_SSID);
}
rt_thread_mdelay(5000);
//LOG_D("ready to disconect from ap ...");
//rt_wlan_disconnect();
/
自动连接 */
LOG_D("start to autoconnect ...");
wifi_autoconnect();
return 0;
}
4、云平台的自动初始化与数据上传:

static void onenet_upload_entry(void *parameter)
{
while(1)
{
if (onenet_mqtt_upload_digit("Toilet Frequency", value) < 0)
{
LOG_E("upload has an error, stop uploading");
break;
}
else
{
LOG_D("buffer : {"Toilet Frequency":%d}", value);
}
rt_thread_delay(rt_tick_from_millisecond(30 * 1000));
}
}
int onenet_upload_cycle(void)
{
rt_thread_t tid;
tid = rt_thread_create("onenet_send",
onenet_upload_entry,
RT_NULL,
2 * 1024,
RT_THREAD_PRIORITY_MAX / 3 - 1,
5);
if (tid)
{
rt_thread_startup(tid);
}
return 0;
}

项目成品展示

1、夜间照明系统工作示意图

2、如厕频率数据实时上传onenet:

1.jpg

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

    关注

    2526

    文章

    48104

    浏览量

    740099
  • wifi模块
    +关注

    关注

    60

    文章

    360

    浏览量

    72191
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38892
  • STM32F407ZGT6
    +关注

    关注

    4

    文章

    4

    浏览量

    4734
  • OneNET
    +关注

    关注

    1

    文章

    44

    浏览量

    12577
收藏 人收藏

    评论

    相关推荐

    stm32f407zgt6上移植emwin怪问题

    stm32f407zgt6上移植emwin,在旺宝红龙的板子上可以跑,但在我的板子上总是卡在GUI_Init(),stm32f407zgt6也换了两家的货,真是百思不得其解,望高手指点。原理图和PCB附下,程序可以发邮件。
    发表于 01-19 23:08

    stm32f407zgt6封装引脚图

    stm32f407zgt6GPIOA 16个GPIOB 16个GPIOC 16个GPIOD 16个GPIOE 16个GPIOF 16个GPIOG 16个GPIOH 2个stm32f407zgt6封装
    发表于 08-04 09:20

    如何对STM32F407ZGT6进行仿真

    问题的出现和解决: 正确操作Proteus8.9仿真STM32F407ZGT6
    发表于 08-04 06:17

    呼吸机控制芯片STM32F407ZGT6的Proteus仿真

    呼吸机控制芯片STM32F407ZGT6的Proteus仿真系列_003_Keys编程和操作实验展示: 呼吸机控制芯片STM32F407ZGT6的Proteus仿真系列...
    发表于 08-04 07:26

    STM32F407ZGT6是什么

    目录前言一、项目介绍1.1 项目名称1.2 项目设计思路二、硬件准备2.1 STM32F407ZGT6三、软件准备3.1 Keil53.2 STM32f407固件库3.3
    发表于 08-10 06:24

    stm32f407zgt6stm32f407vet6有多少个通用io口呢

    stm32f407zgt6有多少个通用io口呢?stm32f407vet6有多少个通用io口呢?
    发表于 10-14 11:13

    STM32F407ZGT6芯片有哪几种低功耗模式

    STM32F407ZGT6芯片的内核是什么?STM32F407ZGT6芯片有哪几种低功耗模式?
    发表于 10-18 09:47

    如何对STM32F407ZGT6系列进行Proteus仿真

    在VSM Studio GCC编译器中如何对STM32F407ZGT6系列进行Proteus仿真?有哪些步骤?
    发表于 10-21 06:38

    STM32F407ZGT6的引脚是如何进行接线的

    STM32F407ZGT6的引脚是如何进行接线的?如何去实现STM32F407ZGT6串行通信的代码?
    发表于 10-21 06:00

    STM32F407ZGT6的引脚功能是什么

    STM32F407ZGT6有哪些引脚?STM32F407ZGT6的引脚功能是什么?
    发表于 10-21 08:49

    STM32F407ZGT6开发板的固件库之间有何关系

    STM32F407ZGT6开发板芯片有何性能呢?STM32F407ZGT6开发板的固件库之间有何关系?
    发表于 10-22 09:19

    STM32F407ZGT6开发板是如何去实现串口接收的

    STM32F407ZGT6开发板是如何去实现串口接收的?STM32F407ZGT6开发板有哪几种方法可以实现串口接收呢?
    发表于 12-01 06:08

    STM32F407ZGT6的串口通信是什么?

    STM32F407ZGT6的串口通信是什么?
    发表于 12-10 07:21

    stm32f407Zgt6与hc05蓝牙模块通信步骤

    stm32f407Zgt6 与 hc05蓝牙模块通信步骤stm32f407Zgt6串口配置hc05串口配置步骤1.配置 stm32串口2.配置蓝牙串口3.通信,主要是stm32串口中断
    发表于 03-02 07:08

    怎么配置STM32F407ZGT6的USB串口呢

    求大佬指导,单用RT-Thread Studio,怎么配置STM32F407ZGT6的USB串口.
    发表于 12-21 14:43