用隨機亂數產生器來畫抽象畫吧!

十月 16, 2017
Facebook
Twitter
隨機這個概念一直讓我著迷。
而且,我相信許多人也跟我一樣吧,尤其是對保護個人資訊有興趣的人!
是的,還有美國拉斯維加斯。
所以,我對Charles Platt和 Aaron Logue《MAKE雜誌》〈Really, Really Random Number Generator〉一文提到的電子亂數產生器(electronic random number generator,RNG)非常有興趣。
​這個RNG使用Aaron設計的簡單電路,以下是他們的說明:「在(電晶體)的PN接面施加逆向偏壓(reverse biased),製造出崩潰雜訊(avalanche noise),訊號經過放大之後,驅動 TTL史密特觸發器(Schimitt trigger),產生完全無法預測的雜訊,這些雜訊可以轉換成一串無限多的數位狀態訊號(高或低,1或0)。
以下是我的白話文版本:如果你連接9個便宜的電子零件,輸送18 V的DC電流,將輸出訊號傳送到微控制器的輸入腳位上,一切沒有出錯的話,你就會得到一連串0跟1的數字,完全沒有規律,你可以拿這些數字來做任何事情!

看到這篇文章的時候,我也一邊在探索DC馬達控制的專題應用,把兩者結合在一起,打造一臺繪圖機(圖A),組合幾個馬達,透過隨機訊號來控制畫筆,似乎是個有趣的主意!

圖片

圖A

所以,我訂了一塊便宜的雙馬達驅動板,搭載L298N晶片(wonder-chip),這個電路板通常用在小型機器載具(另外,這塊板子也可以控制單一個步進馬達), RNG電路上比較少見的零件可以在Amazon或eBay找到,不過,有些零件要從中國慢慢搭船來就是了。在等候零件的時候,可以先讀一下 L298N電路板使用方式,有幾個Arduino程式檔需要搞懂。
圖片

圖B

至於畫架的部分,其實只要買個便宜的畫架就行了,但是我喜歡自己動手做。 我用了三腳架(攝影機用的那一種)、 加上一塊白板(專題用的夾板也行),再加上一些在一般店裡都買得到的零件(圖B與圖C),用老虎鉗和鐵鎚將鋁片折彎,用來把三腳架上裝攝影機的螺絲以及白板上的螺絲接在一起。在鋁片上鑽洞,刻上螺紋,讓螺絲可以栓進去。 注意板子要稍微往後傾一點,這樣比較容易作畫,關於這一點,等一下會詳做說明。另外,在Instructables上有用三腳架做的簡單版本,不過比較小一點,也比較不穩。
圖片

圖C

Platt和Logue的版本使用2個9V電池來驅動亂數產生器。我手邊沒有9V電池,但是我找到一個115V AC電源供應器,可以供應12VDC的電壓,電流是1A,對這個專題來說是夠用。在兩個馬達都提筆作畫的時候,大概會用到0.5安培的電流,而12VDC電源也能提供L298N晶片足夠的電力。
圖片

圖D

零件抵達之後,就可以接線了(見圖D、E和F),我用的是BASIC Stamp的Homework控制板,不過用麵包板或其他原型板都行。注意第一個電晶體(產生隨機雜訊的那個)只接了兩條線,第三條線要剪掉。關於這個部分,可以參考Platt和Logue的詳細製作說明,不過我先提醒一個重要事項:「在安裝齊納二極體(Zener diode)的時候,注意陰極條紋要指向負極匯流排的反方向,跟一般二極體不同。齊納二極體會將4.7VDC以上的電壓分流並接地。」
圖片

