前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于RISC-V MCU CH32V307水感控制系统

基于RISC-V MCU CH32V307水感控制系统

原创
作者头像
谭广健
发布2022-12-17 19:28:18
9.4K0
发布2022-12-17 19:28:18
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

很高兴能参与这次的“RISC-V MCU创新应用大赛”,这次我带来的作品是基于RISC-V MCU CH32V307 的水感控制系统。大的方面一直以来城市因为存在内涝导致一下雨就很多地方出现水漫金山的情况,有些地方因为比较偏远所以不易发现带来潜在的危险;小的方面有些家庭有储水池(水箱),当缺水或满水时没即时发现和提醒。因此我就通过RISC-V MCU CH32V307结合水感传感器,做了一个水感应控制系统的初代产品;算抛砖引玉也体验出RISC-V MCU CH32V307的强大功能和易操作性更体现其能适应不同的Iot物联网应用场景。

1、硬件介绍:

我们先来介绍一下我们的主角:我们使用的是CH32V307开发板,该板使用的是南京沁恒微电子(WCH) 推出的一款基于 RISC-V MCU CH32V307 内核的开发板。

CH32V307开发板
CH32V307开发板

主控MCU特点:

RISC-V4F处理器,最高144MHz系统主频

支持单周期乘法和硬件除法,支持硬件浮点运算(FPU)

64KB SRAM,256KB Flash

供电电压:2.5/3.3V,GPIO单元独立供电

多种低功耗模式:睡眠、停止、待机

上/下电复位、可编程电压检测器

2组18路通用DMA

4组运放比较器

1个随机数发生器TRNG

2组12位DAC转换

2单元16通道12位ADC转换,16路触摸按键TouchKey

10组定时器

USB2.0全速OTG接口

USB2.0高速主机/设备接口(480Mbps 内置PHY)

3个USART接口和5个UART接口

2个CAN接口(2.0B主动)

SDIO接口、FSMC接口、DVP数字图像接口

2组IIC接口、3组SPI接口、2组IIS接口

千兆以太网控制器ETH(内置10M PHY)

80个I/O口,可以映射到16外部中断

CRC计算单元,96位芯片唯一ID

串行2线调试接口

接口说明
接口说明

接下来出场的就是我们的水感传感器,它的作用就是感知是否有水,如果感应板上检测到没有水时,则输出高电平,反之则输出为低电平。我们就通过CH32V307捕足这个信号,对这个信号进行处理和控制。

水感传感器
水感传感器

2、与开发板线路连接

在开始线路连接之前先说说我们硬件的连接和逻辑。首先,我们通过水感传感器的高低电平传到我们的开发板,然后我们的开发板根据这个信号,控制我们的继电器连接的指示灯进行显示。

连接示意图
连接示意图

上面就是示意图,当水感传感器检测到没有水时,就显示蓝色指示灯;当有水就指示红灯。

那怎么连呢?先将水感传感器的信号线接到控制板的PD11这个用来接收,然后就接继电器,因为继电器要控制2个指示灯,所以接PD12和PD14。

PD11接水感传感器
PD11接水感传感器

3、数据代码接入

线已经接好了,就到上代码时间了。我们这里用的IDE是MounRiver Studio 用 TencentOS Tiny 开发,这里就直接上核心代码

代码语言:javascript
复制
#define RAIN_PORT GPIOD
#define RAIN_PIN GPIO_Pin_11
#define RAIN_RCC RCC_APB2Periph_GPIOD
#define RAIN_STATE() GPIO_ReadInputDataBit(RAIN_PORT,RAIN_PIN)//读水感的状态
void rain_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RAIN_RCC,ENABLE);
    GPIO_InitStructure.GPIO_Pin=RAIN_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(RAIN_PORT,&GPIO_InitStructure);
}

上面就是水感的状态,下面就是继电器的。

代码语言:javascript
复制
void POWER_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void Open_led(void){
    GPIO_ResetBits(GPIOD,GPIO_Pin_12);
    GPIO_SetBits(GPIOD,GPIO_Pin_14);
}
void Close_led(void){
    GPIO_ResetBits(GPIOD,GPIO_Pin_14);
    GPIO_SetBits(GPIOD,GPIO_Pin_12);
}

然后就任务一里面读数就可以了。

代码语言:javascript
复制
if(RAIN_STATE()==1){
     printf("===>当前没水%d\r\n",RAIN_STATE());
     Close_led();
 }else{
     printf("===>当前有水%d\r\n",RAIN_STATE());
      Open_led();
 }

好吧,还是看看我的成功视频吧(显示视频在21:17秒)。

演示视频在21:17秒

4、心得和体会

本次水感应控制系统属于初代产品也就是入门级的,主是展现CH32V307开发板的应用场景丰富,开发容易。后继可以加上数据上报和移动端展示,在CH32V307面前这些都不是什么难事。因为CH32V307实在太强大了。。 最后很感谢各位看官内心的观看。青山不改,绿水常流;感谢各位支持,期望下次还有机会参加这样的活动。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、硬件介绍:
  • 2、与开发板线路连接
  • 3、数据代码接入
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档