Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
arduino
[第二期 空气质量分析仪]第2周作业
发布于 2019-09-06 11:14:27 浏览:1466
订阅该版
本次实验所用板子为 - 正点原子精英版(STM32F103ZET6) - 温湿度模块(DHT11) - 甲醛模块(MQ135) - PM2.5(GP2Y1014AU0F) 拖这么久才写作业说实话我也很无奈,模块昨天下午才到~程序前几天已经写好了,等模块等了几天,尴尬。 1、甲醛MQ135模块,一开始数据不稳定,差不多到20s后稳定到0.22,开始实验,点燃了一些纸巾然后电压值上升到最高0.51,熄灭纸巾后电压值最后降落回0.22 说明:MQ135模块用于家庭、环境的有害气体探测装置,适宜于氨气、芳族化合物、硫化物、苯系蒸汽、烟雾等气体有害气体的探测,AO输出0.1~0.3v相对无污染,高浓度电压4v左右。 ![71,0](https://www.rt-thread.org/qa/forum.php?mod=image&aid=10684&size=300x300&key=41eeb2d3af8effaf&nocache=yes&type=fixnone) ![71,0](https://www.rt-thread.org/qa/forum.php?mod=image&aid=10772&size=300x300&key=2978611a2bfbedb5&nocache=yes&type=fixnone) mq135.c文件 ```c #include "mq135.h" #include
#define adc_dev_name "adc1" /* ADC设备名称,ADC1,PC2引脚,因此是ADC1的通道11,具体哪个硬件看drv_adc.c,HAL_ADC_MspInit函数里面的配置,需要用到其他通道就添加初始化,然后在rtconfig.h打开相关ADC宏 */ #define adc_MQ_channel 11 /* ADC通道 */ #define REFER_VOLTAGE 500 /* 参考电压5V,数据精度乘以100保留2位小数*/ #define CONVERT_BITS (1 << 12) /* 转换位数为12位 */ static rt_adc_device_t adc_dev; static rt_uint32_t value,vol; int mq135_init(void) { adc_dev =(rt_adc_device_t)rt_device_find(adc_dev_name); /* 查找设备,adc1 */ if(adc_dev==RT_NULL) { rt_kprintf("adc can't find %s device!
",adc_dev_name); return RT_ERROR; } return RT_EOK; } void mq135_data_entry(void *parameter) { while(1) { rt_err_t ret = RT_EOK; ret = rt_adc_enable(adc_dev,adc_MQ_channel); /* 使能设备 */ value = rt_adc_read(adc_dev,adc_MQ_channel); /* 读取采样值 */ rt_thread_delay(40); vol = value*REFER_VOLTAGE/CONVERT_BITS; /* 转换值 */ rt_kprintf("mq135= %d.%02d
",vol/100,vol%100); rt_thread_delay(500); ret = rt_adc_disable(adc_dev, adc_MQ_channel); /* 关闭通道 */ } } void mq135_data_init(void) { rt_thread_t tid; mq135_init(); tid=rt_thread_create("mq135_data",mq135_data_entry,RT_NULL,512,9,5); if (tid != RT_NULL) rt_thread_startup(tid); //开启线程 } ``` 2、PM2.5使用GP2Y1010AU0F模块,空气浓度值`(mg/m3)= 0.172 *电压值(v) - 0.0999` 注:昨天晚上控制模块的led使用`rt_thread_delay`延时调了一个晚上没调成功,我以为是模块坏了,然后今天早上使用arduino跑了一遍程序,发现模块没问题,看论坛参照别人写的使用`rt_hw_us_delay`后好了 ~我好难~ pm25.c文件 ```c #include "pm25.h" #include
#define adc_dev_name "adc1" /* ADC设备名称,ADC1,PC2引脚,因此是ADC1的通道12,具体哪个硬件看drv_adc.c,HAL_ADC_MspInit函数里面的配置,需要用到其他通道就添加初始化,然后在rtconfig.h打开相关ADC宏 */ #define adc_PM_channel 12 /* ADC通道 */ #define REFER_VOLTAGE 500 /* 参考电压5V,数据精度乘以100保留2位小数*/ #define CONVERT_BITS (1 << 12) /* 转换位数为12位 */ #define PC3 GET_PIN(C,3) static rt_adc_device_t adc_dev; //static rt_err_t ret = RT_EOK; static rt_uint32_t value,vol,num; int pm25_init(void) { rt_pin_mode(PC3,PIN_MODE_OUTPUT); rt_pin_write(PC3,PIN_HIGH); adc_dev =(rt_adc_device_t)rt_device_find(adc_dev_name); /* 查找设备,adc1 */ if(adc_dev==RT_NULL) { rt_kprintf("adc can't find %s device!
",adc_dev_name); return RT_ERROR; } return RT_EOK; } void pm25_data_entry(void *parameter) { while(1) { rt_err_t ret = RT_EOK; ret = rt_adc_enable(adc_dev,adc_PM_channel); /* 使能设备 */ rt_pin_write(PC3,PIN_LOW); rt_hw_us_delay(280); value = rt_adc_read(adc_dev,adc_PM_channel); /* 读取采样值 */ rt_hw_us_delay(40); vol = value*REFER_VOLTAGE/CONVERT_BITS; /* 转换值 */ // rt_kprintf("vol= %d.%02d
",vol/100,vol%100); rt_pin_write(PC3,PIN_HIGH); rt_thread_delay(680); num=vol*0.172 - 9.99; rt_kprintf("PM2.5= %d.%02d mg/m3
",num/100,num%100); ret = rt_adc_disable(adc_dev, adc_PM_channel); /* 关闭通道 */ } } void pm25_data_init(void) { rt_thread_t tid; pm25_init(); tid=rt_thread_create("pm25_data",pm25_data_entry,RT_NULL,512,10,5); if (tid != RT_NULL) rt_thread_startup(tid); //开启线程 } ``` 3、最后联调 ![110,0](https://www.rt-thread.org/qa/forum.php?mod=image&aid=10774&size=300x300&key=f082baa9f9c9146f&nocache=yes&type=fixnone) ![微信截图_20190906111346.png](https://oss-club.rt-thread.org/uploads/201909/06/111537m9xludmq0dzbi9zd.png) ![mq135.png](https://oss-club.rt-thread.org/uploads/201909/06/111537o53wwwwa7rmh5pd3.png) ![一起.png](https://oss-club.rt-thread.org/uploads/201909/06/111537j121aaeewrdv11w6.png)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
时光片刻
这家伙很懒,什么也没写!
提问
5
回答
3
被采纳
0
关注TA
发私信
相关问题
1
RW007模块有Arduino开发板上的例程吗?
2
怎么把Arduino 第三方库 移植到 RT-Thread中?
3
使用RTDUINO时,在WCharacter.h缺少头文件ctype.h
4
arduino包在ch32v307下不支持
5
rtduino精简模式下,在application的main.cpp下用digitalRead编译不通过,Serial和Wire是可以的
6
Arduino DUE中MSH_CMD_EXPORT没有效果?!
7
pins_arduino.h找不到
8
[ch32v307][Adafruit_nau7802]不能读回数据
9
测量了一下arduino的IO接口尺寸
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在RT-Thread Studio中构建前执行python命令
2
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
3
CherryUSB开发笔记(一):FSDEV USB IP核的 HID Remote WakeUp (USB HID 远程唤醒) 2025-01-18 V1.1
4
RT-thread 缩写字典
5
RT Thread 源码分析笔记 :线程和调度器
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
聚散无由
2
篇文章
14
次点赞
catcatbing
2
篇文章
4
次点赞
Wade
2
篇文章
2
次点赞
Ghost_Girls
1
篇文章
4
次点赞
xiaorui
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部