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

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号

元器件清单

元器件数量备注
Intel tinyTILE (或其他 BLE 模块)2主从各一,主控+BLE
Arduino 1012可选,开发调试用
Adafruit 液晶光阀 (LCD 可控遮光面板)2镜片核心部件
100mAh 锂电池2每副墨镜一块
JST-PH 2Pin SMT 直角连接器4电池/开关连接
JST-PH 电池延长线2
滑动开关2电源开关
10kΩ 电阻3上拉/下拉
12mm 轻触开关1主控侧触发按钮
LED (通用)2仅开发调试用
面包板1仅开发调试用
跳线若干仅开发调试用

所需工具

所需软件

项目理念

不使用手机 APP,而是通过蓝牙低功耗 (BLE) 直接在两副墨镜间建立连接。当一方按下按钮表达好感时,双方墨镜镜片同时从不透明(墨镜状态)变为透明,实现"眼神接触"的物理隐喻。主控端作为 BLE Central,从机端作为 Peripheral,按钮触发中央写入特征值,外设响应改变镜片状态。

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
面包板阶段开发验证

开发阶段

  1. 先用两块 Arduino 101 + LED 验证 BLE 通信逻辑
  2. 外设端参考 CurieBLE → Peripheral → LED 例程,注意将 HIGH/LOW 取反 (因 LCD 光阀逻辑相反)
  3. 中央端参考 CurieBLE → Central → LEDControl,添加 LCD 控制代码
  4. 迁移到 tinyTILE (Arduino 101 迷你版,同款 Curie 芯片),替换 LED 为 LCD 光阀
智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
Arduino 101 与 tinyTILE 对比

3D 打印镜框

基于 Adafruit 教程的镜框模型重新设计 (SolidWorks),提供两款造型:

模型文件见项目附件,可根据面部尺寸微调。作者建议使用水溶性支撑材料或光固化打印机以减少后处理。

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
重新设计的镜框 3D 模型

组装焊接

参考 Adafruit 原教程的布线、焊接、安装指南。关键点:

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
内部组装细节

工作演示

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
墨镜状态切换演示
智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
交互动画演示

Heart (主控) :"I like your sophisticated mind <3"
Universe (从机) :"I see you. Let's talk."

核心代码 (中央端按钮控制)

/*
 * Copyright (c) 2016 Intel Corporation. All rights reserved.
 * BLE Central - LCD 控制 (基于 CurieBLE LEDControl 例程修改)
 */
#include 

// 按钮引脚
const int buttonPin = 3;
int oldButtonState = LOW;
// LCD 控制引脚 (中央端)
const int ledPin = 5; 

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  
  BLE.begin();
  Serial.println("BLE Central - LCD control");
  
  // 扫描指定 UUID 的外设
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  BLEDevice peripheral = BLE.available();
  if (peripheral) {
    // 发现外设
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.println(peripheral.advertisedServiceUuid());
    
    BLE.stopScan();
    controlLed(peripheral);
    
    // 断开后重新扫描
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlLed(BLEDevice peripheral) {
  Serial.println("Connecting ...");
  if (!peripheral.connect()) {
    Serial.println("Failed to connect!");
    return;
  }
  Serial.println("Connected");
  
  Serial.println("Discovering attributes ...");
  if (!peripheral.discoverAttributes()) {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }
  Serial.println("Attributes discovered");
  
  // 获取 LED 特征值 (实际控制 LCD 光阀)
  BLECharacteristic ledCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");
  if (!ledCharacteristic || !ledCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have writable LCD characteristic!");
    peripheral.disconnect();
    return;
  }
  
  while (peripheral.connected()) {
    int buttonState = digitalRead(buttonPin);
    if (oldButtonState != buttonState) {
      oldButtonState = buttonState;
      if (buttonState) { // 按下
        Serial.println("button pressed");
        ledCharacteristic.writeByte(0x01); // 发送 0x01 → 透明
        digitalWrite(ledPin, LOW);         // 本地 LCD 也透明
      } else { // 释放
        Serial.println("button released");
        ledCharacteristic.writeByte(0x00); // 发送 0x00 → 不透明
        digitalWrite(ledPin, HIGH);        // 本地 LCD 恢复墨镜
      }
    }
  }
  Serial.println("Peripheral disconnected");
}

外设端代码要点

参考 CurieBLE → Peripheral → LED 例程,修改:

原理图

智能配对墨镜:Arduino 101 + tinyTILE BLE 实现眼神交流信号
Central: D3按钮, D5 LCD | Peripheral: D6 LCD

未来展望

制造工艺

  1. 太阳镜:设计、材料与护眼标准
  2. 电池:从伏打电堆到现代锂电池的演进史
  3. UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
  4. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  5. 3D 打印钢铁侠头盔与反应堆:Arduino 控制舵机与 NeoPixel 全攻略
  6. 便携式 GSM 投票箱:基于 Hologram + IFTTT 实现云端数据采集
  7. Arduino 101 BLE + Blynk:DIY 蓝牙遥控履带坦克车
  8. DIY 打地鼠街机游戏(按键版)——Arduino Mega 2560 实现
  9. 现代复古点唱机:Raspberry Pi + Arduino NeoPixel 声控灯光音乐播放器
  10. 汽车蓄电池核心技术:原理、分类、规格与维护全攻略
  11. 发电机(交流发电机)检测全攻略:万用表、螺丝刀、断电法实测指南
  12. 发电机故障的7大信号:别等趴窝才后悔