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

前言:

我看到许多有关于树莓派获取烟雾浓度的文章内容,但是自己去运行代码的时候总是差强人意,所以便自己利用树莓派,外接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语言实现烟雾浓度的采集

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <unistd.h>

#define PCF8591_ADDRESS 0x48
#define PCF8591_AIN0 0x40
#define VOLTAGE_REF 5 // 电压参考值为5V

int main() {
    int file;
    char filename[20];
    int adapter_nr = 1; /* 根据树莓派的I2C适配器编号进行设置 */
    snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
    file = open(filename, O_RDWR);
    if (file < 0) {
        perror("Failed to open the i2c bus");
        exit(1);
    }

    if (ioctl(file, I2C_SLAVE, PCF8591_ADDRESS) < 0) {
        perror("Failed to acquire bus access and/or talk to slave");
        exit(1);
    }

    while (1) {
        // 选择AIN0通道
        char config[2] = {0};
        config[0] = PCF8591_AIN0;
        write(file, config, 1);
        usleep(10000); // 等待转换完成

        // 读取AIN0通道的值
        char data[1] = {0};
        read(file, data, 1);
        int value = data[0];
        
        // 计算电压值
        float voltage = (value / 255.0) * VOLTAGE_REF;
        float sum = voltage / VOLTAGE_REF;
        float result = sum * 100;

        printf("PCF8591 AIN0 value: %d, Voltage: %.2fV , 烟雾浓度是: %.2f%\n", value, voltage, result);

        usleep(1000000); // 每1秒读取一次
    }

    close(file);
    return 0;
}

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

 

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值