ESP32-CAM+PIR传感器=动作抓拍监控

2024-04-03 03:58

本文主要是介绍ESP32-CAM+PIR传感器=动作抓拍监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在《如何检测活人(一):PIR人体红外传感器》中我们介绍了PIR红外传感器的基本原理以及如何使用Arduino读取PIR信号的基本操作。本篇我们来稍微衍生一下,看看之前介绍过的ESP32-CAM如何结合PIR传感器快速实现一个能检测人体动作并立即抓拍保存照片的安防设备。

本文翻译自国外文章,略有删减,原文请点击底部链接。

本教程中,我们将使用ESP32-CAM制作一个探测动作并抓拍的设备。当PIR人体红外传感器检测到人体活动,这个设备会激活,拍照然后把照片存到Micro SD卡里。

    实验所需材料    

  • ESP32-CAM开发板带OV2640摄像头

  • MicroSD存储卡

  • PIR传感器

  • 2N3904 NPN型三极管

  • FTDI USB转串口下载器

  • 母对母杜邦跳线

  • 5V电源(可以用改造后的充电宝)

    实验原理    

上图我们可以看到整个项目的流程图:

  1. 为了省电,ESP32-CAM默认处于深度睡眠(Deep Sleep)模式并开启外部唤醒(External Wake Up)。

  2. 当检测到移动物体,PIR传感器发送信号唤醒ESP32-CAM,ESP32-CAM立即拍照并且把照片存到Micro-SD存储卡里。

  3. ESP32-CAM随后再次进入深度睡眠模式,直到下次被唤醒。

    格式化Micro SD卡    

第一步要做的事就是格式化Micro SD卡,你可以使用Windows自带格式化工具,或者任何其他第三方的格式化工具。

1. 将Micro SD卡放入读卡器再连接电脑。进入我的电脑,找到Micro SD卡的图标右键,然后选择格式化(Format)。

2. 选中格式化后,会跳出格式化选项窗口,选择FAT32格式,然后点击开始。等待格式化结束就可以了。

    安装ESP32插件    

如果你是第一次使用ESP32,那么你需要配置ESP32的Arduino开发环境,具体请参考《ESP32-CAM打造低成本网络监控摄像头》教程中的「安装ESP32插件」一节。

    上传代码    

打开Arduino IDE,复制黏贴以下代码并保存。

/*********Rui SantosComplete project details at https://RandomNerdTutorials.com/esp32-cam-pir-motion-detector-photo-capture/IMPORTANT!!!- Select Board "AI Thinker ESP32-CAM"- GPIO 0 must be connected to GND to upload a sketch- After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing modePermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files.The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.
*********/#include "esp_camera.h"
#include "Arduino.h"
#include "FS.h"                // SD Card ESP32
#include "SD_MMC.h"            // SD Card ESP32
#include "soc/soc.h"           // Disable brownour problems
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include "driver/rtc_io.h"
#include <EEPROM.h>            // read and write from flash memory
// define the number of bytes you want to access
#define EEPROM_SIZE 1RTC_DATA_ATTR int bootCount = 0;// Pin definition for CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22int pictureNumber = 0;void setup() {WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detectorSerial.begin(115200);Serial.setDebugOutput(true);camera_config_t config;config.ledc_channel = LEDC_CHANNEL_0;config.ledc_timer = LEDC_TIMER_0;config.pin_d0 = Y2_GPIO_NUM;config.pin_d1 = Y3_GPIO_NUM;config.pin_d2 = Y4_GPIO_NUM;config.pin_d3 = Y5_GPIO_NUM;config.pin_d4 = Y6_GPIO_NUM;config.pin_d5 = Y7_GPIO_NUM;config.pin_d6 = Y8_GPIO_NUM;config.pin_d7 = Y9_GPIO_NUM;config.pin_xclk = XCLK_GPIO_NUM;config.pin_pclk = PCLK_GPIO_NUM;config.pin_vsync = VSYNC_GPIO_NUM;config.pin_href = HREF_GPIO_NUM;config.pin_sscb_sda = SIOD_GPIO_NUM;config.pin_sscb_scl = SIOC_GPIO_NUM;config.pin_pwdn = PWDN_GPIO_NUM;config.pin_reset = RESET_GPIO_NUM;config.xclk_freq_hz = 20000000;config.pixel_format = PIXFORMAT_JPEG;pinMode(4, INPUT);digitalWrite(4, LOW);rtc_gpio_hold_dis(GPIO_NUM_4);if(psramFound()){config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGAconfig.jpeg_quality = 10;config.fb_count = 2;} else {config.frame_size = FRAMESIZE_SVGA;config.jpeg_quality = 12;config.fb_count = 1;}// Init Cameraesp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("Camera init failed with error 0x%x", err);return;}Serial.println("Starting SD Card");delay(500);if(!SD_MMC.begin()){Serial.println("SD Card Mount Failed");//return;}uint8_t cardType = SD_MMC.cardType();if(cardType == CARD_NONE){Serial.println("No SD Card attached");return;}camera_fb_t * fb = NULL;// Take Picture with Camerafb = esp_camera_fb_get();  if(!fb) {Serial.println("Camera capture failed");return;}// initialize EEPROM with predefined sizeEEPROM.begin(EEPROM_SIZE);pictureNumber = EEPROM.read(0) + 1;// Path where new picture will be saved in SD CardString path = "/picture" + String(pictureNumber) +".jpg";fs::FS &fs = SD_MMC;Serial.printf("Picture file name: %s\n", path.c_str());File file = fs.open(path.c_str(), FILE_WRITE);if(!file){Serial.println("Failed to open file in writing mode");}else {file.write(fb->buf, fb->len); // payload (image), payload lengthSerial.printf("Saved file to path: %s\n", path.c_str());EEPROM.write(0, pictureNumber);EEPROM.commit();}file.close();esp_camera_fb_return(fb);delay(1000);// Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4pinMode(4, OUTPUT);digitalWrite(4, LOW);rtc_gpio_hold_en(GPIO_NUM_4);esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 0);Serial.println("Going to sleep now");delay(1000);esp_deep_sleep_start();Serial.println("This will never be printed");
} void loop() {}