圖E 2N2222 or 2N4401 (plastic or metal case:塑膠或金屬外殼;To microprocessor input pin:接微控制器輸入腳位;2N2222 (metal case):金屬外殼;Random Number Generator:隨機亂數產生器

注意:忽略圖D右手邊的麵包板不會產生什麼安全問題,那是HomeWork板的標準配備,不過,我還是有稍微注意,把RNG零件放到左邊分開的麵包板上,沒有把 HW板燒壞。至於下拉式電阻器(沒有接線的那個),是為了安全起見,有時候,如果你真的想要0值,那就要確定可以做到才行!至於 LED 則是測試用的。
圖片

圖F Motor A:馬達A;Motor B:馬達B;Leave jumper in place:跳線不動;No connections to upper pins:上方腳位不需要接線;To microcontroller output pins:接到微控制器輸出腳位;ENA(motor A enabled):馬達A啟動;ENA(motor B enabled):馬達B啟動;IN1(motor A direction):馬達A方向;IN2(motor A direction):馬達A方向;IN3(motor B direction):馬達B方向;IN4(motor B direction):馬達B方向

在畫板上緣左右兩側裝上馬達,每個馬達都要用 2個 3mm的機器螺釘固定,要直接栓進白板也可以,墊一小塊夾板也可以。然後,要在馬達傳動軸上裝滑輪,我用的是一臺舊縫紉機上面的線軸,不過在Amazon)也可以買到。因為我的線軸尺寸不是很合,會滑來滑去,所以,可以先裁一塊圓形紙膠帶貼上(見圖G),然後,在線軸之間纏上大概4′有彈性的編織釣魚線,可以的話,兩個線軸上釣魚線的量要相當,不用纏太緊,鬆鬆的就好,至於線頭放在哪個線軸上都沒關係。
圖片

圖G Masking tape:紙膠帶;Bobbin:線軸;Fishing line:釣魚線

接著,我們要用1/8”透明壓克力板來做筆架。大部分玻璃行都有賣零的壓克力板。照圖H的範例製作,並將筆架暫時倒掛在釣魚線上做測試。
圖片

圖H PEN HOLDER:筆架; DRILL ON CENTERLINE TO FIT PEN TIGHTLY:在中線上鑽洞,讓筆固定穩妥; 2” BOTH SIDES:兩側距離都留2”; 1-1/4” BOTH SIDES:兩側距離都留1至1/4”; MATERIAL: 1/8” CLEAR ACRYLIC:材料為1/8”透明壓克力; DIMENSIONS ARE APPROXIMATE:尺寸取大概就好

好了之後,把輸出端接到RNG的齊納二極體輸出端接到微控制器輸入端(Arduino、Basic Stamp都可以),L298N板有4 個輸入腳位,控制2個馬達,所以,我決定使用RNG產生的4個連續訊號,像是0010, 1010等等,都使用微控制器的單一輸入腳位。

為隨機繪圖機器人編寫程式

你可以直接下載我寫的BASIC Stamp微控制器程式碼, 不過,要為你愛用的微控制器寫程式一點也不難。
  1. L298N控制兩個馬達,分別是A馬達與B馬達,你必須往L298N板的ENA和ENB傳送HIGH訊號來驅動馬達(見圖F),在程式執行期間都要保持啟動。但是處在這個狀態不代表馬達會動,因為馬達還需要知道要朝哪個方向轉才行!
  2. 啟動RNG,得出4個0(LOW)和1(HIGH)的組合。我個人偏好以變數形式儲存(例如W, X, Y, Z)之類的,比較好懂。不過,如果4個剛好都是0的話,請再重新產生4個數字。要驅動畫筆至少要1個HIGH才行。
  3. 前2位數字控制的是馬達 A,10代表一個方向,01則代表另一個方向,後2位數字控制馬達B,原則相同。
  4. 將4個變數值傳到L298N上的 IN1到IN4號輸入腳位。
  5. 依照剛才的描述編寫控制馬達的子程式 。
  6. 在程式中加入停頓與延遲,讓馬達維持運轉一段時間,直到可以畫出獨特的線段為止,我大概都是設100到500毫秒(millisecond),如果你想畫更大幅的畫,就把延遲時間加長沒關係,馬達就會運轉比較久,畫的線就會加長。
  7. 畫好之後,新增子程式,將馬達煞住, 若IN1和IN2都是LOW,馬達A就會停下來,同樣地,若IN3和IN4都是LOW,馬達B就會煞住,不需要再傳送LOW到馬達驅動腳位。
  8. 如果你用的是Arduino,而且有 PWM腳位可以進一步控制馬達的速度,就能增加另一個隨機成分。

