新闻中心

EEPW首页 > 设计应用 > 多功能智能时钟的设计

多功能智能时钟的设计

作者:谢志平时间:2020-01-20来源:电子产品世界收藏

  谢志平(广东省技师学院,广东 惠州 516100)
  摘  要:充分利用32位单片机内部强大资源,开发了一种将电子时钟、倒计时器、简易心率、天气预报、体温检测装置与蓝牙音响系统结合的电子设备。采用了高精度时钟芯片DS3231,能做到时间精准;采用了ESP8266Wi-Fi模块进行授时和天气预报功能;采用了专用血氧传感器芯片MAX30102,体积小,功耗低,能方便检测血氧与心率;利用无线串口HC-12模块实现了远距离无线遥控功能。经实际测试,达到了预期的各项功能。
  关键词:单片机;高精度;Wi-Fi模块;无线遥控

本文引用地址:http://www.eepw.com.cn/article/202001/409438.htm

  1 关键核心技术

  1.1 单片机部分

  单片机为STM32主流型号,是一种高性能、低成本、低功耗的嵌入式单片机。整个系统分为主机和遥控器:主机采用LED全彩屏显示,遥控器采用OLED显示屏[2]。LED显示屏可以采用市场上主流的P3、P2.5小间距高清LED显示屏,利用STM32单片机CPU速度优势,采用动态扫描技术,既节约电能,又能达到高清显示的目的。 整个系统结构如图1所示。

