树莓派Python实现超声波测距+人体红外传感器+温湿度+LED灯

2023-05-16

硬件:1.树莓派3
          2.超声波测距模块HY-SRF05
          3.人体感应模块HC-SR501
          4.温湿度模块DHT11
          5.LED
编程语言:Python


实现的功能:当人体红外检测到人体时,点亮LED灯(相当于报警),通过超声波测距获取与人体的距离,并获取实时的温湿度。

 
废话不哆嗦,直接上源码,有注释:

#! /usr/bin/python
# -*- coding:utf-8 -*-

#热体红外+超声波测距+湿度温度

#第一脚为VCC,由于该模块工作电压为5V,因此需接在树莓派GPIO的2号针上;
#第二只脚为TRIG,输入触发信号
#第三只脚为ECHO,输出回响信号
#第四只脚为接地脚,接在树莓派GPIO的第6号针上。

#第1、3只脚分别为GPIO2和GPIO3,分别作发送和接收用,分别于Trig和Echo相连接。

#树莓派引脚有BOARD和BCM两种编号方式( 使用python时? 似乎使用C还有一种wringPi编号方式 ), 

#GPIO.setmode(GPIO.BOARD):数引脚对应编号模式
#GPIO.setmode(GPIO.BOARD):数引脚对应编号模式

import RPi.GPIO as GPIO #( 导入模块 )
import sys
import time

#( 引脚编号 )
Trig=2 #第3号针,GPIO2
Echo=3 #第5号针,GPIO3
GPIO_IN=22 #人体红外传感器输入 GPIO22
LED_OUT=21 #LED电平输出 GPIO21
dht11_rpi_pin=4 #湿度温度连接的引脚号 GPIO4


# 用于获取湿度温度
# dht11_rpi_pin : 湿度温度连接的引脚号
# 返回二元组 [ 湿度 , 温度 ]
def get_dht11(dht11_pin):
        buff=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #定义一个长度为40的整型数组

        GPIO.output(dht11_pin,0)#输出低电平
        
        time.sleep(0.02)                                        # 拉低20ms(延迟)

        GPIO.output(dht11_pin,1)#输出高电平

        GPIO.setup(dht11_pin,GPIO.IN)                # 这里需要拉高20-40us,但更改模式需要50us,因此不调用延时


        while not GPIO.input(dht11_pin):        # 检测返回信号 检测到启示信号的高电平结束
                pass


        while GPIO.input(dht11_pin):                # 检测到启示信号的高电平则循环
                pass

        i=40

        while i:
                start=time.time()*1000000                # 为了严格时序 循环开始便计时
                i-=1
                while not GPIO.input(dht11_pin):
                        pass
                while GPIO.input(dht11_pin):
                        pass
                buff =time.time()*1000000-start# 为了严格时序 每次测得数据后都不马上处理 先存储

        GPIO.setup(dht11_pin,GPIO.OUT)                # 读取结束 复位引脚
        GPIO.output(dht11_pin,1)
        # print "buff - ",buff

        # 开始处理数据
        for i in range(len(buff)):                        # 将时间转换为 0 1
                if buff>100:                                        # 上方测试时是测试整个位的时间
                                                                                # 因此是与100比较 大于100为1(位周期中 低电平50us)
                        buff=1
                else:
                        buff=0
        # print "After - ",buff

        i=40
        hum_int=0
        while i>32:                                # 湿度整数部分
                i-=1
                hum_int<<=1
                hum_int+=buff
        #print "湿度:",hum_int

        tmp_int=0
        i=24
        while i>16:                                # 温度整数部分
                i-=1
                tmp_int<<=1
                tmp_int+=buff
                
        #print("温度:",tmp_int,"湿度:",hum_int)
        return ["当前湿度:",hum_int,"温度:",tmp_int]


#超声波测距
def get_HYSRF05():

        #发出触发信号
        GPIO.output(Trig,GPIO.HIGH)#gaodianpin
        #保持10us以上(我选择15us)
        time.sleep(0.000015)
        GPIO.output(Trig,GPIO.LOW)
        while not GPIO.input(Echo):
                pass
        #发现高电平时开时计时
        t1 = time.time()
        while GPIO.input(Echo):
                pass
        #高电平结束停止计时
        t2 = time.time()
        #返回距离,单位为米
        return (t2-t1)*340/2

#GPIO.setmode(GPIO.BOARD) erro:已经设置了不同的模式!

#(检测使用的是哪种编号方式): mode = GPIO.getmode()
#避免警告: GPIO.setwarnings(False)

#初始化引脚
GPIO.setmode(GPIO.BCM)

