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

超声波眼睛:双 8×8 LED 矩阵跟随人体移动的互动装置

项目简介

一个俏皮的桌面装置:两个 HC-SR04 超声波测距模块作为“左右眼”,驱动两个级联 MAX7219 8×8 LED 矩阵显示卡通眼球。眼睛会根据左右测距差异向左/右/前注视,随机眨眼,环境光传感器自动调节亮度。无需复杂图像处理,仅用两路测距即可实现生动的“注视跟随”效果,适合放在办公桌、展柜入口吸引目光。

所需材料

接线指南

电源与地

信号线

模块信号Arduino 引脚
超声波左TrigD2
EchoD3
超声波右TrigD4
EchoD5
矩阵 1 (主)DIN (MOSI)D11 (硬件 MOSI)
CLK (SCK)D13 (硬件 SCK)
CSD10
矩阵 2 (从)DIN/CLK/CS级联自矩阵 1 对应输出引脚
LDR 分压中点A5

注意:代码使用硬件 SPI (D11 MOSI, D13 SCK),换板子需对应修接线。

软件库

眼球图案定义 (8×8 位图)

uint8_t eye_forward[8] = {
  0b00111100, 0b01000010, 0b01011010, 0b10101101,
  0b10111101, 0b10011001, 0b01000010, 0b00111100
};
uint8_t eye_right[8] = { ... };   // 瞳孔偏右
uint8_t eye_left[8]  = { ... };   // 瞳孔偏左
uint8_t eye_blink[8] = { ... };   // 闭合动画帧

主循环逻辑

  1. 读取 LDR 光照值 (0-1023) → 映射到矩阵亮度 0-15
  2. 左眼 ping_median(5) 获取中位距离 distance1
  3. 延时 500ms 避免串扰,右眼同理得 distance2
  4. 随机触发眨眼:单眨/双眨,眨完恢复原注视方向
  5. 判向逻辑:
    • |d1-d2| < 25cm 或均为 0 (无物体) → 看前方
    • d2 < d1 且 d1>0 → 右侧更近 → 看右
    • d1 < d2 且 d2>0 → 左侧更近 → 看左
  6. 延时 250ms 进入下一轮

完整代码

#include <MD_MAX72xx.h>
#include <NewPing.h>

#define CS_PIN 10
#define MAX_DEVICES 2
#define LIGHT A5

MD_MAX72XX mx = MD_MAX72XX(CS_PIN, MAX_DEVICES);

#define t1 2; #define e1 3;
#define t2 4; #define e2 5;
#define maxDist 400

NewPing eyeL(t1, e1, maxDist);
NewPing eyeR(t2, e2, maxDist);

int currentState = -1;  // 0 前, 1 右, 2 左
float nextBlink = millis() + 1000;
float lightAmount = 0;

// 眼球位图数组 ... (同上)

void setup() {
  mx.begin();
  pinMode(t1, OUTPUT); pinMode(e1, INPUT);
  pinMode(t2, OUTPUT); pinMode(e2, INPUT);
  digitalWrite(t1, LOW); digitalWrite(t2, LOW);
  pinMode(LIGHT, INPUT);
  ShowEye_Forward(); currentState = 0;
}

void loop() {
  lightAmount = analogRead(LIGHT);
  lightAmount = (lightAmount / 255.0) * MAX_INTENSITY;
  mx.control(MD_MAX72XX::INTENSITY, lightAmount);

  distance1 = eyeL.ping_median(5);
  delay(500);
  distance2 = eyeR.ping_median(5);

  if (nextBlink < millis()) {
    nextBlink = millis() + random(2000, 10000);
    if (random(1,13) <= 6) ShowEye_Blink_Dbl(); else ShowEye_Blink();
    delay(250); return;
  }

  float diff = distance2 - distance1;
  if (abs(diff) < 250 || (distance1==0 && distance2==0)) {
    ShowEye_Forward(); currentState = 0;
  } else if (distance2 < distance1 && distance1 > 0) {
    ShowEye_Right(); currentState = 1;
  } else if (distance1 < distance2 && distance2 > 0) {
    ShowEye_Left(); currentState = 2;
  }
  delay(250);
}

// ShowEye_Forward/Right/Left/Blink/Blink_Dbl 函数实现 ...
// 均通过 mx.setColumn(row, pattern[row]) 双屏同步写入

进阶玩法

制作建议

制造工艺

  1. Arduino UNO + MAX7219 自制《UFO攻击》复古射击游戏机
  2. 智能窗帘:基于Arduino与太阳能的自动光控系统
  3. 3D RGB Arduclock — 蓝牙控制全彩LED时钟带RTC与闹钟
  4. MyRiver:基于 Arduino MKR FOX 1200 的河流水质远程监测系统
  5. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  6. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  7. Arduino + 模拟摇杆互动游戏:五向 LED 反馈
  8. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  9. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  10. Arduino 驱动的迷你漫游车:自制避障机器人
  11. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  12. Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里