Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第二期 空气质量分析仪]第2周作业
发布于 2019-09-03 20:57:48 浏览:948
订阅该版
* 本帖最后由 beebird 于 2019-9-3 20:59 编辑 * 废话这周的任务不是特别复杂,简单总结为两点,一是写两个驱动,二是创建驱动对应的测试程序,以线程的形式来测试传感器的驱动程序。以前做过驱动的项目,每次调驱动感觉都会出点障碍,这次也不例外,pm2.5的驱动调了几天就是出不来数据,没办法只好换个类似的mq2烟雾传感器的驱动做了一下,这两者本质上都是adc的使用,所以暂时就拿他来做本周的任务吧。等一起学习的兄弟帮我测完是不是我的传感器坏了的原因,再决定是否再买个pm2.5的传感器。由于这周的工作或者说是本月的工作如潮水一般的汹涌,只好赶紧先把作业先交了,后面又什么其他进展,就写续集吧:L 学习rt-thread第二周完成了以下实践。 **1.pm2.5的驱动调** 我使用的传感器是gp2y1014auof,这个传感器的工作原理是在其中间有一个大洞,空气可以自由流过,它里面邻角位置放着红外发光二极管和光电晶体管,红外发光二极管定向发送红外,当空气中有微粒阻碍红外时,红外线发送漫反射,光电晶体管接收到红外,所以信号输出引脚电压发送变化。 所以我们就得做两个工作,一是给红外发光二极管发一定时序的脉冲,二是用stm32的adc测出传感器输出引脚的电压。 这个驱动的调试要注意几点,1)线序不要接错2)引脚的连接要紧一些3)给红外发光二极管发一定时序的脉冲一定要正确,最好用示波器看一下4)adc要正常让他工作起来 在解决低4)时碰到了点问题,就是在家里做成功了,用办公室电脑编译成功下载测试时,从控制台报出find不到adc设备的错误,一起学习的一个小伙伴认为是时钟配置问题,我是把stm32CubeMX和keil升级后解决的问题。我估计我们出的问题类似。 采集部分的代码放出来给大家看一下,有什么问题请大家指正 ```float pm25_sample(void) { /* retÄ¿Ç°Ö»Êǵ÷ÊÔÓã¬Ã»ÓÐ×÷Ϊ·µ»ØÖµ·µ»ØÐ */ rt_err_t ret = RT_EOK; /* ʹÄÜÉ豸 */ ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); /* PM25_LED_PINÉèÖÃΪLOWµçƽ*/ rt_pin_write(PM25_LED_PIN, PIN_LOW); /* ÑÓʱ280um */ rt_hw_us_delay(280); /* ¶ÁÈ¡²ÉÑùÖµ */ voMeasured = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); //rt_kprintf("the voMeasured is :%d
", voMeasured); /* ÑÓʱ40um */ rt_hw_us_delay(25); /* PM25_LED_PINÉèÖÃΪHIGHµçƽ*/ rt_pin_write(PM25_LED_PIN, PIN_HIGH); rt_thread_mdelay(5); /* ´«¸ÐÆ÷µÄ¹©µçΪ5-7V£¬¶øÊä³ö×î´ó²»µ½5V£¬¶østm32µÄ²Î¿¼µçѹֻÓÐ3.3V£¬ÕâÖÖÇé¿öÈçºÎ´¦Àí£¿ */ calcVoltage = voMeasured * (3.3 / 4096); /* µ¥Î»Îªug/m3 */ dustDensity = 5000*calcVoltage/29 - 3000/29; rt_kprintf("the voMeasured is :%d
", voMeasured); /* if (dustDensity < 0) { dustDensity = 0.00; } */ /* ¹Ø±ÕͨµÀ */ //ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); return dustDensity; }``` 2.线程的创建 这一步没什么问题,比较简单,大家照着官网文档来就没什么问题了。觉得给我们指导的杨老师在任务文档中提出的要求很好,驱动、测试驱动的线程规划的很清晰。这一点值得我学习。实验中,我mq2的线程是按照文档要求做的,dht11的线程还是用的下载例程的方式,这也告诉我们创建线程方法的多样性。直接给出代码 ```/* mq2Ï̵߳ÄÈë¿Ú²ÎÊý */ /* ·µ»ØÖµ¼°²ÎÊýÒªÓëÏ̴߳´½¨º¯ÊýµÄ²ÎÊýÒ»Ö */ static void mq2_entry(void *parameter) { float mq2_data = 0; rt_uint16_t mq2_data_conversion = 0; while (1) { /* mq2Ï̴߳òÓ¡mq2´«¸ÐÆ÷²É¼¯µÄÑÌÎíÊý¾Ý ,µÍÓÅÏȼ¶ÔËÐÐ */ mq2_data = mq2_read_smoke(); mq2_data_conversion = (rt_uint16_t)(mq2_data *100); rt_kprintf("mq2 smoke sensor data is: %d.%02d
", mq2_data_conversion / 100, mq2_data_conversion % 100); rt_thread_mdelay(500); } } void mq2_init(void) { ret= mq2_hw_init(); tid1 = rt_thread_create("thread1", mq2_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (tid1 != RT_NULL) rt_thread_startup(tid1); }``` 3.贴出任务完成的截图吧 第二周任务完成心得,哪一天调外设的驱动毫无压力的时候就是功力又进一步的时候了。O(∩_∩)O~ ![作业2-1.jpg](https://oss-club.rt-thread.org/uploads/201909/03/205906v5ftf3gdfftqlflg.jpg) ![作业2-2.jpg](https://oss-club.rt-thread.org/uploads/201909/03/205906lxe1lzs18oqzexte.jpg)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
948
关于作者
beebird
这家伙很懒,什么也没写!
提问
3
回答
16
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
NXP MCXN947测评(二)ETH设备使用
2
【RA8D1-Vision Board】适配 LVGL V8
3
VISION BOARD 第二弹 基础工程配置和点亮一个LED灯
4
musb移植问题记录【设备注册3次挂起】
5
关于使用CherryUSB时候使用外挂的usb phy 芯片配置的一点注意事项
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
编译报错
socket
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
18
个答案
1
次被采纳
踩姑娘的小蘑菇
14
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Vangaoven
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部