树莓派学习笔记(五)——烟雾浓度检测(ONENET云平台收发数据代码)

树莓派烟雾检测
本文介绍如何使用树莓派4B、MQ-2烟雾传感器和PCF8591 AD转换模块制作烟雾浓度检测仪,并将数据上传至OneNet平台进行实时监测。

前言

用树莓派4b做一个烟雾浓度检测仪,烟雾浓度传感器模块MQ-2收集烟雾浓度数据,把数据上传到onenet平台用网页显示。

所需材料:树莓派MQ-2烟雾浓度传感器 ;PCF8591 ad转换模块;杜邦线;面包板;

[2021.6.11]

一、硬件连接

参考:

MQ-2 :pm2.5mq-2mq2电压浓度转换

PCF8591:PCF8591PCFPCF8591使用及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

image-20210330205319733

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)</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值