news 2026/6/2 16:42:30

基于Arduino的互动装置:超声波传感器与伺服电机联动实现智能感知

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Arduino的互动装置:超声波传感器与伺服电机联动实现智能感知

1. 项目概述:一个会“看”的互动盒子

几年前,我在一个创意编程工作坊里,第一次看到用Arduino让一堆冰冷的电子元件“活”过来,那种感觉非常奇妙。传感器像眼睛,执行器像手脚,一段代码就是它的神经。今天分享的这个“Look-o-box”(注视之盒)项目,正是这种理念的一个有趣实践。它本质上是一个基于Arduino Uno的互动装置,核心逻辑很简单:一个超声波传感器像雷达一样左右扫描周围环境,一旦检测到前方一定距离内有人或物体,就会立刻驱动一个伺服电机,将一个面具转向被检测到的方向,营造出一种被“注视”或“发现”的互动体验。

这个项目麻雀虽小,五脏俱全,它完美串联了嵌入式开发的几个核心环节:环境感知(传感器)、逻辑处理(微控制器)、动作执行(执行器)以及结构设计(3D打印外壳)。无论你是刚接触Arduino的新手,想找一个综合性的入门项目来练手,还是有一定经验的开发者,希望为艺术装置或互动展项寻找一个可靠的技术原型,这个项目都能提供清晰的路径和实用的细节。接下来,我会带你从设计思路、硬件选型、电路搭建、代码解析,到最后的组装调试,完整地复现这个会“看”的盒子,并分享我在类似项目中积累的一些实操心得和避坑指南。

2. 核心硬件选型与设计思路解析

2.1 微控制器:为何选择Arduino Uno

在这个项目中,我选择了经典的Arduino Uno作为大脑。这个选择基于几个非常实际的考量。首先,生态成熟度极高,无论是软件库(如Servo库)的支持,还是遇到问题时能搜索到的解决方案,都远超其他小众开发板。对于互动装置来说,稳定性是第一位的,Uno经过多年市场检验,其ATmega328P芯片的可靠性足以应对这种周期性扫描任务。

其次,接口与供电能力刚好匹配需求。项目需要驱动两个微型伺服电机(SG90)和一个超声波传感器。SG90在工作时,特别是从静止启动的瞬间,电流峰值可能达到500-700mA。Arduino Uno的板载5V稳压芯片(通常为NCP1117或类似型号)能提供约1A的持续电流,驱动两个伺服电机加上传感器绰绰有余。如果使用更小型的板子(如Nano),虽然体积更小,但需要格外注意外部供电,反而增加了复杂度。Uuno的接口布局清晰,数字引脚和模拟引脚分开,便于我们规划电路,避免信号干扰。

注意:虽然Uno的5V输出能力足够,但在实际搭建时,我仍然建议优先使用外部电源(如9V电池或DC电源适配器)为Arduino供电,而不是完全依赖USB供电。USB口的电流限制(通常500mA)可能在两个电机同时动作时导致电压骤降,引起Arduino复位或传感器读数异常。将外部电源接入Uno的DC插孔,板载稳压器会将其转换为稳定的5V,这样更稳妥。

2.2 感知核心:超声波传感器的工作原理与选型

项目使用了市面上最常见的HC-SR04超声波测距模块。它的工作原理是声纳回声定位:触发引脚(Trig)收到一个至少10微秒的高电平脉冲后,模块会发射一束40kHz的超声波。超声波遇到障碍物反射回来,被接收引脚(Echo)检测到。Echo引脚输出高电平的持续时间,正好等于超声波从发射到返回的时间。

距离的计算公式为:距离 = (高电平时间 × 声速) / 2。在空气中,声速受温度影响较大,常温下(20°C)约为343米/秒,换算成34300厘米/秒。所以,距离(厘米) ≈ (高电平时间(微秒) / 1000000) * 34300 / 2,可以简化为距离 ≈ 高电平时间 * 0.0343 / 2,即距离 ≈ 高电平时间 * 0.01715。很多库函数已经封装了这个计算。