初次啟動

  1. 將四股的電線從L298N板接到馬達上。 不用在意極性問題,畢竟我們是要即興作畫嘛!
  2. 將畫架往後傾15°或20°,然後先不要裝筆,讓釣魚線吊著筆架,試跑看看。
  3. 如果馬達不會動,或者筆架看起來不是隨機在動的話,請檢查一下電路與程式有沒有問題,需要的話,可以改變延遲時間,平衡馬達移動的誤差。
  4. 現在,可以把畫紙貼到畫架的平面上。把壓克力筆架放在紙張約中央處。可能要手動捲一下線軸來調整位置。
  5. 好了之後,可以把筆蓋拿下來 (我喜歡用細頭的簽字筆),從筆架中間的洞穿過去,釣魚線會把筆托住(見圖I),需要的話,也可以調整一下畫架的角度。
圖片

圖I

     6.  啟動程式之後,就可以退一步觀賞了!

隨機小撇步

如果畫筆看起來不是真的隨機在動(比方說,RNG要連續吐出3或4次4個0的機率真的很小),試了其他方法又沒有解決問題的話,那麼,請嘗試障礙排除,或讓RNG產生幾組隨機數字,輸進電腦螢幕,稍微思考一下這些數字的意義。接著,你可以嘗試將第一個電晶體改裝成另一個金屬外殼(metal-can)的NPN電晶體,我發現對某些電晶體(產生雜訊的那一顆)施壓或以12V電壓運作會出問題,Platt和Logue的版本是18V。
好,就算現在畫筆真的開始隨機移動了,有時候它還會跑到紙外面去。創作的時候有一些突發的筆觸沒什麼關係,不過我還是加了兩個開關和兩個子程式,處理過度狂熱的隨機筆觸。
最後,你可以用喜歡的圖片編輯軟體來進行後製,加上顏色、改變顏色、複製、旋轉、減製、填色、改變質地,都可以讓作品產生不一樣的感覺!
時間:8至16小時(一個週末 ) 難度:中等 價格:50至100美元
材料
​畫筆控制裝置

  • 你慣用的微控制器, 像是Arduino、BASIC Stamp都可以
  • DC齒輪馬達,大約12V (2),比方說Uxcell #JSX69-370、Amazon的#B01N1JQLGF等等
  • 電晶體,NPN型(3),如2N2222、2N4401或2N3904等等,我的RNG電路用2N2222 金屬外殼電晶體效果最好(用來產生隨機雜訊)
  • 電阻器,4.7kΩ (3)和1MΩ (1),要用在隨機數字電路上
  • 電容器,0.1µF
  • 齊納二極體,4.7V,1N750
  • 免焊接麵包板或電路原型開發板 
  • 雙H橋馬達控制模組,2A,L298N型,如Amazon的#B014KMHSW6. 我用的是Tronixlabs L298N2A,上面就有5V 穩壓器,可以提供Arduino所需電源
  • 電源供應器,12VDC,750mA以上, 像是Amazon #B019Q3U72M產品
  • 機械螺絲,3mm (4) ,用來裝馬達
  • 畫架, 我自己是用三角架做了一個,不過,你也可以直接買一個便宜的畫架,再用螺絲把馬達裝上就行了
  • 透明壓克力板,1/8″厚,大約3″×5 1/4″ 
  • 縫紉機線軸(2),如Amazon #B008MM5BDE
  • 編織釣魚線,4’或更長
  • 連接線(hookup-wire),22ga左右,大約 20″ 
  • 紙膠帶 
  • 簽字筆(幾支),其他類似的筆也行

用三腳架做畫架​(非必要)

  • 白板或1/4厚的夾板,長寬約16″×20″
  • 三腳架
  • 夾板,厚1/4″,長寬約8″×14″ 
  • 木塊,約3/4″×1 1/2″×14″
  • 鋁條或支架,1/8″厚,大小約1/2″×2 1/2″
  • 螺絲或把手,螺紋規格為10-24、10-32或1/4-20 
工具

  • 螺絲起子
  • 鋸子或雷射切割機(用來裁切壓克力),可以用鋸齒比較細的手鋸、帶鋸或 (有點危險的)線鋸,顛倒放之後用夾鉗固定
  • 焊鐵(非必要)
  • 鋸子 (非必要),DIY畫架用。
  • 鉗子、鐵鎚、鑽頭、攻螺紋工具 (非必要),DIY畫架用。
Larry Cotton是個半退休的電動工具設計者,也在社區兼職教數學,另外,他也喜歡音樂、樂器、電腦、鳥兒、電子零件與傢俱設計,對啦,還有他太太,這並不是喜愛程度的排序喔!
(譯:劉允中)
[原文] 
Social media & sharing icons powered by UltimatelySocial