愛伊米

手把手帶你魔改一個帶擊殺音效的電蚊拍

夏天來了,又到了蚊子嗡嗡嗡的季節。在這一點上,國內和海外並沒有區別。

今天我們介紹的專案,就是魔改升級我們的武器——電蚊拍,讓我們與蚊子的鬥爭更加有趣一些!

升級後的電蚊拍功能包括:

新增電子裝置來檢測殺傷力

增加一個4位數的計數器,統計“擊殺數”

支援USB充電

增加“擊殺聲音”以獲得更好的體驗

window。DATA。videoArr。push({“title”:“手把手帶你魔改一個帶擊殺音效的電蚊拍”,“vid”:“i334529gurw”,“img”:“http://puui。qpic。cn/vpic_cover/i334529gurw/i334529gurw_hz。jpg/640”,“desc”:“”})

創作思路

作者的想法是,聲音功能可以用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步:如何升級我們的電蚊拍?

如果你不關心它的工作方式,只是想要做“終極”電蚊拍,那可以跳過這個步驟。

解釋電蚊拍如何工作的資源可以在網際網路上找到。

手把手帶你魔改一個帶擊殺音效的電蚊拍

它是振盪電路和一個將電壓提升到數百伏的電路,再加上連線到拍子的金屬網組成的。

首先遇到的問題是,找不到什麼東西可以在這裡掛上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將根據 “軌道編號 ”播放聲音。

根據觀察,發現檔案不是根據它們的名字來排序的,而是根據它們在卡上的號來排序的(在Linux上可以用 檢視)。

如果你從一張新成型的卡開始,軌道號/inode的順序將是聲音檔案的複製順序(即複製在卡上的第一個檔案就是1號)。

在下面的程式碼中,檔案/音軌的選擇是透過完成的。

你可以自行修改這部分,讓動作和播放的音訊之間匹配上。

音訊可以到文末打包下載。

第8步:列印一個新的握柄

手把手帶你魔改一個帶擊殺音效的電蚊拍

如果電蚊拍和上面的一樣,可以直接列印這個的手柄設計。

如果不一樣,可能需要自己設計一個。

不過,有些拍子的手柄很大,然後裡面幾乎什麼都沒有,也可以直接裝上附加電路。記得我們仍然需要為顯示屏和揚聲器找一個位置。

3D列印的檔案可以到文末打包下載。

第9步:組裝起來

手把手帶你魔改一個帶擊殺音效的電蚊拍

手把手帶你魔改一個帶擊殺音效的電蚊拍

手把手帶你魔改一個帶擊殺音效的電蚊拍

手把手帶你魔改一個帶擊殺音效的電蚊拍

這邊用熱膠槍將零件固定在它們的最終位置。

揚聲器也是直接粘在拍子上的。

第10步:蚊子在哪裡?

再次重申,如果你不關心它的工作方式,只是想得到你的“終極”電蚊拍的玩家,你可以跳過這一步……或者之後再來看。

一旦我們把所有的元件都焊接在一起,如果在ATtiny上載入一個簡單的程式,只做一個模擬讀取(A12),然後看一下原始資料:

手把手帶你魔改一個帶擊殺音效的電蚊拍

原始資料看起來非常嘈雜,我們無法知道在圖上什麼地方/什麼時候有蚊子(或其他東西,我沒有等蚊子打我的球拍來除錯程式碼 :) 它自己撞到了電蚊拍的網眼上(見圖1)。

平均數是清理部分噪音的好方法,我的想法是將最後的平均數與 “長期 ”平均數進行比較,但結果也有點讓人失望(見圖2)。

手把手帶你魔改一個帶擊殺音效的電蚊拍

然後學習一下別人是怎麼做的:

這看起來正是我們尋找的,計算訊號的標準差應該能讓我們檢測到蚊子被擊殺了(見上面連結中的“Animation of change point detection via sliding window”部分)。

應用於我們的設定,會得到以下結果(圖3)。

手把手帶你魔改一個帶擊殺音效的電蚊拍

在程式中,我們計算了標準差的平方,我們可以看到,當按下或釋放按鈕時,它達到非常高的值(這是預期的,訊號從0V到接近5V),但一旦這些階段被排除,我們就可以監測這個標準差,並假設如果它達到一些高值,我們在電路中有一個干擾,這一定就是一個蚊子被“擊殺”了(圖4)!

手把手帶你魔改一個帶擊殺音效的電蚊拍

現在我們知道了如何判斷完成了“一次擊殺”,剩下的就簡單了(播放聲音,增加分數)。

為了更準確,我們又增加了一些東西:

一個470uF的電容器(它本身提供了一些更多的噪音過濾,並在需要大電流時作為“充電寶”);

我們有一個兩級平均機制(在程式碼中可以看到,我們在原始狀態下測量了5次A12腳的電壓,取其平均值,然後將這個平均值儲存在標準差計算的滑動視窗中)。

第11步:在Digispark Pro上載入程式

這個比較簡單,可以使用Arduino IDE對ATtiny進行程式設計。

Wiki:

對程式碼做一些解釋:

在函式中,我們初始化DFPlayer所需的序列通訊,讀取電位計值以調整音量(在設定時只讀取一次,這意味著拍子需要關閉/開啟電源來考慮到音量調整)。

對於計數器的重置,如果你想把分數重置為零,你需要按下重置按鈕,開啟拍子的電源,等待顯示屏顯示 “0”。

然後它就會讀取儲存在EEPROM中的分數。

它設定顯示屏的亮度(否則它將保持關閉)。

在函式中,我們基本上是處理拍子功率的平均值和標準差的平方,它告訴我們是否有殺傷力

相關程式碼可以在文末下載。

第12步:更新Digispark micronucleus(可選)

Digispark micronucleus是負責 “啟動 ”Digispark的一段程式碼。

它檢查我們是否上傳了一個新的程式,如果沒有就啟動已經載入的程式。

問題是它需要等待6秒鐘,這個時間對於我們想要啟動我們的武器來拍蚊子,就會顯得比較長了。

不過,micronucleus有一些變種有不同的檢查機制。如果你按照這些說明更新micronucleus(使用 “推薦 ”配置),拍子將在一兩秒後準備好。

參考:

在更新micronucleus韌體後,重新載入你的程式即可。

第13步:故障排除

希望你不需要讀這個,

一些提示,以防萬一……

1、工作不多……檢查電線和焊料;

2、如果電蚊拍自己重新啟動(你聽到了啟動的聲音,但沒有開/關),請給電池充電;

3、大約30秒後,電蚊拍就會自動關閉。

一些USB充電器電路有一個自動待機模式(我的就是這種情況,使用的是晶片IP5306),如果消耗的電流低於一定量(IP5306為45mA),就會進入待機模式。

第一個可能的解決方法是定期按下拍子按鈕……比如每20秒。電路板(含IP5306)有一個 “鑰匙 ”功能,可以開啟或關閉電源,在電路板上標有 “K”。上面建議的程式碼中的功能將保持電源正常工作。

4、如果拍子的檢測能力真的很差或經常檢測錯誤。。。那麼可能要做一些程式碼調整。

如果你想用USB埠來顯示一些變數,你必須修改程式碼,以便使用DigiCDC庫並刪除SoftSerial(用於4位數顯示)。但更重要的是,當這樣做時,我們將從USB口而不是電池充電器口獲得電源,這就有很大的區別……VCC的質量對我們計算的平均數和標準差有很大影響……

換句話說,在USB上連線時進行的任何調整,在用電池執行時可能會失效。

獲得一些小資訊的方法是使用顯示器本身(即在按下復位按鈕時顯示最後的標準差)。

知道了這些,你就可以試著調整程式碼中的以下數值,這些數值對我們的檢測有很大的影響。

單次讀取的樣本數:

平均滑動視窗的大小:

標準差的閾值:

第14步:繼續改進電蚊拍,分享你的改進方法

如果你找到了更加簡單的改造電蚊拍的方法或者是設計,歡迎分享出來!

作者:lmu34