1581328940459635.jpg

  1.2 时钟芯片

  时钟芯片采用了DS3231,该芯片是低成本、高精度I2C实时时钟(RTC),具有集成的温补晶振(TCXO)和晶体,在没有Wi-Fi授时时,正常温度工作范围内精度为±2×10-6,走时非常精准,优于普通钟表,农历的算法和星期算法100年内零误差。
  1.3 Wi-Fi授时与天气数据采集

  Wi-Fi模块采用ESP8266。接收天气时间用arduino程序编写,arduino程序的示例做得好,容易快速上手,通 过ESP8266读天气及时间程序就是用arduino程序里的示例修改的。在其基础上增加字符串处理,把收到的网站数据重新整理成比较简单的字符串。由于是个人应用,所以参数需根据实际情况进行修改。如:在ESP8266例程里相应的位置将实际使用的Wi-Fi名改为test ,密码为123456789。模块就能自动连接到这个test了。
  WiFi.mode(WIFI_STA);

  WiFiMulti.addAP(“test”, “123456789”);

  如果要查询指定地区的天气,利用免费开放的天气查询网站,在例程里相应的位置直接修改当地的地址。如要查询惠州地区的天气,则:http.begin(“http://www.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theUserID=&theCityCode=惠州”)。
  1.4 血氧饱和度与心率采集

  身体细胞需要氧气来进行有氧呼吸。呼吸是细胞获得有用能量的关键方法之一。血氧饱和度是血液中被氧结合的氧合血红蛋白(HbO2)的容量占全部可结合的血红蛋白(Hb)容量的百分比,即血液中血氧的浓度,它是呼吸循环的重要生理参数。
  血氧传感器采用Maxim公司的MAX30102[4],是一种专为可穿戴设备设计开发的血氧饱和度和心率监测传感器,它是集光源、接收和滤波及数字化为一体。芯片功耗极低,采用了1.8 V内核供电,采用I2C标准通信,可用软件关断芯片,待机电流低至0.7 μA。芯片内集成的光源为660 nm的红光和880 nm的红外光,接收端为高灵敏度的光敏三极管,接收到的信号进行放大后可进行模拟滤波和数字滤波,然后将测得的数据存放到内部存储器中,供外部控制器读取。电路见图2。

1581328971811841.jpg

  内部LED通信是通过一个标准的I2C兼容接口,该模块可以通过软件在零待机电流的情况下关闭,使电源导轨始终处于通电状态。
  脉冲血氧仪需要两种不同的波长来执行测量。MAX30102集成了红色和红外 LED 驱动器,可调制血氧饱和度(SPO2)和心率(HR)测量的 LED 脉冲。LED 电流可在适当的电源电压下从0~50 mA进行编程。LED 脉冲宽度可编程为69~411 μs,使算法能够根据使用情况优化血氧饱和度(SPO2)和心率(HR)的精度和功耗。图3为实物图。

微信截图_20200210180111.jpg

  数据的读取方法:设置一个串行通信_周期任务函数,当 USB 缓冲区中存在数据时,此函数会分析数据,并在是有效的命令时执行。
  串行通信_周期任务函数不断检查g_recv_size 标志。当此标志的值不是0时,这意味着在USB 缓冲区上从单片机接收了一些数据。此信息将复制到主应用程序 InBuffer,并且接收的数据数量将复制到 InSize。之后, g_recv_size 设置为 0,指示数据已读取。当 InSize 的值不是 0 时,数据已收到,并且检查它是否与通信协议数据兼容。数据读取流程图如图4。

微信截图_20200210180115.jpg

  1.5 无线遥控

  为能手动远程控制,考虑距离和抗干扰能力,遥控器采用了HC-12无线串口通信模块,该模块工作在433.4~473 MHz,可以设置多个频道,步进为400 kHz。模块最大发射功率为100 MW,5 kbit/s,空中波特率下接收灵敏度为-116 dBm,开阔地1 000 m的通信距离。模块与单片机的连接见图5。

1581329019792094.jpg

  HC-12 模块共有四种工作模式,考虑实际使用时,遥控器数据量小,正常使用时距离也比较近,故采用FU2 模式。此模式为省电模式,此时模块的空闲工作电流为 80 μA 左右。只适用传输少量数据(每个数据包在 20 个字节以内),数据包发送时间间隔不能太短(最好在 2 s以上),否则会造成数据丢失。AT 指令用来设置模块的参数和切换模块的功能,设置后需退出设置状态才生效。方法为:正常使用(已经上电)中,把 第 5 引脚“SET”置低电平,利用串口调试助手,发送AT+FU2回车。串口调试助手返回OK+FU2。此模式下不能设置成其它串口波特率。FU2 模式下,参数和功能的修改,掉电不会丢失。指令格式见表1。

1581329041949388.jpg

  由于 HC-12 模块的无线接收灵敏度比较高,当串口波特率大于 9.6 kbit/s 时,必须要错开 5 个相邻频道来使用。当串口波特率不大于 9.6 kbit/s 时,如果短距离(10 m以内)通信,也需要错开 5 个相邻频道使用。
  设置好串口相关工作模式后,程序配置好初始化(波特率和串口控制字等)。然后只要将发送的数据送入发送函数即可。例如:发送0x99。即:UART_Send_Byte(0x99);发送函数为:

  void UART_Send_Byte(unsigned char mydata)

   

  ES=0;//关串口中断 

  TI=0;//串口中断标志置0 

  SBUF=mydata;//将发送的数据送入SBUF 

  while(!TI);//等待发送完成 

  TI=0;//清发送中断标志 

  ES=1;//打开中断 

  }

  2 系统测试

  系统显示采用了LED屏幕。LED屏采用了局部刷新算法,响应速度快,程序功能优化,效率较高。并且视觉效果很好,支持运行动画效果、显示图片等。操作按键算法采用非延迟消抖,提高了单片机工作效率,使用STM32F0单片机HAL库[5]里的SysTick时钟检查时长实现消抖,定时器高速采样,响应快,对程序运行速度影响小,支持多种按键事件的响应,实现了数据操作、界面设置等诸多人性化功能。程序里设置为每天连接一次Wi-Fi信号,对时钟芯片进行授时。经过半年的运行,完全能与北京时间完全一致。蓝牙模块采用集成的模块,接通电源后就可以与手机蓝牙进行配对,成功后就可以获取手机内的音乐信息,使智能时钟有了相应的娱乐功能,使智能时钟的应用更加广泛。遥控器的操作在正常工作和生活环境里均能可靠地对主机进行设置,使用效果良好。
  3 结语

  普通的电子时钟功能单一,走时不够精准,利用32位单片机丰富的硬件与软件资源,将普通的电子钟功能进行扩展,实现了诸多人性化的功能,方便了人们的生活,在性价比方面具有较大的优优势,具有一定的市场。
  参考文献

  [1] 屈微, 王志良. STM32单片机应用基础与项目实践-微课版[M].北京:清华大学出版社,2019:100-201.
  [2] 刘正翔.基于STM32的OLED显示屏接口设计[J].电子技术与软件工程, 2017(19):65.
  [3] 白鹏飞.基于MAX30102的穿戴式血氧饱和度检测系统[J].激光与红外, 2017(10):1277-1279

  [4] 高显生.STM32F0实战:基于HAL库开发[M]. 北 京: 机械工业出版社,2018:98-104.
  [5] 李立春,刘卓.基于ARM Cortex-M3的SysTick解 析[J].吉林化工学院学报, 2015,32(1):37-38.

  本文来源于科技期刊《电子产品世界》2020年第02期第81页,欢迎您写论文时引用,并注明出处。



评论


相关推荐

技术专区

关闭