名侦探番外——Arduino“炸弹”引爆摩天大楼
名侦探番外——Arduino“炸弹”引爆摩天大楼
- 硬件准备
- 1.材料准备
- 2.模块介绍
- 电路设计
- 1.硬件接线
- 程序设计
- 1.设计思路
- 2.部分程序
- 3.功能优化
- 总结
好久不见,童鞋们!小编突然想到很久以前看的柯南剧场版——计时引爆摩天大楼的情景,对剧里的“炸弹”情有独钟,最近几天刚好有空,顺便用Arduino做了一个“炸弹”模型,这篇文章就跟大家分享一下“炸弹”的制作过程吧!

硬件准备
1.材料准备
今天的作品比较特殊,需要我们做一部分手工——制作”炸弹“模型,大家在制作之前可以先准备好以下材料:
Arduino UNO、TM1637数码管时钟模块、MP3语音模块、小喇叭、无源蜂鸣器、10kΩ电阻(3个)、杜邦线、牛皮纸、黑色胶带、美工刀、剪刀等。
注意:
- TM1637数码管时钟模块,小编在这里不方便贴链接,各位童鞋从某宝上自己购买吧。当然,小编在程序开头的注释里贴了一个链接,供大家参考。
- MP3语音模块,小编用的是多年以前从DFRobot买的语音模块,现在应该还有,大家从某宝上搜DFRobot官方商铺,在官方商铺里再搜语音模块就可以了,不过他们家的传感器模块比较贵,童鞋们也可以换其他替代产品,能用即可。
- 为了让作品更像”炸弹“,小编特意拆了几个牛皮纸包装袋,裁出大小相同的几张纸,然后把每张纸卷成圆筒,卷纸的时候可以在里面夹几只铅笔,这样卷出来的圆筒更结实,最后把所有圆筒用黑色胶带粘到一起就可以了。
- 最后调试完传感器和程序以后再把所有的硬件粘到圆筒上面即可。
特别声明:小编并没有为某宝和某商铺打广告,只是刚好手里有该模块而已,大家可以用自己的方式购买。
2.模块介绍

TM1637数码管时钟模块:驱动芯片为TM1637,共有四个引脚,分别为VCC、GND、DIO、CLK,其中VCC可接+5V或者+3.3V,DIO为数据输入/输出引脚,CLK为时钟信号引脚,这两个引脚可以接Arduino的任意数字引脚。
在Arduino中控制TM1637数码管模块可以直接调用TM1637库,库文件小编放在文档里了,文末有下载链接,大家也可以自己从Arduino软件中下载。小编在作品中用到了以下几个函数:
TM1637 tm1637(CLK, DIO);//初始化数码管,CLK和DIO是指定的连接到Arduino引脚。
tm1637.init();//初始化数码管,其实就是清空屏幕
tm1637.set(BRIGHT_TYPICAL);//设置数码管的亮度,BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;其中0最暗,7最亮
tm1637.point(true);//指定数码管中间的冒号是否显示,false不显示,true显示
tm1637.display(Addr, data); //指定数码管中某一位的显示内容,第一个参数指定数码管的某一位,四位数码管从左到右顺序为0,1,2,3,第二个参数是显示的内容,其实是个序号,库中自带有一个长度为16的数组,默认显示0-9,A-F,第二个参数指定的是这个数组的序号。
注:其他函数及其用法,各位童鞋可以自行查询和测试,小编就不在这里过多赘述了。

