关注+
星标公众
号
,不错过精彩内容
作者 | lmu34
翻译 | DF创客社区
夏天来了,又到了蚊子嗡嗡嗡的季节,在这一点上,国内和海外并没有区别。
今天我们介绍的项目,就是魔改升级我们的武器——电蚊拍,让我们与蚊子的斗争更加有趣一些!
升级后的电蚊拍功能包括:
▼ 点击查看效果
创作思路
作者的想法是,当蚊子撞上电蚊拍的金属网并产生电弧时,电蚊拍的电路上一定有一些电流的变化。如果能在电路中找到一个可以被Arduino或ATtiny读取的地方(即0到5伏之间),那么就可以很容易地进行计数和显示分数,并播放声音。
声音功能可以用DFPlayer模块很容易地在ATtiny上添加。
分数将会用一个4位7段的显示器来显示,它的板载TM1637只用两根线(ATtiny的两个IO引脚)就能驱动这个显示器。
因为这些电子模块是在5V下运行的,而电蚊拍通常是用2节1.5V的电池的,所以顺便用USB充电电池升级一下电蚊拍的电源部分。
换句话说,这次的“武器升级”都是用相对容易找到的现成的电子模块来改造的,唯一的 复杂一点的地方是在信号计算方面,这块是由ATtiny通过编程处理的。
在下面的教程分享中,假定大家都对Ardiuno和如何编程有一些了解,如果没有,可以先学习一下Arduino基础教程。
在开始之前还需要说明一个安全问题:
电蚊拍使用高电压(按下按钮时网状物上有几百伏的电压),即使电流很低,在连接电池时也要注意不要接触它或其内部电路。
注意不要让小孩子玩这个。
材料
对于这个“终极”电蚊拍,我们需要:
Digispark pro (带有ATtiny,在网上很容易找到)
SD卡(一个小容量的卡即可,用来存储一些声音文件)
电位器(我用的是1MΩ的,这不是很重要,但高数值会限制通过电位器的电流消耗)
带有TM1637的四位数LED显示屏(确保是4位数显示屏+TM1637,而不是只有4位数显示屏)
工具部分,我们需要用到电烙铁、一把热胶枪和一台3D打印机(一些创意来修改拍子的手柄......)
第1步:如何升级我们的电蚊拍?
如果你不关心它的工作方式,只是想要做“终极”电蚊拍,那可以跳过这个步骤。
解释电蚊拍如何工作的资源可以在互联网上找到。
https://www.homemade-circuits.com/mosquito-swatter-bat-circuit/
它是振荡电路和一个将电压提升到数百伏的电路,再加上连接到拍子的金属网组成的。
首先遇到的问题是,找不到什么东西可以在这里挂上ATtiny(由于ATtiny的5伏限制,高压侧不能直接使用)。
为了解决这个问题,第二个想法是测量电流消耗。
当金属网上发生电弧,蚊子被电杀时,一定有一些能量消耗,应该可以通过ATtiny读取。
测量这个消耗的最好方法是测一下电流消耗,而测量电流的最简单方法是测量电阻上的电压,这一点ATtiny可以做到。
因此,计数蚊子的方法是在电池和电蚊拍电路之间插入一个小电阻,并监测这个电阻上的电压。
除此之外,我们使用已经制作好的电子模块(每个功能都有一个:声音、显示、充电器等),所以综合来说,这是一个相对比较简单的电子项目了。
第2步:准备电路
主要组件有:
我们最好先把它们摆放好,好确保它们能放进在手柄里,Digispark和DFPlayer可以靠近一点,根据它们在最终模块中的位置,给其他组件留出合适的电线长度(即USB充电器上有一个USB端口,需要可以用来充电)。
第3步:拆开电蚊拍
卸下电池,拆开拍子(应该只有几个螺丝)。
可以先看一下大概有多少空间留给我们来放附加的组件。
也可以顺便看看你的拍子是否与这个教程分享中使用的拍子一样。
需要注意的主要区别是拍子的推钮的 "位置"。在图中,它位于电池的
+
号和拍子的电路之间。如果是这样的话,就可以了(见照片)。
在某些拍子上,这个按钮位于地线
-
和电路之间。在这种情况下,下面修改和代码将不起作用。将会需要在硬件和软件方面进行一些调整。
第4步:魔改电蚊拍
在这个步骤中,我们:
在为两个AAA电池设计的隔间里给电池腾出一些空间(并重新使用充电电池的电池接头)。
第5步:构建电路并焊接元件
根据所有元件的最终位置预先进行布局,估计一下各种线的长度,开始焊接。
在上一步中,为了清楚起见,没有画出地线和VCC(5V)线,但所有的地线都需要相互连接,所有的VCC都需要相互连接。
对于VCC,Digispark有3个标有5V的引脚,它们是连在一起的,可以用来重新分配给其他元件。不要使用Digispark的VIN(VIN是一个需要高于6V的电压输入,我们不使用它,而是使用电池充电器的5V输出)。
建议从Digispark开始:
使用热缩管避免接触和短路(比如在Digispark和DFPlayer之间的电阻)
然后,继续进行电蚊拍电路、电池充电器、开关的连接:
电蚊拍电路的
+
和
-
上的电容器,注意电容器的极性!
Digispark的A12脚与按钮相连(按钮有两个接头,一个与电池
+
连接,A12与另一个连接)
使用热缩管来避免接触和短路(在电容器/电阻上等等)。
第6步:隔离显示屏与电蚊拍电路
在测试中发现会遇到显示问题——当蚊子碰到电蚊拍的网眼时,显示屏会关闭或者出错。
怀疑这是由于高电压变化产生的电子干扰影响了显示电路和连接。
修复方法很简单,在电路上贴一些胶带,铝箔(电磁屏蔽),再贴胶带。
当然,不要把铝箔直接放在电路上……
第7步:在SD卡上加载声音
DFPlayer播放的声音是存储在SD卡上的。
做法很简单,把卡装好,然后复制选择的声音:
DFPlayer将根据 "轨道编号 "播放声音。
根据观察,发现文件不是根据它们的名字来排序的,而是根据它们在卡上的
inode
号来排序的(在Linux上可以用
ls -id
查看)
ls -id * | more 647 1_Monster_kill.mp3 648 2_mixkit-final-level-bonus-2061.wav 649 3_get_ready_to_the_newt_fight.mp3 650 mixkit-arcade-retro-scoring-counter-273.wav 651 mixkit-arcade-video-game-bonus-2044.wav 652 mixkit-arcade-video-game-scoring-presentation-274.wav 653 mixkit-game-bonus-reached-2065.wav 654 mixkit-game-experience-level-increased-2062.wav 655 mixkit-winning-an-extra-bonus-2060.wav
如果你从一张新成型的卡开始,轨道号/inode的顺序将是声音文件的复制顺序(即复制在卡上的第一个文件就是1号)。
在下面的代码中,文件/音轨的选择是通过
setTrack()
完成的。
// 0 is random betwen tracks 4 to 9 // 1 is monster kill = track 1 (listed by inode on card (ls -id)) // 2 is level up // 3 is power on if (sound_type==0) setTrack(int(random(4,9))); //SD card contains 9 files if (sound_type==1) setTrack(1); // monster kill if (sound_type==2) setTrack(2); //level up if (sound_type==3) setTrack(3); //power on
你可以自行修改这部分,让动作
sound_type
和播放的音频之间匹配上。
音频可以到文末打包下载。