选择HC-SR04的原因在于其性价比和易用性。它的探测范围(2cm-400cm理论值,实际稳定在3-200cm)完全满足本项目“检测面前是否有人”的需求。其接口简单(VCC, GND, Trig, Echo),直接与数字IO口连接即可。代码中,原作者使用了模拟引脚A3并进行了电压换算,这可能是使用了另一种型号(如基于模拟输出的超声波传感器)或一种特殊的接法。我们更常见的做法是使用两个数字引脚分别连接Trig和Echo。

2.3 执行机构:SG90微型伺服电机的控制逻辑

伺服电机(Servo Motor)与普通直流电机的最大区别在于它能精确控制输出轴的角度。SG90是一种位置伺服电机,它内部包含一个小型直流电机、减速齿轮组、控制电路和一个电位器(用于反馈当前角度)。

其控制信号是一个周期为20毫秒(50Hz)的脉宽调制(PWM)信号。脉冲的高电平持续时间决定了角度:

  • 1.5毫秒:电机转向中间位置(如90度)。
  • 1.0毫秒:电机转向最小角度(如0度)。
  • 2.0毫秒:电机转向最大角度(如180度)。

Arduino的Servo.h库极大地简化了控制过程。我们只需要servo.attach(pin)指定引脚,然后用servo.write(angle)指定0-180之间的角度值,库函数会自动生成对应的PWM信号。本项目需要两个伺服电机:一个负责带动传感器左右扫描(servosensor),另一个负责带动面具转动(servomasker)。它们的运动需要联动:当传感器扫描到某个角度发现目标时,面具电机应同步转到相同的角度。

2.4 结构设计:从概念到3D打印的考量

原作者使用Fusion 360设计并3D打印了外壳、面具、支架等所有结构件。这是将电子项目产品化的关键一步。设计时需要考虑几个机械要点:

  1. 伺服电机安装:外壳需要预留精确的方形安装孔,确保电机壳体被卡住,不会转动。电机输出轴需要穿过外壳,与外部结构(传感器支架、面具连杆)连接。
  2. 传动与固定:伺服电机配套的舵盘(舵臂)需要用螺丝紧固在输出轴上,然后再与负载(如传感器支架)固定。连接需要牢固,避免晃动导致角度不准。
  3. 传感器安装:超声波传感器的发射面和接收面需要裸露,前方不能有障碍物。同时,它需要被牢固地安装在扫描伺服电机上,随其一起转动。
  4. 走线与维护:外壳需要设计合理的线槽和出口,让杜邦线能整齐地连接到内部的Arduino。上盖或后盖应可拆卸,方便调试和更换电池。

使用PLA材料打印是因为其强度足够、打印成功率高、后处理简单。绿色和白色的搭配则纯粹出于美学选择。对于这类静态负载不大的结构,PLA是完全胜任的。

3. 电路连接与系统集成详解

3.1 分线板(Breakout Board)的作用与焊接技巧

原项目中使用了一个“breakout board”(我理解为一种小型万用板或PCB转接板),这是一个非常好的实践,尤其对于需要连接多个设备的项目。它的核心作用是提供稳定、有序的接线端子,避免将所有杜邦线直接插在Arduino上造成的混乱和接触不良。

常见的做法是,在万用板上焊接两排或三排排针,作为扩展接口。具体到本项目,可以规划如下:

  • 电源总线:用跳线将一排排针的“VCC”端全部连接起来,另一排排针的“GND”端全部连接起来。这样,我们只需要从Arduino的5V和GND各引出一条线接到这两条总线上,所有外设(两个伺服电机、一个传感器)的电源和地线都可以就近从总线获取,极大地简化了布线。
  • 信号线:为每个外设的信号线(伺服电机的控制线、传感器的Trig/Echo)单独焊接一个排针座。

焊接时的心得是:

  1. 先规划,后焊接:在纸上画好布局图,确定排针和跳线的位置,确保空间够用,不会短路。
  2. 使用助焊剂:对于焊接排针到万用板,适量的助焊剂能让焊点更圆润、牢固。
  3. 电源线加粗:连接电源总线的跳线,可以使用剥出的杜邦线芯或多股导线,比单股细线能承载更大电流。
  4. 测试连通性:焊接完成后,务必用万用表的蜂鸣档检查电源和地总线是否连通,以及信号线之间、信号线与电源/地之间是否没有短路。

