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

news2024/9/20 9:41:26

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现字母的大小写转换。多组输入输出(c语言)

1.我们先输入字母&#xff08;用getchar的函数&#xff09;&#xff0c;判断是不是字母&#xff0c;我们可以用a<tmp<z或者A<tmp<Z,注意&#xff1a;小写转换大写用tmp-32&#xff0c;大写转换小写用tmp32.. #include<stdio.h> int main() {int a 0;while …

以太坊交易手续费计算

Gas 中译是&#xff1a;瓦斯、汽油&#xff0c;代表一种可燃气体。 这形象地比喻以太坊的交易手续费计算模式&#xff0c;不同于比特币中直接支付比特币作为转账手续费&#xff0c; 以太坊视为一个去中心化的计算网络&#xff0c;当你发送Token、执行合约、转移以太币或者在此区…

东巴古籍——纳西族古老文字的见证

关注我们 - 数字罗塞塔计划 - 华夏大地上的每个民族都有各自独特的文化传承&#xff0c;在前面的文章中&#xff0c;我们已经介绍过中国档案文献遗产名录中收录的永州女书和水族水书&#xff08;详细参见《永州女书——世上唯一专属于女性的文字》、《水书——破解象形文字含义…

二叉树LeetCode热题

94.二叉树的中序遍历 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 输入&#xff1a;root [1,null,2,3]输出&#xff1a;[1,3,2] 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

一文搞懂大模型在多GPU环境的分布式训练!

随着大模型时代的到来&#xff0c;模型参数量、训练数据量、计算量等各方面急剧增长。大模型训练面临新的挑战&#xff1a; 显存挑战&#xff1a;例如&#xff0c;175B的GPT-3模型需要175B*4bytes即700GB模型参数空间&#xff0c;而常见的GPU显存如A100是80G显存&#xff0c;这…

zabbix使用脚本自定义监控项

1. 在zabbix_agent的配置文件中配置自定义key和脚本位置 vim /etc/zabbix/zabbix_agentd.confUserParametermq_check_log,/etc/zabbix/zabbix_agentd.d/mqlog.shmq_check_log&#xff1a;是这个自定义参数的名称。在Zabbix的监控项&#xff08;item&#xff09;配置中&#xf…

WinForm中使用Graphics画元素

前言 有时候我们需要在一个图像上显示一些文字&#xff0c;或者画一些标志&#xff0c;这就想我们平时截图也需要做一些描述信息。在C#中我们可以Graphics这个对象来绘制自己所需要描述的信息&#xff0c;当然在WPF中的它的设计思路又不一样了&#xff0c;在WPf中考虑使用的矩…

upload-labs靶场:1—10通关教程

目录 Pass-01&#xff08;JS 验证&#xff09; Pass-02&#xff08;MIME&#xff09; Pass-03&#xff08;黑名单绕过&#xff09; Pass-04&#xff08;.htaccess 绕过&#xff09; Pass-05&#xff08;大小写绕过&#xff09; Pass-06&#xff08;空格绕过&#xff09; …

经典神经网络(15)GLM模型原理详解及其微调(文本摘要)

经典神经网络(15)GLM模型原理详解及其微调(文本摘要) 2024年01月16日&#xff0c;智谱推出新一代基座大模型 GLM-4。新一代基座大模型 GLM-4 的整体性能相比上一代大幅提升&#xff0c;十余项指标逼近或达到 GPT-4&#xff1b;支持更长上下文&#xff1b;更强的多模态&#xf…

马丁短链02异常码 异常拦截器

全局统一返回实体&#xff1a; 目的是除了数据信息&#xff0c;还要带上一些错误状态码&#xff0c;成功与否&#xff0c;错误信息等等以帮助更好理解可能的错误。 规约&#xff1a;默认的约定 异常码设计原则&#xff1a; A客户端异常 B服务端异常 C远程调用异常 具体异常码…

CentOS7.9 利用 KubeKey 扩容 Kubernetes v1.26 Worker 节点实战

转载&#xff1a;CentOS7.9 利用 KubeKey 扩容 Kubernetes v1.26 Worker 节点实战 知识点 定级&#xff1a;入门级 KubeKey 安装部署 KubeSphere 和 Kubernetes KubeKey 定制化部署集群 KubeSphere v3.4.0 功能概览 Kubernetes 基本操作 CentOS 系统内核升级 演示服务器配…

Spring源码- context:component-scan base-package标签的作用源码解析

1.扫描包路径下所有的类加载解析成bean定义信息 ClassPathBeanDefinitionScanner .doScan方法调用路径 doScan:276, ClassPathBeanDefinitionScanner (org.springframework.context.annotation) parse:95, ComponentScanBeanDefinitionParser (org.springframework.context.a…

【用C语言编写】题目名称:数9的个数题目内容:编写程序数一下1到100的所有整数中出现多少个数字9

题目名称&#xff1a;数9的个数 题目内容&#xff1a;编写程序数一下1到100的所有整数中出现多少个数字9 代码如下&#xff1a; #include <stdio.h> int main() {int i 0;int count 0;for (i 1; i <100; i){if (i % 10 9) //个位为9的count;else if (i / 10 9) //…

手机应用的时间可以修改吗??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

Java线程安全之同步方法

同步方法 使用synchronized修饰的方法&#xff0c;就叫做同步方法&#xff0c;其固定格式如下&#xff1a; public [static] synchronized 返回值类型 同步方法() {可能会产生线程安全问题的代码 }注意事项&#xff1a; 同步方法可以是普通成员方法&#xff0c;也可以是sta…

聊一聊 webpack5性能优化有哪些?

介绍 此文章基于webpack5来阐述 webpack性能优化较多&#xff0c;可以对其进行分类 优化打包速度&#xff0c;开发或者构建时优化打包速度&#xff08;比如exclude、catch等&#xff09;优化打包后的结果&#xff0c;上线时的优化&#xff08;比如分包处理、减小包体积、CDN…

什么是安全生产痕迹化管理?如何做到生产过程中全程痕迹化管理?

安全生产痕迹化管理&#xff0c;简单来说&#xff0c;就是通过记录一些“信息”来确保安全工作的进展。这些方法包括记会议内容、写安全日记、拍照片、签字盖章、指纹识别、面部识别还有手机定位等。记录下来的文字、图片、数据和视频&#xff0c;就像一个个“脚印”&#xff0…

“免费”制作中国式报表的工具横空出世,内置丰富图表组件!

一.报表制作的烦恼 报表是我们日常工作中的好伙伴&#xff0c;它在企业管理和决策过程中扮演着重要角色&#xff0c;能够清晰直观地展示数据&#xff0c;让关键信息一目了然。 然而&#xff0c;无论是使用传统的手工报表还是基于软件的普通报表操作&#xff0c;都存在不便之处…

clickhouse sql 语法参考

clickhouse sql 语法参考 1. select1.1 将结果中的某些列与 re2 正则表达式匹配&#xff0c;可以使用 COLUMNS 表1.2 ARRAY JOIN - 数组数据平铺1.3 LEFT ARRAY JOIN 2. create2.1 分布式创建数据库2.2 分布式创建复制表2.4 CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGI…

layui table 重新设置表格的高度

在layui的table模块中&#xff0c;如果使用table.render({})渲染了一个表格实例时&#xff0c;确定了height配置&#xff0c;后续用table.resize(id)方法重置表格尺寸时&#xff0c;表格的高度是不会变化的&#xff08;如果我的理解没有错的话&#xff09;。 有时我们希望根据…