#(设置通道)

#第3号针,GPIO2
GPIO.setup(Trig,GPIO.OUT,initial=GPIO.LOW)
#第5号针,GPIO3
GPIO.setup(Echo,GPIO.IN) #输入的引脚. 
#人体红外传感器输入
GPIO.setup(GPIO_IN,GPIO.IN)
#LED电平输出
GPIO.setup(LED_OUT,GPIO.OUT) #输出的引脚
# 输出模式 初始状态给高电平 (dht11_rpi_pin)
GPIO.setup(dht11_rpi_pin, GPIO.OUT)
GPIO.output(dht11_rpi_pin, 1)
        
time.sleep(2)
try:
        while True:
                #print ("距离: %0.2f m" %checkdist())
                #( 读输入引脚的值 ):
                inValue=GPIO.input(GPIO_IN)  
                if inValue!=0:  
                   print("警告:有人! 距离: %0.2f m" %get_HYSRF05())#,get_dht11(dht11_rpi_pin)
                   GPIO.output(LED_OUT,True)
                   #get_dht11(dht11_rpi_pin)#获取湿度温度
                   #LED接在BCM编号方式下的21引脚, 每隔1s亮一次,
                   #time.sleep(), 延时秒数. 类似Arduino中的delay(), 当然,后者是延时的ms数.
                   time.sleep(1)  
                else:  
                   print("安全:沒人。")
                   #设置输出引脚的状态(电平: 0/1)
                   GPIO.output(LED_OUT,False)
                   time.sleep(1)
except KeyboardInterrupt:
        GPIO.cleanup()#清除引脚设置恢复默认 程序结束时, 最好清除引脚设置并恢复默认.
        #有可能程序退出时, 不想清除某些通道的设置, 你可以使用python的列表或元组 来只清除某几个通道:
        #GPIO.cleanup(channel)
        #GPIO.cleanup( (channel1, channel2) )
        #GPIO.cleanup( [channel1, channel2] )
        #设置上拉下拉电阻
           #GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        # or
           #GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派Python实现超声波测距+人体红外传感器+温湿度+LED灯 的相关文章

  • 类的友元

    include lt iostream gt include lt cstdlib gt using namespace std class Point public Point int x int y friend float dist
  • 树莓派全系列对比

    树莓派全系列参数介绍如下 xff1a 再附上 知乎 64 少数派 的一张图 xff1a Raspberry官网对过去使用的博通Soc的描述 BCM2837B0 This is the Broadcom chip used in the Ra
  • Runtime类

    xfeff xfeff 在每一个java应用程序中 xff0c 都有唯一一个RunTime对象 xff0c 该唯一的RunTime对象可通过getRunTime 方法获得 应用程序不能创建自己的RunTime队象 xff0c package
  • 动态二维数组

    include lt iostream gt include lt cstdlib gt using namespace std class Point public Point cout lt lt 34 执行无参构造函数 34 lt l
  • 获得服务器硬件信息(CPUID、硬盘号、主板序列号、IP地址等)

    获得服务器硬件信息 xff08 CPUID 硬盘号 主板序列号 IP地址等 xff09 linux命令 获取IP地址 ifconfig a 获取CPU信息 dmidecode t processor grep ID lscpu cat pr
  • MySQL备份和还原操作

    MySQL备份和还原操作 目标 备份的概念 Mysqldump备份操作 MySQL还原操作 MySQL双机热备份 概述 在数据库表丢失或损坏的情况下 xff0c 备份数据库是很重要的 如果发生系统崩溃 xff0c 能够将表尽可能丢失最少的数
  • MySQL性能优化

    MySQL性能优化 目标 调优思路系统优化mysql服务优化应用优化方式SQL语句调优启用mysql慢查询 调优思路 数据库设计与规划 以后再修该很麻烦 xff0c 估计数据量 xff0c 使用什么存储引擎数据的应用 怎样取数据 xff0c
  • Hadoop伪分布模式安装

    Hadoop伪分布模式安装 Hadoop的运行模式分为3种 xff1a 本地运行模式 xff0c 伪分布运行模式 xff0c 完全分布运行模式 xff08 1 xff09 本地模式 xff08 local mode xff09 这种运行模式
  • 云的几种部署模式

    云的几种部署模式 定义 xff1a 特点云的部署模式 定义 xff1a 云 是一种计算模式 xff0c 利用互联网技术把大量可扩展和弹性的IT相关能力作为 一种服务提供给多个客户 特点 服务化 弹性 多租户 云的部署模式 公有云 混合云 内
  • 通过git 上传本地代码至码云

    实验步骤 1 配置ssh xff08 1 xff09 在本地生成sshkey xff0c 打开git命令终端 git bash 窗口 ssh keygen t rsa C 34 xxxxx 64 xxxxx com 34 你的邮箱 xff0
  • git常见命令

    常见命令 1 初始化本地仓库 git init 2 需要与码云保持一致 git config global user name 34 用户姓名 34 git config global user email 34 用户邮箱 34 3 设置远
  • 【python】详解threading模块:lock、Rlock的使用(二)

    在之前的 python 详解threading模块 xff1a 基本概念 join阻塞和setDaemon守护主线程 xff08 一 xff09 一文中 xff0c 是有对多线程进行一个详细的梳理的 其中就提到了线程锁这一功能 主要基于Rl
  • 定位导航——旋转矩阵,IMU,左右乘

    我们先明确一下这里所说的一些概念 IMU IMU全称Inertial Measurement Unit xff0c 惯性测量单元 xff0c 主要用来检测和测量加速度与旋转运动的传感器 起初只是用来测量角度的 xff0c 后来随着其他传感器
  • scp命令详解

    相关知识 scp是secure copy的简写 xff0c 用于在Linux下进行远程拷贝文件的命令 xff0c 和它类似的命令有cp xff0c 不过cp只是在本机进行拷贝不能跨服务器 xff0c 而且scp传输是加密的 可能会稍微影响一
  • H3C命令详解(笔记)

    1 常用命令 lt gt xff1a 用户视图模式 xff0c 仅仅能配置基本参数 xff0c 调试命令 xff0c 权限较小 xff1a 系统视图模式 xff0c 可以做高级配置 system view 进入系统视图 quit 退出当前模
  • 解决Ubuntu18.04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题

    解决Ubuntu18 04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题 目录 解决Ubuntu18 04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题
  • GD32F303 移植freertos 中断管理设定。。。。

    之前做项目时 xff0c 使用GD32F303并移植了freertos 移植过程网上有很多教程 xff0c 根据这些教程移植就可以 移植完后注意FreeRTOSConfig h中关于RTOS中断管理的设置 我移植时在官网下的是当时最新的RT
  • ros自建功能包操作

    功能包改名 假定功能包原名Apkg xff0c 要改成Bpkg 把Apkg功能包文件夹名改为Bpkg 把CMakeLists txt中project Apkg 改为project Bpkg 把Package xml文件中 lt name g
  • Jacobian矩阵和梯度矩阵

    记号标识 标量 xff1a 常规小写字母 xff1b 向量 xff1a 加粗的小写字母 x 61 x 1
  • 一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!

    本文转自 xff1a https mp weixin qq com s MzmdxqukOZ6rUta9nkGGw 本文来自我的知识星球的球友投稿 xff0c 他在最近的校招中拿到了蚂蚁金服的实习生Offer xff0c 整体思路和面试题目