下面先把代码烧录到ESP32-CAM上,根据下面的连接图连接好ESP32-CAM和USB串口下载器。

注意:这里ESP32-CAM的GPIO0引脚要和自身GND引脚相连,这样通电时,ESP32-CAM会进入下载模式,下载完成后需要断开这个连接,这样重新上电才会进入正常的启动模式。

1. 连接好以后,插入电脑USB口,在工具(Tool)>开发板(Board)里,选择AI-Thinker ESP32-CAM。

2. 再在工具(Tool)>端口(Port)选择正确的端口。

3. 点击上传代码:

4. 观察IDE消息栏里的输出,开始出现点和下划线的时候,按一下ESP32-CAM开发板上面的RST按键。等待若干秒后,会出现上传成功的提示。

    电路图    

根据下图连接好所有的元件:

    上电测试    

烧录好代码,并根据上一个步骤连接好电路,我们在ESP32-CAM的SD卡槽里插入第一步格式化好的Micro SD卡,然后用5V电源给电路上电,比如:你可以用充电宝和废弃的USB线做一个:

上电后,按一下ESP32-CAM上的RST按钮,这样它就开始工作了。当PIR检测到活动物体时,ESP32-CAM上的LED灯会亮起(闪光灯作用),然后拍照并保存。

多试几次,然后断电取下Micro SD卡,如果一切正常的话,用电脑读取Micro SD卡时,应该能看见保存的照片。

至此这个能进行抓拍的安防监控就完成了,你可以找个廉价的安防摄像头拆掉原来的电路,然后把我们做的电路塞进去,或者用3D打印机打印一个外壳。

这个系统不用我们一直盯着监控视频流,只要检测到活体运动,它就会拍照保存,非常适合防贼哦。

这篇关于ESP32-CAM+PIR传感器=动作抓拍监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871858

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

java后端服务监控与告警:Prometheus与Grafana集成

Java后端服务监控与告警:Prometheus与Grafana集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的微服务架构中,监控和告警是确保服务稳定性的关键组成部分。Prometheus和Grafana是两个强大的工具,它们可以集成在一起,为Java后端服务提供实时监控和可视化告警。 服务监控的重要性 服务监控可以帮助我们实时了解服务的健

WIN11 ESP32 IDF + VSCODE 环境搭建[教程向]

前言 目录 前言 安装ESP32-IDF VSCODE插件安装 编译测试 很多时候我们想学习一门新的技能,需要使用全新的开发环境,很多时候我们会在安装环境这个环节卡住很久,这里简单介绍一下ESP32+VSCODE环境搭建。 安装ESP32-IDF https://dl.espressif.cn/dl/esp-idf/?idf=4.4 直接复制上面链接,进入idf下载界面。

145-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

参考 【权限维持】Linux&Rootkit后门&Strace监控&Alias别名&Cron定时任务_alias ls='alerts(){ ls $* --color=auto;python -c "-CSDN博客 参考 FlowUs 息流 - 新一代生产力工具 权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1、编辑后门反弹shell脚本

828华为云征文|基于Flexus云服务器X实例的应用场景-拥有一款自己的ssl监控工具

先看这里 写在前面效果图华为云Flexus云服务器X实例介绍特点可选配置购买 连接服务器Uptime-kuma简介开源信息部署准备工作:docker部署命令访问uptime-kuma 基本配置总结 写在前面 作为一个个人开发者,相信你手里肯定也有不少自己的服务,有的服务呢也是https的。 以前ssl各厂都是可以免费申请一年的,我们更换的频率还好,比较小;但是最近,各厂都