小发明触觉手套与Unity+PICO4蓝牙链接-基于Arduino+震动电机实现

一、硬件选型与成本控制(总成本<¥200)

组件型号单价数量小计购买渠道
Arduino NanoCH340芯片版¥251¥25淘宝/拼多多
震动电机1020空心杯电机(3-4V)¥2.55¥12.5电子元件商城
电机驱动模块L9110S双路电机驱动¥3.83¥11.4淘宝
蓝牙模块HC-05从机模块¥181¥18淘宝
手套基材劳保棉线手套¥51¥5本地超市
其他耗材杜邦线、热熔胶等--¥30已有/电子市场
总计¥101.9

二、硬件接线方案

graph TD
A[Arduino Nano] -->|D2| B(L9110S模块1 IN1)
A -->|D3| C(L9110S模块1 IN2)
A -->|D4| D(L9110S模块2 IN1)
A -->|D5| E(L9110S模块2 IN2)
A -->|D6| F(L9110S模块3 IN1)
A -->|D7| G(L9110S模块3 IN2)
B --> H[电机1]
C --> H
D --> I[电机2]
E --> I
F --> J[电机3]
G --> J
A -->|TX/RX| K[HC-05蓝牙模块]
L[3.7V锂电池] --> M[L9110S VCC]
L --> N[Arduino VIN]

  • 电机布局

    • 电机1:右手拇指指腹(翻晒阻力反馈)

    • 电机2:右手掌心(蒸汽压力反馈)

    • 电机3:左手手腕(系统警报反馈)

 三、Arduino代码实现(C语言)

手把手教你完成Arduino代码的编写和上传,并提供最简化的操作流程。你只需要跟着以下步骤操作即可。

3.1 Arduino代码:从零开始详细步骤

1. 安装Arduino软件
  • 下载地址:https://www.arduino.cc/en/software
    选择适合你电脑系统的版本(Windows/Mac),安装时全部点“下一步”即可。
2. 连接Arduino到电脑
  • 用USB线将Arduino Nano连接到电脑,电脑会自动安装驱动(如果失败,参考这个教程:点击这里)。
3. 创建新代码文件
  1. 打开Arduino软件,你会看到一个空白窗口。
  2. 直接复制以下代码(替换掉窗口里默认的所有内容):
// 震动手套简化版代码(小白专用)
void setup() {
  // 设置3号、5号引脚为输出(对应两个手指的电机)
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  // 初始化串口通信(用于调试)
  Serial.begin(9600);
}

void loop() {
  // 如果电脑发送了指令(比如字符'A')
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    // 如果收到'A',启动3号引脚电机(强度50%)
    if (cmd == 'A') {
      analogWrite(3, 128); // 128代表50%功率(范围0-255)
      Serial.println("震动大拇指!");
    }
    // 如果收到'B',停止所有电机
    else if (cmd == 'B') {
      analogWrite(3, 0);
      analogWrite(5, 0);
      Serial.println("停止震动!");
    }
  }
}

​​4. 上传代码到Arduino

  1. 在软件顶部菜单选择:
    工具 > 开发板 > Arduino Nano
    工具 > 端口 > 选择你的Arduino端口​(例如COM3或/dev/cu.usbmodem*)
    https://www.arduino.cc/wiki/static/dd361e5f9c43b4bb4e0466b15399e6d6/6a791/board-port.png
  2. 点击左上角的 ​**→** 按钮(“上传”),等待显示“上传成功”。

​3.2、硬件连接:最简版本(2个电机)​

1. 所需材料
  • Arduino Nano ×1
  • 震动电机 ×2
  • 电阻(220Ω) ×2
  • MOSFET晶体管 ×2
  • 电池(3.7V) ×1
  • 面包板 ×1(可选,简化接线)
2. 接线图(跟着颜色做)​

https://i.imgur.com/7Q0g4r2.png

  1. 红色线:电池正极 → 电机的正极(两个电机并联)
  2. 黑色线:电池负极 → MOSFET的源极(Source,引脚1)
  3. 黄色线:Arduino引脚3 → 电阻 → MOSFET的栅极(Gate,引脚3)
  4. 蓝色线:电机负极 → MOSFET的漏极(Drain,引脚2)
    (第二个电机同理,接Arduino引脚5)

🔥 注意:MOSFET有方向!平的一面朝上,引脚从左到右为1(Gate), 2(Drain), 3(Source)
如果接反会烧坏,不确定请搜索“IRLB8721引脚图”


​3.3、测试:让电机动起来!​

  1. 保持Arduino通过USB连接电脑。
  2. 打开Arduino软件,点击右上角的 ​放大镜图标​(“串口监视器”)。
  3. 在右下角输入框输入 A 然后点“发送”,观察大拇指电机是否震动。
  4. 输入 B 停止震动。

下面的代码备选 

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX,TX

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  pinMode(2, OUTPUT); // 电机1控制引脚
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT); // 电机2控制引脚
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT); // 电机3控制引脚
  pinMode(7, OUTPUT);
}