3.2 完整的接线图与引脚定义

根据原代码和常见硬件,我们可以确定一个更通用的接线方案。假设使用HC-SR04数字传感器和两个SG90伺服电机。

组件引脚连接至 Arduino Uno 引脚说明
伺服电机1 (传感器扫描)信号线 (橙色/白色)数字引脚 2控制传感器旋转角度
电源线 (红色)5V 总线接在分线板的5V总线上
地线 (棕色/黑色)GND 总线接在分线板的GND总线上
伺服电机2 (面具转动)信号线 (橙色/白色)数字引脚 3控制面具旋转角度
电源线 (红色)5V 总线接在分线板的5V总线上
地线 (棕色/黑色)GND 总线接在分线板的GND总线上
超声波传感器 HC-SR04VCC5V 总线接在分线板的5V总线上
Trig (触发)数字引脚 4发送测距脉冲信号
Echo (回声)数字引脚 5接收返回的高电平信号
GNDGND 总线接在分线板的GND总线上
分线板电源总线5V输入Arduino 5V 引脚为所有外设供电
GND输入Arduino GND 引脚提供公共地

实操心得:务必确保所有设备的GND(地线)都连接到一起(即共地),这是电路正常工作的基础。电流需要形成一个回路,如果地线不统一,会导致信号参考电平错乱,传感器读数不准,电机乱转。

3.3 电源管理:避免系统崩溃的关键

如前所述,电源是重中之重。两个SG90电机在堵转或启动瞬间,电流消耗可能非常大。如果只靠Arduino Uno的USB口供电(500mA限流),很可能在电机动作时导致整个系统电压被拉低,表现为Arduino自动重启,或者传感器读数出现巨大波动。

可靠的供电方案

  1. 方案一(推荐):使用一个9V DC电源适配器(中心正极),插入Arduino Uno的DC插孔。板载稳压器会将其降压为稳定的5V。此时,USB线可以只用于上传程序,运行时可以断开。
  2. 方案二:使用一块9V电池通过电池扣连接DC插孔。优点是便携,缺点是电池续航有限。
  3. 方案三(大功率场景):如果未来需要驱动更多或更大的电机,可以考虑使用独立的5V稳压电源模块(如LM2596降压模块),直接为伺服电机总线供电,同时将其GND与Arduino的GND相连。Arduino自身仍通过USB或另一路电源供电。这种“动力电源与控制电源分离”的方案最为稳健。

在组装前,可以先不安装结构件,在桌面上测试电路。分别让两个伺服电机运动,同时观察传感器读数是否稳定,这是检验电源系统是否合格的最直接方法。

4. 代码深度解析与优化

原作者的代码提供了一个可工作的基础框架,但其中有一些可以优化和需要理解的地方。我们来逐段分析,并编写一个更健壮、易读的版本。

4.1 原代码逻辑梳理与潜在问题

原代码的核心逻辑在一个loop()函数中,包含两个for循环,分别控制扫描伺服电机从0度到180度,再从180度回到0度。

  1. 每转动1度,都读取一次传感器数据。
  2. 如果检测到距离小于等于10厘米,就命令面具伺服电机转到当前角度,并在串口打印“I_See_You”。
  3. 如果距离大于等于20厘米,则在串口打印距离值(用于调试)。

潜在问题分析

  • 传感器读取位置:在扫描的每一个角度点都进行测距,这保证了实时性,但HC-SR04的测距需要一定时间(理论上一次测距周期约60ms)。在for循环中,每度仅有delay(30),加上测距和计算时间,可能导致实际扫描速度比预期的慢。
  • 逻辑判断if (distance <= 10)if (distance >= 20)这两个条件在10到20厘米之间有一个“盲区”,在此区间内不会触发任何动作。这可能是故意为之,作为一个“迟滞区间”以防止在临界点抖动。但需要注意。
  • 模拟读取与计算:代码使用analogRead(sensor)*0.0048828125将模拟值(0-1023)转换为电压(0-5V),然后用公式distance = 13*pow(volts, -1)计算距离。这个公式适用于特定型号的模拟输出超声波传感器(如RCWL-1601),其输出电压与距离成反比。对于常见的数字式HC-SR04,此方法不适用
  • 代码冗余:正转和反转的两个for循环内部代码几乎完全相同,造成了重复。

