基于Arduino做的“鱿鱼游戏”BOSS面具,支持动作检测
这是一个结合了3D打印、舵机、PIR传感器和DFPlayer MP3模块的DIY项目,旨在制作一个带有动画眼睛的"鱿鱼游戏"老板面具。当检测到动作时,面具的眼睛会移动并播放声音,非常适合万圣节使用。
 
这个项目是一个很好的起点,特别适合那些想控制眼球运动和播放特定音频文件的小伙伴们。通过协调PIR传感器检测到的运动、舵机的移动和DFPlayer的音频播放,你可以实现一个非常优秀的动画效果。
步骤1:3D打印部件

眼睛及面具本身都是使用标准3D打印机和PLA打印出来的。打印质量为中等,如果你想要更好的外观,可以打磨然后平滑地涂上颜料。
3D打印组件包括:


- 面具(面部)
 - 两个眼球
 - 两个眼睑
 - 舵机支架(用于固定所有5个舵机)
 - 万向节(用于实现眼睛的平滑运动)
 - 支撑面具内部的两根杆
 - 用于盖住电子元件和便于安装在墙壁上的背板
 
你可以选择使用不同颜色的眼球,甚至在打印后手绘。万向节对眼睛的平滑运动至关重要,使其能够模拟真实的动作。

3D打印文件可以文末下载。
步骤2:组装眼睛

现在我们有了3D打印的部件,是时候开始组装眼睛了。我们将使用五个MG90S舵机来控制眼睑和眼球的运动。以下是需要的材料:
组件:
- 5个MG90S舵机
 

- 铁丝(我们使用几个回形针来连接杆)
 

- 钳子和剪线钳
 
组装过程:
校准舵机:确保所有舵机初始位置为90度。这对于确保动作的正确校准非常关键。


安装舵机:将每个舵机放入3D打印的舵机支架中。两个舵机控制眼睛的左右运动,两个控制上下运动,一个用于眼睑。


连接眼球:使用回形针线将舵机与眼球连接,形成连杆结构。这会将舵机的旋转传递给眼球运动。添加万向节确保眼球运动平滑。



连接眼睑:最后一个舵机将控制眼睑,使你的面具能够眨眼或闭眼。使用相同的方法将眼睑连接到舵机上。



眼睛的运动依靠伺服电机在两个轴上(上下和左右)进行操控。每只眼睛的运动由两个伺服电机控制,而眼睑的开合则由一个伺服电机控制。
步骤3:测试眼睛

在我们继续项目的其他部分之前,先来测试一下眼睛确保一切正常。
以下是测试的简单电路设置:


- 将舵机连接到面包板。
 - 上传一个简单的舵机控制代码,使眼球向各个方向移动,并眨眼。
 

使用Arduino IDE上传代码,并观察运动。可以根据需要调整角度和延迟时间。

舵机连接
我们的设置第一部分涉及将五个舵机连接到Arduino Nano。这些舵机将控制以下运动:
- 舵机1:左眼的水平运动
 - 舵机2:左眼的垂直运动
 - 舵机3:控制眼睑
 - 舵机4:右眼的垂直运动
 - 舵机5:右眼的水平运动
 
以下是IO引脚分配:
- 舵机1:数字2
 - 舵机2:数字3
 - 舵机3:数字5
 - 舵机4:数字6
 - 舵机5:数字9
 
确保你的舵机有合适的外部电源供电,因为Arduino板载的5V供电不足以为多个舵机供电。
代码说明
舵机控制代码使用Servo库来管理每个舵机的运动。它定义了左右移动以及眼睑上下移动的具体角度。设置部分初始化了每个舵机,设定初始位置,并包含一个循环,以便在定义的角度之间平滑过渡。眼球的运动是根据代码中设定的条件触发,确保眼睛按照预期动作。
代码可以在文末下载。
步骤4:设计PCB

设计一块PCB来整合所有组件,包括DFPlayer、PIR传感器、舵机、扬声器和Arduino Nano。目的是创建一个更稳定的电路和原型。

组件包括:
- Arduino Nano(主控制器)
 - DFPlayer MP3模块(用于声音)
 - PIR传感器(运动检测)
 - 5个舵机输入
 - 扬声器用于音频输出
 


