一、前言
1.1 项目开发背景
随着现代教育和工作模式的不断变化,尤其是在智能化和数字化的推动下,青少年和成人的学习环境与生活方式也发生了深刻的变化。长时间使用电子产品和久坐的学习或工作方式,导致了许多健康问题,特别是在青少年群体中,近视、脊椎问题、眼疲劳等问题日益严重。尤其是孩子们在家中长时间坐在书桌前学习,往往忽视了坐姿的重要性,造成了不良的坐姿习惯。此外,环境光线的变化对眼睛健康的影响也不容忽视,过暗或过强的光线都可能对视力造成负担。
目前市场上虽然有许多台灯产品,但大多数都只是单一的照明功能,缺乏智能化管理。现有的智能台灯大多数仅能调节亮度,或者配备了定时关灯的功能,但对于坐姿的提醒、环境光线的自动调节、学习时长的管理等方面的功能则较为欠缺。而这些正是现代学习环境中亟需解决的问题。如何在保证照明效果的同时,通过科技手段提供健康管理,已经成为家长和教育工作者关心的重点。
针对这一需求,本项目设计了一款基于STM32的智能台灯,集成了多项功能,包括坐姿监测、环境光照强度自动调节、学习时长管理、语音控制和监控等。通过超声波和环境光传感器,台灯能够实时检测学生与书桌的距离和环境光线的变化,从而智能地调节台灯亮度,并在坐姿过近或光线不足时发出提醒。此外,台灯还配备了视频监控和蓝牙数据传输功能,家长可以通过手机APP远程查看孩子的学习状态,确保孩子保持健康的学习姿势。
本项目的目标是通过将智能技术与传统学习工具结合,创造一个更智能、更健康的学习环境,帮助青少年养成正确的坐姿习惯,避免长期不良坐姿导致的健康问题。同时,通过学习时长和疲劳提醒等功能,促使学生合理安排学习时间,避免长时间用眼造成的视力损伤。随着智能硬件和移动互联网的发展,用户的需求不仅仅局限于传统的功能性产品,更倾向于智能化、个性化、便捷化的使用体验,这也促使我们在本项目中采用了语音控制、APP管理等前沿技术,进一步提升了台灯的智能化水平。
通过本项目的实现,我们希望能够为广大青少年提供一个智能健康的学习工具,帮助他们在健康的环境中进行高效学习,同时为家长提供更多的便捷管理手段。
1.2 设计实现的功能
(1)坐姿距离测量与提醒
通过超声波测距模块实时监测学生与书桌的距离。当距离低于设定值(如30厘米)时,台灯会通过蜂鸣器发出提醒音,提醒学生保持合理的坐姿,避免近距离用眼带来的视力损伤。
(2)环境光强度检测
集成BH1750光强传感器,实时监测环境中的光照强度。当光线不足时,台灯自动增加亮度,确保学生在合适的光照环境下学习;如果光线过强,台灯则会自动关闭,避免浪费电能并确保舒适的学习环境。
(3)台灯亮度调整
通过PWM控制技术,支持精确调节台灯的亮度,既可以手动通过手机APP调整,也可以通过自动模式根据环境光强度自动调节。用户可根据学习需求选择合适的亮度档位。
(4)学习时长记录与疲劳提醒
台灯会记录其开灯的时间,即学习时长。当学习时长超过设定的阈值时,台灯通过语音播报模块提醒学生进行适当休息,避免长时间用眼造成的视力疲劳。学习时长和提醒阈值可通过APP进行设置和修改。
(5)语音控制功能
集成海凌科V20语音识别模块,用户可以通过语音控制台灯的开关和亮度调节。支持如“开灯”、“关灯”、“亮度一档”等指令,提高操作便捷性,尤其在学习过程中无需手动操作即可完成调节。
(6)自动与手动模式切换
提供自动模式和手动模式两种选择:
• 自动模式:根据超声波测距模块检测到的距离和光照强度自动调节台灯亮度。如果距离过近(低于30厘米),语音播报提醒“距离过近,请注意坐姿”;如果环境光线较暗,自动开启台灯;光线较强时自动关闭台灯,并播报“光线较强,已关灯”。
• 手动模式:用户可以通过手机APP手动调节台灯的亮度,无需自动控制。
(7)视频监控功能
台灯内置ESP32+OV2640模块,支持实时视频监控功能。父母可以通过手机APP查看书房中的实时视频,远程监督孩子的学习状态,确保孩子在合适的坐姿下专心学习,并且不受环境干扰。
(8)蓝牙数据传输
采用HC-05蓝牙模块实现数据传输,台灯采集的相关数据(如环境光强、坐姿距离、学习时长、亮度状态等)通过蓝牙实时传输到手机APP,方便家长随时查看和管理孩子的学习状态。
(9)OLED显示屏信息显示
集成0.96寸SPI接口OLED显示屏,实时显示台灯工作状态,包括环境光强度、坐姿距离、学习时长、当前亮度等信息,便于用户随时查看并进行调整。
(10)智能模式切换与自定义设置
用户可以通过手机APP进行智能模式切换及自定义设置,包括学习时长阈值、自动模式下的坐姿距离警报设置、亮度自动调节的光照强度阈值等。APP界面友好,用户可以方便地进行各种个性化配置。
1.3 项目硬件模块组成
(1)主控芯片 STM32F103RCT6
主控芯片负责整个系统的控制与数据处理。STM32F103RCT6具有强大的计算能力,支持多种外设接口,能够实现超声波测距、环境光强度检测、PWM调光、蓝牙通讯等多种功能。它是本项目的核心部件,负责协调各个模块的工作。
(2)环境光强度传感器 BH1750
该传感器用于检测环境中的光照强度。BH1750是一款数字输出的光传感器,能够高精度地测量周围环境的光强。根据测得的光强,主控芯片将自动调节台灯的亮度或决定是否开启台灯。
(3)超声波测距模块
该模块用于检测学生与书桌的距离,以判断其坐姿是否正确。通过超声波发射和接收原理,模块能够准确测量到距离,并将结果传输给主控芯片。如果距离过近,主控芯片会触发蜂鸣器提醒学生保持适当的坐姿。
(4)OLED显示屏(0.96寸SPI接口)
该显示屏用于实时展示台灯的工作状态和数据,包括环境光强度、测量的坐姿距离、学习时长和当前亮度等信息。OLED显示屏采用SPI接口,能够快速响应数据更新,提供清晰直观的反馈。
(5)蓝牙模块 HC-05
HC-05蓝牙模块实现台灯与手机APP之间的无线数据传输。它负责将台灯的各项实时数据传输到手机APP,同时也接收来自APP的控制指令,如调节亮度、切换模式等。该模块支持与Android手机的蓝牙配对与通信。
(6)台灯LED光源与PWM调光控制
台灯采用白色LED灯泡,通过PWM(脉宽调制)技术调节亮度。PWM调光能够精确控制台灯的亮度,根据环境光强度或用户设定的需求自动调整灯光亮度,以确保最佳学习环境。
(7)语音识别模块 海凌科V20
该语音识别模块能够识别用户的语音指令,例如“开灯”、“关灯”、“调亮度”等。它接收并处理语音输入,通过无线传输将指令传递给主控芯片,实现语音控制台灯的开关和亮度调节。
(8)语音播报模块 SYN6288
该模块负责根据台灯的工作状态通过语音提示用户。例如,在自动模式下,台灯会在环境光线较暗时播放“光线较暗 已开灯”,在学习时长超过设定值时播放“休息一下”提醒等。语音播报模块通过串口与主控芯片连接,提供清晰的语音反馈。
(9)视频监控模块 ESP32 + OV2640
该模块用于实时视频监控功能,结合ESP32和OV2640摄像头模块,可以捕捉书房内的实时画面,并通过Wi-Fi将视频流传输到手机APP。家长可以通过APP随时查看孩子的学习情况,确保孩子保持正确的坐姿和专注度。
(10)稳压电源 12V 2A
台灯系统使用12V 2A稳压电源为所有硬件模块供电。稳压电源能够提供稳定的电压和电流,确保系统正常运行,避免因电压波动而导致设备故障或性能下降。
1.4 设计思路
本项目的设计思路是通过将智能硬件与现代技术相结合,创建一个既能提升学习效率又能保障用户健康的智能台灯。设计的核心目标是通过多个传感器、语音控制、自动调节以及远程监控等功能,帮助学生改善坐姿,优化学习环境,从而降低眼疲劳和视力损伤的风险。
整个系统基于STM32F103RCT6微控制器来实现数据采集、处理和控制任务。STM32F103RCT6作为主控芯片,具有足够的运算能力和多个外设接口,能够同时处理多项功能的实现。所有模块的数据输入都由主控芯片进行实时处理,确保系统的高效运行。
在环境感知方面,系统采用了多个传感器来监测学生的学习环境。超声波测距模块实时检测学生与书桌的距离,以判断坐姿的合理性。如果学生的坐姿过近,系统会通过蜂鸣器发出提醒,提示学生保持合适的距离。此外,BH1750光照强度传感器能够监测环境光线的强度,台灯可以根据实时的光照情况自动调节亮度,确保学生在适宜的光照下学习,避免因光线过强或过弱造成的眼部不适。
为了增强用户体验,系统还引入了语音控制与语音播报功能。通过语音识别模块,用户可以通过语音指令直接控制台灯的开关、亮度调整等操作。这一设计提供更为便捷的操作方式,尤其是在学生专注学习时无需打断,减少手动操作的干扰。同时,语音播报模块能够在关键时刻提供语音提示,如“光线较暗 已开灯”或“学习时长过长,请休息一下”,帮助学生及时调整学习状态,防止过度疲劳。
为了进一步提升智能化体验,系统采用了视频监控模块(ESP32+OV2640),通过Wi-Fi将书房中的实时画面传输到父母的手机APP,方便家长随时观察孩子的学习状态。这不仅增强了家长的安心感,还确保了孩子能在没有过多干扰的环境中专注学习。
台灯的亮度调节采用PWM控制技术,可以实现细腻的亮度调整。通过手机APP,用户可以根据需要调整台灯的亮度或选择自动模式,让台灯根据环境光的变化自动调节亮度,保证学习环境的舒适性与健康性。
在整体设计上,系统注重各个模块的协同工作。通过蓝牙模块HC-05与手机APP的无线连接,台灯可以实时将采集的数据上传至APP,用户可以通过手机查看台灯的运行状态,调整设置或监控孩子的学习过程。所有数据与控制指令都通过蓝牙传输,实现了无线便捷的操作方式。
在硬件选择上,系统采用了稳定可靠的组件,确保在长期使用中不易发生故障。OLED显示屏提供直观的显示,用户可以随时查看台灯的工作状态,如环境光强度、坐姿距离、学习时长等重要信息。稳压电源为整个系统提供了稳定的电力保障,确保每个模块的正常运行。
通过以上设计思路,目标是创造一个智能、高效、健康的学习环境。台灯不仅仅是一个普通的照明设备,而是一个集成了坐姿提醒、环境适配、学习时长管理等多功能的智能产品。通过这些智能化的设计,系统能够有效地提升学生的学习效率,同时保护学生的视力健康和身体姿态。
1.5 系统功能总结
功能模块 | 功能描述 | 实现方式 |
坐姿距离测量与提醒 | 通过超声波测距模块检测学生与书桌的距离,提醒学生保持合适坐姿。当距离过近时,蜂鸣器发出提醒音。 | 超声波测距模块 + 蜂鸣器 |
环境光强度检测 | 使用BH1750传感器检测环境光强度,自动调节台灯亮度,确保最佳光照条件。光线过暗时开启台灯,光线过强时关闭台灯。 | BH1750传感器 + 主控芯片 + PWM调光控制 |
台灯亮度调整 | 支持手动或自动调节台灯亮度,自动模式下根据环境光强度调节亮度,手动模式下用户通过APP进行控制。 | PWM调光控制 + 主控芯片 + 手机APP控制 |
学习时长记录与疲劳提醒 | 记录台灯开灯的时长,当学习时长超过设定阈值时,语音播报提醒学生休息。学习时长和阈值可通过APP设置。 | 主控芯片 + 语音播报模块 + APP设置 |
语音控制功能 | 通过语音识别模块,用户可通过语音控制台灯开关及亮度调节等功能。支持指令如“开灯”、“关灯”、“调亮度”等。 | 海凌科V20语音识别模块 + 主控芯片 |
自动与手动模式切换 | 支持自动模式和手动模式切换。自动模式下,台灯根据环境光照强度和坐姿距离自动调整亮度和提示。手动模式下,通过APP手动调节亮度。 | 主控芯片 + 环境光传感器 + 超声波测距模块 + APP控制 |
视频监控功能 | 内置摄像头模块(ESP32+OV2640),实时监控学习环境,家长通过APP远程查看孩子学习状态。 | ESP32 + OV2640摄像头 + Wi-Fi传输 + 手机APP |
蓝牙数据传输 | 使用HC-05蓝牙模块将台灯的实时数据传输到手机APP,便于家长查看和控制台灯状态。 | HC-05蓝牙模块 + 主控芯片 + 手机APP |
OLED显示屏 | OLED显示屏实时显示环境光强、坐姿距离、学习时长和台灯亮度等信息,方便用户查看当前状态。 | 0.96寸OLED显示屏 + 主控芯片 |
智能模式切换与自定义设置 | 用户可通过手机APP进行智能模式的切换及自定义设置,如学习时长阈值、自动模式的坐姿距离和光照阈值等。 | 手机APP + 主控芯片 |
1.6 开发环境介绍
【1】设备端开发
本项目的设备端开发采用的是Keil uVision 5(Keil5)集成开发环境(IDE)。Keil5是一个广泛使用的开发工具,专为嵌入式系统开发设计,支持多种处理器架构,包括STM32系列微控制器。它提供了一个直观的界面,帮助开发人员进行代码编写、调试和编译,并且具有强大的调试工具,能够方便地进行单步调试和变量监控,非常适合嵌入式软件的开发。
编程语言方面,本项目采用了C语言。C语言是一种高效、灵活的编程语言,广泛应用于嵌入式系统开发中,尤其是在对性能要求较高、需要直接操作硬件的场景下。由于C语言可以直接操作寄存器,程序员能够更细粒度地控制硬件的行为,从而提高系统的效率和响应速度。
为了提高代码执行效率并节省资源,本项目决定不使用STM32的标准库(Standard Peripheral Library,SPL)和硬件抽象层(HAL)库接口。虽然这些库提供了便捷的API接口,但它们会增加代码的大小和运行时开销。因此,我们选择直接通过位运算来操作STM32的寄存器,以实现更高效的硬件控制。位运算可以让程序员更精确地控制每个硬件模块的配置和状态,减少系统的资源消耗,并且增强了代码的可移植性和可维护性。
程序的下载采用了ISP(In-System Programming)串口下载方式。ISP下载是一种通过串口接口将程序直接写入微控制器的方式,不需要额外的编程器或调试器。使用ISP下载可以简化硬件设计,降低开发成本,并且提供了灵活的开发和测试环境。通过串口与开发板连接,程序可以实时下载到STM32芯片中进行调试和测试,这使得开发过程更加高效和便捷。
整个开发环境注重效率、简洁和灵活性,采用了最直接的方式与硬件交互,保证了系统在嵌入式应用中的高效性和稳定性。
【2】APP端开发
本项目的上位机应用程序开发使用的是Qt框架,版本为5.12.6。Qt是一个跨平台的应用程序开发框架,广泛应用于GUI(图形用户界面)和嵌入式系统开发。Qt具有强大的图形界面支持和丰富的库,可以帮助开发者快速构建现代化、响应式的用户界面,同时支持多种平台,如Windows、Linux、macOS及移动设备平台(Android、iOS)等。
本项目选择的Qt版本是5.12.6,这个版本在稳定性、性能和功能性上都有很好的平衡。Qt 5.12系列是LTS(长期支持)版本,意味着它在未来几年内会获得持续的更新和维护,因此使用这个版本能够保证开发环境的稳定性和长期可维护性。
在编程语言方面,使用C++进行上位机程序的开发。C++是一种强大的编程语言,具备面向对象的特性,能够高效地处理系统级任务。C++在Qt框架中的使用非常广泛,它不仅能够创建高效的应用程序,还能充分利用Qt的信号与槽机制,方便地实现应用程序内部模块间的通信。C++语言的高效性和灵活性使得开发者能够轻松处理大量的传感器数据、控制台灯状态以及实现与硬件设备的通信。
上位机程序在Windows 10操作系统下进行开发。Windows 10为Qt开发提供了强大的开发支持,兼容Qt的所有功能,且拥有完善的调试工具和库支持。开发者可以在Windows环境下使用Qt Creator集成开发环境(IDE)进行程序编写、调试和编译,享受更快速的开发和测试流程。Windows 10的稳定性和广泛应用确保了开发过程中能够进行高效的测试和调试。
值得一提的是,本项目的上位机应用不仅支持Windows版本,还支持Android版本的编译和部署。Qt框架的跨平台能力使得同一套代码可以在不同平台上编译和运行。开发者可以将Windows版本的应用程序轻松迁移到Android平台,保证了更广泛的用户覆盖。Android版本的应用能够通过蓝牙与STM32设备端进行无线通信,查看实时数据并控制设备,因此提供了良好的用户体验。
综上所述,整个上位机开发环境通过Qt框架的跨平台特性和C++语言的高效性,确保了开发过程的高效性和应用程序的灵活性。无论是Windows平台还是Android平台,开发者都能够使用相同的代码进行开发和部署,大大提升了开发效率和后期的维护工作。
1.6 模块的技术详情介绍
【1】HC05-蓝牙模块
HC-05是一款常用的蓝牙模块,广泛应用于嵌入式系统中,特别是在STM32、Arduino等微控制器的无线通信应用中。它支持串口通信(UART),可以方便地与各种微控制器进行连接,从而实现蓝牙无线数据传输。HC-05模块支持经典蓝牙(Bluetooth 2.0)协议,能够在短距离内进行数据交换,适用于低功耗、低带宽的数据传输需求。
HC-05模块本身包含了蓝牙无线通信的核心硬件和协议栈,它的工作原理是通过无线电波进行数据的发送和接收。模块内部集成了蓝牙通信协议,可以使设备通过蓝牙与其他设备(如手机、电脑、其他蓝牙模块等)进行配对和数据交换。与蓝牙设备配对后,HC-05模块就能够通过串口接口(UART)接收和发送数据,从而实现设备间的无线通信。
在硬件接口方面,HC-05模块通常提供多个引脚,最常用的包括VCC、GND、TXD(发送数据)、RXD(接收数据)、STATE(连接状态指示)等。TXD和RXD是通过串口进行数据通信的关键引脚,可以直接与STM32、Arduino等开发板的串口接口连接。VCC和GND则是电源引脚,需要为模块提供3.3V或5V的电源(具体电压依赖于模块的型号)。
HC-05模块支持两种工作模式:主模式(Master)和 从模式(Slave)。在主模式下,HC-05可以主动发起蓝牙连接并连接到其他设备;在从模式下,HC-05等待其他设备的连接请求,并且只能接收来自主设备的连接。通常,在实际应用中,HC-05模块常常工作在从模式,即等待手机或其他设备进行配对和通信。
对于嵌入式系统开发,HC-05模块的应用非常简单,特别是在需要实现短距离无线通信时,它能通过串口与微控制器实现数据的实时传输。开发者可以通过AT命令配置HC-05模块的工作模式、波特率、设备名称等参数,使得模块更加灵活地适应不同的应用场景。
通过使用HC-05蓝牙模块,设备端与上位机(如手机、电脑)之间的数据传输得到了简化。上位机APP可以通过蓝牙与设备进行通信,实时接收传感器数据或发送控制指令,无需物理连接线缆。蓝牙的低功耗特性也使得该模块适用于电池供电的移动设备或长时间运行的嵌入式应用。HC-05蓝牙模块是一款功能强大且易于使用的无线通信模块,它通过串口通信为微控制器和智能设备之间提供了无线数据传输的能力,是实现短距离无线通信的理想选择。
【2】ESP32-CAM
ESP32-CAM 是一款基于 ESP32 芯片的开发板,集成了摄像头模块(OV2640)和多个强大功能,广泛应用于图像采集、视频监控、物联网设备等领域。它结合了 ESP32 的强大处理能力和无线通信能力,能够实现图像数据的采集、处理和远程传输,适用于各种智能应用,如智能监控、远程传感器、图像识别等场景。
ESP32-CAM 板载的核心处理器是 ESP32 微控制器,这是一款双核处理器,具有 Wi-Fi 和蓝牙的无线通信功能。ESP32 的双核架构和高性能使得它能够同时处理多个任务,例如图像采集、视频传输和数据处理,且支持多线程操作。此外,ESP32 还具有丰富的外设接口和强大的计算能力,能够有效支持图像处理、传感器采集和控制指令的执行。
该模块配备了 OV2640 摄像头传感器,能够拍摄 2MP 的图像,支持高质量的图像采集。OV2640 摄像头的分辨率和图像质量对于大多数物联网监控应用来说已经足够,能够提供清晰的图像以供分析和传输。通过 ESP32-CAM,用户可以实现实时图像捕捉,并将其通过 Wi-Fi 无线传输到云端或手机等设备,适用于远程监控、图像存储以及图像处理任务。
ESP32-CAM 模块内置了多个输入/输出引脚,包括 GPIO、ADC、PWM 等接口,可以与外部传感器和设备进行连接。通过这些引脚,ESP32-CAM 能够接入更多传感器或其他外设,从而扩展其功能。在实际应用中,开发者可以根据需要连接外部麦克风、传感器或其他模块,增强系统的多功能性。
ESP32-CAM 的无线通信能力是其一大优势。它支持 Wi-Fi 连接,可以通过无线网络将采集的图像数据实时传输到远程设备或云端平台。此外,ESP32 还支持蓝牙功能,能够与蓝牙设备进行连接或作为主设备进行通信。Wi-Fi 和蓝牙的双重支持使得 ESP32-CAM 模块在各种物联网应用中都非常适用,特别是在智能家居、远程监控和传感器网络中。
在开发方面,ESP32-CAM 模块支持通过 Arduino IDE 和 ESP-IDF(Espressif 提供的官方开发框架)进行编程和开发。开发者可以使用这些开发工具方便地编写、调试和上传代码,快速实现图像采集和处理的功能。同时,ESP32-CAM 也支持通过串口调试,帮助开发者进行实时调试和问题排查。
ESP32-CAM 模块以其高性价比、强大的处理能力和无线通信能力,成为许多物联网应用的首选平台。无论是图像采集、远程监控,还是数据传输和处理,ESP32-CAM 都能够提供可靠的解决方案,适用于智能家居、安防监控、机器人视觉等各种应用。
【3】海凌科V20模块
海凌科 V20 语音识别模块是一款高性能的语音识别模块,专为嵌入式系统设计,广泛应用于智能家居、语音控制、物联网设备等领域。该模块通过语音识别技术使得设备能够响应特定的语音命令,实现人与机器之间的自然互动。V20模块具备高效、准确的语音识别能力,能够在不同噪声环境下实现稳定的识别效果,非常适合用于嵌入式语音控制系统。
V20模块采用了先进的语音识别技术,并内置了语音识别库,可以处理常见的语音命令识别任务。该模块支持用户自定义命令集和离线语音识别,这意味着它可以不依赖于云服务进行语音指令的解析,大大提高了响应速度并减少了网络延迟。通过预先配置好的指令库,V20可以快速准确地识别和执行命令,适用于各种智能设备的控制应用。
V20模块具有较强的噪声抑制能力,能够在一定程度上消除环境噪音对语音识别的影响。即使在嘈杂的环境中,V20仍然能够较为准确地捕捉语音指令并进行识别。这一特点使得V20非常适合用于现实环境中的语音控制,能够保证在家居、办公室等复杂环境中的良好性能。
该模块的使用非常简单,通过串口(UART)与主控芯片(如STM32、Arduino等)进行连接。V20模块通过串口接收语音指令并将识别结果传递给主控芯片,主控芯片根据识别结果执行相应的操作。V20模块支持多种接口,包括硬件串口、GPIO口等,方便开发者根据实际应用需求进行灵活连接。
V20模块不仅支持语音指令的识别,还能够进行语音反馈功能。结合语音播报模块,V20可以实现语音反馈,增强用户与设备的交互体验。比如,当用户发出某个命令时,V20可以通过语音播报模块返回操作的结果或状态,进一步提升设备的智能化水平。
在开发上,海凌科V20语音识别模块有着较为简单的接口和灵活的配置选项,开发者可以根据需要进行命令的设置、识别模式的选择以及系统的调优。其开发支持丰富的文档和工具,帮助开发者快速实现语音识别功能并进行二次开发。
海凌科V20语音识别模块是一款高性能、易于集成的语音识别解决方案,它不仅支持语音命令的离线识别,还具备出色的噪声抑制能力,适用于各种语音控制应用。凭借其强大的功能和简单的使用接口,V20模块为嵌入式系统和物联网设备提供了便捷的语音交互功能,使得设备能够更加智能化并与用户进行更自然的互动。
二、硬件选型(搭建模型参考)
如果大家想自己搭建模型,完成这个项目的功能测试。
那么可以看参考下面的部分硬件模块选型。
1. STM32F103RCT6 主控芯片
• 作为项目的核心控制单元,负责处理所有输入、输出信号,并控制其他硬件模块的协同工作。
2. BH1750 环境光强度传感器
• 用于检测环境的光照强度,获取周围环境的光线信息,以调整台灯亮度并提供反馈。
3. 超声波测距模块
• 用于检测人体距离书桌的距离,帮助判断坐姿是否正确,提醒用户保持合适的坐姿距离。
4. 0.96寸 SPI接口 OLED显示屏
• 用于实时显示台灯的工作状态,包括光照强度、测量距离、学习时长和灯光亮度等信息。
5. HC-05 蓝牙模块
• 负责与手机APP进行数据传输,通过蓝牙实现设备与手机之间的无线通信,传输环境数据、学习时长等信息。
6. 12V 2A 稳压电源
• 为整个系统提供稳定的电源,确保各个硬件模块能够正常工作。
7. 白色 LED 灯泡(PWM控制)
• 作为台灯的光源,通过PWM控制亮度,支持根据环境光和用户设置自动调整亮度。
8. QT设计的Android手机APP
• 用于与硬件设备进行交互,支持设置学习时长、调整台灯亮度、切换模式、查看摄像头视频等功能。
9. ESP32+OV2640 监控摄像头模块
• 用于捕捉实时图像,监控学生的学习情况,实时传输视频到手机APP。
10. 海凌科 V20 语音识别模块
• 用于实现语音控制功能,用户可以通过语音指令控制台灯的开关和亮度调节。
1. SYN6288 语音播报模块
• 用于实现语音反馈,当台灯的状态发生变化时,提供语音提醒,增强用户体验。
三、STM32代码设计
当前项目使用的相关软件工具,模块源码以及基础学习的视频教程可以去网盘里下载:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
【1】代码框架
下面是完整的 main.c
代码框架示例,需要先封装好其他子模块代码(如超声波测距、环境光检测、OLED显示、语音控制、蓝牙通讯等)已经写好并且封装为相应的库函数。
#include "stm32f10x.h"
#include "gpio.h"
#include "usart.h"
#include "tim.h"
#include "lcd.h" // OLED显示
#include "ultrasonic.h" // 超声波测距
#include "bh1750.h" // 环境光强度传感器
#include "bluetooth.h" // 蓝牙通信
#include "voice.h" // 语音识别模块
#include "pwm.h" // PWM控制LED亮度
// 定义常量
#define MAX_STUDY_TIME 3600 // 最大学习时间阈值 (秒),可以根据实际需求调整
#define DISTANCE_THRESHOLD 30 // 最小距离阈值(单位:cm)
// 全局变量
volatile uint32_t study_time = 0; // 学习时长(单位:秒)
volatile uint32_t light_intensity = 0; // 环境光强度(单位:lx)
volatile uint32_t distance = 0; // 坐姿距离(单位:cm)
volatile uint8_t lamp_brightness = 0; // 台灯亮度(0-100)
// 系统初始化
void System_Init(void) {
// 初始化时钟
SystemClock_Config();
// 初始化GPIO(如:LED、蜂鸣器等)
GPIO_Init();
// 初始化串口通信
USART_Init();
// 初始化定时器
TIM_Init();
// 初始化超声波测距模块
Ultrasonic_Init();
// 初始化环境光强度传感器
BH1750_Init();
// 初始化蓝牙模块
Bluetooth_Init();
// 初始化PWM控制LED亮度
PWM_Init();
// 初始化OLED显示屏
OLED_Init();
// 初始化语音模块
Voice_Init();
}
// 更新台灯状态
void Update_Lamp_Status(void) {
// 获取当前环境光强度
light_intensity = BH1750_Read_Light_Intensity();
// 获取当前坐姿距离
distance = Ultrasonic_Read_Distance();
// 获取当前学习时长
study_time = TIM_Get_Elapsed_Time(); // 假设定时器提供了已经消耗的时间
// 处理学习时长提醒
if (study_time >= MAX_STUDY_TIME) {
Voice_Play_Message("学习时间过长,请休息一下!");
}
// 检查坐姿距离
if (distance < DISTANCE_THRESHOLD) {
Voice_Play_Message("距离过近,请注意坐姿!");
}
// 根据光照强度调整台灯亮度
if (light_intensity < 100) {
lamp_brightness = 100; // 环境光较暗,开灯并调高亮度
PWM_Set_Light_Brightness(lamp_brightness);
Voice_Play_Message("光线较暗,已开灯");
} else if (light_intensity > 200) {
lamp_brightness = 0; // 环境光较强,关闭灯
PWM_Set_Light_Brightness(lamp_brightness);
Voice_Play_Message("光线较强,已关灯");
} else {
lamp_brightness = 50; // 环境光适中,设置为中等亮度
PWM_Set_Light_Brightness(lamp_brightness);
}
// 更新OLED显示屏
OLED_Display_Status(distance, light_intensity, study_time, lamp_brightness);
}
// 主循环
int main(void) {
// 系统初始化
System_Init();
// 进入主循环
while (1) {
// 定期更新台灯状态
Update_Lamp_Status();
// 检查蓝牙通信
Bluetooth_Check_Connection();
// 处理语音识别指令
Voice_Check_Command();
// 如果需要,定期清除学习时长和报警
if (/* 按下重置按钮 */) {
study_time = 0;
Voice_Play_Message("学习时长已重置");
}
// 其他功能处理...
}
return 0;
}
【2】代码说明
1. 系统初始化 (System_Init
):
• 初始化时钟、GPIO、USART、定时器等系统基本功能。
• 初始化各个硬件模块,包括超声波测距、环境光传感器、蓝牙通信、OLED显示屏等。
2. 台灯状态更新 (Update_Lamp_Status
):
• 获取环境光强度、坐姿距离和学习时长。
• 根据坐姿距离、学习时长和环境光强度来控制台灯亮度。
• 播放语音提示(例如:提醒用户调整坐姿、学习时间过长等)。
3. 主循环 (main
):
• 在主循环中不断更新台灯状态,检查蓝牙连接状态,接收语音命令。
• 如果按下重置按钮,可以清除学习时长和报警。
【2】模块和函数
• 超声波测距模块:提供 Ultrasonic_Init
和 Ultrasonic_Read_Distance
函数来初始化和获取距离。
• 环境光强度传感器(BH1750):提供 BH1750_Init
和 BH1750_Read_Light_Intensity
函数来初始化和获取光照强度。
• 蓝牙模块:提供 Bluetooth_Init
和 Bluetooth_Check_Connection
函数来初始化和检查蓝牙连接。
• 语音模块:提供 Voice_Init
和 Voice_Play_Message
函数来初始化语音模块和播放语音提示。
• PWM控制台灯亮度:提供 PWM_Init
和 PWM_Set_Light_Brightness
函数来控制台灯亮度。
• OLED显示屏:提供 OLED_Init
和 OLED_Display_Status
函数来初始化显示屏并实时更新显示内容。
• 定时器:提供 TIM_Init
和 TIM_Get_Elapsed_Time
函数来初始化定时器和获取学习时长。
四、Qt上位机代码设计
【1】C++版本的代码示例
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QSlider>
#include <QGroupBox>
#include <QPalette>
#include <QString>
class SmartDeskLampApp : public QWidget {
Q_OBJECT
public:
SmartDeskLampApp(QWidget *parent = nullptr) : QWidget(parent) {
setWindowTitle("智能台灯控制");
setGeometry(100, 100, 400, 600); // 设置窗口初始大小
setStyleSheet("background-color: #2e2e2e; color: #ffffff; font-size: 18px;"); // 设置背景色和字体样式
initUI();
}
private slots:
void update_brightness_label(int value) {
brightnessLabel->setText("亮度:" + QString::number(value) + "%");
}
void turn_on_light() {
studyDurationLabel->setText("学习时长: 1 分钟"); // 示例:开灯后开始记录学习时长
}
void turn_off_light() {
studyDurationLabel->setText("学习时长: 0 分钟"); // 示例:关灯后停止学习时长记录
}
private:
void initUI() {
QVBoxLayout *mainLayout = new QVBoxLayout;
// 显示信息的标签
lightIntensityLabel = new QLabel("光照强度: 500 lux");
distanceLabel = new QLabel("测量距离: 30 cm");
studyDurationLabel = new QLabel("学习时长: 0 分钟");
lightBrightnessLabel = new QLabel("台灯亮度: 50%");
// 设置标签样式
for (QLabel *label : {lightIntensityLabel, distanceLabel, studyDurationLabel, lightBrightnessLabel}) {
label->setAlignment(Qt::AlignCenter);
}
// 添加显示标签
mainLayout->addWidget(lightIntensityLabel);
mainLayout->addWidget(distanceLabel);
mainLayout->addWidget(studyDurationLabel);
mainLayout->addWidget(lightBrightnessLabel);
// 台灯亮度调整
QGroupBox *brightnessGroup = createBrightnessControl();
mainLayout->addWidget(brightnessGroup);
// 台灯开关
QGroupBox *powerButtonGroup = createPowerButton();
mainLayout->addWidget(powerButtonGroup);
setLayout(mainLayout);
}
QGroupBox* createBrightnessControl() {
QGroupBox *brightnessGroup = new QGroupBox("台灯亮度调节");
QSlider *slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 100);
slider->setValue(50);
slider->setStyleSheet("QSlider::groove:horizontal { background: #4e4e4e; height: 10px; border-radius: 5px; }"
"QSlider::handle:horizontal { background: #00FF00; border-radius: 5px; width: 20px; }");
connect(slider, &QSlider::valueChanged, this, &SmartDeskLampApp::update_brightness_label);
brightnessLabel = new QLabel("亮度:50%");
brightnessLabel->setAlignment(Qt::AlignCenter);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(slider);
layout->addWidget(brightnessLabel);
brightnessGroup->setLayout(layout);
return brightnessGroup;
}
QGroupBox* createPowerButton() {
QGroupBox *group = new QGroupBox("台灯开关");
QPushButton *onButton = new QPushButton("开灯");
QPushButton *offButton = new QPushButton("关灯");
onButton->setStyleSheet("background-color: #28a745; color: white; font-size: 18px; padding: 10px; border-radius: 5px;");
offButton->setStyleSheet("background-color: #dc3545; color: white; font-size: 18px; padding: 10px; border-radius: 5px;");
connect(onButton, &QPushButton::clicked, this, &SmartDeskLampApp::turn_on_light);
connect(offButton, &QPushButton::clicked, this, &SmartDeskLampApp::turn_off_light);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(onButton);
layout->addWidget(offButton);
group->setLayout(layout);
return group;
}
private:
QLabel *lightIntensityLabel;
QLabel *distanceLabel;
QLabel *studyDurationLabel;
QLabel *lightBrightnessLabel;
QLabel *brightnessLabel;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
SmartDeskLampApp window;
window.show();
return app.exec();
}
【2】Python版本代码示例
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QSlider, QGroupBox
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPalette
class SmartDeskLampApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("智能台灯控制")
self.setGeometry(100, 100, 400, 600) # 设置窗口初始大小
self.setStyleSheet("background-color: #2e2e2e; color: #ffffff; font-size: 18px;") # 设置背景色和字体样式
self.initUI()
def initUI(self):
main_layout = QVBoxLayout()
# 显示信息的标签
self.light_intensity_label = QLabel("光照强度: 500 lux")
self.distance_label = QLabel("测量距离: 30 cm")
self.study_duration_label = QLabel("学习时长: 0 分钟")
self.light_brightness_label = QLabel("台灯亮度: 50%")
# 设置标签样式
for label in [self.light_intensity_label, self.distance_label, self.study_duration_label, self.light_brightness_label]:
label.setAlignment(Qt.AlignCenter)
# 添加显示标签
main_layout.addWidget(self.light_intensity_label)
main_layout.addWidget(self.distance_label)
main_layout.addWidget(self.study_duration_label)
main_layout.addWidget(self.light_brightness_label)
# 台灯亮度调整
brightness_group = self.create_brightness_control()
main_layout.addWidget(brightness_group)
# 台灯开关
power_button_group = self.create_power_button()
main_layout.addWidget(power_button_group)
self.setLayout(main_layout)
def create_brightness_control(self):
brightness_group = QGroupBox("台灯亮度调节")
slider = QSlider(Qt.Horizontal)
slider.setRange(0, 100)
slider.setValue(50)
slider.setStyleSheet("QSlider::groove:horizontal { background: #4e4e4e; height: 10px; border-radius: 5px; }"
"QSlider::handle:horizontal { background: #00FF00; border-radius: 5px; width: 20px; }")
slider.valueChanged.connect(self.update_brightness_label)
brightness_label = QLabel("亮度:50%")
brightness_label.setAlignment(Qt.AlignCenter)
layout = QVBoxLayout()
layout.addWidget(slider)
layout.addWidget(brightness_label)
brightness_group.setLayout(layout)
self.brightness_label = brightness_label
return brightness_group
def create_power_button(self):
group = QGroupBox("台灯开关")
on_button = QPushButton("开灯")
off_button = QPushButton("关灯")
on_button.setStyleSheet("background-color: #28a745; color: white; font-size: 18px; padding: 10px; border-radius: 5px;")
off_button.setStyleSheet("background-color: #dc3545; color: white; font-size: 18px; padding: 10px; border-radius: 5px;")
on_button.clicked.connect(self.turn_on_light)
off_button.clicked.connect(self.turn_off_light)
layout = QHBoxLayout()
layout.addWidget(on_button)
layout.addWidget(off_button)
group.setLayout(layout)
return group
def update_brightness_label(self, value):
self.brightness_label.setText(f"亮度:{value}%")
def turn_on_light(self):
self.study_duration_label.setText("学习时长: 1 分钟") # 示例:开灯后开始记录学习时长
def turn_off_light(self):
self.study_duration_label.setText("学习时长: 0 分钟") # 示例:关灯后停止学习时长记录
if __name__ == '__main__':
app = QApplication(sys.argv)
window = SmartDeskLampApp()
window.show()
sys.exit(app.exec_())
五、总结
本项目设计并实现了一款基于STM32的智能坐姿矫正台灯,结合了环境监测、灯光控制、学习时长记录、语音控制等多种功能,旨在为学生提供一个更加智能、健康的学习环境。通过集成超声波测距、环境光强度感应、语音识别和蓝牙通信等技术,该台灯不仅能够实时监测学习环境,还能提供个性化的学习提醒和疲劳预警,帮助学生调整坐姿,保持正确的用眼习惯,从而有效提高学习效率和健康水平。
项目中使用的硬件如STM32F103RCT6主控芯片、HC-05蓝牙模块、ESP32-CAM监控摄像头等,确保了系统的稳定性和可扩展性。而在软件方面,利用Keil5开发环境对STM32进行了编程,确保了硬件控制的精确性。同时,通过Qt框架开发的Android APP,用户可以远程控制台灯的亮度、查看学习时长、切换工作模式等功能,实现了人性化的操作和实时数据反馈。
本项目不仅具备了智能控制和健康提醒功能,还通过蓝牙和视频监控功能,方便家长实时了解孩子的学习状态,避免了干扰,提供了更加贴心的解决方案。此外,语音识别与语音播报的应用,使得操作更加便捷,通过语音指令即可进行灯光开关与亮度调节,提升了用户体验。
本项目不仅展示了现代智能硬件与嵌入式开发的结合,也通过对用户需求的细致研究,设计了符合实际应用的功能模块。项目的成功实现不仅具有较强的实用价值,同时也为智能硬件的创新应用提供了一个参考范例。未来,随着技术的不断发展,本项目可以进一步扩展更多功能,如人工智能分析学习数据、自动调整台灯亮度和学习提醒等,使其成为一款更为全面和智能的学习辅助工具。