DFRobot MP3语音模块:工作电压为3.3V~5V,模块上有很多引脚,VCC和GND分别是电源正极和负极;RX、TX是串口通信引脚;BUSY是忙信号引脚,播放音乐时为高电平,其它为低电平;SP+和SP-分别连接喇叭的正极和负极;DACL和DACR分别是DAC音频输出的左声道和右声道;ONE是一线串口控制脚。我们的”炸弹“作品功能比较简单,所以仅用到了VCC、GND、RX、TX、SP+和SP-这几个引脚。
DFRobot MP3语音模块可以播放其内部存储的音效文件,自带8MB的存储空间,存储音效文件的方式和使用U盘一样,直接用micro usb线连接到电脑上,电脑就能识别出一个U盘一样的存储空间,然后我们就可以把音效文件存进去了,这与U盘的操作是一样的。
DFRobot MP3语音模块支持mp3和wav两种格式的音效文件,在存储音效文件之前一定要给文件编好序号,例如:01.MP3,02.mp3…,该模块需要使用串口和Arduino通信,而且它有自己的一套通讯指令,大家可以登录官方网站:
https://wiki.dfrobot.com.cn/_SKU_DFR0534_Voice_Module
自行查阅模块手册,小编在这里用到的功能比较少,所以直接抄了官方手册里的播放音乐和设置音量的示例程序:
void play(unsigned char Track)
{unsigned char play[6] = {0xAA,0x07,0x02,0x00,Track,Track+0xB3};//0xB3=0xAA+0x07+0x02+0x00,即最后一位为校验和Serial1.write(play,6);
}
void volume( unsigned char vol)
{unsigned char volume[5] = {0xAA,0x13,0x01,vol,vol+0xBE};//0xBE=0xAA+0x13+0x01,即最后一位为校验和Serial1.write(volume,5);
}
注:小编用的电脑是win10系统,插上U盘就能自动识别,但是win7或者MAC系统没有测试过,大家可以根据自己的电脑系统自行测试,如有问题可以直接访问DFRobot官方wiki或者客服解决。
电路设计
1.硬件接线
“炸弹”作品的硬件接线还是比较简单的,整个电路图如下:

