亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Uno 门磁报警器:通过 Gmail 发送开门提醒邮件

零部件清单

组件 数量 备注
Arduino Uno R3 1 主控板
PHPoC Shield for Arduino 1 内置 TCP/IP 协议栈,支持 HTTPS 邮件发送
磁簧门磁传感器 (常开型) 1 含磁铁与传感器本体,门关合时触点闭合
面包板、杜邦线、USB 线 若干 连接用

项目简介

本教程面向 Arduino 初学者,演示如何利用 PHPoC Shield 实现联网功能,结合门磁传感器检测开门事件,通过 Gmail SMTP 服务器发送报警邮件。无需复杂的 AT 指令或 WiFi 模块调试,PHPoC Shield 内置完整网络协议栈,代码极其简洁,适合快速原型验证。

工作原理

门磁传感器检测原理

磁簧开关由磁铁和带触点的玻璃管组成。安装时,磁铁固定在门扇,传感器本体固定在门框,两者对齐距离 < 2cm。门关闭时磁场使触点吸合 (输出 HIGH);门打开时磁场消失,触点断开 (输出 LOW)。Arduino 读取数字引脚状态即可判断门状态。

邮件发送流程

  1. PHPoC Shield 通过以太网线或 USB WiFi 适配器接入互联网
  2. Arduino 调用 PHPoC 库的 PhpocEmail 类配置 SMTP 参数
  3. 检测到门磁状态变化 (下降沿) 时,构造邮件主题、正文
  4. 调用 email.send() 发送,返回 >0 表示成功

硬件接线

PHPoC Shield / Arduino 门磁传感器 说明
5V 红线 (VCC) 传感器供电 (若为无源磁簧管可不接)
GND 黑线 (GND) 共地
A0 (数字输入) 信号线 门关=HIGH,门开=LOW,启用内部上拉

网络连接:PHPoC Shield 堆叠在 Arduino Uno 上,通过网线接路由器 LAN 口,或插入兼容的 USB WiFi 适配器 (如 RT5370 芯片)。

软件准备

  1. 安装 PHPoC 库:Arduino IDE → 菜单「草图」→「包含库」→「管理库」→ 搜索 "PHPoC" 安装
  2. 安装 ezButton 库:同理搜索 "ezButton" 安装,用于按钮/传感器去抖动
  3. 准备 Gmail 账号:需开启「双重验证」并生成「应用专用密码」 (安全性要求),或允许「不够安全的应用」(旧版设置)

核心代码解析

#include <Phpoc.h>
#include <ezButton.h>

PhpocEmail email;
ezButton button(A0);  // 门磁信号接 A0,内部上拉

void setup() {
  Serial.begin(9600);
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET | PF_LOG_APP);  // 初始化 PHPoC Shield
  button.setDebounceTime(100);  // 100ms 去抖动
}

void loop() {
  button.loop();  // 必须循环调用以更新状态

  if (button.isPressed()) {  // 检测到下降沿:门打开
    // 配置 Gmail SMTP
    email.setOutgoingServer("smtp.gmail.com", 587);  // TLS 端口
    email.setOutgoingLogin("your_email@gmail.com", "your_app_password");  // 应用专用密码
    email.setFrom("your_email@gmail.com", "Arduino Alert");
    email.setTo("receiver@example.com", "User");
    email.setSubject("Door Opened Alert [#905]");

    email.beginMessage();
    email.println("#905");
    email.println("");
    email.println("Door is opened.");
    email.endMessage();

    if (email.send() > 0) {
      Serial.println("Email sent successfully");
    } else {
      Serial.println("Email failed");
    }
  }
  else if (button.isReleased()) {  // 检测到上升沿:门关闭
    // 可在此添加关门通知逻辑
  }
}

关键点详解

1. Gmail SMTP 配置

2. ezButton 去抖动

机械触点开合瞬间会产生抖动,ezButton 库内部实现状态机去抖,setDebounceTime(100) 设置 100ms 稳定时间。isPressed() 仅在确认下降沿后返回一次 true,避免重复触发邮件。

3. PHPoC Shield 优势

常见问题排查

现象 原因 解决
串口显示 "Failed to connect to client" 网络不通 / Shield 未获取 IP 检查网线/路由器 DHCP;串口监视器观察 Phpoc.begin() 日志
邮件发送失败 (send() 返回 0) SMTP 认证失败 / 端口被封 / 密码错误 确认应用专用密码正确;尝试端口 465;检查网络防火墙
门磁状态不触发 引脚模式错误 / 磁铁距离过远 确认 A0 设为 INPUT_PULLUP;调整磁铁安装位置,间距 < 1.5cm
重复收到多封邮件 去抖动时间太短 / 磁铁震动 增大 setDebounceTime(200);机械加固磁铁

扩展建议

完整代码下载

Door_Alert_Gmail.ino (含详细注释)

这是一个极简的物联网入门项目,掌握后可快速扩展为窗户监测、抽屉防盗、冰箱门未关提醒等场景。PHPoC Shield 让 Arduino 联网变得像串口打印一样简单,非常适合教学与快速原型。

制造工艺

  1. K30 CO₂ 传感器:室内空气质量实时监测
  2. DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
  3. DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
  4. Arduino Cloud 传感器塔:温度、动作与气体监测
  5. 基于 Arduino Nano 的智能运动感应水枪
  6. 非接触体温筛查闸机:Arduino MKR1000 + 红外测温 + 舵机控制
  7. Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
  8. 校园智能体温监测系统 - 精准、实时、安全的学生健康守护方案
  9. 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
  10. Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY
  11. 智能健康监测站:Arduino、蓝牙与传感器实现远程生理指标监测
  12. Arduino 门磁传感器:PHPoC WiFi Shield 经 IFTTT 推送 Messenger 实时告警