野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 559|回复: 0

【瑞萨RA MCU创意氛围赛】智慧水族缸

[复制链接]
发表于 2023-8-20 23:38:04 | 显示全部楼层 |阅读模式
一、背景
本项目主要设计一个系统,用于监测龟龟水缸的水质检测,野火启明6M5开发板用于采集TDS传感器数据,通过板载ESP8266网络模块发送至云端,用于实时掌握水族缸的水质情况。
二、设计
(一)硬件设计
硬件设计如下,主体为野火启明6M5开发板,网络模块使用板载的ESP8266,通过串口连接;TDS传感器采用keyeStudio出品的传感器模块,通过ADC接口连接;此外,还有个LED周期闪烁用于指示系统运行中。
RA6M5-1.png
(二)软件设计
基础软件上,OS采用RT-Thread最新5.0.1版,包括LWIP、SAL、ONENET、MQTT等组件。
应用软件上,包括ADC task和upload task两个thread,其中ADC task用于驱动ADC传感器、周期读写数字并转成TDS值;upload task周期上传TDS数值只云端。
RA6M5-2.png
三、实现
(一)组件配置
介于当前野火启明6M5开发板尚未支持RT-Studio,只能scons手动配置,依次配置好ESP8266驱动、AT组件、MQTT和ONENET组件等。
AA1.png
(二)ADC task
因为野火启明6M5开发板上的ADC0通道0的P000针脚被占用,故使用通道1的P001。
AA2.png
借助于瑞萨强大的Smart Configurator工具,
AA3.png
配置好ADC通道,以及callback函数名,用于在ADC数据准备好的时候发起读取动作。
AA4.png
  1. void Adc_Init(void)
  2. {
  3. fsp_err_t err = FSP_SUCCESS;

  4.     /* Initializes the adc. */
  5. err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
  6. /* Handle any errors. This function should be defined by the user. */
  7. assert(FSP_SUCCESS == err);
  8. /* Enable channels. */
  9. err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
  10. assert(FSP_SUCCESS == err);
  11. }
复制代码
  1. void adc_entry(void * parameters)
  2. {
  3. fsp_err_t err = FSP_SUCCESS;
  4. uint16_t value;
  5. float averageVoltage, tmp;

  6.     /*init ADC device*/
  7. Adc_Init();
  8. while(1)
  9. {
  10. rt_thread_mdelay(2000);
  11. /* Enable scan triggering from ELC events. */
  12. (void)R_ADC_ScanStart(&g_adc0_ctrl);
  13. while (!scan_complete_flag)
  14. {
  15. ;
  16. }
  17. scan_complete_flag = false;

  18.         /*read sample value of ADC*/
  19. err = R_ADC_Read(&g_adc0_ctrl, ADC_DEV_CHANNEL, &value);
  20. if (FSP_SUCCESS == err)
  21. {
  22. rt_kprintf ("Read value: %d: %d\r\n", ADC_DEV_CHANNEL, value);
  23. }
  24. else
  25. {
  26. rt_kprintf ("Read Data Error\r\n");
  27. break;
  28. }

  29. tmp = (float)value;
  30. averageVoltage = tmp * 5.0 / 1024.0;
  31. tdsValue = (133.42*averageVoltage*averageVoltage*averageVoltage - 255.86*averageVoltage*averageVoltage + 857.39*averageVoltage)*0.5;
  32. }

  33. return;
  34. }
复制代码
其中根据电压值计算TDS值比较复杂。
(三)upload task
Upload task主要依托onenet组件,将tds数据推送至OneNet云端。
  1. static void onenet_upload_entry(void *parameter)
  2. {
  3. while (1)
  4. {
  5. if (onenet_mqtt_upload_digit("tds", tdsValue) < 0)
  6. {
  7. LOG_E("upload has an error, stop uploading");
  8. break;
  9. }
  10. else
  11. {
  12. LOG_D("buffer : {"tds":%d}", tdsValue);
  13. }

  14. rt_thread_delay(rt_tick_from_millisecond(5 * 1000));
  15. }
  16. }
复制代码

四、运行
先来张全家福,因为水族缸比较大,暂时把其中一只小龟龟强行拉出来合影一张。
TT2.jpg
系统启动的日志。
AA5.png
启动ADC数据采集和数据上传任务后,云端的数据情况。
TDS2.png
五、一些感想
智慧水缸目前很多地方考虑不够周全,譬如水质只用到了tds传感器,后续要加上PH和温度传感器,让龟龟生活环境更智能。
瑞萨的MCU以及附带的各种工具软件很赞,Smart Configurator上手后很方便。野火的板子一直秉承着高品质,手头这块启明6M5开发板体现了很高的水准,无论是做工还是各种资料。
最后,感谢主办方组织的活动。

-------------
源代码在此:
ebf_qi_min_6m5-onenet.rar (5.94 MB, 下载次数: 11)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 13:06 , Processed in 0.037349 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表