智能台灯的设计与实现

一、设计背景

        最近几年,青少年的近视眼患病率呈现出不断攀升并呈现低龄化的趋势。根据中国国家卫生保健委发布的二零一八年儿童青少年近视眼调研结果,我国儿童和青少年的总体近视眼患病率高达53.6%。学生近视的情况越来越严重已经成为了关乎中华民族未来发展的大问题。    因此,我设计了一种基于STM32的多功能智能台灯,旨在为儿童提供更加安全、智能化的学习环境

        该设计的主要作用是自动调节灯光亮度,提供了舒适的光照条件且保证了孩子坐姿不正确时能够得到提醒,避免了长时间坐姿不端正而导致的近视问题,并且为了方便控制,本装置加入了蓝牙模块,使得用户可以通过手机APP远程控制本装置

二、整体系统设计

1.系统设计方案

        其中按键扫描模块主要检测本设计中四个按键有无按下并返回按下的键值,距离检测模块来检测用户与桌面间的距离,温湿度模块检测当前环境温湿度,LED灯控制模块实现照明和自动调节灯光,显示模块显示时间、温湿度、距离等数据,当距离超过阈值或时间到达定时时间蜂鸣器报警

2.系统整体框图结构

三、系统硬件设计

1.系统硬件总体设计

       本系统主要有三个部分组成:输入检测部分、输出部分和信号处理控制部分。    其中输入部分主要由光敏电阻检测外部环境的光照强度,温湿度模块dht11检测外界环境温湿度,超声波距离传感器HC-SR04检测距离,按键扫描模块检测按键输入以及蓝牙模块接收手机端信号。    输出模块主要有LED灯实现照明,蜂鸣器实现警报,OLED显示模块实现信息显示,蓝牙模块HC-05实现数据传输与接收

2.LED灯光控制电路设计

        自动调光系统主要是通过光敏电阻和可调电阻电压比较电路检测光照强度,利用光敏电阻的阻值受外界光照强度影响的特性,来实现对光照强度的检测。光敏电阻的阻值随着外界光照强度的增加而减少

       为了测量光敏电阻的阻值变化,建立一个分压电路,用于测量电压和阻值的变化。用STM32的ADC将光敏电阻电路中的电压信号进行采集并转化为数字信号。将信号进行量化后经过比较来调节单片机串口输出PWM占空比来实现LED灯亮度调节

3.超声波模块

(1)发送触发信号

将Trig引脚置高电平,持续至少10us的时间,触发模块开始发送超声波信号

(2)发送超声波信号

模块会自动发送一组40kHz的超声波信号,将其送向目标物体

(3)接收回波信号

当超声波信号遇到物体时,会被反射回来,模块会自动接收回波信号,并将Echo引脚输出的高电平持续时间与回波信号的时间差(即飞行时间)进行对比

(4)计算距离

根据Echo引脚输出的高电平持续时间,可以计算出超声波信号的飞行时间

4.显示电路设计

显示电路使用OLED显示屏,能够节省电源不需背光源并且其可视区域较大

本设计中用来显示时间,距离,温度以及湿度等参数,在调试过程中,通过OLED显示器还能够更加直观了解程序的运行模式,给编程带来了很多便利

5.蜂鸣器警报电路设计

       本设计中的蜂鸣器报警电路中的NPN型三极管通常被放置在蜂鸣器与电源之间,用于控制蜂鸣器的通断,当单片机输出高电平时,通过相应的电阻将电压传递至NPN型三极管的基极区,此时基极区会发生正向偏置,电流流过NPN型三极管的发射极和基极,从而形成一个低电阻通路,使得电流流过蜂鸣器,从而使蜂鸣器发声

       当单片机输出低电平时,基极不再受到正向偏置,NPN型三极管进入截止状态,电流无法流过蜂鸣器,从而停止发声

