arduino实战 2——利用arduino做一个人体传感器

2023-11-03

arduino是较为简单的单片机,易上手。所以利用arduino开始探索之旅吧。 

 目录

一.材料清单

一).模块介绍

      1).HC-SR501

      2).HC-SR04

二).实物展示

1).工作流程

2).连线

二.代码

     1.代码展示

     2.代码的理解

三.写在后面


一.材料清单

        1.uno/nano都可以,只是nano更小巧。

        2.HC-SR04,就是市面上的超声波模块(可用可不用)。

        3.HC-SR501,重点的人体检测模块!!!!!!!!!!

        4.0.96寸OLED,就是为了看数方便。

        5.无源蜂鸣器,就是检测到人报警

我用的uno,因为我手里只有uno了,芯片价格飞涨,单片机也水涨船高。

一).模块介绍

      1).HC-SR501

    我上网查阅了相关资料,找到一个pdf文件:https://docs.particle.io/assets/

这个介绍的比较详细,我就简单说一下,里面是两个传感器,就是加强版。检测到人体时输出一个高电平,波会受各种因素影响,通过调节距离,延时,以达到好的效果。但是有个缺点,就是光线太强会不灵敏,所以给你提供了两个焊接光敏电阻的地方,建议不要焊,挺不方便的。所以增加了HC-SR04。

      2).HC-SR04

   超声波传感器,通过高电平触发,当检测到物体时,会反馈一个高电平,这时将高电平的波的延时时间就可以得出距离,有个公式X=(高电平的时间x340)/2;因为波是一个往返的时间。

我买的是自带晶振的,因为我觉得自带晶振时间能准,不然只能靠板子模拟,偏差会较大

二).实物展示

视频由于没上传到B站等平台,不能上传。


1).工作流程

   首先人体检测模块启动,当将测到动物体时,OLED显示体温、超声波模块启动,开始计算距离,显示在OLED上,当动物体距离超声波模块50cm时,蜂鸣器启动,开始报警,警示有人来了。


2).连线

所有的电源接线就不重复了,都是5V,GND。

超声波模块 :  Trig是触发口,Echo是接收口。随便接线,但建议都接在PWM口上。

                        Trig--D9   Echo--D8

人体检测模块:中间的是数据反馈口,打开菲涅尔透镜就能看到。

                        out--D7

蜂鸣器模块:  I/O口--D5


二.代码

     1.代码展示

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_GrayOLED.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
#include <Adafruit_SSD1306.h>
#include <splash.h>

#define respons 7  //人体检测模块的数据反馈口
#define Buzzer  5  //蜂鸣器
#define LED     3  //LED,我没加入到实物中
int inputPin = 8;  //超声模块接收口
int outputPin = 9; //超声模块输出口
int val ;
Adafruit_SSD1306 display(128, 64, &Wire, 13); //定义OLED

void setup()
{
  Serial.begin(9600);  //串口打开,没啥用
  pinMode(inputPin, INPUT);  
  pinMode(outputPin, OUTPUT);  //定义串口工作状态
  display.begin(SSD1306_SWITCHCAPVCC,0X3c);  //定义OLED地址
  analogWrite(5,0);   //初始给蜂鸣器置零,不然吵死了
  
}
void loop()
{
  for (int i;; i++)  //使循环一直进行
  {
    int distance; //定义距离
    val = analogRead(respons);   //读取人体检测模块反馈的数值
    display.setTextColor(WHITE);
    display.clearDisplay();
    display.display();
    display.setTextSize(4);
    display.setCursor(0,8);
    display.print(val);
    display.println("~");
    display.display();    //OLED显示读取的数值
    delay(1000);
    
    if (val != 0)  //如果检测到动物体,我写的不准,因为有空气温度光线的影响
    {
      digitalWrite(outputPin, LOW); //先置为高电平
      delayMicroseconds(2);    //函数是延时微秒级别的
      digitalWrite(outputPin, HIGH);//超声波开始工作
      delayMicroseconds(10);  //因为必须大于10us的高电平才会开始工作
      digitalWrite(outputPin, LOW);//置低,因为要等待反馈回来的高电平
      distance = pulseIn(inputPin, HIGH);  //检测高电平的时延
      distance = distance / 58;  //计算距离,不要问为什么不按公式写,我用示波器测过
      display.setTextColor(WHITE);
      display.clearDisplay();
      display.display();
      display.setTextSize(4);
      display.setCursor(0,8);
      display.print(distance);
      display.println("cm");
      display.display();  //  OLED显示距离
      delay(500);
    }
    int remainder; //定义余量,计算是否是人体,因为人比动物距离模块近
    remainder = distance / 100;
    switch (remainder) //大于100为1,小于100为0
    {
      case 0:  digitalWrite(3, HIGH);
        analogWrite(5, 200);
        delay(3000);
        analogWrite(5,0);
        break;
      case 1:  break;
    }
  }
}

