# 智能星闪水表 **Repository Path**: Jia_Cai/HiSpark_WaterMeter ## Basic Information - **Project Name**: 智能星闪水表 - **Description**: 智能星闪水表仓库平台 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-10-31 - **Last Updated**: 2025-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智流海控-基于星闪ws63e的智能水表开源开发案例 > “为城市赋能,为家庭节约,智能水表基于海思星闪的创新技术,自动记录用水数据,优化资源配置,助力智慧城市建设,打造绿色环保新生活。” 这是一个基于海思星闪的ws63e芯片开发板做的一款智能水表。该水表可以实现自动化抄表读取用水量、分析家庭用水的水质、用水习惯,并且可以远程操控,极大的方便了水资源的管理。

## 目录 - [智流海控-基于星闪ws63e的智能水表开源开发案例](#智流海控-基于星闪ws63e的智能水表开源开发案例) - [项目介绍](#项目介绍) - [目录结构](#目录结构) - [软件指南](#软件指南) - [1. 环境搭建](#1-环境搭建) - [2. 编译烧录](#2-编译烧录) - [2.1 Ws63主控](#2.1-Ws63主控) - [3. ws63代码文件详解](#ws63代码文件详解) - [4. 智能水表数据采集核心代码](#智能水表数据采集核心代码) - [硬件指南](#硬件指南) - [1. 传感器简介](#1-传感器简介) - [2. 电路设计](#2-电路设计) - [3. PCB布局](#3-PCB布局) - [4. 模型搭建](#4-模型搭建) - [5. 物料购买](#5-物料购买) - [6. 焊接说明](#6-焊接说明) - [7. 测试说明](#7-测试说明) - [8. 总体效果](#8-总体效果) - [星闪智能水表功能展示](#星闪智能水表功能展示) - [作者](#作者) - [鸣谢](#鸣谢) - [贡献](#贡献) ## 项目介绍 智流海控·星闪水表是一款集成了海思星闪技术的全智能水表。随着我国城市化进程的不断加快,水资源管理的重要性日益凸显,实现水资源精细化管理和高效利用,为构建节水型社会贡献力量。同时,项目成果可广泛应用于居民生活、工商业、农业灌溉等领域,具有广泛的市场前景和良好的社会效益。 >

星闪水表-让智能家具便利每个人的生活!

「星闪 · 智能水表」

