专栏名称: strongerHuang
公众号作者『strongerHuang』(黄工),分享内容包括(但不限于):Keil、IAR、STM8、STM32、μC/OS、FreeRTOS、CANOpen、ModBus...
目录
相关文章推荐
51好读  ›  专栏  ›  strongerHuang

Ardiuno智能电蚊拍

strongerHuang  · 公众号  ·  · 2022-06-24 08:30

正文

关注+ 星标公众 ,不错过精彩内容

作者 | lmu34

翻译 | DF创客社区


夏天来了,又到了蚊子嗡嗡嗡的季节,在这一点上,国内和海外并没有区别。

今天我们介绍的项目,就是魔改升级我们的武器——电蚊拍,让我们与蚊子的斗争更加有趣一些!

升级后的电蚊拍功能包括:

  • 添加电子装置来检测杀伤力
  • 增加一个4位数的计数器,统计“击杀数”
  • 支持USB充电
  • 增加“击杀声音”以获得更好的体验

▼ 点击查看效果

创作思路

作者的想法是,当蚊子撞上电蚊拍的金属网并产生电弧时,电蚊拍的电路上一定有一些电流的变化。如果能在电路中找到一个可以被Arduino或ATtiny读取的地方(即0到5伏之间),那么就可以很容易地进行计数和显示分数,并播放声音。

声音功能可以用DFPlayer模块很容易地在ATtiny上添加。

分数将会用一个4位7段的显示器来显示,它的板载TM1637只用两根线(ATtiny的两个IO引脚)就能驱动这个显示器。

因为这些电子模块是在5V下运行的,而电蚊拍通常是用2节1.5V的电池的,所以顺便用USB充电电池升级一下电蚊拍的电源部分。

换句话说,这次的“武器升级”都是用相对容易找到的现成的电子模块来改造的,唯一的 复杂一点的地方是在信号计算方面,这块是由ATtiny通过编程处理的。

在下面的教程分享中,假定大家都对Ardiuno和如何编程有一些了解,如果没有,可以先学习一下Arduino基础教程。

在开始之前还需要说明一个安全问题:

电蚊拍使用高电压(按下按钮时网状物上有几百伏的电压),即使电流很低,在连接电池时也要注意不要接触它或其内部电路。

注意不要让小孩子玩这个。

材料

对于这个“终极”电蚊拍,我们需要:

  • 一个电蚊拍
  • Digispark pro (带有ATtiny,在网上很容易找到)
  • DFPlayer (DFRobot购买)
  • 电阻器:1Ω、1kΩ
  • 8Ω 扬声器
  • SD卡(一个小容量的卡即可,用来存储一些声音文件)
  • 锂离子充电电池:废旧电池
  • 电池充电器
  • 电位器(我用的是1MΩ的,这不是很重要,但高数值会限制通过电位器的电流消耗)
  • 带有TM1637的四位数LED显示屏(确保是4位数显示屏+TM1637,而不是只有4位数显示屏)
  • 电容:470μF
  • 开/关拨动开关
  • 按钮
  • 电线(重复使用旧的电话线或网线)

工具部分,我们需要用到电烙铁、一把热胶枪和一台3D打印机(一些创意来修改拍子的手柄......)

第1步:如何升级我们的电蚊拍?

如果你不关心它的工作方式,只是想要做“终极”电蚊拍,那可以跳过这个步骤。

解释电蚊拍如何工作的资源可以在互联网上找到。 https://www.homemade-circuits.com/mosquito-swatter-bat-circuit/

它是振荡电路和一个将电压提升到数百伏的电路,再加上连接到拍子的金属网组成的。

首先遇到的问题是,找不到什么东西可以在这里挂上ATtiny(由于ATtiny的5伏限制,高压侧不能直接使用)。

为了解决这个问题,第二个想法是测量电流消耗。

当金属网上发生电弧,蚊子被电杀时,一定有一些能量消耗,应该可以通过ATtiny读取。

测量这个消耗的最好方法是测一下电流消耗,而测量电流的最简单方法是测量电阻上的电压,这一点ATtiny可以做到。

因此,计数蚊子的方法是在电池和电蚊拍电路之间插入一个小电阻,并监测这个电阻上的电压。

除此之外,我们使用已经制作好的电子模块(每个功能都有一个:声音、显示、充电器等),所以综合来说,这是一个相对比较简单的电子项目了。

第2步:准备电路


主要组件有:

  • ATtiny (Digispark pro)
  • DFPlayer
  • USB充电器和电池
  • 显示器
  • 重置按钮
  • 开/关开关
  • 用于调节音量的电位器
  • 两个电阻和一个电容

我们最好先把它们摆放好,好确保它们能放进在手柄里,Digispark和DFPlayer可以靠近一点,根据它们在最终模块中的位置,给其他组件留出合适的电线长度(即USB充电器上有一个USB端口,需要可以用来充电)。

第3步:拆开电蚊拍

卸下电池,拆开拍子(应该只有几个螺丝)。

可以先看一下大概有多少空间留给我们来放附加的组件。

也可以顺便看看你的拍子是否与这个教程分享中使用的拍子一样。

需要注意的主要区别是拍子的推钮的 "位置"。在图中,它位于电池的 + 号和拍子的电路之间。如果是这样的话,就可以了(见照片)。

在某些拍子上,这个按钮位于地线 - 和电路之间。在这种情况下,下面修改和代码将不起作用。将会需要在硬件和软件方面进行一些调整。

第4步:魔改电蚊拍

在这个步骤中,我们:

  • 在为两个AAA电池设计的隔间里给电池腾出一些空间(并重新使用充电电池的电池接头)。

第5步:构建电路并焊接元件

根据所有元件的最终位置预先进行布局,估计一下各种线的长度,开始焊接。

在上一步中,为了清楚起见,没有画出地线和VCC(5V)线,但所有的地线都需要相互连接,所有的VCC都需要相互连接。

对于VCC,Digispark有3个标有5V的引脚,它们是连在一起的,可以用来重新分配给其他元件。不要使用Digispark的VIN(VIN是一个需要高于6V的电压输入,我们不使用它,而是使用电池充电器的5V输出)。

建议从Digispark开始:

  • 将Digispark焊接到DFPlayer上
  • 将Digispark焊接到显示屏、按钮和电位器上
  • 使用热缩管避免接触和短路(比如在Digispark和DFPlayer之间的电阻)

然后,继续进行电蚊拍电路、电池充电器、开关的连接:

  • 电池 - 到充电器 电池 - 输入
  • 电池 + 到充电器 电池 + 输入
  • 电蚊拍电路上的1欧姆电阻 +
  • 电蚊拍电路的 + - 上的电容器,注意电容器的极性!
  • 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 和播放的音频之间匹配上。

音频可以到文末打包下载。







请到「今天看啥」查看全文