RISC-V MCU中文社区

【分享】 自制空气净化器

发表于 GD32VF103 MCU 2021-04-04 17:15:09
0
2998
7

0x01 起因与背景

2021年3月,有幸参加了芯来的《RISC-V处理器嵌入式开发》课程,虽然由于个人时间的缘故,8节直播课我是“一节不落”全部完美错过。好在有回放课程,最终可以“一节不落”地全部听完。胡老师无论是线上讲课,还是论坛答疑,都让我感受到了大师的风采。

自课程作业布置后,由于只有半个月的时间,考虑到自己已经3年没摸过单片机和C语言的实际情况,决定制作一个被我割了6年的项目:空气净化器。

这个项目对我来说是一个非常特别的项目,就这个项目把我引入了嵌入式开发的“大坑”之中。2015年末是帝都空气质量最差的时间了,由于买不起成品的空气净化器,加之受到知乎某些文章推荐,决定自己购买HEPA滤网自制空气净化器。然而2015年的我还是一个从来没有接触过单片机开发的跨行程序员,只能凭借各种靠谱不靠谱的文章完成硬件选型。最终选择了Arduino UNO+IRF520+12V80W风机这么一条不靠谱的技术路线。熟悉的人应该一眼就能看出来,IRF520是带不动这个12V80W的风机的。所以,最后的结果,毫不意外地烧MOS管跑路。当然在过程中也发现,80W风机对于净化器来说过于巨大。由于风机+HEPA滤网如何组合在一起的方案一直没有得到解决,这个项目也就此搁浅。

当然这个“鸽浅”项目最终收获除了把我引入了这个坑并在接下来的数年里吃掉了我大几千块钱的资金以外,还因为在使用PWM方式驱动电机时候出现啸叫声而意外产出了一个B站投稿《PWM控制散热风扇演奏超级玛丽 》。

时间又来到了2020年,在某次刷某宝的时候突然来了灵感,决定使用4个12V风扇+亚克力制作外壳。说干就干,拿起AUTOCAD画了个图加工出来,第一版本体完工。这次是由于懒,没有加控制电路,只能插上电源全功率运行;同时第一版并未考虑换滤网的问题,实用性有限。

2021年3月底,在接到结课作业后,最终下定决心把这个鸽了6年的项目做下去。改进了一下图纸,加入了简单的换滤网设计;使用GD32VF103通过PWM控制MOS管驱动风机。

0x02 净化器本体准备

原材料:

亚克力板:1组

风扇:12CM 12V 0.15A  × 4

螺丝螺母:若干

HEPA滤网:1个(305*305mm)

图纸奉上 


加工好的亚克力板

完成后


0x03 硬件选型

由于风机选型,从80W的风机降为4个2W的静音低速风扇,最大标称电流4×0.15A,对于MOS管的选型已可以选用更小功率的管子,由于手头正好有现成的IRF520模块,故DEMO阶段就先拿模块来用。

PM2.5传感器依然采用攀藤G5,这个传感器当年已经玩过一次,这次买来后无需特别熟悉,上手即用。

MCU:GD32VF103CBT6;使用购买的某个仿Longan Nano的核心板。

传感器:攀藤G5(PMS5003)

MOS管:IRF520

0x04 电路连接

传感器需要5V供电,VCC接核心板上5V PIN;由于代码中使用USART0作为调试用,故传感器使用USART2,PB10、PB11与传感器TX、RX交叉连接。

PWM使用PA1。此PIN与核心板上绿色LED共用引脚,此处同时借用该LED亮度来表示风机转速。

IRF520模块SIG口接PA1,VCC接开发板3.3V供电。


0x05 代码

由于目前的代码仍然处于DEMO阶段,质量较差,代码清单中将不贴出完整代码。待工程完工后,所有文件包括完整代码整体上传Github。

其中,传感器及串口驱动,见前文《GD32VF103串口读取PM2.5传感器

PWM初始化见芯来官方示例:TIMER1_pwmout

代码清单

void init_USART2(); 
int plantower();
void init_pwm_pin();
// 以上三个函数实现略,见前文或官方示例
int main(void){
	init_USART2(); // 初始化串口
	init_pwm_pin(); // 初始化PWM
	while(1){
		int pm2_5 = plantower(); // 获取传感器数据
		float pm_limit = (pm2_5>200)?200:pm2_5; // 0~200对应占空比0~100,PM2.5超过200保持全速
		int speed = (int)(pm_limit/200*1023); // 设置timer_parameter_struct.period = 1023;故占空比0~100对应speed为0~1023
		printf("pm2_5=%d,speed=%d\r\n",pm2_5,speed); // 串口输出PM2.5浓度及转速
		timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_1,speed); // 设置PWM占空比
		delay_1ms(5000); // 每5秒采集一次传感器数据并调整转速
	}
  return 0;
}


0x06 中期结语

截止今天(2021-04-04),这个项目距离最初设想的完成度大概只完成了30%,软件上只是个单线程的DEMO,硬件上还只是一堆零件的简单堆砌,实用性可靠性不高。最初的计划中还包括了集成温湿度传感器、WiFi传输、OLED小屏幕,以及打算画一个电路板来把他们整合在一起,但是由于上一次碰AltiumDesigner已经是3年前了,加之时间确实紧迫,可能完整版还需要再鸽上一段时间。

预期的最终完成清单:

完整代码

CAD图纸

PCB原理图

PCB Gerber

物料清单(BOM)

喜欢7
用户评论
Flagplus

Flagplus 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板