2018年12月8日 星期六

[專案紀錄]時間停止器專案-ATtiny85+OLED

-11/20

最近受到委託製作一個可以 真的顯示"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."
Setting programmer to Arduino as ISP in Arduino Studio
很好 原來我一直選錯,難怪沒辦法。
選正確之後我上傳大家第一個都會碰的Blink閃爍程式,結果發現問題還是很多。
到最後線全部再重接整理,終於會閃了。
於是我趕緊上傳OLED的範例程式"哈囉世界"

終於有畫面了,超級感動...終於知道為什麼大家會說這是一切的開始...



另外腳位定義是選擇
"U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=*/ 2, /* data=*/ 0, /* reset=*/ U8X8_PIN_NONE);"

然後函式庫變成是u8x8而不是u8g2不知道為什麼,所以語法全部改成u8x8

-12/25

最近忙著做其他的事情,到今天才有空繼續做
後來決定回來用ESP8266,雖然有點大材小用,但是整體對我而言開發速度比較快一點



OK 進度追回來了一點
下次就開始著手外觀機構了

-1/14


買了鋰電池跟充電板
花費了2百多
原本想要用水銀電池當電力來源,但是後來發現供給不足
所以要用鋰離子電池,但是礙於尺寸,最後選擇鋰聚合物300mah的來供電
再加上一塊充電版,可以使用USB進行充電 聽起來比較厲害

充電式時間暫停器!


這兩個禮拜自行設計了時鐘本體 還有設計安置OLED的表面
簡略記錄一下

本體:



OLED的部分:

重印了好多次,終於尺寸合了

結果悲劇了,在測試螢幕尺寸的時候,不小心把螢幕的兩角都弄壞了。
於是乎螢幕就不顯示了,只能夠再買一塊了....

-1/15

印完了內蓋 也重新印了外面本體
試一下都還蠻合的
剩下就是想辦法噴漆 然後固定電路等等的
後面還有外蓋要處理


小記:稍微有想要拉個電路監測一下電池電壓,如果電池沒電的時候會顯示在螢幕上面。
可以提醒該充電了,避免電池過放或者是不知道狀況而無法使用。

2/22 總計


印了凸起的特徵 尺寸還算吻合


整顆打磨

上蓋噴漆

主體用紅色的漆

零件組裝上去






完成所有組裝~

於是影片出來啦






沒有留言:

張貼留言