Arduino 第十六章:pir红外人体传感器练习

Arduino 第十六章:PIR 传感器练习

一、引言

在 Arduino 的众多有趣项目中,传感器的应用是非常重要的一部分。今天我们要学习的主角是 PIR(被动红外)传感器。PIR 传感器能够检测人体发出的红外线,常用于安防系统、自动照明等场景。通过本次练习,我们将深入了解 PIR 传感器与 Arduino 的结合使用,学会如何读取传感器数据并根据数据做出相应的反应。

二、所需材料

  1. Arduino 开发板:推荐使用 Arduino Uno,它是初学者常用且功能丰富的开发板。
  2. PIR 传感器:常见的如 HC-SR501 型号,这是一款比较容易获取且价格实惠的 PIR 传感器。
  3. 杜邦线:若干,用于连接 Arduino 开发板和 PIR 传感器。
  4. LED 灯:一个,用于直观显示 PIR 传感器的检测结果。
  5. 面包板:方便进行电路连接和布线。

三、PIR 传感器介绍

PIR 传感器的工作原理基于人体发出的红外线。当有人进入传感器的检测范围时,人体发出的红外线会使传感器内部的热释电元件产生变化,从而输出一个电信号。一般来说,PIR 传感器有三个引脚:VCC(电源正极)、GND(接地)和 OUT(信号输出)。

以 HC-SR501 为例,它还具有一些可调节的参数,比如检测灵敏度和延迟时间。通过调节传感器上的电位器,可以改变这些参数以适应不同的使用场景。

四、硬件连接

  1. 将 PIR 传感器的 VCC 引脚通过杜邦线连接到 Arduino 开发板的 5V 引脚,为传感器提供电源。
  2. 把 PIR 传感器的 GND 引脚连接到 Arduino 开发板的 GND 引脚,实现接地。
  3. 将 PIR 传感器的 OUT 引脚连接到 Arduino 开发板的一个数字引脚上,比如数字引脚 2。这样,传感器的输出信号就可以被 Arduino 读取。
  4. 把 LED 灯的正极通过一个限流电阻(例如 220 欧姆)连接到 Arduino 开发板的数字引脚 13,负极连接到 GND 引脚。限流电阻的作用是防止电流过大损坏 LED 灯。
    在这里插入图片描述

五、代码编写

打开 Arduino IDE,新建一个项目,输入以下代码:

const int pirPin = 5; // 定义 PIR 传感器连接的引脚为数字引脚 5
const int ledPin = 4; // 定义 LED 灯连接的引脚为数字引脚 4
int pirState = LOW; // 初始化 PIR 传感器状态为低电平
int val = 0; // 用于存储读取到的 PIR 传感器的值void setup() {pinMode(pirPin, INPUT); // 将 PIR 传感器引脚设置为输入模式pinMode(ledPin, OUTPUT); // 将 LED 灯引脚设置为输出模式Serial.begin(9600); // 初始化串口通信,波特率为 9600
}void loop() {val = digitalRead(pirPin); // 读取 PIR 传感器的值if (val == HIGH && pirState == LOW) {// 如果检测到高电平且之前状态为低电平,说明有人进入检测范围pirState = HIGH;digitalWrite(ledPin, HIGH); // 点亮 LED 灯Serial.println("Motion detected!"); // 通过串口打印检测到运动的信息} else if (val == LOW && pirState == HIGH) {// 如果检测到低电平且之前状态为高电平,说明人离开检测范围pirState = LOW;digitalWrite(ledPin, LOW); // 熄灭 LED 灯Serial.println("Motion stopped!"); // 通过串口打印运动停止的信息}delay(100); // 延迟 100 毫秒,避免频繁检测
}

六、代码解释

  1. 变量定义
    • const int pirPin = 5;:定义 PIR 传感器连接的引脚为数字引脚 2。
    • const int ledPin = 4;:定义 LED 灯连接的引脚为数字引脚 13。
    • int pirState = LOW;:初始化 PIR 传感器的状态为低电平,用于记录传感器的当前状态。
    • int val = 0;:用于存储从 PIR 传感器读取到的值。
  2. setup()函数
    • pinMode(pirPin, INPUT);:将 PIR 传感器连接的引脚设置为输入模式,以便读取传感器的信号。
    • pinMode(ledPin, OUTPUT);:将 LED 灯连接的引脚设置为输出模式,用于控制 LED 灯的亮灭。
    • Serial.begin(9600);:初始化串口通信,设置波特率为 9600,方便通过串口打印信息。
  3. loop()函数
    • val = digitalRead(pirPin);:读取 PIR 传感器的值,并将其存储在变量 val 中。
    • if (val == HIGH && pirState == LOW):当读取到的传感器值为高电平且之前传感器状态为低电平时,说明有人进入了检测范围。此时将传感器状态更新为高电平(pirState = HIGH;),点亮 LED 灯(digitalWrite(ledPin, HIGH);),并通过串口打印检测到运动的信息(Serial.println("Motion detected!");)。
    • else if (val == LOW && pirState == HIGH):当读取到的传感器值为低电平且之前传感器状态为高电平时,说明人离开了检测范围。此时将传感器状态更新为低电平(pirState = LOW;),熄灭 LED 灯(digitalWrite(ledPin, LOW);),并通过串口打印运动停止的信息(Serial.println("Motion stopped!");)。
    • delay(100);:添加一个 100 毫秒的延迟,避免频繁检测,减少资源消耗。