6.温湿度检测电路设计

        DHT11数字温湿度传感器是如今应用广泛的稳定可靠的数字传感器,通过单总线与单片机串口直接相连,串口配置简单便捷。    采用时序电路进行信号的通信传输,通过与单片机的交互实现数据的发送。    当数据发送完成后,则释放总的延时信号线。    空闲态时为高电平,当单片机需要获取到DHT11收集的数据时,发送低电平信号,DHT11传感器接收到低电平信号后,向单片机返回确认信号

       在单片机发送完低电平信号后,经过一段时间的延时,DHT11将收集到的确认信号上传到单片机中,当单片机读取到高电平信息则DHT11无应答,反之则已发出应答且单片机此时可以接收DHT11实时发送的数据。    当单片机读到确认信号后,DHT11发送高电平信号,并且周期地上传数据到单片机中。    数据传输完毕后,DHT11再次发送低电平信息,并进入空闲等待状态

7.蓝牙传输电路设计

      本设计采用HC-05蓝牙模块作为无线传输模块,HC-05蓝牙模块有六根引脚分别是VCC、GND、TXD、RXD、状态指示和配置工作方式引脚,本设计只需连接前四个引脚。    该蓝牙模块为主从一体默认情况下为从机可以通过AT指令切换。    HC-05蓝牙模块具有低功耗、高速传输、稳定性强、易于使用和成本低廉等特点

四、系统软件设计

1.主程序设计

       首先需要初始化单片机和各个模块,然后计数器开始计数,按键扫描模块检测有无按键按下并返回键值;照明系统自动进入自动模式,检测周围环境光照强度,并根据周围环境光强度调节灯光亮度

       当系统为手动模式时,按下按键可调节灯光亮度,温湿度模块开始读取外部环境的温度,超声波传感器检测距离

       当人体距离桌面太近时或者定时时间到达时蜂鸣器发出声音进行提醒,蓝牙模块将信息发送至手机APP,OLED显示屏显示数据

2.按键扫描子程序设计

本设计使用了四个按键。按键扫描子程序流程如图所示

按键一用来选择台灯是否为自动模式,可以通过按下按键一来选择自动模式和手动模式;  

按键二实现的功能是加,包括在手动模式下增加光照强度以及在修改定时时间时,实现小时、分钟和秒增加;  

按键三实现的功能时减,包括光照强度的减少以及修改定时时间的减少键;  

按键四是实现功能的切换,以及OLED显示界面的切换

3.自动调光子程序设计

自动调光子程序与台灯自动工作模式关系密切。调用单片机串口读取当前光敏电阻串口的电压值,再进行ADC转换。    将读取到的ADC数值换算成光照强度数值,然后调用ADC检测函数并将读取出的数值赋值给变量。    最后根据光照强度的值调节单片机的输出串口PWM的占空比,从而实现根据周围环境光照值调节灯光亮度的功能,

若ADC数值未发生明显变化,则继续检测并重复上述步骤。  

单片机串口读取电压值进行ADC转换,再根据转换后的量对输出串口PWM进行调节从而实现灯光自动控制

4.温湿度检测子程序设计

       DHT11温湿度模块检测温湿度时,初始化单片机对应引脚作为输入模式,再发送初始信号将数据引脚输出低电平至少18ms,然后再输出高电平,持续20~40us,以发送起始信号。    DHT11模块接收到起始信号后,会输出一个80us的低电平响应信号,然后再输出一个80us的高电平确认信号。    此后会输出一个四十位的数据,最后将其中正确的湿度和温度显示出来

5.超声波测距子程序设计

        超声波模块发射脚输出一段时间高电平信号,当超声波信号发射后,通过计算发射信号和接收引脚收到信号的时间进行测量距离。    当接收到回波信号时,将接收引脚上的电平变化记录下来,并计算出回波时间。    通过回波时间和声速的关系,可以计算出超声波信号的传播距离