4.2 优化后的代码实现(基于HC-SR04)

以下是一个针对HC-SR04传感器优化后的代码,逻辑更清晰,并增加了注释。

#include <Servo.h> // 定义引脚 const int trigPin = 4; // 超声波传感器Trig引脚 const int echoPin = 5; // 超声波传感器Echo引脚 const int servoScanPin = 2; // 扫描伺服电机信号引脚 const int servoMaskPin = 3; // 面具伺服电机信号引脚 // 定义阈值和参数 const int detectionDistance = 15; // 检测阈值,单位:厘米 (可根据实际情况调整) const int scanStepDelay = 30; // 扫描每步的延迟,控制扫描速度 (毫秒) Servo servoScan; // 扫描伺服电机对象 Servo servoMask; // 面具伺服电机对象 int currentAngle = 90; // 当前扫描角度,从中间开始 int scanDirection = 1; // 扫描方向:1为增加角度,-1为减少角度 bool objectDetected = false; // 标志位,记录是否检测到物体 void setup() { Serial.begin(9600); // 初始化串口通信,用于调试 // 初始化超声波传感器引脚 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // 初始化伺服电机 servoScan.attach(servoScanPin); servoMask.attach(servoMaskPin); // 将两个伺服电机都移动到初始位置(中间) servoScan.write(currentAngle); servoMask.write(currentAngle); delay(500); // 等待伺服电机到位 Serial.println("System Initialized. Start Scanning..."); } void loop() { // 1. 控制扫描伺服电机运动 currentAngle += scanDirection; // 限制角度在0-180度之间 if (currentAngle >= 180 || currentAngle <= 0) { scanDirection = -scanDirection; // 到达边界后反向扫描 // 可选:在反向时加一个短暂停顿,使行为更自然 // delay(500); } servoScan.write(currentAngle); delay(scanStepDelay); // 等待电机转动到位 // 2. 在当前角度进行测距 long distance = measureDistance(); // 3. 根据测距结果控制面具伺服电机 if (distance > 0 && distance <= detectionDistance) { // 检测到物体 if (!objectDetected) { Serial.println("Object Detected! Turning mask..."); objectDetected = true; } servoMask.write(currentAngle); // 面具转向相同角度 } else { // 未检测到物体 if (objectDetected) { Serial.println("Object Lost."); objectDetected = false; } // 可以选择让面具回归一个默认位置,例如: // servoMask.write(90); // 或者保持不动(原方案),这里选择保持不动。 } // 4. 串口输出调试信息(可选) // Serial.print("Angle: "); // Serial.print(currentAngle); // Serial.print(" | Distance: "); // Serial.println(distance); } // 封装超声波测距函数,返回距离(厘米) long measureDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); // 发送10微秒的高脉冲触发 digitalWrite(trigPin, LOW); // 读取回声高电平持续时间 long duration = pulseIn(echoPin, HIGH, 30000); // 设置超时时间(微秒),对应约5米 // 计算距离(单位:厘米) 声速按340米/秒计算 // 距离 = (持续时间 * 声速) / 2 = (微秒 * 0.034) / 2 = 微秒 * 0.017 long distance = duration * 0.017; // 如果超时或距离异常,返回0或一个错误值 if (duration == 0 || distance > 200 || distance < 2) { return 0; // 表示测距失败或超出有效范围 } return distance; }