作者选择了PCBWay进行电路板制作。Gerber文件和电路原理图可以在这一链接中找到:[PCBWay项目链接](https://www.pcbway.com/project/shareproject/The_Face_maker101_c4124445.html “PCBWay项目链接”)。如果你没有焊接经验,也可以使用PCBWay的组装PCB服务。

组件清单包括用于电源需求的电容、用于电机数字输入的电阻、用于传感器和扬声器的接线端,以及DFPlayer和Arduino Nano用的公母针座。
- 电阻和电容(用于功率调节)
 - 接线端(用于传感器和扬声器连接)
 - 公/母针座(用于DFPlayer、Nano和电机)
 

之后把所有的组件焊接到位。
步骤5:”面具“的主代码




集成PIR传感器和DFPlayer
一切都安装好,接下来需要将主代码上传到Arduino Nano中。这段代码整合了PIR传感器、舵机和DFPlayer MP3模块。原理很简单:当PIR传感器检测到运动时,舵机会移动以打开眼睑并移动眼球,同时DFPlayer播放声音。
代码的关键组成部分包括:
- PIR传感器检测到运动时触发。
 - DFPlayer播放存储在SD卡上的声音文件。
 - 舵机控制眼球和眼睑的运动。
 
DFPlayer Mini和扬声器设置
DFPlayer Mini是一款简单、低成本的MP3播放器,可以播放存储在microSD卡上的音频文件。在这个项目中,它将在PIR传感器检测到运动时播放声音文件。
- 将DFPlayer的RX引脚连接到Arduino Nano的数字11,将TX引脚连接到数字10。
 - 将扬声器连接到DFPlayer的SPK+和SPK-引脚用于声音输出。
 
PIR运动传感器连接
- PIR传感器将检测运动并触发舵机运动和音频播放。
 - 将PIR传感器的输出引脚连接到Arduino Nano的数字7。
 
使用9V外部电源为电路供电,确保稳定性能。布线和编码完成后,就可以测试你的项目了。
- 将代码上传到Arduino Nano。
 - 确保PIR传感器放置在易于检测运动的地方。
 - 当PIR传感器检测到运动时,控制眼睑的舵机应打开,DFPlayer应播放预加载的声音文件。
 - 然后,舵机将以协调的顺序移动眼球。
 
代码解释
主代码使用DFPlayer库来控制音频播放,同时与PIR传感器的输出进行协调。当检测到运动时,代码触发舵机移动眼睛并同时开始音频文件播放。这种同步增强了效果,使眼睛显得更加逼真。代码有效处理各种情况,确保眼球运动和声音播放之间的无缝过渡。
注意:附带文件“1.mp3”包含了项目中使用的声音“I see you(我看见你了)”。只需将音频文件上传到SD卡(SD卡格式必须为FAT32)。
文件和代码文末下载。
步骤6:最终组装

现在我们可以把所有组件组合到面具中了。
请按以下步骤操作:
- 插入支撑杆:将两个支撑杆连接到面具背面。
 - 安装舵机支架:使用热熔胶固定舵机支架(附有舵机和眼球)到杆上。
 - 安装PIR传感器:在面具的正面钻一个6mm的小孔,来放置PIR传感器。它是一个迷你PIR传感器,所以可以完美地适配孔位。
 



- 放置扬声器:将扬声器放置在面具内,确保其不露于视线。
 - 连接PCB:固定PCB在面具内部,并完成所有必要的连接。
 

- 封闭面具:一旦所有连接完毕并到位,使用背板将电子设备封闭起来。
 


最后,使用双面胶或其他方法将面具安装在墙上。使用9V电源为面具供电,一切便准备就绪。

你可以根据个人喜好自定义此面具,比如添加不同的声音或更复杂的眼球动作。
如果你想让你的面具更加吸引人,还可以添加LED灯,在检测到运动时亮起来,增强视觉效果。
首发于DF创客社区 相关文件可移步下载。
相关文章:
基于Arduino做的“鱿鱼游戏”BOSS面具,支持动作检测
这是一个结合了3D打印、舵机、PIR传感器和DFPlayer MP3模块的DIY项目,旨在制作一个带有动画眼睛的"鱿鱼游戏"老板面具。当检测到动作时,面具的眼睛会移动并播放声音,非常适合万圣节使用。 这个项目是一个很好的起点,特…...
数据库的查询操作
之前学习了怎么创建数据库,创建数据表以及给数据表添加数据,我们今天就学习一下数据的查询 一. 查询语句的语法 select 列名(字段名) form 表名 [where (查询条件表达式)] [order by <排序的列明>[…...
WebGL编程指南 - WebGL概述
WebGL,是一项用来在网页上绘制和渲染复杂三维图形(3D图形),并允许用户与之进行交互的技术 WebGL的一些信息: 表层基于HTML5标准,通过Canvas元素公开底层基于OpenGL,与OpenGL ES规范非常接近暂…...
前端杂学录(十)
1.axios 的底层实现 1. XMLHttpRequests 在浏览器环境中,Axios 使用 XMLHttpRequest 对象来发送请求。这是一个古老的 Web API,用于在浏览器中进行异步 HTTP 请求。 2. Node.js 的 http 模块 在 Node.js 环境中,Axios 使用 Node.js 的 ht…...
C++上机|编写函数invert实现对一维数组的倒序
//编写函数invert实现对一维数组的倒序 # include <iostream> using namespace std;class invert_array {private://int a[10]{0,1,2,3,4,5,6,7,8,9};public: void invert(int A[], int n){int i,j,temp;int m (n-1)/2;for(i0;i<m;i){jn-1-i;tempA[i];A[i]A[j];A[j]t…...
使用LSPatch+PlusNE修改手机软件
一、问题概述 国内使用一些软件,即使科学上网,打开都是网络错误,更换节点同样如此。 二、软件下载 通过官网或者正规商店(如Google play)下载并且安装。 是的,先要下载一个无法使用的版本,后续对其进行修改。 三、下…...
基于springboot的4S店车辆管理系统
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…...
C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. 序列式容器和关联式容器 2. set系列的使⽤ 2.1 set和multiset参考⽂档 2.2 set类的介绍 2.3 se…...
HTML5实现古典音乐网站源码模板2
文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&a…...
基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...
基于SpringBoot网上超市的设计与实现(论文+源码)_kaic
摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此超市商品销售信…...
《webpack深入浅出系列》
webpack深入浅出系列 ES6模块与CommonJS模块的主要区别 加载时机:ES6模块是编译时输出,即模块在编译阶段就已经确定了依赖关系;而CommonJS模块是运行时才加载,即运行到某个require语句时才加载对应的模块。 (也就是说…...
云服务器使用挂载的数据盘空间(自用)
最近在使用浪潮云服务器的时候遇到系统盘存储空间全部使用完了,而浪潮提供的服务器配置里面还有数据盘空间,但是在使用df -h无法查看到数据盘的相关信息,查找后才发现是因为新开服务器没有对数据盘进行挂载,因此无法使用。在网上找…...
snmp usm OID
在Java中,SNMP(简单网络管理协议)是一种用于网络管理的互联网标准协议。它允许网络管理员从中央位置监控网络设备,如服务器、工作站、路由器、交换机和打印机等。SNMP通过允许这些设备报告关于它们状态的信息,从而帮助…...
数据仓库分层设计概念
数据仓库分层设计是一种结构化方法,用于组织和管理数据仓库中的数据。这种设计方法通过将数据从原始数据逐步转换为满足业务分析需求的结构化数据,提高了数据处理效率、数据质量和一致性。数据仓库分层设计的主要目的包括支持数据的重用、优化性能、提高…...
【HTML】defer 和 async 属性在 script 标签中分别有什么作用?
需要这两个属性的原因? 首先我们要知道的是,浏览器在解析 HTML 的过程中,遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建,首先去下载 js 代码,并且执行 js 的脚本;只有在等到 js 脚本执行…...
扫视扫描路径预测的评估:主观评估数 据库和基于循环神经网络的度量 记录
记录一 随着势头的不断增强,扫视预测逐渐成 为培养视觉注意力的热门研究课题。在扫视预测中,每个模型通常生成一个覆盖一系列注视点的扫描路径,以模拟动态扫视行为。因此, 通常通过计算预测的扫描路径与所有人类扫描 路径之间的相…...
【Java数据结构】优先级队列(堆)
【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 一. 优先级队列 1 概念 前面学过队列,队列是一种先进先出 (FIFO) 的数据结构 ,但有些情况下, 操作的数据可能带有优先级,一般出队 列时,可…...
图书个性化推荐系统|基于springBoot的图书个性化推荐系统设计与实现(附项目源码+论文+数据库)
私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&…...
通用车牌正则校验
要编写一个正则表达式来包含所有类型的车牌号,我们需要考虑以下几种常见的车牌类型: 1. 普通汽车车牌(蓝牌/黄牌) 规则:1个汉字 1个字母 5个字母或数字示例:京A12345、粤B5678X 2. 新能源车牌…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
