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

IoT 爱的抱枕:基于 Arduino MKR 的远程拥抱传递装置

项目初衷

异地恋、探亲受限、独居老人等场景下,人们渴望跨越距离传递拥抱的温度。本项目利用 Arduino MKR IoT Bundle (MKR WiFi 1010 + 传感器扩展板),结合 DIY 电容式触摸传感器(铝箔纸)、蜂鸣器心跳模拟、Telegram Bot 即时通讯,制作一款“拥抱即发送表情包”的智能抱枕。拥抱时长映射不同表情符号(❤️/🧡/💛/💚/💙/💜),以轻量、趣味的方式缓解分离焦虑。

硬件实现

核心模块

组件规格用途
主控板Arduino MKR WiFi 1010 (SAMD21 + u-blox NINA-W102)WiFi/BLE 双模、低功耗、充电管理、板载加密芯片
触摸传感铝箔纸 (约 15×15cm) + 5MΩ 电阻CapacitiveSensor 库,两引脚 (发射/接收) 形成电容耦合,人体接近即增大电容
心跳反馈无源蜂鸣器 (5V)PWM 播放心跳音型 (双音节: 短-长-停)
电源MKR 板载锂电池充电电路 + 500mAh LiPo充电电流 350mA,待机 >7 天
封装抱枕芯 + 可拆洗套、铝箔内衬、导线走线槽美观、可洗、传感器贴合胸口位置

电容传感器原理与布线


// CapacitiveSensor 接线
// Pin 4 (Send) ---- 5MΩ ---- Pin 5 (Receive) ---- 铝箔纸
// 原理:Send 输出高频方波,Receive 通过电阻采样充放电时间
// 人体接地形成并联电容,使充放电时间常数增大,读数升高

CapacitiveSensor cs(4, 5);  // 发射引脚, 接收引脚
cs.set_CS_AutocaL_Millis(0xFFFFFFFF);  // 关闭自动校准,保持基线稳定

铝箔纸置于枕芯表层下,覆盖薄棉布防止直接接触氧化。导线沿缝隙引出接扩展板排针。建议在铝箔边缘折叠封边,避免锐角放电干扰。

软件系统设计

Telegram Bot 架构

主程序状态机


// 核心逻辑框架
#include 
#include 
#include 
#include 
#include   // 低功耗定时

CapacitiveSensor hugSensor(4, 5);
TelegramBot bot(BOT_TOKEN, wifiClient);
RTCZero rtc;

enum HugState { IDLE, HUGGING, SENDING };
HugState state = IDLE;
unsigned long hugStart = 0;
int hugLevel = 0;  // 0-5 对应 6 种表情

void setup() {
  Serial.begin(115200);
  WiFi.begin(SSID, PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  bot.begin();
  rtc.begin();
  // 看门狗 30s
  Watchdog.enable(30000);
}

void loop() {
  Watchdog.reset();
  long capVal = hugSensor.capacitiveSensor(30);  // 30μs 采样窗口

  switch (state) {
    case IDLE:
      if (capVal > HUG_THRESHOLD) {  // 触发拥抱
        state = HUGGING;
        hugStart = millis();
        playHeartbeat();  // 开始播放心跳
      }
      break;

    case HUGGING:
      if (capVal <= HUG_THRESHOLD) {  // 拥抱结束
        state = SENDING;
        hugLevel = constrain(map(millis() - hugStart, 0, 10000, 0, 5), 0, 5);
        sendHugEmoji(hugLevel);
        state = IDLE;
      } else {
        playHeartbeat();  // 持续播放
      }
      break;

    case SENDING:
      // 发送中非阻塞,由 TelegramBot 库内部处理
      break;
  }

  // 定期处理 Bot 消息队列
  bot.getUpdates();  // 必须周期性调用
  delay(50);
}

心跳声合成


void playHeartbeat() {
  // Lub-Dub 模式: 低频短促 + 稍长 + 间歇
  tone(BUZZER_PIN, 60, 80);   // Lub ~60Hz
  delay(120);
  tone(BUZZER_PIN, 45, 150);  // Dub ~45Hz
  delay(200);
  noTone(BUZZER_PIN);
  delay(600);  // 周期约 1s, 60bpm
}

表情映射表

拥抱时长等级Unicode Emoji含义
< 2s0\U0001F49B (💛)浅拥抱/问候
2-4s1\U0001F49C (💜)友谊/安慰
4-6s2\U0001F499 (💙)深情/信任
6-8s3\U0001F49A (💚)治愈/成长
8-10s4\U0001F497 (💗)心动/爱意
>10s5\U00002764 \U0000FE0F (❤️)深沉的爱

发送函数


void sendHugEmoji(int level) {
  const char* emojis[] = {
    "\U0001F49B", "\U0001F49C", "\U0001F499",
    "\U0001F49A", "\U0001F497", "\U00002764\U0000FE0F"
  };
  StaticJsonDocument<200> doc;
  doc["chat_id"] = TARGET_CHAT_ID;  // 预存或从最后一条消息获取
  doc["text"] = emojis[level];
  String payload; serializeJson(doc, payload);
  bot.sendMessage(payload);  // 封装 HTTP POST
}

低功耗与稳健性设计

制作与调试步骤

  1. 传感器标定:串口绘图器观察静态/拥抱时电容读数分布,设定 HUG_THRESHOLD 为 (基线+峰值)/2,迟滞 ±10%。
  2. Bot 功能测试:手机发送任意表情,确认 Bot 回显正常,验证 Unicode 编码正确。
  3. 心跳音调试:调整频率/时长/间隔,使听感最接近真实心跳 (参考 60-80bpm, Lub 比 Dub 短)。
  4. 封装测试:装入枕套,不同体型/衣物厚度测试触发可靠性,微调阈值。
  5. 长时运行:满电放置 7 天,验证待机电流、自动重连、按时发送心跳保活消息。

隐私与伦理考量

拓展创意

制造工艺

  1. 刃匠进阶:锻造耐用刀刃的9大专家级步骤全解析
  2. 掌握BOM规划:优化产品成本的分步指南
  3. 选择正确开发场地:创客空间、加速器与生产合作伙伴
  4. 零件标识完全指南:三大验证方法保障质量与安全
  5. 千分尺使用指南:精密测量工具读数与操作技巧
  6. 高精密制造必备:卧式加工中心(HMC)深度解析
  7. 机械式铁工机:精密金属加工的多功能性价比之选
  8. 去毛刺设备全景指南:满足各类制造需求的最佳选择
  9. 白口铸铁:性能特征、应用领域与优势解析
  10. 浸入式EDM终极指南:精密电火花成型加工全解析
  11. 小型伺服压力机:精密金属成型的紧凑型利器
  12. 小型圆柱磨床:精密加工领域的不可或缺之选