4.3 关键代码段解读与优化点

  1. 状态标志位 (objectDetected):新增了一个布尔变量来记录上一次循环是否检测到物体。这样,我们只在状态发生变化时(从“未检测”到“检测”,或反之)通过串口打印信息,避免了串口监视器被重复信息刷屏,使调试信息更有价值。
  2. 封装测距函数 (measureDistance()):将测距逻辑独立成一个函数,使主循环loop()更简洁。函数内部包含了完整的HC-SR04驱动时序,并加入了超时处理(pulseIn的第三个参数),防止因未收到回波而卡死程序。
  3. 扫描逻辑优化:使用scanDirection变量控制扫描方向,替代了原来的两个for循环,代码更简洁。扫描范围被限制在0-180度之间,形成持续的来回扫描。
  4. 面具电机行为:当检测到物体时,面具立即指向物体方向。当物体消失时,代码中注释了两种选择:一是让面具回到中间位置(servoMask.write(90)),二是保持原位。你可以根据想要的互动效果(是持续“凝视”最后发现的位置,还是“放弃寻找”)来修改。
  5. 参数可调:将检测距离(detectionDistance)、扫描速度(scanStepDelay)等定义为常量,方便在程序开头统一调整,无需深入代码内部查找。

5. 机械组装与调试实战

5.1 3D打印件的后处理与准备

打印好的PLA部件可能会有一些毛刺或支撑残留,需要先进行处理:

  • 去除支撑:小心地用钳子或刻刀去除打印时生成的支撑结构。
  • 打磨:对于需要紧密配合的轴孔或安装面,可以使用细砂纸进行轻微打磨,确保伺服电机和轴承能顺畅安装。
  • 试装配:在正式粘合前,将所有结构件(外壳、盖子、支架、连杆)先用手工组装一次,检查尺寸是否合适,螺丝孔是否对齐。特别是两个伺服电机在壳体内的固定位置,一定要确保电机轴能顺利穿过外壳上的孔。

5.2 分步组装流程

  1. 固定核心电子单元:首先将Arduino Uno用螺丝或双面胶固定在底壳内部预留的位置。然后将焊接好的分线板也固定在一旁。
  2. 安装扫描机构
    • 将扫描伺服电机(servoScan)卡入底壳对应的安装槽。
    • 将电机的舵盘(舵臂)用配套的小螺丝固定到电机输出轴上。
    • 将超声波传感器安装到定制的传感器支架上,再将这个支架用螺丝紧固到舵盘上。确保传感器正面朝前,且连接线留有活动余量,不会在转动时被拉扯。
    • 将伺服电机的三根线(信号、电源、地)和传感器的四根线,按之前规划的接线图,插到分线板对应的排针上。
  3. 安装面具机构
    • 将面具伺服电机(servomasker)安装在上盖或内部另一个支架上。
    • 用强力胶(如原作者使用的“seconden lijm”,即快干胶/401胶水)将打印好的面具粘贴到较大的联动杆件上。务必等胶水完全干透。
    • 将联动杆件通过螺丝与电机舵盘连接。这里需要仔细调整面具的初始角度。一个技巧是:先不要拧紧固定舵盘的螺丝,在Arduino上电初始化(电机转到90度)后,手动将面具调整到正向前方的位置,然后再拧紧螺丝。
    • 连接面具伺服电机的线缆到分线板。
  4. 总装与理线
    • 将上盖与底壳合拢,注意将所有的线缆整理好,避免被挤压或卡住运动部件。
    • 用螺丝紧固外壳。
    • 最后,将分线板的电源总线与Arduino的5V和GND连接,信号线连接到对应的数字引脚。

5.3 上电调试与校准

