2016年8月27日 星期六

D2-1型循跡小車

閒來無事利用週末下午把購入已久的套件拿出來組裝。我個人是很討厭焊接這件事情的,這就是拖延至今才動手的原因。


D2-1型循跡小車是一款利用光敏電阻接收反射光的強弱來判斷黑線位置,光敏電阻遇到黑線時接收到的反射光變弱,此時它的電阻值會變大,綠色LED不會亮;反之,當光敏電阻遇到非黑線(也就是白色紙面)時接收到的反射光變強,此時它的電阻值會變小,綠色LED就會亮。

車前左右兩側的光敏電阻將訊號轉換成電壓傳給LM393比較器,LM393藉由判斷電壓就可以適時地驅動左右兩側馬達前進,進而達成循線的功能。



電路圖


開始組裝

打開夾鏈袋,把說明書攤開,倒出零件。


先清點一下零件是否齊全,底下圖片是材料表。


清點完畢後先拿出PCB板,對照一下電路圖,花些時間瞭解它的運作原理與佈線配置。


我焊接的習慣是先焊困難的、體積小的、價值高的,在這兒我想先焊電阻。這個套件只有10R、51R、1K和3K3等4種電阻(註1),你可以依照色碼來辨別,也可以用萬用電表量測,如下圖


逐一將電阻插入PCB板,然後用紙膠貼住固定,以避免在焊接時脫落



翻面焊接後用斜口鉗剪除多餘的針腳。在剪除時應注意避免被飛濺的針腳傷到眼睛。


接著要來焊LM393 IC座,一樣將IC座插入PCB板(注意缺口方向),用紙膠固定,然後焊接



繼續焊2個10K可變電阻和自鎖式按鍵開關。

提醒您: ***很重要***  ***很重要***  ***很重要***
1.自鎖式按鍵開關在插件前要注意開關的方向。也就是在按下時針腳的短路效果。
2.不同規格的自鎖式按鍵開關其針腳會有不同的連接方式,強烈建議您用電錶的電阻檔位或二極體(聲音)檔位量一下。
3.製造商品管良莠不齊,套件在出貨時可能會隨意拿開關湊數,所以您手上的開關有可能不適用。但沒關係,只要稍微修改即可。
4.底下是兩種不同的開關範例。

(圖片來源:王韋迪 老師)


(圖片來源:王韋迪 老師)

經電錶量測後,畫出它們的接腳圖如下


如果是白色開關,請如下插件

(圖片來源:王韋迪 老師)



如果是藍色開關,請先剪掉其中兩支針腳,再如下插件




接著焊8550電晶體、100uF電容和綠色LED。
(注意LED和電容長腳均為+極,8550電晶體腳位按照PCB板上的圖示插件即可)



鎖上M4方向輪,並焊接光敏電阻和紅色LED。
(注意光敏電阻和紅色LED插件的方向是在PCB背面,並且光敏電阻和紅色LED離地約5~10mm)



將電線分成4段,末端去皮約3~5mm。為使焊接點不易斷裂,建議電線穿過馬達塑膠片再焊接到馬達銅片。


鎖上輪胎,須注意馬達貼紙、輪胎和PCB板之間的關係



撕開背膠,將電池盒黏貼到PCB板。要注意電源線方向,最好靠近PCB板電源接點


將電源線穿過小孔,焊接到電源接點。
(注意紅色電線為+極)


現在可以撕開背膠,將馬達固定到PCB板上。
(黏貼時要注意兩只馬達要保持平行,並且讓輪胎不會干涉到PCB板。)


將電池裝入電池盒,按下開關接通電源,用手抓住馬達電源線碰觸PCB板上的馬達接點(標示'M'處),觀察輪胎轉動的方向。M4方向輪那一端是車頭,如果輪胎轉動的方向不正確,可以試著將電線調換,再次碰觸馬達接點直到輪胎轉動方向正確。最後將電線焊到接點上,並稍微整理一下電線,避免卡到輪胎。



調試

PCB板上有2只10K的可變電阻,它是用來調整光敏電阻的靈敏度,如果您的小車沒有正確地行駛在黑線上,那麼您可以使用螺絲起子調整可變電阻來讓它正確地行駛。



註1:電阻值可能會稍微不同,這不會影響到整體運作。


後記

1.沒想到我一打開電源它就正確地循線而行,沒有調整到可變電阻,可說是超級好組裝。另外,它行駛的速度還蠻快的,循線能力也不錯,如果 Arduino 程式寫得不好,說不定 Arduino 小車還會輸給 D2-1 呢。

2.看來可以叫兒子用黑色電工膠帶去貼一些各種形狀的線來測試一下。

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 摔落地上,導致輪子變形損壞,還好後來用快乾膠修復,但已經無法恢復原狀,勢必會影響會圖精度。