2018年6月14日 星期四

仿生獸電機改造續集

        這一篇是「風力仿生獸及電機改造」的續集,所以對於風力仿生獸的來源部份就不再多介紹…但會有使用Tinyplan來當主控板的想法,主要是我覺得使用micro:bit那隻的作法走得沒那麼順暢,分析一下原因是因為micro:bit加上robot:bit擴充板再加上二顆TT馬達實在有點重,走起來的負擔比較大,尤其是左右轉的時候~
        使用的塑膠料一樣是網購買的,靠風力的架構,沒有電機的設計,零件已算是很精美了,小朋友若直接組裝也會非常有趣,以小朋友的角度來說,我覺得可以先組起風力的版本玩一玩,領會齒輪軸帶動黃金比例的支架運動的樣子,接下來拆了它,學一點電機的知識(至少知道馬達怎麼轉動)、學個Arduino、Micro:bit或其他小單板,然後思考如何結合進去,利用電機取代原來的風力帶動…
小朋友自己看說明獨力完成也是一種很好的練習
※插播一個相關的題外話:我還買到另一種兩仿生機器人,運動原理是一樣的但像有二隻腳走路…重點是它被設計成風力電力雙用,這也是我們可以納入學習的想法!
樣子比較像機器人
上面這段影片中,朝風車吹風,機器人便迎風前進…
同樣一個裝置,改用二顆小電池帶動,單純的電機,沒有控制機制,給電就向前走就是了!
        回到這篇的正題,我們先來認識一下Tinyplan板,這是一塊台灣在地的MiniPlan機器人團隊所開發的all-in-1伺服馬達控制器,可以搭配小型伺服馬達(Servo)之操控,內建WiFi晶片,可以同時控制8個Servo,而且自帶可充電電源,與Arduino IDE 相容(意思是可以利用Arduino IDE環境來編輯程式

Tinyplan功能強大,使用原廠ESP-WROOM-02晶片 
編寫程式的方法和使用Arduino板類似


        這次的電機動力就不使用減速馬達了,改用二顆360度的伺服馬達來帶動中軸轉動,使用便宜又大碗的輝盛TowerPro SG90就對了 。
Tinyplan只用來接二顆Servo是有點大材小用
        這時先想著如何讓Servo的旋轉軸能跟仿生獸的曲軸連動的方法我的作法是直接利用模型內原本零件,用螺絲將舵柄鎖上。

就自己想辦法做做手工,用膠水黏應該也可以
接上主板測試一下…,Tinyplan的連接方法與Micro:bit使用藍芽是不一樣的,它的方式是走WIFI,它自己會是一個無線AP,用電腦或手機平板連上AP後,利用瀏覽器就可以操控,當然得先把寫好程式的程式Upload進去。
兩個伺服機分別當左右軸,所以旋轉方向相反,反正接上去如果發現錯了再反接就好了,測試沒問題後,我利用長螺絲將兩顆伺服馬達固定…並且鎖上仿生獸上頭去!
想了這招
        值得一提的是,我這次的Tinyplan並沒有黏死在上頭而是用「掛的」,考慮到之後如果要拆解重裝的方便,就去電子材料行東找西找,自己發揮一下想像力,看看小零件怎麼湊和可以達到自己想要的目的,我覺得蠻好玩的是這一塊…
花了一點時間思考怎麼結合
        最後當然就是做好囉!拿來玩玩看,有影片有真相~
        走起來的樣子,我覺得比上一版的好上許多,靈活度大增,只不過寫程式的方法就不像Micro:bit那種Blockly積木拖拉式友善,不過如果有人帶及解釋的話倒也不至於難到小朋友不能理解~
※在一般課堂上,有一點是我覺得更困難的是錢錢的問題,零件和電機都需要額外的錢購買,這也是難以在小朋友身上普及的最大原因,有人會說老師操作給小朋友看的方式教學也可以,我個人覺得那是沒什麼用的,千知萬知都比不上用自己手動手來一次的好!
※給吳秉涎帥哥看一下這隻仿生獸,他說狗頭掛在上面看起來有點可怕,就改一下,弄上個超音波眼睛~
這就不可怕了吧!
※後記:
一開始只是想改造一下風力仿生獸的動力來源,使用Tinyplan當主板後,覺得只用來驅動二個Servo會不會太浪費了,這塊板子被設計來驅動8個Servo,也就是8個有pwm,電路方面就是能供應足夠的電流,加上個Ultrasonic吧!讓它長眼~再放個Buzzer可以發出聲音,最後再頭頂上加個8x8的Led,可說是閃閃動人,也把板上的pin給插滿,才不顯得浪費了!
最後的樣子
在程式方面,主要是SETUP段的初始化及LOOP段的迴圈偵測
void setup(void) {
//8x8 LED及Buzzer初始
  myBEAST.initLEDMatrix(BEAST_PIN_LED_DIN, BEAST_PIN_LED_CS_PIN, BEAST_PIN_LED_CLK_PIN, MATRIX_DIR_270);

  myBEAST.initBuzzer(BEAST_PIN_BUZ);
............
//開機時唱一句,閃幾個圖
  myBEAST.sing(12);
  myBEAST.putMouth(20);
  delay(100);
  myBEAST.putMouth(21);
  delay(100);
  myBEAST.putMouth(22);
  delay(100);
  myBEAST.putMouth(23);
  delay(100);
  myBEAST.sing(0);
  delay(100);
  myBEAST.putMouth(0);
}
迴圈
void loop(void) {
//偵測是否進入使用超音波的模式
if (Ultrasonic_OnOff == 1) {
  myBEAST.putMouth(1);
  delay(100);
    if (ultrasonic.distanceRead() > 11 && ultrasonic.distanceRead() <= 20)
    {
      // 如果前方有障礙物在20公分到11公分之間→右轉動作
      右轉的程式碼
    }
  else if (ultrasonic.distanceRead() > 20)
   {
前進的程式碼
   }
else if (ultrasonic.distanceRead() <= 11)
    {
      // 倒退的程式碼
    }
}
上頭並不是完整的程式,只是表達出程式邏輯而已~最後,這仿生獸就活靈活現的…

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。