2014/05/12

自造 Time Plotting Clock, (4) 英文字母

True. Arduino is fun.
萊恩大兵第一次去 Openlab.Taipei 時, 當場就被 Time Plotting Clock 的療瘉效果吸引住. 看著機械手臂自動地提筆寫時間, 收筆歸位, 再抹去前次時間, 重新寫下現在時間. 每分鐘每分鐘周而始, 心情都平靜下來了.  好想要一個喔. 就請 Honki 幫忙帶著萊恩大兵, 從零件採購到組裝校正, 一步一步的親手做一個來.

瞎調了好幾天, 萊恩大兵總算掌握住訣竅, 讓 Time Plotting Clock 學會寫 26 個英文字母. (字跡歪歪扭扭的, 像小學生寫的字.. XD.)
abcdef
ghijk

lmnopq
rstuvw

xyz
(冴羽獠有來電詢問租用此看板)

以下是萊恩大兵的心得/筆記, 分享出來, 希望能對社群對國家社會對這世界有點貢獻. XD. 要攻略 Time Plotting Clock 的程式碼, 大抵要知道:

座標系統

  • 白板左下是原點 (0, 0).
  • 白板右上, 約莫是筆筒的位置, 座標為 (75.2, 47).


提筆高度

有三個不同級別.
控制提筆高度的函式

  • lift(0): 讓筆頭接觸白板. (也就是要寫字啦.)
  • lift(1): 相對於 lift(0), 這級別的筆頭位置有稍微高一點, 筆頭沒和白板接觸. (這是寫字運筆的高度, 可用來寫不連續的筆劃..)
  • lift(2): 把筆頭抬到最高. (這是為了要收筆入筆筒, 太低會撞到..)


畫線函式

  • drawTo (x, y): 人如其名. 這函式主要就是用來畫線的. [從現在位置畫到 (x,y) 處]. 衍生的功用就是~ 寫字運筆時, 搭配 lift(1) 來移動筆頭的位置.
    畫線的函式
  • bogenUZS(x, y, radius, start, end, ratio)
    畫弧線(順時針方向)的函式

  • bogenGZS(x, y, radius, start, end, ratio)
    畫弧線(逆時針方向)的函式


bogenUZS() 和 bogenGZS() 這兩個函式是用來畫弧線的.  要解析這兩個函式, 需要用到三角函數與極座標.  
三角函數. (快還給老師了)
  • y = radius * cos (θ)
  • x = radius * sin (θ)
  • 圓角度的定義是逆時針方向 (0/90/180/360/450...)或是順時針方向 (0/-90/-180/-270/-360..)



從兩個函式裡面的 inkr 值 [bogenUZS() 為 -0.05, bogenGZS() 為 0.05] 可得知, bogenUZS() 在 while 迴圈判斷的角度是漸減的, 也就是順時鐘方向畫弧線.  反之 bogenGZS() 的 while 迴圈則是角度漸增, 也就是逆時鐘方向畫弧線.

而兩個函式的 start, end 參數, 很明顯是定義弧線的起迄. 原程式開發者的叫用方法, 都是餵, 例如 0.8/1.57/-6.7/-3.84 之類的數值. 剛開始萊恩大兵參不透這些數值的意義, 瞎調了兩三天完全不得要領.
搞不懂 end 值為 -4 時, 會幾乎畫了一圈圓?
萊恩大兵去找了數學老師詢教, 才終於知道這些數值是徑度. 什麼是徑度? 
徑度. (已經還給老師了)

一個圓有 360°, 也等於是 2π 徑(度). 換算下來 1 徑度等於 57.3° (角度). 所以, 0.8 徑度 = 45.84°, 6.7 徑度 = 383.91°. 從 6.7 徑(度) 到 0.8 徑(度), 就是從 383.91° 轉到 45.84°

呵呵, 江湖一點訣, 領悟之後. 萊恩大兵造字就省事多了. 

造字..

以 'd' 為例, 先移到 (3, 10), 時針從 -277.9° 畫到 -89.9°. 接著再向上拉到 (3, 15) 即可. 寫來看看.
一堆 d.
Okay, 形狀有了, 認的出來是 'd'. 
字的線條還不優. 這就留待日後改進了.

問題與待改進的地方

  • 同一個字在不同位置, 形狀多少有差異. (可想而知, 同角度之下, 離轉軸愈遠, 畫出的弧線就愈長. Time Plotting Clock 手臂寫字原理, 本質上就是在畫弧線. 在不同位置時, 筆畫會有誤差是合理的. 要解決這問題. 似乎得每一個字, 在不同位置, 都需做適當修正.)
  • Time Plotting Clock 最適當的書寫範圍: 
  • x 介於 10 ~ 50 之間.
  • y 介於 10 ~ 35之間. (這是萊恩大兵的經驗值, 待參考)
  • 這台 Time Plotting Clock 不太適合寫小字(或太精細的字). 像 'f' 的橫桿, 程式明明是下 (2,5) 畫到 (5,5), 結果卻是一條歪七扭八的線.
    歪七扭八的字跡
  • 造字沒注意美感, 字體重心沒在同一水平線上.
    歪七扭八的字跡
  • 未來, 整合 SpaceBrew, 讓它可遠端輸入, 變成留言板. 
  • 還要能一鍵切換報時/寫字模式.




[萊恩大兵的其它文章]

自製大四軸

自製大四軸, (1) 零組件篇, 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, (2) 零組件篇, 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, (3) 零組件篇, 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (4) 零組件篇, 馬達與電變調整 (Drone, Quadcopter, Maker, Electric Speed Control, Motor)
自製大四軸, (5) 組裝篇, 四軸飛行器成形 (Drone, Quadcopter, MultiWii, Arduino, Maker, Electric Speed Control, Motor)
自製大四軸, (6) 調整篇, 飛行前兩三事 (Drone, Quadcopter, Maker, Futaba, Arduino, MultiWii)
自製大四軸, (7) 充電篇, iMax B6 充電器操作記要 (Charger, Battery)
自製大四軸, (8) 問題篇, 機架損壞維修 (Drone, Quadcopter, Laser Cut)
自製大四軸, (9) 改良篇, 方便拆卸的木質機架 (Drone, Quadcopter, Maker, Laser Cut)

自動報球速的棒球


CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, (1) 用 beacon 控制開關的枱燈
藍色小鋪一起來做, (2) 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, (3) 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)
藍色小鋪一起來做, (4) 藍牙枱燈專案實作 (下) (Bluetooth, CC2540)
藍色小鋪一起來做, (5) iBeacon scanner 專案示範與解說 (Bluetooth, CC2540, iBeacon)
藍色小鋪一起來做, (6) 完成, 用 iBeacon 控制開關的枱燈 (Bluetooth, CC2540, iBeacon)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock
體驗, 原住民互動故事書@宜蘭大同鄉泰雅生活館
體驗, 蛋生音互動裝置@兒童美術館 (Arduino, 3D Printing, HC-SR04, Interactive)


實作, 電容感應音樂樹

沒有留言:

張貼留言