**
让便捷,走进千家万户** --- ### 目录结构 如果刚刚开始接触这个项目,那么您可以看看本项目的文件结构,这样您可以更好的理解这个项目。 ``` HiSpark ├── Autodesk_Fusion_360_Model_Designs/ # Autodesk Fusion 360 模型设计文件夹 ├── Bill_Of_Materials/ # 星闪水表物料清单 ├── Demo_Doc/ # 星闪官方Demo文件夹 ├── Developer_Guide/ # 星闪水表开发指南 ├── JLC_PCB_Doc/ # 立创PCB文件夹 │── HiSpark_WaterMeter/* #NearLink_DK_WS63源代码 │ ├── /sle_client_water/ │ │ ├── inc/ # 头文件 │ │ └── src/ # 源文件 │ ├── /sle_server_water/ │ │ ├── inc/ # 头文件 │ │ └── src/ # 源文件 ├── Picture_Doc # 图片文件夹 ├── Project_Flow_Chart # 项目流程图文件夹 ├── Refer_To_The_Doc # 参考文件夹 README.md # 项目说明文件 ``` ## 软件指南 本项目使用华为海思ws63e芯片,使用HiSpark Stdio进行开发;如果您并未有相关开发经验,建议您看一下环境搭建指南,可以更好地理解这个项目, ### 1.环境搭建 在实现本项目之前,首先要做的第一件事情就是完成海思开发环境的搭建。本项目主要搭建海思HiSpark Stdio Windows平台下的环境进行开发,所需为轻量化LiteOS操作系统。 具体的HiSpark Stdio 环境开发可见官方所出的教程:[gitee WS63开发文档](https://gitee.com/gaoxiaolon2021/ws63-document) 1. **智能水表数据发送端** 星闪智能水表的主控是**NearLink_DK_WS63**,下面是海思和小熊派官网所出的环境搭建相关教程,同志们可以进行参考: - [海思Hispark Gitee组织提供的基于Windows搭建的开发环境教程](https://gitee.com/HiSpark/fbb_ws63/tree/master/tools#windows-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA) - [小熊派团队提供的基于Window环境下开发环境搭建教程](https://www.bearpi.cn/core_board/bearpi/pico/h3863/software/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BAwindows_IDE.html) 2. **智能水表数据接收端** 智能水表数据接收端所采用的主控也是**NearLink_DK_WS63**,利用ws63e开发板的星闪无线传输技术,实现了Client端对数据进行采集发送,Server端接收数据并做出回应的功能。 Client端具体可以通过传感器,采集**水流量**、**水质等数据**,并通过星闪无线传输技术,把采集到的大数据传输给Server端进行显示,如此一来,为水表作业工人省去了打开水表进行抄表的麻烦。 >注意事项: >1. 本项目可以使用Linux下的ubuntu环境进行编译烧录,但是对虚拟机以及Linux操作系统不熟悉的人员则更推荐使用Windows下兼容的HiSpark官方软件。 >2. PD电源输入端供电不支持电脑USB接口或者5v供电,12v供电最佳。
1. 本项目使用的是专门的12V的电源适配器,电压低于12V则电磁锁不工作,一定要注意。
2. 成品封装时切记不能漏水。
>3. 注意代码中各个传感器的数据引脚,接错会导致传感器不能正常运行. 3. **WS63E星闪开发板核心资料** 官方论坛:[星闪ws63e开发板MCU开发IDE、MCU开发板指导手册](https://developer.hisilicon.com/forum/0133146886267870001) ### 2.编译烧录 1. 将本项目clone到本地 ```bash git clone https://github.com/Maker-Hisilicon-Club/SEO-Smart-water-meters-JiaC.W.git ``` 2. 切换到HiSpark分支 ```bash git switch HiSpark ``` #### 2.1 Ws63主控 1. 进入到项目目录下,将`HiSpark`目录下`Finally Code`的拷贝到您的Hispark studio 开发环境`xxx\src\application\samples\peripheral\`目录下。 2. 在xxx\src\application\samples\peripheral\CMakeLists.txt文件中新增编译案例(如果不知道在哪个地方加的,可以在“set(SOURCES "${SOURCES}" PARENT_SCOPE)”上面一行添加)。 ``` c if(DEFINED CONFIG_SAMPLE_FINALLY_CODE) add_subdirectory_if_exist(finally_code) endif() ``` 3. 在xxx\src\application\samples\peripheral\Kconfig文件中新增编译案例,具体如下图所示(如果不知道在哪个地方加,可以在最后一行添加)。 ``` c config SAMPLE_SUPPORT_FINALLY_CODE bool prompt "Support FINALLY_CODE Sample." default n depends on ENABLE_PERIPHERAL_SAMPLE help This option means support FINALLY_CODE Sample. ``` 4. 选择”**系统配置**“,具体选择路径“Application/Enable the Sample of peripheral”,在弹出框中选择“使能星闪遥控器”,点击Save,关闭弹窗。 5. 点击“build”或者“rebuild”编译 6. 编译完成之后,在HiSpark Studio工具中点击“工程配置”按钮,选择“程序加载”,传输方式选择“serial”,端口选择“comxxx”,com口在设备管理器中查看。 7. 配置完成后,点击工具“程序加载”按钮烧录。 8. 出现“Connecting, please reset device...”字样时,复位开发板,等待烧录结束。
### 星闪水表代码文件详解 ``` SLE_CLIENT_WATER:星闪水表服务端文件 │ ├── /SLE_CLIENT_WATER/ │ │ ├── inc/ │ │ │ │ ├── servo.h # sg90舵机的头文件 │ │ │ │ ├── sle_client_water.h # 星闪服务端的头文件 │ │ │ │ ├── ssd1306.h # ssd1306_OLED模块的头文件 │ │ │ │ ├── ssd1306_fonts.h # ssd1306_OLED模块文字的头文件 │ │ └── src/ │ │ │ │ ├── servo.c # sg90舵机的实现文件 │ │ │ │ ├── sle_client_water.c # 星闪服务端的实现文件 │ │ │ │ ├── ssd1306.c # ssd1306_OLED模块的实现文件, │ │ │ │ ├── ssd1306_fonts.c # ssd1306_OLED文字模块的实现文件 │ │ │ ├── CMakeLists.txt # CMake 构建系统的配置文件 │ │ │ ├── Kconfig # Kconfig 配置文件 SLE_SERVER_WATER:星闪水表客户端文件 │ ├── /SLE_SERVER_WATER/ │ │ ├── inc/ │ │ │ │ ├── ly03b.h # 12V电子锁的头文件 │ │ │ │ ├── servo.h # sg90舵机的头文件 │ │ │ │ ├── SLE_LED_Server_adv.h │ │ │ │ ├── SLE_LED_Server.h │ │ │ │ ├── ysf201c.h #水流传感器头文件 │ │ └── src/ │ │ │ │ ├── ly03b.c # 12V电子锁的实现文件 │ │ │ │ ├── servo.c # sg90舵机的实现文件 │ │ │ │ ├── SLE_LED_Server_adv.c │ │ │ │ ├── SLE_LED_Server.c │ │ │ │ ├── ysf201c.c # 水流传感器的实现文件 │ │ │ ├── CMakeLists.txt # CMake 构建系统的配置文件 │ │ │ ├── Kconfig # Kconfig 配置文件 ``` #### 智能水表数据采集核心代码 ``` c /* * YSF201C水流传感器核心采集代码 * 原理:300脉冲/L * 中断脉冲捕获 */ // 全局变量,用于存储脉冲数、水量和金额 float Puls = 0.0f; float Water = 0.0f; float Water_L = 0.0f; float Amount = 0.0f; static void gpio_callback_func(pin_t pin, uintptr_t param) { UNUSED(pin); UNUSED(param); Puls = Puls + 1; // 增加脉冲计数 } // 初始化I2C引脚和按键引脚 void yfs201c_init(void) { // 设置按键引脚模式和方向 uapi_pin_set_mode(yfs201c_pin, HAL_PIO_FUNC_GPIO); gpio_select_core(yfs201c_pin, CORES_APPS_CORE); uapi_gpio_set_dir(yfs201c_pin, GPIO_DIRECTION_INPUT); uapi_gpio_register_isr_func(yfs201c_pin, GPIO_INTERRUPT_RISING_EDGE, gpio_callback_func); } // 更新水量显示字符串 void update_waterline(char *buffer, float water) { int ret = sprintf(buffer, ": %.2fL", water); if (ret < 0) { printf("waterline update failed\r\n"); } } // 更新金额显示字符串 void update_amountline(char *buffer, float amount) { int ret = sprintf(buffer, ": %.2f¥", amount); if (ret < 0) { printf("amountline update failed\r\n"); } } // 计算金额,根据郑州市水价9.65元/m³ float calculate_amount(float water_l) { return (water_l / 1000) * 9.65; // 1立方米等于1000升 } /* * SG90舵机控制核心代码 * 原理:脉冲控制 * 无 */ static void servo_init(void) // 舵机初始化 { uapi_gpio_init(); // 初始化GPIO uapi_pin_set_mode(2, HAL_PIO_FUNC_GPIO); /* 设置指定IO复用为GPIO模式 */ uapi_gpio_set_dir(2, GPIO_DIRECTION_OUTPUT); /* 应该设置为输出模式 */ uapi_pin_set_mode(PWM_GPIO, PIN_MODE_0); // 设置GPIO为PWM模式 uapi_gpio_set_dir(PWM_GPIO, GPIO_DIRECTION_OUTPUT); /* 应该设置为输出模式 */ uapi_gpio_set_val(PWM_GPIO, GPIO_LEVEL_LOW); // 设置GPIO输出低电平 } static void servo_clockwise_entry(void) // 顺时针转动 { servo_init(); // 初始化舵机 while(1){ uapi_gpio_set_val(PWM_GPIO, GPIO_LEVEL_HIGH); // 设置GPIO输出高电平模式 uapi_tcxo_delay_us(500); // 延迟0.5ms uapi_gpio_set_val(PWM_GPIO, GPIO_LEVEL_LOW); // 设置GPIO输出低电平模式 uapi_tcxo_delay_us(20000-500); // 延迟19.5ms } } static void servo_Counterclockwise_entry(void) // 逆时针转动 { servo_init(); // 初始化舵机 while(1){ uapi_gpio_set_val(PWM_GPIO, GPIO_LEVEL_HIGH); // 设置GPIO输出高电平模式 uapi_tcxo_delay_us(2500); // 延迟2.5ms uapi_gpio_set_val(PWM_GPIO, GPIO_LEVEL_LOW); // 设置GPIO输出低电平模式 uapi_tcxo_delay_us(20000-2500); // 延迟17.5ms } } /* * LY03B电子锁控制核心代码 * 无 * 无 */ // 电子锁状态变量 static bool lock_state = false; // 初始化电子锁 void lock_init(void) { uapi_pin_set_mode(LOCK_PIN, HAL_PIO_FUNC_GPIO); uapi_gpio_set_dir(LOCK_PIN, GPIO_DIRECTION_OUTPUT); // 初始化时关闭电子锁 lock_close(); } // 打开电子锁 void lock_open(void) { // 设置电子锁引脚为高电平 uapi_gpio_set_val(LOCK_PIN, GPIO_LEVEL_HIGH); lock_state = true; } // 关闭电子锁 void lock_close(void) { // 设置电子锁引脚为低电平 uapi_gpio_set_val(LOCK_PIN, GPIO_LEVEL_LOW); lock_state = false; } // 切换电子锁状态 void lock_toggle(void) { if (lock_state) { lock_close(); } else { lock_open(); } } // 获取电子锁状态 bool lock_get_state(void) { return lock_state; } ``` ## 硬件指南 智能水表硬件主要有PCB和3D外壳组成。PCB是使用嘉立创进行制作打板,尺寸保持在10cm内可以免费打板。3D外壳使用Fusion 360设计。 以下是传感器与PCB板主要功能示意图: ### 1. 传感器简介 1. 水流传感器**YF-S201C**
> 频率:F=5*Q(L/Min)-3 误差:土2% 电压:3.5-24VDC,电流不能超过10mA 流完一升水输出300个脉冲 输出波形:方波(NPN信号) 量程范围 :1-30L 2. 水质传感器**TDS**
> 1.宽电压工作:3.3~5.5V 2.0~2.3V模拟信号输出,兼容5V、3.3V两种控制系统 3.激励源为交流信号,有效防止探头极化 4.防水探头,可长期浸入水中测量 5.Arduino兼容,Gravity接口,连线简单 即插即用,无需焊接 3.12V电磁锁 **LY03C**
> DC12V/0.4A/4.8W DC24V/0.3A/7.2W 可一直通电 (锁体发热最高温度70°C) 通电缩回 断电弹出 S0.6N S0.9N 锁舌长:10mm 行程:10mm ### 2. 电路设计
电路图较为简单,中间一块ws63e核心板作为主控,周边分别设计水流传感器、SG90舵机、供电、5V继电器、水质传感器等部分电路端口,仅需使用杜邦线连接即可。 ### 3. PCB布局 PCB采用最简单的双层板设计,采用各类元器件分离方式,并没有直接焊接在一块PCB上,既考虑到了水表内部本身空间大小限制,同时也降低了本项目的复刻难度。 主要PCB板上预留WS63E星闪开发板安装排母,各原件连接排针排母,简单进行布线,并标注好每个端口的丝印,方便后续进行实物连接。
### 4. 模型搭建 模型使用Fusion 360进行搭建。模型左侧为防止水流传感器的通孔装置,右侧为放置tds水流传感器的方形空位。底部为放置SG90舵机的球形水闸装置。内部的断水半环球会随着SG90舵机旋转90度进而截断水流通过。 > 注意: > 1.模型搭建要考虑到3D打印的成本,以及难易程度 > 2.3D打印时要充分考虑到打印机的误差,要保留0.1-0.3mm的打印余量。
模型展示
### 5. 物料购买 本项目所需物料比较整体,主要由传感器和各路元件组成,剩余零零散散的小配件在此不再赘述。 物品名称 | 型号 | 购买网址 -------- | ----- | ---- 水流传感器 | ysf201c |[ysf201c](https://item.taobao.com/item.htm?abbucket=16&id=627736441325&ns=1&pisk=fiYEKNiMx23UO807P67P_AHA6dbd-wDj8U65ZQAlO9XhdQflzdvS99OopL8PIQKI9gMLaWLw3zaIpDduza_ohxgjlBdCyaDbVJkiSJCPNu05K_Aid5br5xgjlCoh9aOihbn96nfAGzblxgAiSOChEWvlxNAGB_CuK_4n_f5RI_fhK_4gI_1b-TvlZG2Gi_EurTjhIGffITblrXUPrZeNNMcqHySVd7IdYtAiDz4y_rshnK6grDYNTxBDtOzur9HvbrOwOvzv1wL63s9ISyJ2tnvkmd0a8GKH_USvyJcGrgx6cM-ZKzW6R_ScrGPurC7hBGYFoq2N6hABqepUazfpREsPHGluyg_MlixDL7hvswfkeiLSHyBHZILvcZuzSwSl4PeRsGgByHyu4MfO_tGZ_nteGG5cTLwu2uIL61WjtMq82MfO_tGZ_uERvACNhXjh.&priceTId=2147bfbd17260382023221617e972a&skuId=4453848404728&spm=a21n57.1.item.1.4335523cKdxyPt&utparam=%7B%22aplus_abtest%22%3A%22b970a69839abb43f30ffab08a5f8264a%22%7D) 水质传感器 | tds |[tds](https://detail.tmall.com/item.htm?id=656324337911&spm=a21m98.27004841) 12v微型电磁锁 | LY03A |[12v微型电磁锁](https://item.taobao.com/item.htm?abbucket=16&id=692098652467&ns=1&priceTId=214781f317262372589545158e1cfa&skuId=4914657456651&spm=a21n57.1.item.2.2670523cjxxV7L&utparam=%7B%22aplus_abtest%22%3A%22abeb2add68b6dc9e8b3dde6cc0f127c9%22%7D) 多路输出电压转换模块 | 电源模块 |[电压转换模块](https://detail.tmall.com/item.htm?id=747130012812) 具体更细节的物料购买清单,可以打开[物料清单](https://github.com/Maker-Hisilicon-Club/SEO-Smart-water-meters-JiaC.W/blob/99b6d9e2a5c93e2b2c3da1a06f8867bf83795819/HiSpark/docs/%E6%99%BA%E6%B5%81%E6%B5%B7%E6%8E%A7-%E6%98%9F%E9%97%AA%E6%B0%B4%E8%A1%A8%E8%B4%AD%E4%B9%B0%E6%B8%85%E5%8D%95.xlsx) ### 6. 焊接说明 整体焊接较为简单,只需要焊接一部分排针和排母即可。 由于本项目并未使用到自己制作的复杂多功能电路板,因此焊接方面可以省去很多事情,以下是焊接成品电路板:
### 7. 测试说明 目前,测试现阶段有一个些问题: 1.PCB制作有一些小疏忽,水流传感器的排针中,5V和GND的位置颠倒了,测试的时候需要另用杜邦线转换一下位置才能正常使用。 2.12V电子锁是需要另行供12V电压的,我这里采用的是多电平转换电路实现此功能。Server端OLED上自带的按键可以控制电子锁的开关闭合。 ### 8. 总体效果 如下图所示 ## 星闪智能水表功能展示
项目源仓地址:https://gitee.com/Jia_Cai/HiSpark_WaterMeter 视频链接:https://gitee.com/Jia_Cai/HiSpark_WaterMeter ## 作者 [JiacW-Devil](https://github.com/LuoChen-png?tab=repositories) ## 鸣谢 [Abrillant-Lee](https://github.com/Abrillant-Lee) ## 贡献 欢迎贡献!请按照以下步骤进行: 1. Fork 本仓库 2. 创建新的分支 (`git checkout -b feature/新功能`) 3. 提交更改 (`git commit -m '添加新功能'`) 4. 推送到分支 (`git push origin feature/新功能`) 5. 创建 Pull Request