七、测试与调试

  1. 将编写好的代码上传到 Arduino 开发板。
  2. 确保 PIR 传感器和 LED 灯的连接正确,并且 PIR 传感器的检测范围没有被遮挡。
  3. 打开 Arduino IDE 的串口监视器,设置波特率为 9600。
  4. 当有人进入 PIR 传感器的检测范围时,LED 灯应该点亮,并且串口监视器会显示“Motion detected!”的信息;当人离开检测范围时,LED 灯熄灭,串口监视器会显示“Motion stopped!”的信息。
  5. 如果程序没有按照预期运行,可以检查硬件连接是否正确,代码是否存在语法错误,或者尝试调整 PIR 传感器的灵敏度和延迟时间。

八、拓展应用

  1. 安防报警系统:将 PIR 传感器与蜂鸣器结合,当检测到有人进入时,不仅点亮 LED 灯,还让蜂鸣器发出警报声,实现简单的安防报警功能。
  2. 自动照明系统:在一些需要自动控制照明的场景中,如走廊、卫生间等,当 PIR 传感器检测到有人时,自动打开灯光,人离开后一段时间自动关闭灯光,达到节能的目的。
  3. 智能家居控制:将 PIR 传感器的检测结果与其他智能家居设备(如智能插座、智能窗帘等)集成,实现更智能化的家居控制,比如当检测到有人进入房间时,自动打开空调和窗帘。

通过本次对 PIR 传感器的练习,相信你已经对它的工作原理和在 Arduino 中的应用有了更深入的了解。希望你能够发挥创意,利用 PIR 传感器开发出更多有趣和实用的项目。

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

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

相关文章

CV -- YOLOv8 图像分割(GPU环境)

目录 参考视频: 标注 JSON转为TXT 训练 验证 参考视频: 使用 Yolov8 自定义数据集进行图像分割_哔哩哔哩_bilibili 标注 数据集: 我使用的是一些苹果数据集,可以在我的csdn资源中下载: https://download.csdn.net/do…

深入理解 lua_KFunction 和 lua_CFunction

在 Lua C API 中,lua_KFunction 和 lua_CFunction 是两个核心概念,尤其在处理协程和 C 函数扩展时扮演着至关重要的角色。lua_CFunction 作为一种 C 函数类型,允许开发者将 C 函数注册到 Lua 环境中,使得这些 C 函数可以在 Lua 脚本中被调用,进而实现 Lua 的功能扩展。而 …

基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频

本系统包含用户、管理员两个角色。 用户角色:注册登录、查看首页电影信息推荐、查看电影详情并进行收藏预定、查看电影资讯、在线客服、管理个人订单等。 管理员角色:登录后台、管理电影类型、管理放映厅信息、管理电影信息、管理用户信息、管理订单等。…

【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ Linux网络编程笔记: https://blog.cs…

Vue3 打造 Windows 桌面个性高效组件工具

软件介绍 Widgets 这款基于 Vue3 构建的开源 Windows 桌面小部件工具超实用。 其多样化组件库涵盖超 20 种,从倒计时、打工进度等实用工具,到抖音热榜等实时资讯组件应有尽有,各组件独立运行,满足多场景需求。 高度自定义布局支持…

Tailwind CSS 和 UnoCSS简单比较

一、Tailwind CSS 和 UnoCSS简介 Tailwind CSS 和 UnoCSS 都是流行的原子化 CSS 框架,它们有很多相似之处,但也存在一些明显的区别,以下从多个方面对它们进行比较: 1. 基本概念和原理 Tailwind CSS 是最早提出并推动原子化 CSS…

什么是语料清洗、预训练、指令微调、强化学习、内容安全; 什么是megatron,deepspeed,vllm推理加速框架

什么是语料清洗、预训练、指令微调、强化学习、内容安全 目录 什么是语料清洗、预训练、指令微调、强化学习、内容安全语料清洗预训练指令微调强化学习内容安全什么是megatron,deepspeed,vllm推理加速框架语料清洗 语料清洗是对原始文本数据进行处理的过程,旨在去除数据中的…

C++(23):lambda可以省略()

