LED「輝光管」顯示器

2019-06-17
Facebook
Twitter

材料

 Arduino Uno或Nano微控制器板

LED輝光管 Nixie 印刷電路板(PCB)下載免費的設計檔案(.sch或.brd)並寄給OSH Park或類似的PCB製造商。

RGB LED,WS2812B型,5mm×5mm(20),如Adafruit網站商品編號1655

電容器,100nF(0.1µF),SMD 1206封裝(20)

直角排針(母),1×4腳位,間隔0.1″

直角排針(公),1×4腳位,間隔0.1″

電阻器,220Ω

透明壓克力板,3mm(1/8″),擠出(XT)型,約0.5m2(~775平方英寸)

M3×20mm黃銅螺絲及螺帽(4)

不導電泡棉,約8cm×8cm(3″×3″),用於光網

即時時鐘(RTC)模組,DS3231型(非必要),要做成時鐘時使用

5V DC電源(非必要),要驅動超過兩個LED輝光管數字時使用

工具

雷射切割機

烙鐵及銲錫

安裝有Arduino IDE的電腦,可至arduino.cc/downloads免費下載

專題程式碼及模板 免費下載,含雷射切割模板、PCB檔案和兩個Arduino腳本程式碼:一個用來驅動LED輝光管,並另一個讓輝光管成為二位數時鐘。


 

新復古:我們打造這款只有兩位數的LED輝光管時鐘,小時和分鐘交替顯示。左邊的數字3以單一線條的形式雕刻,模仿古早時代輝光管顯示器的外觀。攝影:Andreas Wodrich

 

經典的輝光管具有酷炫的古早味,以小型霓虹燈顯示數字和符號(圖A)。很可惜,現在已經沒有量產了,買得到的又十分昂貴,而且需要用到複雜、高電壓的驅動電路。好消息是,透過彩色LED和雷射切割的壓克力板,我們可以重現輝光管的復古魅力、擴充,並依自己的品味設計。本專題中,我們要來看如何打造酷炫的LED輝光管數字顯示器,並透過Arduino搭配安全的5V來驅動。

 

 A:我們的LED複製版和真正輝光管的魅力無法相提並論,但製做簡單得多,而且更好用。攝影:Thomas Saur

 

輝光管複製品的原理很簡單,但效果很好:十塊由擠出型壓克力板(聚甲基丙烯酸甲酯,即PMMA,又稱Lucite、有機玻璃或樹脂玻璃)製成的透明板以0到9的數字雕刻後堆疊,每塊板子用彩色LED從邊緣照明。因為光線在壓克力板內部的折射,只有選取的數字部分會發光,同時板子的表面和堆疊中其他數字會維持透明無色。

這不是我們自己想出來的點子,我們在美國和歐洲的Maker Faire都有看過這個做法。Connor Nishijima是位於猶他州的Maker,他創造了「Lixie」這個名稱(即LED輝光管的LED + Nixie),啟發了很多其他Maker。

我們自己的設計以示範製做LED輝光管有多簡單,並教你創造自己的作品為目的。你只需要基本的Arduino技能和能在空白PCB上焊接的技巧就夠了。

 

打造LED輝光管

電路板上LED產生的光會從刻有數字的壓克力板上的舌片照入。電路板上的泡棉遮罩會防止光線從側面照入相鄰的壓克力板。

因為光線是從邊緣照入壓克力板,會產生全內反射,使壓克力板成為「光管」。光的路徑只有在雕刻的線條處(和壓克力板的邊緣)被阻斷,因此只有這些地方會發光,顯示出數字。

 

雷射切割

切割模板組包含10個數字板和一個把它們固定在一起的夾板(單或雙數字)。我們要沿著紅線切割,並沿著綠線(數字)雕刻。我們挑了兩種感覺效果不錯的字型。細的這種字型有經典輝光管的風格,而雙筆畫的字型在明亮的環境比較易讀,但比較會遮擋堆疊後方的數字。