void loop() {
  if (BTSerial.available()) {
    char cmd = BTSerial.read();
    
    // 示例指令格式:M1-200 (电机1震动200ms)
    if(cmd == 'M') {
      int motorNum = BTSerial.parseInt();
      int duration = BTSerial.parseInt();
      
      switch(motorNum) {
        case 1: 
          digitalWrite(2, HIGH);
          digitalWrite(3, LOW);
          delay(duration);
          digitalWrite(2, LOW);
          break;
        case 2:
          digitalWrite(4, HIGH);
          digitalWrite(5, LOW); 
          delay(duration);
          digitalWrite(4, LOW);
          break;
        case 3:
          digitalWrite(6, HIGH);
          digitalWrite(7, LOW);
          delay(duration);
          digitalWrite(6, LOW);
          break;
      }
    }
  }
}

四、Unity通信集成(C#脚本)

4.1 与Unity通信(无需蓝牙,先用有线测试)​

1. Unity设置
  1. 在Unity中导入 ​Ardity插件​(免费,下载地址:点击这里)
  2. 创建一个空物体,挂载以下脚本:
using UnityEngine;
using Ardity;

public class SimpleVibrate : MonoBehaviour {
    void Update() {
        if (Input.GetKeyDown(KeyCode.A)) {
            // 发送字符'A'到Arduino
            SerialPortManager.Instance.SendMessage("A");
        }
        if (Input.GetKeyDown(KeyCode.B)) {
            // 发送'B'停止
            SerialPortManager.Instance.SendMessage("B");
        }
    }
}
2. 运行测试
  1. 在Unity中点击Play,按键盘A/B键,观察电机是否响应。

常见问题解决

  1. 电机不震动
    • 检查电池是否有电(用LED灯测试)
    • 用万用表测量Arduino引脚3/5是否有电压(应有0~5V变化)

代码上传失败

  • 重新拔插USB线,重启Arduino软件
  • 确保选择了正确的开发板和端口

下一步:升级到无线(蓝牙)​

如果你完成了以上步骤,可以购买 ​HC-05蓝牙模块​(约¥30),接线如下:

  1. 蓝牙模块的 ​TX → Arduino的 ​RX​(D0引脚)
  2. 蓝牙模块的 ​RX → Arduino的 ​TX​(D1引脚)
  3. 蓝牙模块的 ​VCC → Arduino的 ​5V
  4. 蓝牙模块的 ​GND → Arduino的 ​GND

然后在Unity中改用蓝牙通信(需安装Android插件)。不过建议先掌握有线版本!

 参考:

using System.Collections;
using UnityEngine;
using System.IO.Ports;

public class HapticController : MonoBehaviour {
    private SerialPort serialPort;
    
    void Start() {
        // 蓝牙串口连接(需配对HC-05)
        serialPort = new SerialPort("COM5", 9600); // COM端口根据实际修改
        serialPort.Open();
    }

    // 触发震动示例:蒸笼揭盖时
    public void OnSteamLidOpen() {
        SendVibrationCommand(1, 500); // 电机1震动500ms
    }

    // 发送指令方法
    private void SendVibrationCommand(int motorID, int durationMs) {
        if(serialPort.IsOpen) {
            string command = $"M{motorID}-{durationMs}\n";
            serialPort.Write(command);
        }
    }

    void OnDestroy() {
        if(serialPort != null && serialPort.IsOpen) {
            serialPort.Close();
        }
    }
}

五、PICO4设备适配关键

1. 安卓蓝牙权限配置
  • AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
  • 修改Unity Player Settings:
    Target API Level ≥ 23,勾选"Internet Access"和"Bluetooth"

2. 无线通信优化
  • 使用Android Bluetooth API替代串口通信(需安装Android Bluetooth Low Energy插件

  • 示例代码段:

// 在PICO端使用AndroidJavaObject调用蓝牙
AndroidJavaObject bluetoothAdapter = new AndroidJavaObject("android.bluetooth.BluetoothAdapter");
AndroidJavaObject device = bluetoothAdapter.Call<AndroidJavaObject>("getRemoteDevice", "00:12:6F:XX:XX:XX"); // HC-05地址

六、触觉反馈场景映射

交互事件触觉反馈方案
药材切片力度过大电机1高频震动(100Hz,200ms)
蒸笼蒸汽压力超标电机2持续震动(强度渐变)
晒场药材未及时翻动电机3间隔震动(每30秒提醒)
工艺步骤完成三电机同步短震(庆祝特效)

七、延迟优化方案

  1. 协议精简
    将指令格式简化为单字节(如0x01表示电机1震动200ms)

  2. 预加载震动模式
    在Arduino存储常用震动模式(如M1-200),Unity发送模式编号而非具体参数

  3. 蓝牙参数调整
    修改HC-05波特率为115200(需AT指令配置)


八、验证测试流程

  1. 硬件连通性测试

    • 使用Arduino IDE串口监视器发送指令测试电机响应

  2. Unity基础通信

    • 在PC端运行Unity,通过USB连接Arduino测试震动触发

  3. PICO无线联调

    • 将Unity工程打包至PICO4,测试蓝牙指令传输

  4. 场景集成测试

    • 在九蒸九晒流程中嵌入触觉反馈事件

按照此方案,即使零电子基础,也可在 48小时内 完成触觉手套原型搭建。重点在于保持蓝牙通信稳定,建议优先使用USB直连调试,后期转为无线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity数字工匠

难题的解决使成本节约,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值