组装完成后,不要急于盖上所有盖子,先进行开盖调试:

  1. 上电测试:通过USB线或外部电源供电。打开Arduino IDE的串口监视器,设置波特率为9600。你应该能看到“System Initialized”的提示。
  2. 观察扫描:扫描伺服电机应该开始缓慢地来回转动。如果不动,检查代码中伺服电机引脚定义是否正确,以及接线是否牢固。
  3. 测试传感器:用手在传感器前来回移动,观察串口监视器输出的距离值是否变化合理。如果一直为0或超大值,检查传感器接线(Trig/Echo是否接反)和代码中的引脚定义。
  4. 测试联动:当传感器检测到你的手(距离小于设定阈值)时,面具伺服电机应立即转动到与扫描电机相同的角度。如果转动方向相反,可能是机械安装时舵盘的0度位置没对齐。需要断电后,松开舵盘螺丝,手动调整面具的物理位置。
  5. 校准阈值:根据实际场景调整代码开头的detectionDistance常量。在串口监视器中观察你希望触发“注视”的实际距离所对应的读数,将其设为阈值。
  6. 优化行为:你可能觉得扫描太快或太慢,调整scanStepDelay。你可能希望物体消失后面具缓缓归位,这需要在代码中增加面具电机的平滑运动逻辑(例如使用for循环逐步移动到90度)。

避坑指南:伺服电机有时会发出“吱吱”的响声,尤其是在试图保持一个角度时。这通常是正常的,因为电机在持续微调以抵抗外力保持位置。但如果响声异常大或伴有抖动,可能是:

  1. 电源功率不足,导致电机扭矩不够。
  2. 机械负载太大或卡住,电机无法到达指定位置。
  3. 控制信号受到干扰。检查信号线是否远离电源线。

6. 项目扩展思路与常见问题排查

6.1 功能扩展与创意变形

这个基础项目是一个很好的平台,可以在此基础上进行多种创意扩展:

  1. 增加视觉反馈:在面具的眼睛位置安装两个LED。当检测到物体时,LED点亮,增强“注视”感。只需在代码的检测到物体的if语句中添加digitalWrite(ledPin, HIGH)即可。
  2. 增加声音反馈:加入一个无源蜂鸣器,当检测到物体时,播放一段简短的音效。可以使用tone()函数实现。
  3. 改变互动逻辑
    • 躲避模式:让面具在检测到物体时转向相反方向,做出“害羞”或“躲避”的行为。
    • 跟踪模式:使用更快的伺服电机(如MG90S)和更快的扫描算法,尝试让面具平滑地跟踪移动的物体。
    • 多目标记忆:增加一个按钮,当按下按钮时,面具会依次转向之前检测到物体的几个角度,仿佛在“回忆”。
  4. 无线化与网络交互:用ESP8266或ESP32替换Arduino Uno,接入Wi-Fi。你可以通过网络远程控制它的行为,或者将它检测到的“有人”状态发送到物联网平台,触发其他智能家居设备。

6.2 常见问题速查与解决方案

下表列出了在制作和调试过程中可能遇到的一些典型问题及解决方法:

问题现象可能原因排查与解决步骤
上电后无任何反应1. 电源未接通或接触不良。
2. Arduino未正确烧录程序或芯片损坏。
1. 检查电源线、USB线是否插紧,万用表测量Arduino Vin/5V引脚是否有电。
2. 尝试烧录一个简单的Blink程序,测试Arduino本身是否工作。
伺服电机不转动1. 信号线接错或接触不良。
2. 电源功率不足。
3. 代码中伺服对象未attach到正确引脚。
1. 确认信号线(黄/白)接在了代码定义的数字引脚上。
2. 改用外部电源供电测试。
3. 检查setup()函数中servo.attach(pin)语句。
伺服电机抖动或异响1. 电源功率不足。
2. 机械结构卡死或负载过重。
3. 控制信号不稳定。
1. 确保使用足够电流的电源(推荐1A以上)。
2. 断开电机与负载的连接,空载测试电机是否正常。
3. 检查代码,确保没有在极短时间内发送矛盾的角度指令。
超声波传感器读数始终为0或非常大1. VCC/GND接反或接触不良。
2. Trig和Echo引脚接错。
3. 传感器前方有吸音材料或角度不对。
4. 代码中测距函数逻辑错误或超时设置太短。
1. 用万用表确认传感器供电为5V。
2. 交换Trig和Echo线试试。
3. 确保传感器正对平整的硬质障碍物测试。
4. 使用已知正确的示例代码(如NewPing库例程)单独测试传感器。
面具转动角度不准确1. 舵盘(舵臂)在电机轴上的初始位置未校准。
2. 机械连接存在虚位或松动。
1. 在系统初始化(电机回中)后,断电,手动将面具调整到正向位置,再紧固舵盘螺丝。
2. 检查所有螺丝和胶接处是否牢固。
检测不灵敏或误触发1. 检测阈值detectionDistance设置不合理。
2. 传感器被灰尘或异物遮挡。
3. 环境中有其他超声波源干扰(如另一个HC-SR04)。
1. 通过串口监视器观察实际距离读数,根据应用场景调整阈值。
2. 清洁传感器表面的金属网。
3. 错开多个传感器的触发时间,或使用不同的传感器型号。
系统运行一段时间后复位1. 电机动作导致电源电压瞬间跌落。
2. 代码中存在内存泄漏或死循环(本项目简单,可能性低)。
1.这是最常见的原因。必须强化电源:使用质量好的9V适配器或大容量电池,或在电机电源端并联一个大电容(如1000μF 16V电解电容),以吸收瞬间电流冲击。

