DIY 開源智能手錶(選螢幕篇)
最近因為各種原因想買一只智能(慧)手錶,可是由於我只喜歡方形的,所以剩下的選擇大概只有智慧手環、大號智慧手環跟 Apple Watch 可以選了。嘛,其實除了這些還有其他的啦,然而市場上就一堆很奇怪的選擇都沒一個完全對得上我想要的東西。 小米手環 8 Pro / 華為手環 8 :性價比跟功能都不錯,可是螢幕是像一般手環般長方形的不是方形Venu Sq 2:功能超棒,但是這個配色的品味只能說很獨特(?Fitbit (Google 旗下)Versa 4:這外形和黑邊遠看還以為是玩具Apple Watch SE:功能和外形都很棒,就是只支持 iOS 跟需要每天一充 說實話我覺得最好看的設計一定是屬於 Sony 的 Smartwatch 3 了。如果把這個設計換上最新的 AMOLED 螢幕和把那個用久了會黏手的 rubber wrist band 換成其他材質(如 silicon / TPU)就更完美了。 所以作為一個 DIY 愛好者,很自然的我會去想:假設我要自己做一只智能手錶的話,我會怎樣設計呢?首先,我想到的大概是以下的一些技術規格: 基於 ESP32 C3 的方案(在寫本文的時候最新支援 BLE + WiFi 的 MCU)AMOLED 螢幕 + 環境光傳感器(自動亮度調整)內置基本的傳感器(光學心跳 + 血氧、accelerometer(步數)、gyroscope(移動距離),如果有空位的話可以再塞個地磁 sensor 做指南針之類的) 然而有一些我也很想做的部分,是現在很多便宜的智能手錶沒有的 無線充電(對,現在很多大號手環還是在用磁石彈針來充電)Cloud First 資料傳輸(就是以 WiFi 為先,資料先到伺服器再同步到其他手機和裝置,有點像 ArozOS 的設計邏輯)開源、可由使用者自行編程(基於 ESP32 Arduino 內核 + LVGL?) 螢幕選擇 要做到上面的東西其實不難,最難的部分應該說是螢幕。螢幕這東西不像 電路板 可以隨便畫一畫送出去就能做,而是需要很大量的定制才會有這樣的產品。所以在設計這只手錶的電路板之前,就要先決定好手錶的外殼大小,而外殼大小就是取決於螢幕大小。 我覺得我也不是第一個遇到這樣困難的開發者。例如說著名的 Pebble 智能手錶之所以是長這樣是完全因為生產它的公司被 Sharp 生產的 Memory LCD display (1.33 inch)所限制,所以只能夠圍繞著這個當時唯一一片 high refresh rate 又省電的黑白螢幕來開發整個產品。 初代 Pebble 智能手錶 SHARP 1.33 inch Memory LCD display 雖然說現在很多智能手錶的出現而讓市場上多了很多 1.3 - 1.9 寸的螢幕,但是這又產生出另一堆問題: 便宜的智能手錶很多時候都會使用 TFT (IPS)螢幕大部分現有的 AMOLED 螢幕都是圓的很多做螢幕的廠商都只做螢幕、做電容觸控層的都只做觸控層、要找到非現有產品在用的螢幕總成很困難 單單是後兩個問題就把我能選擇的螢幕大小限制住了。把圓的 AMOLED 跟沒有觸控的去除掉之後,剩下的就只有 1.69 inch ,在開源 smartwatch project 很常見到的 waveshare 模組以外就差不多沒其他選擇了。 不過不得不說,這 1.69 雖然在黑色背景的畫面下看上去還不錯,但是一但亮起來你就會發現它黑邊粗得要死,還要上下闊度不同!(噴血 AMOLED 螢幕最佳選 然後就到這個,這是我在某中國的螢幕供應商那邊看到這片要價快 6 美元的 1.78 寸 AMOLED 螢幕,368 * 448 pixel https://www.dwo.net.cn/pd.jsp?id=11921 這個數字是不是有點眼熟,沒錯,這就是 Apple Watch SE 44mm 在用的那一片螢幕( 上下黑邊總於是一樣的了 只是說這片螢幕要用 ESP32 驅動會有點小問題:這東西只支援 SPI、QSPI 跟 MIPI DSI。MIPI DSI 先不用說了(這東西要用 arm 處理器才推得動),剩下的只有 SPI 跟 QSPI 能用。SPI 的問題在於即使是 ESP32 用 SPI half_speed (最高 80Mhz,但是考慮到 FreeRTOS 後面還有其他東西要跑,先把一半的 CPU cycle 預留給其他 vTasks 好了)速度來驅動它,你還是會看到動畫像 ppt 一樣(我猜的),但是我把計算資料塞給 chatGPT 後它也告訴我大概只能跑到 15.16 FPS,所以應該是肉眼可見的卡(? 這樣我就剩下 QSPI 可以選擇了。QSPI 大概就是拿四個針腳來推資料,理論上應該會快上不少。ChatGPT 說大概能推到 60fps,但是我先保守估計抓個 30…
透過 JLC PCBA 特殊零件的方法 – Consign Parts
最近我在開發一個全自動 USB TYPE C 的回流焊加熱板,需要用到一顆特殊的 PD trigger IC - IP2721 (TSSOP-16),雖然它是存在於 JLC Library 裡面,可是因為全球性供貨問題而導致沒存貨。 Order Parts - 要求訂購零件 JLC 提供一個功能叫 Order Parts,但是它並不是訂購然後附在 PCB 盒子裡給你,而是只限於用在 PCBA 上的。這個就比較簡單,當你在 PCBA 下單的時候看到需要的零件沒貨,就可以先取消訂單,然後到 Parts Order 頁面下單你需要的零件 但是由於這顆 IC 實在太難找,所以在 Order Part 所有 Supplier 都沒有的情況下,我要求了一個新的 part request。 Part Request 的流程大概這樣: 填寫你要求的零件 Mft Part Number ( 原廠零件編號 ,例:IP2721)跟 package (封裝規格,例:TSSOP-16)它會預估一個金額給你(例:0.5590 / pcs),(這個金額是預估的,如果報價不準我猜他們應該會自行吸收或是要你補差價?)並以這個金額付款訂購它會進入一個叫 Quotation 的流程,一般來說這會卡個 2 - 3 天然後如果成功 quotation 的話應該很快就會出現在你的個人 part list 了。 然而由於這顆 IC 實在到處都沒貨,所以最後還是收到了 JLC 的退款。。。 那問題就來了: 如果連他們也沒辦法 source 到這顆 IC,到底還有甚麼辦法可以買到這顆東西呢? 不說不知道,還真的有。 JLC 還備有最後一個 fallback 用的功能,就是 Consign parts。簡單來說就是你可以透過第三方郵寄材料到他們的 SMD 倉庫,然後再由他們手動加入到你的 part list。 做法也是很簡單,首先到 Consigned Part List 裡找到你要的零件 Mft 號碼跟 package,然後點 Add to Consignment 然後只要根據他提供的地址把零件送過去就可以了。說起來很簡單,但是最困難的部分還沒出現:就是採購和運輸。 在選擇好之後會顯示個人化的收貨地址,由於含個人資料所以這裡我是抓 JLC 網站的範例圖 你看,PCBA 這東西當然是不可能靠人手來做而是使用 PnP 機器來做。因此例如散裝、袋裝之類的零件,他們是沒辦法用的。對於這個,他們的客服跟我說如果送過去的包裝不對也能貼,但是會每顆收取 0.14USD 的手工貼片服務費,以通俗的說話來講就是「你他媽的最好不要送錯喔」 他們接收而免手續費的零件包裝種類只有兩種:1. 編帶 (一條 (不能是散裝多條用膠帶黏起來)或 一整卷編帶 )2. 托盤 那了解這個之後就可以訂零件了。由於 JLC 只接收中國大陸內的物流,所以這個時候就需要聯系華強北的專家來處理了(還好平常進口電子零件的時候收集的店家名片沒扔掉)。簡單來說就是提供你要的零件 Mft 號碼、 package 、數量,跟指定一定要單一條編帶 + 防靜電袋 + 寫上 Mft No. 發貨即可。雖然說他們建議使用 SF 物流,但是基本上只要能送到即可。 大概 3 - 4 天之後就出現在 Consignment part list 裡面 最後只要在 PCBA 的時候選擇從 My Parts 裡面抓這顆零件就可以了~ 我的板子終於要生產了啦 備注 備用件 有時候部分零件 package size 是屬於容易貼錯的大小,在你第一次 PCBA preview 的時候它會出現建議數量 > 實際所需數量的情況(例如說這裡我只做 50 片,IRLR8726T 卻要求你給 52 片) 如果這個情況剛好出現在你的 Consignment parts 上面,記得多買幾顆送過去。一般來說中國買的集成電路(含郵票孔類的模組,除非你是從一些大廠那邊買)類產品會有 8 - 10% 的不良率,所以多準備 10% 應該是足夠的了。 DIP 與 SMT 價差 如果想省錢的話,把需要插件的零件都從 BOM 表中拿掉可以省不少喔!(不過更佳的做法當然是在設計電路板的時候盡可能換成…
WebStick – 基於 ESP8266 的網頁伺服器棒棒
自從我看了 ESP8266 的 SD Web Server Youtube 教學之後,我一直都很想要自己做一個來玩玩看。你想想看,有一根可以隨身攜帶(?)、足夠便宜到可以送人而且能夠把虛擬的東西(網站)實體化,不是一件很有趣的事情嗎? 可是之前一直都沒有時間研究這個東西,其中一個原因是以前的焊接技術還沒足夠讓我可以直的完成這個 project,另外就是因為那個時候我對燒錄器設計還是沒有甚麼概念,導致到當我要做到跟一片 Wemos D1 mini 同等效能的 ESP8266 的時候,完全沒辦法好好的設計和焊接成成品出來。 開坑 早在 2018 年,我就已經買來了一片 Wemos D1 mini 跟超級難買的 SD shield 來當小型網頁伺服器。當時的我對網頁編程和嵌入式開發還是非常的入門,結果做出來的東西就是長這樣 Wemos D1 + SD Shield + 小容量 SD 卡 雖然是能用,而且我也把它用 USB 供電吊在我的桌面旁邊當作實驗品開發了一段時間,但是由於用的是別人的 code 加上當時我並不是太熟悉 Arduino C++ (和當時還沒有 ChatGPT),導致最後開發出來的東西不但不好看而且很難用 設計嘗試,失敗收場 之後一年我試著把這個設計弄成一片真正的電路板。由於當時我還沒有開發燒錄器的能力(特別是要想辦燒焊那兩個超小的 BC817 transistor),因此我的想法是先把 ESP8266 焊到板子上,再透過現成的燒錄器對它進行開發(見下面那一排燒錄用排針),然而後來我弄著弄著就覺得不對勁,而且這種每次都要插燒錄器才能寫東西的系統感覺開發起來就很麻煩,應該不會有人想用,所以最後還是沒拿來生產。 第一代的 ESP8266 網頁伺服器,最後沒做生產真是一個明智的決定 5 年之後,我終於做出了 WebStick 原型機 WebStick 這東西其實在我腦海中已經卡住很多年了。但是一直就軟硬體技術原因無法開坑。直到最近開始學會了 drag soldering 跟找到了一款可以讓我進行超精密焊接(但是缺點是一次性)的烙鐵頭後,我終於把這個封塵多年的 project 重新抓出來做。 首先:燒錄器 網上有很多不同的設計,有自動的也有半自動(燒錄的時候要按 FLASH 按鈕)。半自動的能省下兩顆 transistor 跟兩顆電阻,但是由於編程的時候每次都要按 FLASH 和 RESET 有夠麻煩,所以我在設計的時候便選擇了自動燒錄器。以下是我參考的設計圖: 燒錄器設計圖 但是這設計圖差了點東西,就是圖裡沒有標注到 GPIO15 應該要 PULL LOW。在設計電路板的時候記得把 GPIO15 經電阻(如 10k)接地,這樣 SPI CS 才能正常使用。 為甚麼我會知道? 這真是個他媽的好問題(被坑) 這顆電阻雖然不加也可以,但是會無法使用 SPI 另外這兩顆 BC817 的 routing 也弄得我懷疑人生,不過後來還是在板上 route 好了。 我都不知道自己當晚是怎樣發神經想到可以這樣 route 的,嘛總之能動就好了。 其次:SD 卡 ESP8266 有內置的 SPI 針腳可以用來讀取 SD 卡。很多人以為 SD 卡模組上面有特別 IC 去把 SD 卡轉換成 ESP8266 可以讀取的信號,然而實際上的讀取方法聽上去有點奇妙,就是直接把 SD 卡當成 SPI Slave Device 來讀取。 那你會好奇,如果 SD 卡可以直接接 ESP8266,那外面在賣的 SD 卡模組上面那顆 IC 是幹甚麼用的?這是個好問題,那是防呆用的(不對) 你看,不是所有 MCU 都是在用 3.3V Logic Level 的說。例如說 Arduino UNO 在用的 Atmega328 就是支援 3.3v - 5v 輸入。SD 卡只能用 3.3V 讀取,過高的通訊電壓會把它弄壞,因此很多模組為了相容更多的開發板,只好加上一顆用來轉換信號線電壓的 IC,通稱 LLC (Logic Level Converter ,大陸好像叫 「電平轉換器」)。但是由於我在用的 ESP12E 只支援 3.3V,所以剛好與 SD 卡需要的電壓一樣,所以就不用轉直接接 MCU 就好啦。 不說不知道,如果你走去翻 Wemos D1 SD shield 的設計電路圖,它基本上就只有一個 SD 卡插槽,跟一顆差不多看不見大小的電容來做 ripple filter。真的有夠簡單欸 把兩個東西整合理起 當兩個電路都有了,剩下的部分就是把電路給整合到同一片板子上。我本來是打算用名片大小的設計,這樣做不但能有一種「這是送你的見面禮」感覺,而且也有更多的空間來寫使用教學,有點像國外嵌入式工程師大神做的能跑 Linux 的名片一樣 國外工程師做的,能跑 Linux…
用 CH552G 做一個數字機械鍵盤
在先前的文章中,我簡單的用之前的 macropad 零件做出來了一個數字鍵盤的原型機,但是因為那個只是功能測試的原型機,沒有進行使用者體驗測試,所以在成為最終設計之前,我還要修整一點東西。 首先:白色! 作為一個機械鍵盤,沒甚麼特色的話很難去吸引到人去注目它。因此在這次的設計裡,我決定做我一直以來都很想試試看的設計:全白! 除了鍵帽以外,連電路板都是白白的,超級好看的。 另外這片電路板設計還有一個特色,就是如果你是喜歡用 macro-pad 的人,你也可以用 macro-numpad 的 layout 來組裝這個鍵盤,讓同一個電路板設計有兩種不同的使用方法。 左:數字鍵盤;右:macro numpad 但是,這樣組裝起來按一下就發現了一點體感上的問題,就是比較長的按鈕在按下的時候會連帶下面的機械鍵一起偏斜。我猜是因為本身機械軸的高度問題,讓很多外面的機械鍵盤都會特別在按鍵跟 PCB 之間加入一層金屬板作為固定層。 不過作為一個超便宜的 DIY 方案,要是 CNC 一片這樣的金屬片就太貴了;作為替代方案,我這裡只當按鈕面積比較大的 2U 鍵進行加固,使用原先預留給 macropad 的按鈕固定孔為固定點,加入了一片特別的 3D 列印件以做到跟金融板同樣的功能。 完成 這樣簡單的搞一搞之後,我的 DIY 機械數字鍵盤就做好了。不知道是因為我還沒習慣機械鍵盤還是甚麼的原因,用這個鍵盤很容易打錯(?),或許下一次我可以用更薄的按鍵和鍵帽來多做一個試試看。
在不更改電路板 BOM 表下把 Macropad 變成 Numpad
話說幾個月之前,我設計並開源了一個四鍵的 macropad (快速鍵鍵盤)方案。電路板上使用 WCH 制的 CH552G 晶片,配合機械鍵與幾顆電阻電容就做成了一個超簡易的四鍵機械 macropad 後來在 hackaday 上分享後不知道為甚麼突然爆紅,收到很多留言,所以我就在想,說不定我可以用同一套零件的方案改用 grid layout 來做到數字鍵盤欸?所以我就來試試看了。 甚麼是 Grid Layout? 以 Arduino 的基本電路為例,通常要抓一個按鈕是不是被按下,一般都會對一個針腳進行讀取(e.g. digitalRead),但是在這樣的情況下,每一個按鈕就會需要用到一個 GPIO 針腳。如果我要做一個標準的 4 x 5 鍵數字鍵盤的話,我不就是需要用上 Arduino Mega 才行了嗎?所以這當然是不可行的。 但是如果你有留意到,外面很多 Arduino 按鈕的範例都是使用 Pull Low (下拉)和檢測針腳是不是 high (高電平)的方法來實現的。因此如果我們有辮法在需要讀到某個按鈕的時候的狀態的時候才對它提供高電平,而沒在讀取的時候提供低電平(即使按下也不會產生高電平狀態)的話,那樣我們就能用一只 GPIO 來選擇讀取哪個按鈕,另一只 GPIO 來讀取選擇了的按鈕來增加總讀取的按鈕數量。 於是就出現了 grid layout 跟 line scanning 的方法了。簡單來說就是對於一個 4 x 5 的 grid 而言,我們只需要控制 5 個針腳以選擇哪一行 (row),然後 4 個針腳來讀取哪一列 (column) 就好。以這樣的方法,原本會需要用到 20 個針腳的電路,現在用 4 + 5 = 9 個針腳就能讀完了。 可是,這樣會出現一個問題。在小量生產 PCBA 的情況下,每一顆零件和焊接費用都是滿貴的。而這個 layout 會讓 10K 電阻比原先的 BOM (四顆)多了一顆!? 不過解決方法也很簡單,只要把電路反過來,使用 pull HIGH + LOW activate 的設計(即是說按鈕按下的時候 MCU 是讀取到 LOW / 0 而不是 HIGH /1 ),那電路的設計就變成下面的樣子,把電阻搬到 INPUT line 上面,從而省下一顆電阻( 設計好了之後就是電路板設計了。這裡用的是 EasyEDA,根據上面的原理大致畫一畫之後電路板就出來了。 正面(預留了 numpad + macropad 兩者的插孔) 背面 組裝的部分也是沒甚麼特別的,先把 micro USB 和 CH552G 焊上去之後,再焊一些比較大的零部件,最後就是燒錄程序作測試。 背面電路板,原型機板本背面甚麼都沒有印 正面裝上 keycap 後的效果,由於是開發軟體用的原型機所以用上了最便宜的量產通用型鍵帽 測試用的 Arduino 寫的 Ch552 numpad firmware,需要先灌 CH55X Arduino 燒錄器 外殼設計與打印 由於這片電路板背面也有零件,因此沒辦法馬上使用,必須要先把外殼生出來才能安心放桌面上使用(不然把零件撞掉就麻煩了),這裡使用 Aprint Editor 簡單的為這台東西設計個外殼 因為不知道要傾斜角度多少會比較舒適,因此設計成可以拆卸的結構以方便測試 原型機成品 由於這是原型機,主要作為軟體開發和測試用,因此外殼甚麼的都是拿手邊剛好有的材料來印(黑色 PLA)。但是外型差不多就是這樣。 正面 底部,兩則的是防滑膠條;用戶可以在那個洞黏上金屬板以增加重量 Micro USB 與 firmware program 的按鈕有一個凹位方便開發者使用 後方的 IO 就只有 micro USB 口與兩顆 LED 最終(小)量(生)產的版本應該會好看很多,但是功能上這東西的確比我想像中的要好(這篇文章就是用這個鍵盤寫的),如果加上配重塊與專用鍵帽的話我猜真的可以取代現在我在用的數字鍵盤的樣子(?
CH552G 怎樣直接輸入中文到 Windows 上的應用程式?
CH552G 作為一款便宜好用的 USB HID 模擬晶片,我當然是想辦法讓他做到各種神奇功能的東西。而其中一個我很有興趣做的就是能直接輸出中文的鍵盤。 可是這樣問題又來了。到底要怎樣才能讓 CH552G 直接輸出中文呢?作為只有 8bit 的 E8051 處理器,根本沒辦法輸出中文不是嗎? 黑魔法:ALT + BIG5 碼 如果有一定年紀的 Windows 使用者,有玩過一些很早期的網絡遊戲的話應該都知道,早期的中文輸入法對各種遊戲和應用程式的支援很差,有時候即使是輸入法能抓到被遊戲 handle 的鍵盤輸入,也不一定能夠輸出字元到遊戲內的輸入框。這個時候就出現了一個神奇的輸入方法,就是在鍵盤上長按 ALT 然後在 keypad 上輸入該中文字對應的 big-5 碼,之後放開 ALT,中文字就出來了!? 然後我又花了幾天把所有 utf-8 跟 big-5 交雜的中文字轉成其對應的輸入用 DEC 碼 當然,在 Windows 10 之後,有不少應用程式(例如 wordpad)都開始轉用萬國碼 UTF-8,但是只要能夠背下兩邊的碼表的話理論上就能夠不透過任何中文輸入法輸入中文了喔? 那麼,我們讓 CH552G 代替我們按鍵盤不就行了嗎? 理論上是這樣沒錯,但是這裡又有一個問題了,就是 Keyboard_press 沒辦法按數字鍵盤啊??? 假設我們要輸入 「你」 好了。它對應的 big-5 和 utf-8 碼分別為 20320 ( 4F60 HEX) 跟 42817 ( A741 HEX),可是當你想著:這很簡單啊,只要 Keyboard_press(KEY_LEFT_CTRL); Keyboard_write("2"); Keyboard_write("0"); Keyboard_write("3"); Keyboard_write("2"); Keyboard_write("0"); Keyboard_release(KEY_LEFT_CTRL); 的時候,它卻輸出了 "20320" 到電腦上。 嗯?為甚麼會這樣? 原來是因為在 USB HID Keyboard 的定義裡面,數字鍵盤的數字跟你英文字上面那排的 hex code 是不一樣的原因。這個時候為了要轉換這堆數字,我寫了這樣的一個轉換 function,把數字的 char 轉換成 keypad 的 hex code (為了找這個我快花了 3 個晚上,累死) char PressNumericAsKeypad(char in){ int delayTime = 1; switch (in) { case '0': Keyboard_press('\352'); delay(delayTime); Keyboard_release('\352'); break; case '1': Keyboard_press('\341'); delay(delayTime); Keyboard_release('\341'); break; case '2': Keyboard_press('\342'); delay(delayTime); Keyboard_release('\342'); break; case '3': Keyboard_press('\343'); delay(delayTime); Keyboard_release('\343'); break; case '4': Keyboard_press('\344'); delay(delayTime); Keyboard_release('\344'); break; case '5': Keyboard_press('\345'); delay(delayTime); Keyboard_release('\345'); break; case '6': Keyboard_press('\346'); delay(delayTime); Keyboard_release('\346'); break; case '7': Keyboard_press('\347'); delay(delayTime); Keyboard_release('\347'); break; case '8': Keyboard_press('\350'); delay(delayTime); Keyboard_release('\350'); break; case '9': Keyboard_press('\351'); delay(delayTime); Keyboard_release('\351'); break; default: return in; break; } } 這樣我們就順利的把數字 char 換成 keypad 輸出的 hex code 了。之後就是再寫一個 wrapper function 把整個輸入中文字的流程更容易開發: //Pass…
初嘗 CH552G 與 Macro-pad 鍵盤
在一段時間之前,我無意中發現了 CH552g 這一片超便宜的 Arduino IDE 相容開發板。由於它實在太冷門了,冷門到幾乎沒有用它的 DIY Project,所以我就來自己做一個當實驗了。 可是如果只把 CH552G 做成一個類似 arduino 這樣的開發板,我猜應該也不能引起甚麼 Makers 圈的關注,作為一個喜歡 reinvent the wheel 的開發者,我就想到一個能盡用這顆 IC 的功能的小 project -- 4 key macopads keyboard 甚麼是 Macropad Keyboard? Macro-pad (我也不知道中文是甚麼),簡單來說就是一堆快捷鍵,讓你在按下去的時候它幫你自動對電腦輸入一連串的按鍵動作。目標不一定是電腦,例如說也有可以控制 IoT 裝置的 macro-pad,也有可以配合 auto hotkey 控制軟體界面的 macro-pad 等等。但是我這裡做的是最基本的款式:hot-key type macropad 外面有很多類似的東西啊,你設計的有甚麼特別? 講到這個就有趣了。因為 customize mechanical keyboard 這東西是一個很特別的領域,就如迷你版的「HiFi 音響隨便看都上千上萬元一套」領域一樣,市場上有類似的東西價格都是一兩百港幣起跳的,貴的到幾千都有。不過他們貴的原因有很多,有的是用鋁合金電鍍外殼、有的是用上最貴的機械開關(軸)、有的有訂做的鍵帽、螢幕與 RGB 等等。可是作為一個 macropad,這些東西本來就只是 value-added 的附加品,不知道為甚麼弄著弄著就變成了成本最貴的東西(? 在移除了這些附加的東西之後,剩下來的就是鍵盤最基本的部分: 按鍵電路板MCU / Keyboard IC輸出接口 而這個 project 最特別的地方就是: 低成本 我做的這個 macropad 用了以下一大堆神奇的方法來節省成本: 使用更便宜的機械按鍵使用最便宜的 PCB 生產方案(3 HKD / pcs)使用 Mini USB 取代較常見的 type C 接口,省去兩顆 5.1K 電阻盡量減少零件種類(RLC 部件只使用了 10k 電阻跟 0.1uF 電容)以 CH552G 替代常用的 32u4 大部分外面的 DIY 鍵盤都是在用 32u4 作為控制器。這顆 MCU 畢竟是 Atmel 的,說貴不貴但是也不便宜。這顆 4 港幣左右的 CH552G 跟 32u4 一樣內置有 USB HID 裝置,所以能被電腦識別為鍵盤,同時間又因為它需要的外圍零件真的超級少,所以我們只要很簡單的這樣那樣就設計好板子了。 看著這個板子這麼空的時候我都懷疑自己是不是畫漏了零件 背面一樣零件都沒有,只有走線 如果你是不需要 MODE A / B 切換的話連那個物理開關也能省下,但是因為我打算平用來音樂控制器,在做 Youtube 影片時來當 Adobe PR 的 hotkey keyboard,在只有四個按鈕的設計下只好做 multiplex 了。 軟體方面使用了 CH55X Arduino 的 library 與一些 C code 來做到鍵盤機能 https://pastebin.com/Hb0AQzpY 底座 然後因為都做這麼完整了,那就順便幫它做一個鍵盤底座吧? 這軟體是我自家公司開發的 Aprint Editor 成品
用 PD 要求電壓的最簡單電路!
最近我在 twitter 看外國的 Makers 在發掘一些不知名的中國產 IC 的時候找到了 CHxxx 系列(通常是用來做 USB 轉 Serial ),可是它那間生產商還有其他不同的晶片,其中一個最能夠引起我興趣的應該就是這一片了 CH224K 了。 CH224K 是一片 ESSOP10 的 IC ,最基本的使用方法只需要接 1uF 電容、1K 加 10K 電阻各一個就可以拉出 20V 了。如果需要的話還可以拉出 9, 12, 15V 之類的。 另外這片晶片也可以透過如 Arduino 的 MCU 控制輸出電壓,例如說這樣: 至於如果你好奇為甚麼透過改變電阻而更改電壓的方法並不支持 5V,那是因為本來從 PD 供電口拉出 5V 就不用協議,只要兩顆 5.1K 電阻透過 CC1 跟 CC2 接地就可以了。 所以如果你只是需要 5V 的話連這一片 IC 都不用。 注:ESSOP 跟 SSOP 的針腳間距是一樣的,比起常見的 SOP(例如 CH340)更小,如果 SOP 的 IC 你已經焊不到的話建議你還是直接買模塊回來用會比較好
USB 與各種接口的轉換晶片
話說我一直都在研究一片叫 ArOZ Portable 的 Raspberry Pi Zero W (或 2W)用的主板,用作架設口袋雲端而使用的。它基本上就是一個 IoT Hub,引出三個 USB A port 用作連接其他裝置(如 USB 鏡頭、外接硬碟或隨身碟等等)。 而很多 ARM 開發板上因為處理器限制就只有 USB 2.0 / 3.0 接口,因此要把不同的裝置接上去 ARM 開發板的話就會需要不同的轉接器了。然而在 production 環境中,你不可以直接把轉接器包含在產品裡面(這樣看上去有夠不專業的),因此你就很會需要以下的一些晶片了。 所以以下列表總結出幾種我近幾年發現的晶片。我都把人手沒辦法焊接的包裝(如 QFN 等)都跳過了,剩下的都是人手可焊接的晶片包裝。 把萬用的 USB 接口轉換成其他的接口吧! USB Hub 說到 USB Hub 晶片第一個跳出來的應該就是 FE1.1S,畢竟他是現時市場上最便宜(和發熱量最高)的選擇,然而它是 SSOP 針腳,對創客並不友好,所以這裡我提供另外兩款 USB Hub 晶片選擇給大家參考: SL2.1A (SOP16) 只要外接 2 顆 10uF 加一塊 12Mhz 晶振就能動的 USB hub HS8836A (SOP16) 如果你連晶振都不想用的話,可以考慮用這片 HS8836A。它只需要兩顆 4.7uF 電容就好了(0.1UF),看樣子 4.7R 跟 0.1uF 的部分可以省略,但是如果你不是為了省空間的話還是加上去比較穩。 SD 轉 USB - HS8826 (SOP16) 這個我還沒用過,但看起來是可以支援 MS 跟 SD 卡的讀取的 SOP16 IC 單晶片 USB 編程微控制器 - CH552 看起來是一片內置 USB HID 的 MCU,還在研究中(以為下網絡找到的 CH552 鍵盤電路圖) 其他還在研究中 如果你發現了甚麼神奇蹦蹦的 SOP 針腳的 USB 轉換 IC 記得留言給我加上去喔!
神奇蹦蹦的 IC 與他們的用法
最近我在世界上其中一個最大的電子零件零售商的網站隨便看的時候,發現了一批不錯的 IC,於是順便把這些新發現記錄下來,之後需要用的時候就方便很多了! 基本中的基本 首先,最基本中的基本就是一些大家都在用,到處可見的 IC。由於這些 IC 的線路圖和模組設計教學整個網絡上都是,這裡就直接省略跳過詳細解釋它們的用途。通常在創客的 DIY 中最常見的就是: TP4056 - 單節 3.7V 鋰電池 1A 充電晶片XL6009 - 直流到直流升壓晶片LM2596(s) - 直流到直流降壓晶片 一些比較少見但是還是整個網絡上都是的晶片: MP1584(EN) - DC 可調降壓晶片 (小型 DIY 降壓用)D0505S-1W (D0505S-2W) - 5V DC 到 5V DC 直流隔離器(用於藍牙接收器與喇叭驅動電源隔離用)AMS1117-x (x 可以是 3.0, 3.3, 5.0 等) - 12V DC 到 x 的 LDO8205A + DW01 - 鋰電池保護板 很多時候 Maker 為了做帶電池的裝置就是用 TP4056 + XL6009 / MP1584 這樣配合著用,可是這樣做很浪費空間,所以我就開始找不少關於電源管理的方案,以下的應該就已經踏進沒甚麼人知道的領域了。 5V 0.8A 充放控制器 - HT4928(s) HT4928 是一片用起來很方便的鋰電池充電和升壓輸出的晶片。通常你很容易在那些便宜的單節 18650 行動充電器 (充電寶)裡面找到它。雖然用它來充手機是超級的慢,但是作為一些低功率裝置的供電(例如 Pi zero w)來說是不錯的選項。 5V 1A 充放控制器 - TP4333 如果 0.8A 差了一點點才夠,你可以考慮使用 TP4333。它也是一個用於行充的電源方案,但是用的外接零件會多幾個(R1,S1 跟 D5 如不需要手電筒功能可省略)。 5V 2A 充放控制器 - IP5306 / IP5307 這是一片大功率的鋰電充電和升壓晶片。能夠在 SOP8 package 裡做到 10W 的同時充放電,還帶 4 顆 LED 作電量顯示。(注:這東西發熱滿厲害的,記得底部的銅要鋪好鋪滿) 順帶一提,如果 IP5306 太貴,你可以試試看用替代用 IC FM5324 鎘鎳氫電池充電器 - CJC5122 / ASC0304B 這是一片 NiMH 充電器 IC,支援 1 到 4 顆的 NiMH 電池充電,預設是以 300mA 的充電速度來充。以下為 3.6V NiMH (3 顆串流)時的電路圖(R1 R2 及 R3 在不同配置下需要變更其電阻值) 單節鋰電池保護晶片 - XB8887A 通常的保護板需要使用兩塊晶片來做保護功能,可是這一片就能做到單片保證的功能。對於需要用到 18650 同時對空間要求很高的 project 很有用。 Charger 的部分可以配合 TP4056 晶片使用,這樣兩塊 SOP8 的晶片就能做到原本要一整片指甲大小的 PCB 的功能。 更小的單節鋰電池保護晶片 - XB5306A 如果 SOP8 還是太大,你可以考慮用這一片 XB5306A 。 使用 SOT23-6 包裝,真的打個噴嚏就不見了。電路圖跟上面的相近,Over current cutoff 電流量則降至 3A 使用 SOP8 Package 的升降壓晶片 - XL6007 對於一些對厚度很有要求的 project,要放進 XL6009 可能會有一點難度。這個時候就可以考慮使用 XL6007 了。這一片 SOP8 的晶片與 XL6009…
目前第 1 頁,共有 2 頁