我們要用LED輝光管做時鐘,所以需要數字,但你在自己的設計裡沒有字母、符號或圖案的限制。假設你想做一個透過Wi-Fi擷取資料的氣象站,溫度的顯示可以用顏色範圍(例如從藍到紅)來升級,還可以用自訂的符號來代表雨天、多雲、晴天和雷雨。

電子元件

幾乎所有的LED輝光管都是採用WS2812B型RGB LED或同等的SK6812。這些零件用途很廣,因為可以用非常單純的硬體和程式碼來輕鬆控制。買的時候要注意WS2812B裡的「B」,這代表它是經過重新設計的型號,在SMD封裝上只有四個連接器,不是六個。Adafruit的NeoPixel系列有很多採用這種LED的小型開發板,並且提供透過Arduino控制所需的軟體資料庫。

 

B:每個智慧LED旁邊的去耦電容器能防止高切換電流所造成的電壓降,如同在邏輯IC會採用的配置。

 

雖然我們在Tindie找到的LED輝光管只有一個1,000µF電解電容器和LED電源串聯,我們還是依照規格表(上方圖B)為每個LED裝上各自的100nF(0.1µF)電容器,因為這些零件不單純是LED,裡面含有邏輯電路。Adafruit的NeoPixel超級指南說明了WS2812B LED的運作方式和為什麼一定要在微控制器和第一個LED之間的資料線加裝220Ω到500Ω的電阻器(下方圖C)。這個電阻器不屬於電路板的一部分,所以要自己接到資料線上。

 

C:務必加裝電阻器;如果要驅動超過兩個LED輝光管,可以再加裝一個獨立的5V電源。如果要做時鐘,就只需要RTC模組。

 

為了均勻照亮數字,我們在每個數字使用兩個RGB LED,在電路板上以適當距離間隔:0用兩個LED、1再用兩個,以此類推。這個配置和Lixie設計不同,所以程式碼不相容。(雖然可以個別控制每個LED,在每個數字我們一般使用相同顏色的兩個LED。)構成一個輝光管「數字」的20個LED自成一個單元,以側面的連接器和另一個單元組合。透過這種連環配置,可以輕鬆連接500個LED(25組LED輝光管),甚至更多。

然而,大量LED所汲取的電流可能會產生問題。每個RGB LED在三個色彩元件都設為最高強度時所需電流可達60mA。如此累積起來單一個LED輝光管就有1.2A,遠超過Arduino輸出的負荷量,但我們一般只會一次在一個輝光管點亮一個符號,所以只有兩個LED會同時點亮,最高汲取120mA。在這些條件下,一個Arduino可以驅動兩個LED輝光管。如果你的顯示器需要更多數字,就要加裝輸出電流充足的5V獨立電源。

零件組裝

每個LED輝光管側面的公和母排針連接器有可以輕鬆組合成排的設計。前一個LED的資料輸出腳位同時連接到公「輸入」排針和母「輸入」排針,讓它連接到下一個輝光管的輸入。如果你要做有很多個輝光管的顯示器,可以把它們都固定在一塊背板上,提升零件穩定性。

因為LED的光束角對這裡的壓克力薄板而言太寬,我們要用泡棉材質的光網來聚集(圖D)。數字板的舌片能插入光網的開口。這些零件都用一個夾板搭配四個M3螺絲來固定;注意不要讓舌片直接壓到敏感的LED。

 

D:每個顯示單元(即數字)需要一塊PCB、一個光網、10塊有數字雕刻的壓克力板和一塊固定所有零件的夾板。個個零件用四個螺絲固定。攝影:Florian Schäffer

 

在起初的幾次嘗試中,我們使用以雷射切割的抗靜電ESD泡棉。(泡棉切割模板附於下載內容中。)我們過了好一陣子才發覺這種泡棉會讓裝置不穩定,因為控制LED的訊號很敏感,稍微觸碰這種導電泡棉就會造成故障。我們現在用的是一般的(不導電)泡棉,裝置也就運作正常(圖E)。

