第1步:準備零件和工具
以下是零件和這個項目你需要的工具。有些是可選的,它們的使用將在整個教學中得到解釋。
電子部分:
ATTiny85
圓盤振動電機(或任何類型的振動電機,尋找低功率電機)
CR2032電池(或任何類型的紐扣電池)
1N4001二極管(或任何其他通用二極管)
PN2222A晶體管(或任何類型的通用NPN晶體管)
47歐姆電阻(1/4瓦)
100歐姆電阻器(可選)
其他部件:
紐扣電池座
面包板
Perfboard
連接線
滑動開關
8針芯片插座(可選但推薦)
工具:
使用Arduino的ATTiny85程序員(或者其他程序員,如果你有的話)
Multitester
剝線器
烙鐵
S電線
雙面膠帶
步驟2:在面包板上構建電路
按照上圖和上圖顯示電路。請特別注意方向,否則電路可能無法正常工作。請務必查看上圖中的注釋,了解有關具體細節的更多信息。
完成構建后,您會注意到什么都不會發生。這是因為ATTiny85尚未編程。我們將在下一步做到這一點。
電路說明:
ATTiny85在引腳5上向NPN晶體管(Q1)發出一個信號,作為產生電流的開關流過電機。
電阻器(R1)降低電機電壓,使振動強度降低。
電阻器(R2)降低晶體管基極的電壓。
二極管(D1)作為反激二極管,可以保護電路免受電壓從電機切斷的電壓尖峰的影響。
提示這一步:
我個人更喜歡切斷電線,使它們在面包板上平放。如果出現任何問題,這會使電路板看起來更清晰,更容易進行可視化調試。
注意:
請注意我建造的面包板的圖片可能會注意到滑動開關丟失了。我拍照時忘了添加它。這是可以的,因為電路在沒有它的情況下仍然可以工作。
步驟3:使用Arduino編程ATTiny85
在電路工作之前,我們需要使用程序員對ATTIny85進行編程。
如果你還沒有程序員,你可以通過以下方法之一輕松制作一個instructables:如果你想快速擁有一個程序員,一個是面包板版本。另一個是arduino盾牌的形式,它將來會更加永久使用。這兩個中的任何一個都可以工作。
復制下面的代碼并使用程序員上傳:
#include
#include
#include
#include
const byte motorPin = 0;
volatile unsigned long wdCounter = 0; // Volatile tells compiler to reload each time instead of optimizing
unsigned long motorDuration = 500000;
unsigned long waitDuration = 0;
unsigned long wdCounterTarget = 75;
unsigned long timeDelayStarted = 0;
bool isInDelay = false;
void setup () {
pinMode ( motorPin, OUTPUT );
ADCSRA = 0; // Turn off the ADC
startMotorSequence(); // Run the motor once on startup
sleepNow();
}
void loop () {
if ( wdCounter == wdCounterTarget ) { // Check if counter has reached target.
wdCounter = 0;
timeDelayStarted = micros();
isInDelay = true; // Now in delay mode
}
// Continue to loop until enough time has passed to reach waitDuration
if ( isInDelay
&& micros() - timeDelayStarted 》= waitDuration) {
startMotorSequence(); // Run the motor sequence
wdCounter = 0;
isInDelay = false; // End delay mode
}
if ( !isInDelay ) {
sleepNow();
}
}
void startMotorSequence() {
digitalWrite( motorPin, HIGH );
_delay_us(motorDuration); // Blocking function delay
digitalWrite ( motorPin, LOW );
}
void sleepNow () {
set_sleep_mode ( SLEEP_MODE_PWR_DOWN ); // set sleep mode to Power Down. The most energy efficient setting.
power_all_disable (); // Turn power off to TIMER 1, TIMER 2, and Serial Interface
noInterrupts (); // Turn off interrupts as a precaution. Timed sequence follows
resetWatchDog (); // Reset watchdog, making sure every flag is properly set
sleep_enable (); // Allows the system to be commanded to sleep
interrupts (); // Turn on interrupts. Guarantees next instruction is executed
sleep_cpu (); // Goodnight, ATTiny85
sleep_disable (); // Returns here after Watchdog ISR fires.
power_all_enable (); // Turn on power to TIMER1, TIMER 2, and Serial Interface
}
void resetWatchDog () {
MCUSR = 0; // Clear various “reset” flags
WDTCR = bit ( WDCE ) | bit ( WDE ) | bit ( WDIF ); // Allow changes, disable reset, clear existing interrupt
WDTCR = bit ( WDIE ) | 1 《《 WDP3 | 0 《《 WDP2 | 0 《《 WDP1 | 0 《《 WDP0; // 4s timeout
wdt_reset (); // Reset the watchdog using the parameters
}
ISR ( WDT_vect ) {
wdt_disable(); // Disable the watchdog timer
wdCounter++; // Increase the watchdog firing counter.
}
代碼成功升級后,重新插入ATTiny85芯片面包板。振動電機應開始振動約0.5秒。然后它會倒計時大約5分鐘,然后再次振動。
代碼說明:
為降低功耗,代碼利用ATTiny85的看門狗定時器進行倒計時,直到下次需要振動。請注意,這不是看門狗定時器的用途,但許多人已經使用它來實現低功耗(但不準確)的延遲。如果您不知道它是什么,請在此處獲取更多信息。
電路需要每5分鐘或300秒振動一次。因此看門狗使用4秒間隔并觸發75次(4 * 75 = 300)。請注意,如果要更改延遲,則還需要更改計算。
倒計時結束時,代碼的其他部分很簡單。觸發電機0.5秒,然后通過觸發看門狗重新開始倒計時。
此步驟的提示:
如果存在上傳錯誤,請務必仔細檢查程序員的連接。要幫助進行故障排除,只需從Arduino中復制錯誤代碼并搜索答案。
如果有任何意外行為,請確保您下載的代碼沒有任何更改。
如果仍有問題,請考慮上傳一個簡單的閃爍電路,以測試您的程序員是否按預期工作。
如果電機沒有振動或連續振動,請務必仔細檢查上一步的連接。您也可以嘗試切斷電源并使用滑動開關將其重新打開以重新啟動程序。
步驟4:獲取監視案例
找一個能容納你電路的表殼。您需要很多空間,因為除了電線之外,您將在面包板中安裝所有組件。如果您愿意,也可以3D打印自己的盒子。
在我的最后,我使用了一個里面有很多空間的破碎兒童手表。我刪除了所有現有組件,挖空了它,并試圖估計空間是否足以讓所有東西都適合它。
此步驟的提示:
為了幫助估算您的電路是否適合您的情況,請嘗試構建下一步中找到的電路,而無需焊接組件然后將電路安裝在里面。
至少,您需要的尺寸不會小于您的CR2032電池。
步驟5:準備Perfboard布局
使用標尺測量所選案例中可用空間的尺寸。根據這些測量結果切斷一塊穿孔板。
上圖中的圖表/布局與我們使用面包板制作的電路相同,只是更緊湊。它有10個水平孔和6個垂直孔。這是我能提出的這個電路的最小版本。如果此布局不符合您選擇的案例,那么您可能需要自行更改布局,或找到更大的案例。
此步驟的提示:
在開始焊接之前,如圖所示彎曲組件的支腳,使其保持在原位。
如果電路板緊密貼合,可以選擇用砂紙打磨電路板的兩側。
步驟6:焊接組件放置
現在是時候開始焊接了。如果您按照電路圖,這應該是直截了當的。
如果您不知道如何焊接,這是一個可以解決的問題。
注意:
顯示上述電路圖的第一張圖片使用自上而下的視圖。這意味著,如果您要從下面焊接組件,則方向將翻轉,如第二張圖像所示。很容易混淆!
此步驟的提示:
在切斷腿之前先將組件焊接到位。
確保用萬用表檢查連接的連續性。
如果您不想使用過多的焊料,您可以使用最近切割成直線的組件的支腿,如上圖所示。
步驟7:連接電池和開關
為了能夠將電池與我們的電路連接,我們首先需要使用電池座。我們可以使用我們在面包板上制作電路時使用的電池座,但這可能不適合您選擇的情況。
一種解決方案是將電線末端連接到壓接線端子,如圖所示在上面的第一張圖片中。制作其中兩個,然后讓它們與電池的正極和負極接觸,并用電工膠帶包好。
將電線焊接到電路和滑動開關上。務必通過觸發滑動開關測試電路。就像上次一樣,振動電機應運行0.5秒,表示您的連接正確且正常工作。
此步驟的提示:
使用萬用表檢查電線末端是否從電池讀取電壓。
請務必仔細檢查您的聯系人是否牢固到位。
注意:
壓接線端子有助于使接觸點更大并且更容易固定到位。
如果您沒有壓接電線端子,只需剝去電線末端并使用它,因為接觸仍然有效。
您可能已經注意到滑動開關位于電池的負極線上。無論是積極的還是消極的,這仍然有效。我做了后者,因為它放在我自己的表殼里面是有意義的。
步驟8:將電路放在表殼中并蓋上蓋子
測試你構建的電路,看看是否一切正常。然后小心地將電路放置在您選擇的表殼上,用雙面膠帶將組件固定到位。
將其蓋住,加上表帶,戴上表格,就完成了!
此步驟的提示:
在添加電路之前,不要忘記為表殼涂漆。我選擇了黑色,因為粉紅色并不是我的風格。
使用厚而柔軟的膠帶,特別是將粘性電機固定到位。我發現它能夠承受振動并保持電機就位。
步驟9:最終注釋
以下是有關該項目的最終說明。如果你想知道我為什么在這個項目中做出某些決定,那就很重要了。它還包括有關如何根據自己的喜好修改和改進電路的說明:
代碼經過優化,可以盡可能少地使用電源。有關我如何在這里做的更多信息。
我目前正在佩戴的手表已經運行了2周(在2019-03-26,我會隨時更新此聲明)。我希望手表可以使用至少3個月。
R1 100歐姆電阻用于降低通過振動電機的電流。這使電機變弱但節省電池壽命。如果您覺得在所選外殼內部振動太弱,可以取下此電阻并用電線更換。
我在其中一個步驟中提到振動之間的延遲是“大約”5分鐘。這個項目依賴于ATTiny85的內部時鐘進行定時,這不是很準確(相信我,我測試過它)。預計每5分鐘偏移100ms至1s,但這取決于房間的當前溫度和電池的當前電壓。盡管如此,不要為此煩惱。我發現準確性并不重要。請記住,這個項目告訴我們時間的流逝,而不是當前的確切時間。如果它仍然困擾你,可以考慮在電路中添加一個外部晶體。
通過修改代碼可以改變5分鐘的等待時間。只有了解代碼并且知道自己在做什么,才能執行此操作。對于那些有足夠信心的人,請查看變量 waitDuration 和 wdCounterTarget ,以及第71行,其中設置了看門狗超時。
請務必查看Github存儲庫以獲取此代碼的最新版本,以防萬一有更新或改進。
最后,查看并關注項目頁面。我為這個項目計劃了很多改進,例如使用SMD元件使手表更小,并添加外部晶體以獲得更準確的時序。所以要留意這一點。
-
手表
+關注
關注
1文章
140瀏覽量
24705
發布評論請先 登錄
相關推薦
評論