2016年8月13日 星期六

[ScratchBot開發日誌] 2016/08/13 粉墨登場

ScratchBot 是一個可以畫圖的機器人。



材料清單

1.機構件 * 1
2.Arduino Nano 開發板 * 1
3.Arduino Nano 擴展板 * 1
4.28BYJ-48 步進馬達 * 2
5.步進馬達驅動板 * 2
6.SG90 伺服馬達 * 1
7.2節AA電池盒 * 1
8.DC5521 電源插頭 * 1
9.16500 貍電池 * 2


組裝

整體上大致很好組裝,唯一要注意的是畫筆要先固定在固定桿上面,然後 SG90 伺服馬達維持在 90 度的情況下將固定桿鎖緊。

另外,為了避免輪子卡死,在將輪子鎖緊到 28BYJ-48 步進馬達時,要注意輪軸跟馬達固定板應該留一點空隙,約 0.5mm 即可。



調整 SG90 伺服馬達的角度

調整 SG90 伺服馬達的角度,是為了讓車子行走時畫筆也能夠正確地提筆與下筆。如果沒有調整好伺服馬達轉動的角度,有可能會出現若干狀況,例如畫筆卡住地面影響車子行進,或是畫筆沒有接觸地面以致沒有畫出線條...等等。


測試車子前進、後退的能力

程式採用 Arduino 官方 Stepper 函式庫,經過測試,激磁 512 步可以讓 28BYJ-48 轉動一圈(360度)。

ScratchBot 輪徑為 60mm,如果激磁 5120 步,輪子將會轉動 10 圈。套用公式

圓周長 = 直徑 * Pi

,可以計算出車子會行走如下之距離

車子行走距離 = 60 * 3.1416 * 10 = 1884.96 mm

約 1885 mm。


程式碼

//2016/08/13 輪子各轉10圈,讓車子前進、後退。
#include <Stepper.h>
#include <Servo.h>

const int stepsPerRevolution = 2048;
Stepper mRight(stepsPerRevolution, 2, 4, 3, 5);
Stepper mLeft(stepsPerRevolution, 6, 8, 7, 9);
const int steps = 512;
int laps;

Servo Pen;

void setup() {
  mRight.setSpeed(10);
  mLeft.setSpeed(10);

  Pen.attach(10);
  PenDown();
  laps = 10;
}

void loop() {
  Forward(steps * laps);
  Back(steps * laps);
}

void PenDown() {
  Pen.write(116);
}

void PenUp() {
  Pen.write(90);
}

void Forward(int steps) {
   for(int i=0; i < steps; i++) {
    mRight.step(-1);
    mLeft.step(1);
  }
}

void Back(int steps) {
  for(int i=0; i < steps; i++) {
    mRight.step(1);
    mLeft.step(-1);
  }
}

void Move(int steps) {
  if (steps > 0)
    Forward(steps);
  else
    Back(steps);
}

Upload 上述程式碼到 Arduino,讓 ScratchBot 實際跑一下。用皮尺量一下車子行走的距離,並觀察直線歪斜的程度。


問題

1.如果車子實際行走的距離不等於計算的距離時該怎麼辦?
2.如果原本應該是直線,實際畫出來有偏斜時該怎麼辦?
3.想要畫一條長100mm的直線,程式該怎麼寫?


變更設計

繪圖機構 - 由於繪圖機構目前是整組設置在車體內部,雖然此舉可以讓 ScratchBot 的外觀比較簡潔,但相對地也造成讓玩家不方便更換畫筆。玩家必須先拆開頂板上的螺絲、掀開頂板、取出整組繪圖機構、更換畫筆、放回繪圖機構、蓋上頂板,最後鎖緊螺絲,手續上真是繁雜。



考慮在下一版本將繪圖機構變更到頂板上面,雖然影響車子的外觀,但對於玩家在換畫筆時應該會便利不少。

輪子 - 在測試時發現輪子會打滑,影響繪圖精度。或許應該為輪子加上橡膠外胎,但好像沒有 60 mm 直徑的市售品。雖然市售品有 40mm 的,但如果改成 40mm 的輪子,那麼將會影響到固定在底板下方的電池盒,真是頭痛啊!

有了,繪圖機構組一旦變更位置安裝到頂板上方,那麼在原地方就騰空了,電池盒可以放到那兒,也就可以使用 40mm 的橡膠輪子,這件事情就解決了。


相關連結

控制步進馬達 https://zh.wikipedia.org/wiki/%E6%AD%A5%E9%80%B2%E9%A6%AC%E9%81%94


後記

在用程式調整 SG90 角度時,不慎將 ScratchBot 摔落地上,導致輪子變形損壞,還好後來用快乾膠修復,但已經無法恢復原狀,勢必會影響會圖精度。





沒有留言:

張貼留言