我們來一起看看如何用Arduino自制一個只有表針,沒有表盤的“空心時鐘”。
看起來還是挺炫酷的,再放幾張網友們參照教程做的圖欣賞一下:
第0步:材料準備
步進電機28BYJ-48和驅動板包括
用于控制步進電機的微控制器(比如Arduino nano)
2mm x 10mm自攻螺釘 * 8
潤滑脂(高粘性)
這個時鐘可以用大多數(shù)常見的200 x 200mm打印機打印,除了裝飾部分(index.stl,203 x 203mm)。
文章最后還有一個縮小小的版本(85%)。
第1步:打印零件
打印零件
有些零件需要支撐
好好去毛刺,特別是幾個非常小的齒輪(時鐘中心的蝸輪和小齒輪)
第2步:組裝蝸桿傳動系統(tǒng)
用烙鐵進行塑料焊接,對于連接gear.stl、axis.stl和worm-gear.stl相互之間是很有用的。
你也可以使用一些安全的膠水,如雙組分環(huán)氧膠。
在中央齒輪中注入一點油脂。不僅可以減少摩擦,而且可以減少齒隙。
中央齒輪的齒隙對時鐘的精確性影響很大。h-gear1.1x.stl比原來的h-gear.stl要大一點,以抑制齒隙。中央齒輪的齒隙對時鐘的精確性影響很大。從兩個候選中選擇更好的小齒輪。h-gear1.1x.stl比原來的h-gear.stl大一點。
第3步:組裝電機驅動器
如果2毫米自攻螺釘?shù)念^部比步進電機的孔小,請使用墊圈或換更大的螺釘。
第4步:嚙合分鐘旋轉器和時鐘的主體
為了避免齒輪脫落,我們可以翻轉機身一側(上圖中的綠色部分),然后把頂部的鉤子鉤住。
需要使用三顆自攻螺釘安裝分鐘蓋。
第5步:安裝時針
注意使用自攻螺絲安裝時針的時候不要擰太緊了,當你調整時鐘時,它應該是會滑動的
固定好其他部分
第6步:準備電路
連接VCC(+5V)和GND
如果你想把整個電路封閉起來放到盒子里,可以打印零件做個盒子(相關文件放在文末)。
然后用兩個2毫米的自攻螺釘來組裝起來。
第7步:程序
將代碼閃到Arduino上。把代碼上傳到Arduino IDE 上。
如果你的電機跑錯了方向,請修改代碼中的數(shù)字順序:
int port[4] = {4, 5, 6, 7};
改為:
int port[4] = {7, 6, 5, 4};
這上面的數(shù)字和Arduino Nano的針腳有關(D4-D7)。
完整代碼如下:
// Please tune the following value if the clock gains or loses. // Theoretically, standard of this value is 60000. #define MILLIS_PER_MIN 60000 // milliseconds per a minute // Motor and clock parameters // 4096 * 110 / 8 = 56320 #define STEPS_PER_ROTATION 56320 // steps for a full turn of minute rotor // wait for a single step of stepper int delaytime = 2; // ports used to control the stepper motor // if your motor rotate to the opposite direction, // change the order as {4, 5, 6, 7}; int port[4] = {4, 5, 6, 7}; // sequence of stepper motor control int seq[8][4] = { { LOW, HIGH, HIGH, LOW}, { LOW, LOW, HIGH, LOW}, { LOW, LOW, HIGH, HIGH}, { LOW, LOW, LOW, HIGH}, { HIGH, LOW, LOW, HIGH}, { HIGH, LOW, LOW, LOW}, { HIGH, HIGH, LOW, LOW}, { LOW, HIGH, LOW, LOW} }; void rotate(int step) { static int phase = 0; int i, j; int delta = (step > 0) ? 1 : 7; int dt = 20; step = (step > 0) ? step : -step; for(j = 0; j < step; j++) { phase = (phase + delta) % 8; for(i = 0; i < 4; i++) { digitalWrite(port[i], seq[phase][i]); } delay(dt); if(dt > delaytime) dt--; } // power cut for(i = 0; i < 4; i++) { digitalWrite(port[i], LOW); } } void setup() { pinMode(port[0], OUTPUT); pinMode(port[1], OUTPUT); pinMode(port[2], OUTPUT); pinMode(port[3], OUTPUT); rotate(-20); // for approach run rotate(20); // approach run without heavy load rotate(STEPS_PER_ROTATION / 60); } void loop() { static long prev_min = 0, prev_pos = 0; long min; static long pos; min = millis() / MILLIS_PER_MIN; if(prev_min == min) { return; } prev_min = min; pos = (STEPS_PER_ROTATION * min) / 60; rotate(-20); // for approach run rotate(20); // approach run without heavy load rotate(pos - prev_pos); prev_pos = pos; }
第8步:測試和調整
由于齒輪組有一定的齒隙,因此時針的位置會在左右兩邊出現(xiàn)偏差。為了解決這個問題,可以在那里插入一些柔軟的材料,比如毛氈或海綿,來提供一點摩擦。
在指針上涂上油漆可以提高能見度。顏料型涂料比染料型油墨好,后者會有毛細擴散現(xiàn)象。
第9步:調整時間
用Nano的復位按鈕把時間設置提前一分鐘
在電機旋轉時,再用復位按鈕進行精調
時針可以直接用手調整(靠摩擦)
作者: shiura
審核編輯:湯梓紅
-
微控制器
+關注
關注
48文章
7649瀏覽量
152106 -
驅動器
+關注
關注
53文章
8271瀏覽量
147058 -
步進電機
+關注
關注
151文章
3120瀏覽量
147841 -
時鐘
+關注
關注
11文章
1746瀏覽量
131799 -
Arduino
+關注
關注
188文章
6477瀏覽量
187817
原文標題:用Arduino自制一個只有表針的時鐘
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論