這是我們的二位數「Lixie」時鐘成品,搭配ArduinoRTC模組。攝影:Martina Bruns

Arduino驅動器

我們用來驅動LED輝光管的是Adafruit_NeoPixel.h資料庫,可以用Arduino IDE的資料庫管理員來下載並安裝。這個資料庫提供個別驅動鏈結WS2812B型LED所需的所有功能。初始化新的執行個體時,建構函數(參見下方程式碼圖片的標示(1))會以三個引數呼叫:連接的LED數量、做為資料輸入的I/O腳位數量和資料傳輸使用的時脈速度。我們提供兩個負責控制個別LED的函數來透過連接起來的輝光管單元顯示數字,這樣你就不用自己處理。

從led-nixie.ino裡面的範例程式碼可以看出顯示數字有多簡單。兩個連接起來的LED輝光管與Arduino連接。DIGITS常數(2)必須設為連結的輝光管單元數。驅動器設定程式碼和處理數字顯示運算的程式碼都會用到它。要使用的控制腳位(PIN )在(3)進行設定,可以任意指定(預設為第7腳位)。程式碼完成編譯並刷入Arduino後,就會看到從零到99的隨機色彩循環顯示。

OutNumber()函數會取三個引數:要顯示的數、要使用的顏色和決定前導的零要不要顯示的旗標,接著把數分割成個別數字,並傳送到輸出,同時檢查最多能顯示幾個數字。

在圖C的接線圖中,我們放進一個DS3231即時時鐘(RTC)模組。Adafruit的教學說明了這個模組的用途和優於DS1307的原因。設定時鐘時,要用硬式編碼方式把目前時間寫入led-nixie_clock.ino、編譯,然後刷入。Arduino會把時間傳送到RTC,之後便儲存在這裡。接著我們要在程式碼裡設定時鐘的部分加入註解,讓RTC不會每次重新啟動都重設成舊的時間。雙位數時鐘會用不斷變化的顏色交替顯示鐘點和分鐘。

 

切割數字

顯示數字時,常會碰到的一個問題是很多顯示器無法直接接受多位數的數字做為輸入。我們要把數切割,讓個別顯示器可以分別點亮個個位數的值(個、十、百位數等),因此要用到的是簡單的除法技巧。

我們把一個三位數切割成三個數字:百位數、十位數和個位數。首先,把原本的值除以100(4),接著把結果除以十,得到餘數(這個運算稱為「模除」,使用運算子%)(5)。因此如果要切割201這個數,就把它除以100,得到2.01,把它模除10會得到2,即小數點前的最後一個數字,也就是百位數的正確數值。這個結果會傳送到輸出流程(6)。在下一步(十位數),原本的數除以10(7)(20.1),再把此結果模除10(8),得到十位數的0。個位數的部分,把原本的數模除10(9),即得到數值1。(在這裡我們用小數作為示範;Arduino其實只會用整數運算。)

 

使用數位顯示器

你的LED輝光管已經準備好登場了!可以用它做為時鐘和倒數計時器、計數器和計分板、各種計量的顯示,或任何你想得到得用途。如果不想從頭開始製做,可以向Connor NishijimaLED-Genial等Maker訂購成品,再結合自己的專題。

我們很期待看到你使用LED輝光管的點子,還有你設計的專屬顯示符號,尤其是特大和特小型的!歡迎在makershare.com分享你的專題,然後在下面留言告訴我們。

 

攝影:Andreas Wodrich

原刊登於《Make》雜誌德文版,2018年4月份。本文刊於《Make》雜誌第66期。英譯:Niq Oltman

 

Florian Schäffer

Florian Schäffer從年輕時就開始拿烙鐵。他從兩年前開始擔任《Make》雜誌德文版的編輯。

 

(譯:屠建明)

【原文】