2.代码的理解

其实代码很简单,就是通过读取串口的PWM波,来反馈一些数据,当然了一些函数的精准使用才是关键,比如说delayMicroseconds,延时微秒。还有pulseIn,这个函数有三种写法。

pulseln:1)pulseIn();  检测脉冲宽度

               2)pulseIn(pin,value);某引脚的状态时间

               3)pulseIn(pin,value,timeout);某引脚状态的超出时间

三.写在后面

其实,我想通过蓝牙模块交互实现两块板子的互通,但是还在学习中。

后续会有改进版的,在此基础上进行增加其功能。


正在学习51单片机,寄存器好难啊,以后会增加51单片机的小玩儿意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

arduino实战 2——利用arduino做一个人体传感器 的相关文章

  • 如何在 Amazon Linux 上安装 NVM

    NVMNode Version Manager 是一个命令行实用程序 用于在基于 Linux 的系统上安装和管理多个 Node js 版本 借助 NVM 您可以在系统上安装任何特定的 Nodejs 版本并用于运行您的应用程序 本教程将帮助您
  • 使用 Prism.js 使用复制代码按钮创建代码块

    在本教程中 我们将学习如何使用 Prism js 通过复制代码按钮创建代码块 Prism js 是一个轻量级且可扩展的语法荧光笔 它使我们能够在网页上精美地格式化代码片段 添加复制代码按钮将增强用户体验 用户只需单击一下即可轻松将代码复制到
  • 在 NodeJS、ExpressJS 和 MySQL 中创建基本 CRUD API

    使用 ExpressJS 框架和 MySQL 数据库在 NodeJS 中创建基本的 CRUD 创建 读取 更新 删除 API 是一个简单的过程 在本教程中 我们将逐步介绍构建一个简单 API 所需的步骤 该 API 允许用户在数据库中创建
  • 如何避免 SSH 断管错误

    Secure Shell 或 SSH 是一种强大的协议 许多 IT 专业人员和网络管理员每天都使用它来建立与远程系统的安全连接 它旨在提供安全的远程登录和命令执行 但也存在一些问题 此类问题之一是 SSH 管道损坏错误 了解此错误的含义以及
  • Docker exec:在 Docker 容器中运行命令

    Docker 是一个流行的容器化平台 允许您在容器中打包 部署和运行应用程序 这 docker exec command 允许您在正在运行的 Docker 容器中运行命令 这对于调试 测试和管理容器非常有用 在本文中 我们将介绍如何使用 d
  • Windows 中哪个进程正在侦听端口

    如果您是系统管理员 您就会知道密切关注 Windows 系统上运行的进程有多么重要 有时 您可能需要找出哪个进程正在侦听特定端口 在本文中 我们将向您展示如何使用 CMD 和 PowerShell 来执行此操作 通过学习如何识别正在侦听端口

