嵌入式人工智能(40-基于树莓派4B的水滴传感器和火焰传感器)

虽然这两个传感器水火不容,我还是把他们放到一起了。本文是有线传感器的最后一个部分了。后面如果还有文章介绍有线传感器,也是补充学习其他内容不得已而为之。如果不是,就当我没说,哈哈。

1、水滴传感器

水滴传感器又称雨滴传感器/水位感应模块,是一种能够检测雨水降落的设备。它通常由一个导电板和一个检测电路组成。当雨滴落在导电板上时,会改变导电板上的电阻,从而改变检测电路的电压或电流。通过检测电路对电压或电流的变化进行分析,就能判断出是否有雨滴降落。

雨滴传感器常用于自动雨刮器、洒水器、智能灯具等设备中。在自动雨刮器中,雨滴传感器可以检测到雨滴的降落,并通过信号控制雨刮器的启动和停止,提供更好的驾驶视野。在洒水器中,雨滴传感器能够检测到雨水的降落,从而自动停止洒水,节约水资源。在智能灯具中,雨滴传感器可以检测到雨滴的降落,并自动调节灯光亮度,提供更好的照明效果。

雨滴传感器的工作原理通常基于电阻、电容或光电效应等原理。不同类型的传感器采用不同的原理,但都能够实现对雨滴降落的检测。

功能介绍

接上 5V电源,电源指示灯亮,感应板上没有水滴时,DO输出为高电平,开关指示灯灭,滴上一滴水,DO输出为低电平,开关指示灯亮,擦掉上面的水滴,又恢复到,输出高电平状态。AO模拟输出,可以连接单片机的AD口检测滴在上面的雨量大小,DO TTL数字输出也可以连接单片机检测是否有雨。

水位检测:水位检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换,输出的模拟值可以直接被开发板读取,达到水位报警的功效。

2、火焰传感器

火焰是由各种燃烧生成物、中间物、高温气体、碳氢物质以及无极物质为主体的高温固体微粒构成的。火焰的热辐射具有离散光谱的气体辐射和连续光谱的固体辐射,不同燃烧物的火焰辐射强度、
波长分布也有所差异,但总体来说,其对应火焰温度的近红外波长域及紫外光域具有很大的辐射强度根据这种特性就可制成火焰传感器。火焰传感器根据探测波长的不同,一般可分为紫外火焰传感器和远红外火焰传感器两种。

紫外火焰传感器可以用来探测火源发出的400nm以下的热辐射。当红外光波长在350nm 附近时,
其灵敏度达到最大。紫外火焰探头将外界红外光的强弱变化转化为电流的变化,再通过AD转换器转换为0~255范围内数值的变化。外界紫外光越强,数值越小,紫外光越弱,数值越大。

本次使用的是一个远红外火焰传感器,KY-026模块,如图所示。其工作电压为3.3~5V,可以输出数字信号和模拟信号。该传感器能够探测到波长在760nm~1100nm范围内的红外光,探测角度为60°,其中红外光波长在880nm附近时,其灵敏度达到最大。当检测到有火焰时数字输出口输出高
电平,模拟输出口输出电压与火焰大小有关,火焰越大电压越高,模块的灵敏度可通过可调电位器调节。如果使用该模块的模拟信号接口,还需要一个模数转换器(ADC),我这边只有那个PCF8591的8位4路AD转换模块,如果同学要求较高的话,可以选用10位8通道的MCP3008A/D转换芯片。我手头没有这个,所以只能用8位AD,范围0-255的数字量。

3、与树莓派的连接

本次实验我打算2个模块一起做了,水滴传感器接PCF8591的IN0,火焰传感器接PCF8591的IN1。其他引脚的接线为VCC:接电源正极 3v-5v。GND:接电源负极。DO:TTL开关信号输出,可以接任一GPIO,我上次传感器实验是做的DO,本次做AO。

4、实验代码与实验现象

本次实验玩点花活,水滴值在数码管上显示。火焰的大小可以用LED灯亮的个数来显示。

import TM1638
import smbus
import time

bus = smbus.SMBus(1)

#通过 sudo i2cdetect -y -1 可以获取到IIC的地址
def setup(Addr):
	global address
	address = Addr

# 读取模拟量信息
def read(chn): #通道选择,范围是0-3之间
	try:
		if chn == 0:
			bus.write_byte(address,0x40)
		if chn == 1:
			bus.write_byte(address,0x41)
		if chn == 2:
			bus.write_byte(address,0x42)
		if chn == 3:
			bus.write_byte(address,0x43)
		bus.read_byte(address) # 开始进行读取转换
	except Exception as e:
		print ("Address: %s" % address)
		print (e)
	return bus.read_byte(address)

def init():
    global tm
    tm=TM1638.TM1638(stb=36,clk=38,dio=40) 
    tm.brightness(2)
    setup(0x48)


def main_loop():
    init()
    while True:
        AIN0 = read(0)
        AIN1 = read(1)
        print(AIN0)
        print(AIN1)
        if AIN1<=32:
            tm.leds(0b10000000)
        elif AIN1<=64:
            tm.leds(0b11000000)
        elif AIN1<=96:
            tm.leds(0b11100000)
        elif AIN1<=128:
            tm.leds(0b11110000)
        elif AIN1<=160:
            tm.leds(0b11111000)
        elif AIN1<=192:
            tm.leds(0b11111100)
        elif AIN1<=224:
            tm.leds(0b11111110)
        else:
            tm.leds(0b11111111)
        
        tm.number(255-int(AIN0))
        time.sleep(0.5)


if __name__ == '__main__':
    try:
        main_loop()
    except KeyboardInterrupt:
        print("程序结束!")
    finally:
        tm.clear()

果然当有水滴在感应板上时,数码管有数值显示,如果右手触摸也会有数值显示,只不过比较小。

而火焰传感器我感觉用手捂着都比火机来的刺激些,安全起见,还是用手把。

水滴火焰mp4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值