6.3 最后的叮嘱:从原型到作品

当你完成电路调试和代码功能测试后,最后的封装同样重要。确保所有内部线缆都用扎带或胶带固定好,避免与运动部件摩擦。如果使用电池供电,考虑在外壳上设计一个优雅的电池仓盖。对于长期展示的项目,可以在程序启动部分加入更优雅的初始化动作(比如让面具先左右看一圈),并在外壳上贴一个简单的说明标签。

这个“Look-o-box”项目最迷人的地方在于,它用一个简洁的物理交互,引发了人们关于“被观察”的微妙感受。技术实现本身是扎实的电子和编程基础,而最终的体验却可以很艺术、很有趣。希望这份详细的拆解,不仅能帮你复现这个装置,更能给你带来举一反三的能力,去创造属于你自己的、能与世界互动的智能设备。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 16:42:27

2026 科研绘图网站全景解析:国内外全学科科研绘图工具场景选型参考

科研绘图是学术成果表达与逻辑传递的核心载体。2024 年中国科研论文数量已达 84 万篇&#xff0c;伴随科研产出规模的持续扩大&#xff0c;高质量的科研可视化需求呈井喷之势。寻找合适的科研绘图网站推荐&#xff0c;已成为学术圈提质增效的共同诉求。随着人工智能技术的纵深发…

作者头像 李华
网站建设 2026/6/2 16:41:22

Intern-S2-Prompt提示工程:如何编写高效的科学任务提示词

Intern-S2-Prompt提示工程&#xff1a;如何编写高效的科学任务提示词 【免费下载链接】Intern-S2-Preview Intern-S2-Preview&#xff0c;这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外&#xff0c;Intern-S2-Preview探索了任务扩展&#xff1a;…

作者头像 李华
网站建设 2026/6/2 16:39:50

从零搭建磁悬浮装置:Arduino PID控制与电磁力闭环系统实践

1. 项目概述与核心思路拆解磁悬浮&#xff0c;听起来像是科幻电影里的场景&#xff0c;但它的核心原理其实并不神秘。简单来说&#xff0c;就是利用电磁力来对抗重力&#xff0c;让物体“飘”在空中。这个DIY项目&#xff0c;就是要把这个听起来高大上的概念&#xff0c;变成一…

作者头像 李华
网站建设 2026/6/2 16:36:30

Python爬虫实战:构建开发者大会全维度资料索引库

㊗️本期内容已收录至专栏《Python爬虫实战》&#xff0c;持续完善知识体系与项目实战&#xff0c;建议先订阅收藏&#xff0c;后续查阅更方便&#xff5e; ㊙️本期爬虫难度指数&#xff1a;⭐⭐ &#x1f250;福利&#xff1a; 一次订阅后&#xff0c;专栏内的所有文章可永久…

作者头像 李华
网站建设 2026/6/2 16:34:56

WarcraftHelper:让经典魔兽争霸3在现代电脑上焕发新生的3大秘诀

WarcraftHelper&#xff1a;让经典魔兽争霸3在现代电脑上焕发新生的3大秘诀 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑…

作者头像 李华