随机推荐

  • 如何安装和构建您的第一个 React Native 应用程序(快速入门)

    React 是 Facebook 维护的跨平台 JavaScript 库 它用于创建用户界面 使用 React Native 您可以轻松构建移动应用程序 React Native 提供应用程序的热重载 这样您就可以更快地构建您的应用程序 您
  • 如何在 Ubuntu 桌面上安装 NetBeans IDE 8.2 (PHP)

    NetBeans is the most popular IDE for development on Linux systems NetBeans editor provides many pre configured code temp
  • ChatGPT:AI语言模型的演变及其对社会的影响

    人工智能 AI 近年来已经取得了长足的进步 像这样的语言模型OpenAI 的 ChatGPT在自然语言处理和理解方面取得了长足的进步 本文将探讨 AI 语言模型的演变 重点关注 ChatGPT 其前身以及日益复杂的语言模型的社会影响 人工智
  • 如何在 Vim 中保存并退出

    VIM 是 Vi 改进版的缩写形式 它是一个免费的开源文本编辑器 可以安装在任何操作系统上 无论是 Windows 还是 Linux 操作系统 它可以在 CMD 命令行 模式以及 GUI 图形用户界面 模式下使用 它使用起来非常灵活和可靠
  • 如何在 Windows 上安装 Maven

    Apache Maven 是适用于任何软件项目的优秀构建工具 它可以帮助您管理项目代码及其构建过程 以便您的软件项目保持井井有条并保持其重点 Windows 并不是最受开发人员欢迎的操作系统 但企业和最终用户仍然广泛使用它 幸运的是 有多种
  • 如何在 Ubuntu 18.04 和 16.04 上使用 Nginx 安装多个 PHP 版本

    通常 网络托管管理器为每个 PHP 版本应用程序部署使用单独的服务器 这增加了托管成本 或者 您可以运行多个Docker多个 PHP 版本的容器 本教程帮助您在具有不同 PHP 版本的 Nginx Web 服务器上安装和配置两个 Virtu
  • 如何在 Python 中获取和更改当前工作目录

    在 Python 中处理目录中的文件时 使用绝对路径始终是一个好主意 但是 如果您使用相对路径 则需要了解当前工作目录的概念以及如何查找或更改当前工作目录 绝对路径指定从根目录开始的文件或目录位置 而相对路径从当前工作目录开始 当您运行 P
  • Grep 中的正则表达式 (Regex)

    grep是 Linux 中用于文本处理的最有用和最强大的命令之一 grep在一个或多个输入文件中搜索与正则表达式匹配的行 并将每个匹配行写入标准输出 在本文中 我们将探讨如何在 GNU 版本中使用正则表达式的基础知识grep 在大多数 Li
  • 如何在 Ubuntu 18.04 上安装和使用 Curl

    您正在学习使用以下命令下载文件的教程curl公用事业 您运行该命令并收到以下错误消息curl command not found 没有什么可担心的 这只是意味着curl您的 Ubuntu 计算机上未安装软件包 Curl 是一个命令行工具 允
  • 如何在 CentOS 上创建 sudo 用户

    The sudo命令旨在允许用户以另一个用户 默认为 root 用户 的安全权限运行程序 在本指南中 我们将向您展示如何在 CentOS 上创建具有 sudo 权限的新用户 您可以使用 sudo 用户在 CentOS 计算机上执行管理任务
  • 如何在 Linux 中挂载 NFS 共享

    网络文件系统 NFS 是一种分布式文件系统协议 允许您通过网络共享远程目录 使用 NFS 您可以在系统上安装远程目录并像使用本地文件一样使用远程文件 在 Linux 和 UNIX 操作系统上 您可以使用mount命令将共享 NFS 目录挂载
  • 如何使用 Rsync 排除文件和目录

    Rsync 是一种快速且多功能的命令行实用程序 可通过远程 shell 在两个位置之间同步文件和文件夹 使用 Rsync 您可以镜像数据 创建增量备份以及在系统之间复制文件 复制数据时 您可能需要根据名称或位置排除一个或多个文件或目录 在本
  • 如何在 CentOS 8 上安装 Slack

    Slack是世界上最受欢迎的协作平台之一 它将您的所有通信汇集在一起 Slack 中的对话按频道组织 您可以为您的团队 项目 主题或任何其他目的创建频道 您可以搜索频道或消息中发布的所有内容 Slack 还允许您通过音频或视频通话与队友交谈
  • 如何在 Debian 10 上安装 R

    R 是一种开源编程语言和免费环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本文提供有关如何在 Debian 10 上安装 R 的信息 先决条件 在继续本教程之前
  • 如何在 Ubuntu 20.04 上安装 MariaDB

    MariaDB 是一个开源关系数据库管理系统 它最初被设计为向后兼容的 二进制的 MySQL 直接替代品 MariaDB由MySQL的原始开发人员和开源社区开发和维护 本指南介绍了如何在 Ubuntu 20 04 上安装 MariaDB 先
  • 如何在 CentOS 8 上配置和管理防火墙

    防火墙是一种监视和过滤传入和传出网络流量的方法 它的工作原理是定义一组安全规则来确定是允许还是阻止特定流量 正确配置的防火墙是整个系统安全最重要的方面之一 CentOS 8 附带一个名为防火墙 它是一个带有 D Bus 接口的完整解决方案
  • 如何在 Debian 10 Linux 上安装 Jenkins

    Jenkins是一个开源自动化服务器 提供了一种设置持续集成和持续交付 CI CD 管道的简单方法 持续集成 CI 是一种 DevOps 实践 团队成员定期将代码更改提交到版本控制存储库 然后运行自动化构建和测试 持续交付 CD 是自动构建
  • 如何连接到 Docker 容器

    当您想查看容器内发生的情况时 连接到正在运行的 Docker 容器会很有帮助 如果 Docker 容器未按预期工作 您可以附加到容器或为容器获取 shell 并运行以下命令 ps or top 还可以进入容器 安装新的包 构建一个新的 Do
  • 【机器学习】支持向量机(2)——线性可分支持向量机(硬间隔最大化法,对偶算法)

    前言 此文中我们介绍了支持向量机用到的一些概念以及求解方法 接下来我们将分别介绍线性可分支持向量机 线性支持向量机以及非线性支持向量机 首先 我们考虑一个二类分类问题 假设输入空间与特征空间为两个不同的空间 输入空间为欧氏空间或离散集合 特
  • arduino实战 2——利用arduino做一个人体传感器

    arduino是较为简单的单片机 易上手 所以利用arduino开始探索之旅吧 目录 一 材料清单 一 模块介绍 1 HC SR501 2 HC SR04 二 实物展示 1 工作流程 2 连线 二 代码 1 代码展示 2 代码的理解 三 写