6.数据显示子程序设计

       数据显示子程序流程图如图所示,通过按键控制OLED显示屏内容的切换。    按下按键四时,赋予键值0到4,每按下一次键值加一,当键值为5时将键值赋值为0

当键值为0时,OLED显示器显示主界面内容包括温度、湿度、人体距离桌面距离以及当前学习时间等数据。

当键值为1时,显示界面一,此时按下加减键可以设置闹钟的小时;

当键值为2时,显示界面二此时按下加减键可以设置闹钟的分钟;

当键值为3时,显示界面三,此时按下加减键可以设置闹钟的秒;

当键值为4时,显示界面四,此时按下加减键可以设置距离阈值

7.数据接收子程序设计

       蓝牙模块使用单片机串口1进行通讯,蓝牙的RXD引脚连接单片机串口1的USART1_TX引脚,蓝牙的TXD引脚连接单片机USART1_RX引脚。    使用变量USART_RX_STA标记数据是否接收完成

       在蓝牙接收过程中,当数据发送到蓝牙后,单片机串口产生中断,将接收到的数据保存的BUF数组中,通过定时器定时10ms,如果10ms内没有接收到下一个字节,就代表此次数据接收完成,STA标志位置为接收完成。    通过读取BUF数组中的数据,并将相对应的键值赋值给变量从而实现对单片机的远程控制

8.手机端APP

       手机端APP利用APP inventor网页完成编写,由于使用蓝牙进行通讯所以需要在设计界面加入非可视组件:蓝牙客户端,然后加入组件按钮(蓝牙选择)和(蓝牙断开)用来选择所要连接的蓝牙并加入组件标签来显示当前蓝牙的连接状态

       另外编写了4个按钮,该4个按钮分别对应着硬件电路上按键一二三四。    这四个按钮分别发送四个不同的字符串,单片机接收到后,对信号进行处理,以实现手机通过蓝牙控制智能儿童书桌助手的对应按键的各个功能

五、程序

       本设计利用KEIL5软件实现程序设计,利用我们所学的编程语言,C语言是我们最熟悉的编程语言之一,由于其功能强大,C语言是当前世界上使用最广泛、最受欢迎的编程语言。在单片机设计中,C语言已经逐步完全取代汇编语言,因为相比于汇编语言,C语言编译与运行、调试十分方便,且可移植性高,可读性好,便于烧录与写入硬件系统,因此C语言被广泛应用在单片机设计中。keil软件由于其兼容单片机的设计,能够实现快速调试,并生成烧录文件,被广泛应用于C语言的编写和单片机的设计。

部分程序代码展示如下:

PWM波形控制LED灯亮度:代码中使用了STM32的定时器TIM2和GPIOA的第0号引脚(PA0)来控制LED灯的亮度。在主函数中,通过循环逐渐增加和减小PWM的占空比,从而改变LED灯的亮度。

include "stm32f10x.h"

void PWM_Configuration(void);
void Delay(__IO uint32_t nCount);

int main(void) {
  PWM_Configuration();

  while (1) {
    // 逐渐增加LED亮度
    for (uint16_t i = 0; i <= 1000; i++) {
      TIM_SetCompare1(TIM2, i);  // 设置PWM占空比,范围:0-1000
      Delay(5000);               // 延时一段时间
    }

    // 逐渐减小LED亮度
    for (uint16_t i = 1000; i > 0; i--) {
      TIM_SetCompare1(TIM2, i);
      Delay(5000);
    }
  }
}

void PWM_Configuration(void) {
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  // 配置GPIO口
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  // 配置TIM2为PWM模式
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;

  TIM_TimeBaseStructure.TIM_Period = 1000;                          // 设置周期
  TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;                     // 设置预分频
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  // PWM模式1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0;                                 // 初始占空比为0
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

  TIM_Cmd(TIM2, ENABLE);                                            // 使能TIM2
}

void Delay(__IO uint32_t nCount) {
  for (; nCount != 0; nCount--);
}


六、实现结果

  • 24
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值