树莓派外接MQ-2烟雾传感器获取烟雾浓度

本文介绍了如何使用树莓派3B配合MQ-2烟雾传感器和PCF8591ADC实现烟雾浓度的实时监测,包括硬件连接、I2C配置和C语言编程实现。作者还分享了实际操作过程中的注意事项和示例输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

我看到许多有关于树莓派获取烟雾浓度的文章内容,但是自己去运行代码的时候总是差强人意,所以便自己利用树莓派,外接MQ-2烟雾传感器去获取烟雾浓度。

1.硬件准备如下

1.树莓派3B+
2.MQ-2烟雾传感器
3.PCF8591(读取烟雾值关键adc)
4.诺干杜邦线

2.连线情况

首先是树莓派的40pin引脚图如下:

树莓派引脚图

MQ-2的实物图:

 

PCF8591的实物图:

注意:pcf8591在连接使用前,要将图上图黄线圈起来的J4,J5跳线帽给拔掉(我是拔掉了的)。

以下就是三者的连线使用了:

MQ-2的VCC和GND连接树莓派的5V和GND,

PCF8591的VCC和GND也连接树莓派的5V和GND,

然后是PCF8591的SCL和SDA分别连接树莓派的SCL(GPIO 3)和SDA(GPIO 2),

最后就是MQ-2的AO口连接PCF8591的AINT0口。

3.启动树莓派的II2C协议

登陆上树莓派后,输入命令:sudo raspi-config后回车;选择Interfacing Options后回车,选择I2C回车, 选择 YES回车,最后就设置成功啦!如图所示:

如果想要查看你的传感器有没有成功连接树莓派,输入命令 i2cdetect -y 1(如果不行在命令前面加个sudo);(因为不同的传感器地址不一定相同,所以做好分辨,因为我连接有其它的传感器,图中的48是pcf8591的地址)如图:

 

4.C语言实现烟雾浓度的采集

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4. #include <sys/ioctl.h>
  5. #include <linux/i2c-dev.h>
  6. #include <unistd.h>
  7. #define PCF8591_ADDRESS 0x48
  8. #define PCF8591_AIN0 0x40
  9. #define VOLTAGE_REF 5 // 电压参考值为5V
  10. int main() {
  11. int file;
  12. char filename[20];
  13. int adapter_nr = 1; /* 根据树莓派的I2C适配器编号进行设置 */
  14. snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
  15. file = open(filename, O_RDWR);
  16. if (file < 0) {
  17. perror("Failed to open the i2c bus");
  18. exit(1);
  19. }
  20. if (ioctl(file, I2C_SLAVE, PCF8591_ADDRESS) < 0) {
  21. perror("Failed to acquire bus access and/or talk to slave");
  22. exit(1);
  23. }
  24. while (1) {
  25. // 选择AIN0通道
  26. char config[2] = {0};
  27. config[0] = PCF8591_AIN0;
  28. write(file, config, 1);
  29. usleep(10000); // 等待转换完成
  30. // 读取AIN0通道的值
  31. char data[1] = {0};
  32. read(file, data, 1);
  33. int value = data[0];
  34. // 计算电压值
  35. float voltage = (value / 255.0) * VOLTAGE_REF;
  36. float sum = voltage / VOLTAGE_REF;
  37. float result = sum * 100;
  38. printf("PCF8591 AIN0 value: %d, Voltage: %.2fV , 烟雾浓度是: %.2f%\n", value, voltage, result);
  39. usleep(1000000); // 每1秒读取一次
  40. }
  41. close(file);
  42. return 0;
  43. }
bash

在Linux下运行如图(图中突然飙升的原因是我用打火机在烟雾传感器旁释放丁烷,然后关闭打火机了烟雾浓度也慢慢下降了): 

 

登录后您可以享受以下权益:

×
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回顶部