随机推荐

  • arduino 自平衡小车3\对mpu6050获得的X轴角度和角速度进行卡尔曼滤波

    对mpu6050获得的X轴角度和角速度进行卡尔曼滤波 mpu6050得到的角度值有些值的偏差较大 xff0c 为了使平衡小车更加稳定 xff0c 需要对获得的角度进行优化 xff0c 使用 卡尔曼滤波 xff0c 代码如下 xff1a in
  • nginx CPU 100 跑满问题定位

    1 确定连接数是不是达到了上限 2 确定是不是开启了gzip压缩 xff0c 确定压缩等级 xff0c 小于1kb的不要压缩 xff1b 图片 xff0c 大文件 xff0c 大压缩文件等不要压缩 3 单个CPU占用100 原因的定位 xf
  • 虚拟串口及其在串口转以太网中的应用

    本文介绍虚拟串口的概念 xff0c 以及如何在串口转以太网中利用该技术 1 虚拟串口的概念 虚拟串口是用操作系统的虚拟驱动技术产生的串口 xff08 COM口 xff09 xff0c 相对于计算机本身的硬件串口 xff08 COM1等 xf
  • 机器学习——PCA降维

    参考文章 xff1a https zhuanlan zhihu com p 77151308 PCA xff08 Principal Component Analysis xff09 是一种常见的数据分析方式 xff0c 常用于高维数据的降
  • C++命名规则--简明即查即用版(Windows开发环境)

    目录 前言 1 类名 2 函数名 3 参数 4 变量 5 常量 6 静态变量 7 全局变量 8 类的成员变量 前言 Microsoft推出的命名规则匈牙利法是 在变量和函数名中加入前缀以增进人们对程序的理解 xff0c 但如此一来太为繁琐
  • STM32中的FreeRTOS-#1(入门)

    写在前面 xff1a 我一直觉得 xff0c 如果我能把一点知识说给别人听 xff0c 并且别人能听懂 xff0c 大概率我自己真的学会了 记录的过程也是自己梳理的过程 xff0c 本系列我把它称为 教程 xff0c 是想把它写得系统且有条
  • 信号量 与 互斥量的区别

    原文来源 https blog csdn net ZhipingXi article details 78031307 信号量 与 互斥量 xff08 锁 xff09 的区别 一 概念和定义 信号量 xff1a 多线程同步使用的 xff1b
  • opencv版本问题,引起的vins视觉结果漂移

    最近在根据vins代码进行改写 xff0c 实验发现 当opencv为3 4 12版本时 xff08 core imgproc imgcodecs这几个库 xff09 xff0c vins 优化结果会非常飘 如果vins结果比较离谱 xff
  • i.MX6U SPI浅析

    1 SPI简介 SPI 全称是 SerialPerripheral Interface xff0c 也就是串行外围设备接口 SPI 是 Motorola 公司推出的一种同步串行接口 技术 xff0c 是一种高速 全双工的同步通信总线 xff
  • 【飞控协议】MavLink介绍和编译

    MavLink是什么 xff1f MavLink xff08 Micro Air Vehicle Link xff0c 微型空中飞行器链路通讯协议 xff09 是在串口通讯基础上的一种更高层的开源通讯协议 xff0c 主要应用在无人飞行器与
  • 工作中常用到的设计模式-调用第三方系统接口

    一 概述 外呼业务场景中 xff0c 有一个关键的接口就是黑名单接口 xff08 包括客户投诉 退订接口 是否还款等 xff09 xff0c 我们系统需要经常去跟外部第三方系统交互 xff08 http方式 xff09 一个请求都会经历这几
  • 多旋翼飞行器振动机理分析和减振设计

    多旋翼飞行器振动机理分析和减振设计 开源资源与pdf版论文见 https gitee com robin shaun Multicopter Vibration Attenuation或 https github com robin sha
  • USB3的端口识别Realsense D435i的USB为USB2的解决办法

    如果确定系统没有问题 xff08 识别其他的设备为USB3 xff09 时 xff0c 可参考如下解决方案 xff0c 来自https www intel com content www us en support articles 000
  • XTDrone无人机仿真平台

    XTDrone无人机仿真平台 背景XTDrone展示 背景 近年来 xff0c 无人机的智能化程度不断提高 xff0c 集群的规模不断增大 xff0c 在这种背景下 xff0c 良好的无人机通用仿真平台的重要性越发凸显 相较于无人车和地面机
  • 栈的Java实现--链栈

    栈的Java实现 链栈 链栈 xff0c 顾名思义 xff0c 就是以链表的形式实现的栈的相关操作 xff0c 其实是功能弱化了的链表 xff0c 如果已经阅读过链表的实现代码 xff0c 那么链栈的实现显得更为容易 链栈的基本结构 xff
  • Xavier NX使用NoMachine注意账户名

    由于NoMachine使用NX技术 xff0c 因此会创建一些命名含有nx的文件 xff0c 因此安装NoMachine时确保Xaiver NX的账户名不是nx xff0c 否则可能会有冲突导致开不了机的严重后果
  • docker下删除两个id相同的镜像

    今天建立docker容器的时候由于疏忽 xff0c 镜像的名字输错了 xff0c 结果容器创建成功后 xff0c 镜像中出现两个id相同的 xff1a 使用docker rmi e4a35914679d删除的时候执行失败 xff1a Err
  • void指针(void *)是什么?如何使用它

    void 指针的使用规则 1 void 指针可以指向任意类型的数据 xff0c 就是说可以用任意类型的指针对 void 指针赋值 例如 xff1a int a xff1b void p xff1b p 61 a xff1b 如果要将 voi
  • python百度网盘API分片上传实现,纯代码

    client id 61 您应用的AppKey client secret 61 您应用的SecretKey 信息需要到百度网盘开发者信息需要自己申请 xff0c 实名就可以申请 分片放在内存中 如果文件过大 xff0c 可以改放到磁盘上
  • 树莓派Python实现超声波测距+人体红外传感器+温湿度+LED灯

    硬件 xff1a 1 树莓派3 2 超声波测距模块HY SRF05 3 人体感应模块HC SR501 4 温湿度模块DHT11 5 LED 编程语言 xff1a Python 实现的功能 xff1a 当人体红外检测到人体时 xff0c 点亮