TM1637数码管模块:数码管模块只有4个引脚,所以接线非常简单,这里小编把DIO和CLK引脚接到了Arduino UNO的A0和A1引脚:
TM1637数码管----------------------Arduino UNO
VCC -------------- +5VGND -------------- GNDDIO -------------- A0CLK -------------- A1
MP3语音模块:“炸弹”作品中仅用到了VCC、GND、RX、TX、SP+和SP-这几个引脚,接线如下:
MP3语音模块---------------------- Arduino UNO
VCC -------------- +5VGND -------------- GNDRX -------------- 11TX -------------- 10
MP3语音模块---------------------- 小喇叭
SP+ -------------- 正极SP- -------------- 负极
注:MP3语音模块要使用串口发送指令,作品中我们用的是Arduino UNO的软串口,所以这里把RX和TX接到了Arduino UNO的11和10号引脚。
拆弹线:因为作品中需要检测是否出现拆弹的情况,可以通过获取Arduino数字引脚的高低电平信号进行判断,这里为了避免断开拆弹线时Arduino引脚出现悬空,导致电平不稳定的情况,所以设计了一个下拉电阻的电路,当拆弹线未断开时,Arduino的数字引脚是高电平信号,当拆弹线断开时,Arduino的数字引脚是低电平信号。忘记下拉电阻电路的童鞋要补补课啦图片图片
拆弹线---------------------- Arduino UNO
红 -------------- 2绿 -------------- 3黄 -------------- 4
无源蜂鸣器:无源蜂鸣器只有两个引脚,正极和负极,接线非常简单:
无源蜂鸣器---------------------- Arduino UNO
正极 -------------- A2负极 -------------- GND
程序设计
1.设计思路
“炸弹”模型做完了,电路部分也搞定了,接下来就是程序设计了,小编按照自己写的程序简单分享以下几点:
-
首先是倒计时问题,小编在Arduino中使用了millis()函数计算程序运行的时间,这种计时方法并不精确,但是用起来方便,当计时时间达到阈值时,秒数要递减,若秒数小于0,则需要从分钟借位,然后继续递减,若分钟也小于0,就表示计时结束了,此时语音模块就要播放炸弹爆炸的声音了。程序中还设置了标志,用于控制程序是否需要继续执行倒计时以及控制倒计时过程中蜂鸣器滴滴响。
-
然后是三条拆弹线,这三条拆弹线要连接到Arduino的数字引脚,为了增加趣味性,小编在程序开始设置了随机分配三条线的引脚,方法是先用二维数组把三个数字引脚的6种情况全部排列出来,然后用随机数函数产生0~6之间的数字作为二维数组的行下标,以此获取随机的三个数字引脚,并赋值给check数组,然后再初始化引脚为输入模式。
-
最后在主程序中判断剪断了哪一条线,分别实现拆弹失败、拆弹成功以及倒计时加速的功能,当拆弹失败时,分钟和秒全部置0,此时语音模块就会发出爆炸的音效;当拆弹成功时,时间停止即可;当拆到倒计时加速的线时,倒计时会先暂停一会,然后时间会加速递减,直到时间为0则炸弹爆炸,如果时间还未加速递减到0时又拆到了拆弹成功的线那么时间会立刻停止,炸弹也不会爆炸了!
2.部分程序
void loop() {if (millis() - tt > nn && !bombFlag) {//判断当前时间是否超过nn的值,即达到计时时间了tt = millis();s--;//秒数递减if (s < 0) {//若秒数减到0if (m > 0) {//如果分钟仍然大于0则秒数从分钟借位s = 60;//秒数重新从60开始递减m--;//m被秒借走了1分钟,则应该减1} else {//若分钟不大于0,此时表示计时结束m = 0;s = 0;bombFlag = true;//改变标志值play(0x01);//语音模块播放爆炸声}}if (!bombFlag) {//若标志值还未改变,则蜂鸣器滴滴响tone(BUZZER, 1600);}} else {noTone(BUZZER);//蜂鸣器响一次就要关闭一次}if (digitalRead(check[0]) == LOW && !bombFlag) {//当check[0]被剪断,此时炸弹立即爆炸,拆弹失败m = 0;//分钟和秒直接置0s = 0;} else if (digitalRead(check[1]) == LOW && !bombFlag) {//当check[1]被剪断,此时炸弹停止,拆弹成功bombFlag = true;//改变标志值即可} else if (digitalRead(check[2]) == LOW && !bombFlag) {//当check[2]被剪断,此时炸弹暂停1500毫秒,随即快速倒计时(此时再拆check[1]仍然会停止,但拆check[0]则直接爆炸)if (!colorFlag){delay(1500);//暂停1500毫秒colorFlag = true;}nn -= 10;//nn每次减10,倒计时由慢变快if (nn < 100)nn = 100;//nn虽然逐渐递减,但不能小于100}displayTime(m, s);//数码管显示倒计时时间delay(20);
}
3.功能优化
由于时间比较仓促,材料准备也不是很充足,这个“炸弹”作品还有很大的优化空间,例如可以使用时钟模块提升计时精度,增加按键用于设置倒计时时间。各位童鞋如果有更好的想法也可以跟小编分享一下!
总结
模拟“炸弹”的音效文件、完整程序等文件已经上传到百度网盘了,想要资料的同学,请移步公粽号并回复“模拟炸弹”即可获得下载链接,好东西不容错过!
本期分享就到这里咯,撰文不易,欢迎各位小伙伴持续关注 初芯未来,更多内容分享等着你哦~!
相关文章:
名侦探番外——Arduino“炸弹”引爆摩天大楼
名侦探番外——Arduino“炸弹”引爆摩天大楼 硬件准备1.材料准备2.模块介绍 电路设计1.硬件接线 程序设计1.设计思路2.部分程序3.功能优化 总结 好久不见,童鞋们!小编突然想到很久以前看的柯南剧场版——计时引爆摩天大楼的情景,对剧里的“炸…...
自适应AI chatgpt智能聊天创作官网html源码
我们致力于开发先进的自适应AI智能聊天技术,旨在为用户提供前所未有的聊天体验。通过融合自然语言处理、机器学习和深度学习等领域的顶尖技术,我们的智能聊天系统能够准确理解用户的需求并给出相应的回应。 我们的自适应AI智能聊天系统具备以下核心特点…...
防抖,节流
概念 防抖(debounce):类似法师技能读条,读条没完再按技能就会重新读条,在触发后的n秒内只会执行一次,若在这n秒内重复触发则重新计算 节流(throttle):连续发生的事件在n秒内只执行一次函数 参考 【前端面试必问】—…...
【Linux】多线程1——线程概念与线程控制
文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…...
【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包
SpringBoot项目使用maven-assembly-plugin插件多环境打包 1.创建SpringBoot项目并在pom.xml文件中添加maven-assembly-plugin配置 <!-- 多环境配置 --><profiles><!-- 开发环境 --><profile><id>dev</id><properties><prof…...
指令集_基础
指令集-基础 一、提示过程1,文章摘要2,数学问题求解 二、角色提示三、多范例提示 一、提示过程 指导人工智能,执行任务的过程,称为提示过程。向AI 提供一组指令(提示),然后它执行任务 1,文章摘要 例如&a…...
学习Vue:数据绑定的基本概念
在 Vue.js 中,Vue 实例是您构建应用程序的核心。它允许您将数据和界面连接起来,实现动态的数据绑定,使您的应用程序能够根据数据的变化自动更新界面。让我们来深入了解 Vue 实例与数据绑定的基本概念。 Vue 实例与数据绑定 什么是 Vue 实例&…...
Python 装饰器 - 推导式(列表推导式) - 迭代器 - 生成器 - 闭包
目录 推导式 1、列表推导式(用得最多的) 给你一个列表,求所有数据的绝对值 列表推导式跟if运算 打印50以内能被3整除的数的平方(filter)(if的使用) 找到1000以内开平方的结果是整数的数&am…...
【大数据】Flink 详解(二):核心篇 Ⅲ
Flink 详解(二):核心篇 Ⅲ 29、Flink 通过什么实现可靠的容错机制? Flink 使用 轻量级分布式快照,设计检查点(checkpoint)实现可靠容错。 30、什么是 Checkpoin 检查点? Checkpoint …...
Jmeter性能测试系列-性能测试需求分析
性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同,功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性,性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…...
Syncfusion Essential Studio JavaScrip Crack
Syncfusion Essential Studio JavaScrip Crack 数据透视表 添加了在将数据透视表导出到PDF文档时自定义列宽的支持。 签名 添加了对在特定位置绘制文本的支持。 Syncfusion Essential Studio for JavaScript在一个包中包含80多个高性能、轻量级、模块化和响应式UI组件。包括Jav…...
8.13黄金是否进入下行通道?下周开盘如何布局
近期有哪些消息面影响黄金走势?黄金多空该如何研判? 黄金消息面解析:周五(8月11日)现货黄金小幅收低,受累于美元走强和美国国债收益率上升,本周录得6月底以来最差单周表现。投资者在评估最新一批通胀报告和消费者信…...
Idea的基本使用带案例---详细易懂
一.idea是什么 有专业人士说,idea是天生适合做微软,当时我还想肯定是夸大其词了,但当你用起来的时候确实很爽,😊😊 ntelliJ IDEA是一种集成开发环境(IDE),由JetBrains开发…...
MySQL中的用户管理
系列文章目录 MySQL常见的几种约束 MySQL中的函数 MySQL中的事务 MySQL中的视图 MySQL中的索引 文章目录 系列文章目录前言一、用户管理1、用户管理入门2、用户管理操作及示例 二、权限管理1.权限管理语法2.权限操作示例 三、角色管理1、角色管理入门2、角色操作示例 总结…...
【STM32】利用CubeMX对FreeRTOS用按键控制任务
对于FreeRTOS中的操作,最常用的就是创建、删除、暂停和恢复任务。 此次实验目标: 1.创建任务一:LED1每间隔1秒闪烁一次,并通过串口打印 2.创建任务二:LED2每间隔0.5秒闪烁一次,并通过串口打印 3.创建任…...
c# .net mvc的IHttpHandler奇妙之旅--图片文件请求安全过滤,图片防盗链
源码下载: c# .net mvc图片文件请求安全过滤,图片防盗链 https://download.csdn.net/download/cplvfx/88206428 在阅读该文章前,请先阅读该文章 c# .net mvc的IHttpHandler奇妙之旅。.net的生命周期和管道你听说过吗?你可以利用他处理业务如:跳转业务页面,文件请求的安全…...
STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器
只用STM32单片机SD卡耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labm…...
STM32 CAN 过滤器设置
做个笔记吧 ,免得以后忘记了 芯片是stm32F207 ,用cubeMX 6.80 版本生成 CAN 的使用总体包含4个部分 第一步:CAN初始化,配置波特率 (cubeMX 里面配置好后自动生成,不需要手动添加) MX_CAN1_Init(); 第二步&#…...
日常BUG—— maven编译报错
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 一个maven项目在由于在代码中书写了如下代码: public static ConcurrentMap<…...
Unity 工具 之 Azure 微软SSML语音合成TTS流式获取音频数据的简单整理
Unity 工具 之 Azure 微软SSML语音合成TTS流式获取音频数据的简单整理 目录 Unity 工具 之 Azure 微软SSML语音合成TTS流式获取音频数据的简单整理 一、简单介绍 二、实现原理 三、实现步骤 四、关键代码 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
