最近受到委託製作一個可以 真的顯示"STOP"的時間停止器
聽起來很有趣,實作上也不會太困難。
馬上就接了下來,以下就是過程的紀錄。
預計是先用3D印表機印一個外殼,然後從中設計電路。
剛好對方找到了Thingiverse有"時間暫停器"的模型,先載下來印印看
架構覺得OK在繼續
馬上列印看看
成品覺得還算不錯 可以用
之後拿這個模型做參考再修改,應該可以順利完成
先著手做電路~
-12/7
前陣子忙於比一個賽,所以這個專案暫停歇會兒,比完趕緊弄。
買了一個OLED,貨到後就趕緊測試
先用Arduino測試撰寫畫面,後續再燒進去Tiny85裡面
找了幾個含式庫,像是"SSD1306Arscii.h"或是u8g2這些,最後選u8g2
原本在想字型大小的問題,如果轉成bitmap要滿版的128*64會占爆記憶體空間
所以一直想辦法讓字型可以滿版但是又不會太花空間的寫法
意外發現u8g2就很好用了,而且還有多種字型,就趕快下載來用(字型Wiki)
另外可以參考"u8glib常用函数"、""筆記 Arduino 使用U8g2 印出點陣圖
我用的是"logisoso"
顯示STOP的樣子是這樣,大小是60
顯示的程式碼如下
===============================
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); //清除畫面
u8g2.setFont(u8g2_font_logisoso50_tf); //設置字型
u8g2.drawStr(0,60,"STOP"); //顯示文字(x,t,"內容")
u8g2.sendBuffer(); //送出畫面
}
================================
就是這麼簡單 幾行就可以動了,Arudino的腳位SCL接A4、SDA接A5
後來還要顯示START,因為有五個字,所以字型要縮小一點(38)
u8g2.setFont(u8g2_font_logisoso38_tf); //設置字型
u8g2.drawStr(0,60,"START"); //顯示文字(x,t,"內容")
暫時告一段落,預計再加入按鈕電路。
-12/9
中午睡醒 趕緊趕工來進行下一步的規劃
因為停止器要按下按鈕後才會顯示STOP
我決定用有段開關做,還可以防止彈跳的問題
邏輯上我加入了F旗標進行判斷,才不會長久保持一個狀態的時候
程式邏輯上一直送同樣的畫面訊號,會增加耗電問題
最後程式碼長這樣子
裡面偷偷加入了彩蛋,不知道收到東西開機會不會發現XD
---休息會兒---
-12/09
買了一些主要零件花了73元
-12/12
決定要刻個電路來捨去焊接線路的麻煩
結果發現,學校的雕刻機不吃我的檔案
好吧認了 手焊接!!
-12/13
我買的是SMD的ATTINY,所以要加轉接版,高中的時候買的最後一片轉接版在這裡用上了
定位完之後就可以開始拉線了
正面用2032的水銀電池供電
花了1個小時終於接完了
但是發現...正負弄反..
所以 小重拉,好險沒事了
燒錄ATtiny的方法可以參考"【單晶片】ATtiny85燒錄器"
原本燒都燒不進去 一直寫"Could Not Find USBtiny Device (0x2341/0x49)"
想說可能杜邦線太亂重接一下,還是不行。
上網找一下才發現這篇文章寫著:
"Make sure that Programmer option is set to Arduino as ISP NOT as ArduinoISP. Also verify if the port is correct."
很好 原來我一直選錯,難怪沒辦法。
選正確之後我上傳大家第一個都會碰的Blink閃爍程式,結果發現問題還是很多。
到最後線全部再重接整理,終於會閃了。
於是我趕緊上傳OLED的範例程式"哈囉世界"
終於有畫面了,超級感動...終於知道為什麼大家會說這是一切的開始...
另外腳位定義是選擇
"U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=*/ 2, /* data=*/ 0, /* reset=*/ U8X8_PIN_NONE);"
然後函式庫變成是u8x8而不是u8g2不知道為什麼,所以語法全部改成u8x8
-12/25
最近忙著做其他的事情,到今天才有空繼續做
後來決定回來用ESP8266,雖然有點大材小用,但是整體對我而言開發速度比較快一點
下次就開始著手外觀機構了
-1/14
買了鋰電池跟充電板
花費了2百多
原本想要用水銀電池當電力來源,但是後來發現供給不足
所以要用鋰離子電池,但是礙於尺寸,最後選擇鋰聚合物300mah的來供電
再加上一塊充電版,可以使用USB進行充電 聽起來比較厲害
充電式時間暫停器!
這兩個禮拜自行設計了時鐘本體 還有設計安置OLED的表面
簡略記錄一下
本體:
OLED的部分:
重印了好多次,終於尺寸合了
結果悲劇了,在測試螢幕尺寸的時候,不小心把螢幕的兩角都弄壞了。
於是乎螢幕就不顯示了,只能夠再買一塊了....
-1/15
印完了內蓋 也重新印了外面本體
試一下都還蠻合的
剩下就是想辦法噴漆 然後固定電路等等的
後面還有外蓋要處理
小記:稍微有想要拉個電路監測一下電池電壓,如果電池沒電的時候會顯示在螢幕上面。
可以提醒該充電了,避免電池過放或者是不知道狀況而無法使用。
2/22 總計
印了凸起的特徵 尺寸還算吻合
上蓋噴漆
主體用紅色的漆
零件組裝上去
完成所有組裝~
於是影片出來啦
沒有留言:
張貼留言