文章目录
前言
用树莓派4b做一个烟雾浓度检测仪,烟雾浓度传感器模块MQ-2收集烟雾浓度数据,把数据上传到onenet平台用网页显示。
所需材料:树莓派;MQ-2烟雾浓度传感器 ;PCF8591 ad转换模块;杜邦线;面包板;
[2021.6.11]
一、硬件连接
参考:
PCF8591:PCF8591、PCFPCF8591使用及Python控制
MQ-2、PCF8591和树莓派之间使用I2C总线通信方式,引脚连接如下:
PCF8591 树莓派
GND---GND
VCC---3.3V
SCL---SCL/GPIO3
SDA---SDA/GPIO2
MQ-2 树莓派
GND---GND
VCC---5V
D0----36引脚
MQ-2 PCF8591
AO----AIN0
MQ-2
MQ-2浓度及电压转换:
烟雾浓度计算公式: ppm = 613.9f * pow(RS/R0, -2.074f)
ppm:为可燃气体的浓度。
VRL:电压输出值。
Rs:器件在不同气体,不同浓度下的电阻值。
R0:器件在洁净空气中的电阻值。
RL:负载电阻阻值。
注:
pow() 方法返回 xy(x 的 y 次方) 的值。
import math
math.pow( x, y )
注2:
#浓度计算参数
CAL_PPM =20 # 校准环境中PPM值
RL = 5 # RL阻值
#R0 = float(6.00) #元件在洁净空气中的阻值
Vrl = 5 * ADC_Value / 255 #5V ad 为8位
RS = (5 - Vrl) / Vrl * RL
R0 = RS / pow(CAL_PPM / 613.9, 1 / -2.074)
ppm = 613.9 * pow(RS / R0, -2.074)
PCF8591
#!/usr/bin/env python3
# -*- Coding: utf-8 -*-
###### pin assign
#PCF8591 --------- Raspberry pi3
# SDA ------------ GPIO2/SDA1
# SCL ------------ GPIO3/SCL1
# VCC ------------- 3.3V
# GND ------------- GND
#
######
import wiringpi
import time
class PCF8591:
def __init__(self, addr):
wiringpi.wiringPiSetup() #setup wiringpi
self.i2c = wiringpi.I2C() #get I2C
self.dev = self.i2c.setup(addr) #setup I2C device
def LED_ON(self):
self.i2c.writeReg8(self.dev, 0x40, 0xFF)
def LED_OFF(self):
self.i2c.writeReg8(self.dev, 0x40, 0x00)
def DAoutput(self,value):
self.i2c.writeReg8(self.dev, 0x40, value)
def analogRead0(self):
self.i2c.writeReg8(self.dev, 0x48,0x40)
self.i2c.readReg8(self.dev,0x48) #read dummy
return self.i2c.readReg8(self.dev,0x48)
def analogRead1(self):
self.i2c.writeReg8(self.dev, 0x48,0x41)
self.i2c.readReg8(self.dev,0x48) #read dummy
return self.i2c.readReg8(self.dev,0x48)
def analogRead2(self):
self.i2c.writeReg8(self.dev, 0x48,0x42)
self.i2c.readReg8(self.dev,0x48) #read dummy
return self.i2c.readReg8(self.dev,0x48)
def analogRead3(self):
self.i2c.writeReg8(self.dev, 0x48,0x43)
self.i2c.readReg8(self.dev,0x48) #read dummy
return self.i2c.readReg8(self.dev,0x48)
def analogRead(self,pin):
self.i2c.writeReg8(self.dev, 0x48,0x40+pin)
self.i2c.readReg8(self.dev,0x48) #read dummy
return self.i2c.readReg8(self.dev,0x48)</