C越来越多的使用了lambda&#xff0c;C23也进一步的放宽了对lambda的限制&#xff0c;这一次&#xff0c;如果lambda没有参数列表&#xff0c;那么可以直接省略掉()&#xff1a; #include <iostream> using namespace std;void func() {auto f []{cout<<"in…

自制操作系统分享第四天

今天要做什么&#xff1f; &#xff08;1&#xff09;分享 我们上面已经说过INT 0x13这种指令&#xff08;调用BIOS的INT指令&#xff09;&#xff0c;我们知道这是调用BIOS的0x13函数&#xff0c;但还不明白它到底是干什么用的&#xff1a; AH 0x02;# 读盘 AH 0x03;# 写…

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前&#xff0c;多所大学已经陆续给出了分数查分时间&#xff0c;综合往年情况来看&#xff0c;每年的查分时间一般集中在2月底。 等待出成绩的日子&#xff0c;学子们的心情是万分焦急&#xff0c;小编用最近爆火的“活人感”十足的DeepSeek帮大家预…

Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位

需求如下&#xff1a; 项目 测试demo 有多个渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主测试代码外&#xff0c;需要一个单独 Activity 调用测试代码。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因为支付功能需要引入对应的 moudule&#xff0c;因此…

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置&#xff1a;2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

Perplexity 开源DeepSeek-R1 模型新版本 R1-1776

引言 在人工智能领域&#xff0c;模型的更新迭代如同科技界的时尚潮流&#xff0c;不断推陈出新。今天&#xff0c;我们要介绍的是Perplexity AI开源的新版推理模型——DeepSeek-R1 1776。这个版本不仅继承了前代的强大性能&#xff0c;还在公正性和准确性上进行了显著提升。那…

关系中出现这10个信号,离分手就不远了(爱情友情都适用)

亲密关系的隐形裂痕 在一个阳光明媚却略显萧瑟的午后&#xff0c;咖啡杯里的咖啡已经凉透。小李盯着手机屏幕&#xff0c;那些曾经热烈的对话记录现在看起来如此陌生&#xff0c;仿佛隔着一层薄薄的雾。她终于意识到&#xff0c;这段关系已经悄然走向尽头。 亲密关系是一场精心…

马斯克Grok3使用入口和订阅教程(白嫖150刀API额度)

文章目录 马斯克Grok3使用入口和订阅教程(白嫖150刀API额度)前言介绍如何订阅X上Premium服务国内订阅X的Premium教程 白嫖教程小结 马斯克Grok3使用入口和订阅教程(白嫖150刀API额度) 前言介绍 重点&#xff1a;Grok 3仅对X上的Premium用户开放。你需要订阅X的Premium服务才能…

相机开发调中广角和焦距有什么不一样

在相机中,调整广角和调整焦距是两个不同的概念,它们的作用和实现方式也不同。以下是两者的详细对比和解释: 1. 调整广角 定义 广角是指相机的视野范围(Field of View, FOV)。调整广角实际上是调整相机的视野范围。更广的视野意味着可以捕捉到更多的场景内容(更宽的画面)…

让大模型帮我设计crnn网络及可运行demo,gpt4o豆包qwendeepseek-r1

prompt 使用 crnn 提取图像特征&#xff0c;给出图像好坏的二分类结果&#xff0c;写清楚代码备注&#xff0c;注释清楚向量维度大小&#xff0c;并给出一个可运行的 demo1、GPT-4o 以下是一个使用 CRNN&#xff08;Convolutional Recurrent Neural Network&#xff09;提取图…

DeepBI助力跨境电商打破流量垄断:AI驱动的亚马逊广告投放新打法

#亚马逊广告优化# 亲爱的亚马逊跨境电商卖家们&#xff0c;是否曾因亚马逊的广告打法不清晰&#xff0c;或是纠结于亚马逊广告费用过高&#xff0c;或是为亚马逊电商广告怎么投放合适的问题而苦恼&#xff1f;在竞争激烈的亚马逊市场中&#xff0c;广告投放效果平平&#xff0…

前端基础入门:HTML、CSS 和 JavaScript

在现代网页开发中,前端技术扮演着至关重要的角色。无论是个人网站、企业官网,还是复杂的 Web 应用程序,前端开发的基础技术 HTML、CSS 和 JavaScript 都是每个开发者必须掌握的核心技能。本文将详细介绍这三者的基本概念及其应用 一、HTML——网页的骨架 HTML(HyperText …

单元测试junit5

一、idea 安装自动化生成插件jcode5 安装可能不成功&#xff0c;尝试多次安装&#xff1b; 安装成功后&#xff0c;重启idea&#xff0c;再次确认安装是否成功&#xff1b; 二、在需要生成单元测试代码的模块的pom中引入依赖 ......<parent><groupId>org.springf…