07夏令營教學分享

(2017/07/15)

自從四、五月摸索OTTO機器人後,第一次從事教學,這次是為期五天的夏令營(07/10~07/14),學生為三~六年級的國小學生18位,並用我自己首創的紅外線遙控器來控制OTTO機器人,感覺學生都玩得滿開心的,以下為教學歷程及重要技巧記錄,分享出來希望對大家在OTTO的教學有幫助。

一、材料取得

  • OTTO機器人外殼:如果學生數多,不建議自行列印,我光一顆頭要印兩個多小時,而且我的3D印表機的機型是prusa i3,印腳(leg)的部分很容易失敗!如果要自己印,Otto 3D模型檔案網址:http://www.thingiverse.com/thing:1568652

    • 所以我去淘寶找到兩家,各買一套回來比較看看,分別是:

    • 商家1:(52RMB)

    • 商家2:(50RMB)

    • 兩家外殼比較後覺得差不多,所以我買商家1的外殼,但等大量購買後,發現品質不是很好,所以如果以後要買,我會找商家2來購買。

    • 註:又發現另一家商家

  • OTTO機器人的內部電子零件:上面介紹的兩家也都有賣,但我還是習慣到 都會明武電子 購買,比較便宜,但有時品質會打折扣。

      • 這次購買的零件,如下:

二、環境準備

    • 將上面下載的壓縮檔解壓,並將解壓後libraries下的資料夾複製到 arduino的libraries的資料夾下

    • 題外話:我自己測試這次下載的 OTTO_avoid (避障程式),發現OTTO沒有動作,但上次下載的 OTTO_avoid則正常,我比較了兩個檔案後發現,內容只有一條指令不一樣,如下:

        • void setup(){

        • //Set the servo pins

        • Otto.init(PIN_YL,PIN_YR,PIN_RL,PIN_RR,true, -1, -1, 8, 9); //這樣OTTO不會動

        • // Otto.init(PIN_YL,PIN_YR,PIN_RL,PIN_RR,true); //這是舊版寫法,這樣OTTO就會動

        • Otto.sing(S_connection); //Otto wake up!

        • Otto.home();

        • delay(50);

        • Otto.sing(S_happy); // a happy Otto :)

        • }

    • 下載後將motoduino_v8.zip解壓縮,並將整個motoduino_v8的資料夾複製到arduino/libraries下!

    • 環境建置完成

三、教學歷程

<測試電子元件>

  1. 由於這次的營隊有5天,所以我也不急著做OTTO機器人,先向學生介紹什麼是「創客」,我教學的影片是 2015.10.17【民視異言堂】MAKER 自造者https://youtu.be/aDMZSVY2O4k

  2. 因為我們的OTTO機器人外殼是3D印表機列印出來的,所以也向學生介紹什麼是「3D印表機」,剛好我所使用的3D印表機與張文宏老師的是同一款,所以就利用張老師的影片來教學,3D列印體驗課程 運作原理篇 人聲加大版 https://www.youtube.com/watch?v=vZI-dv2r77Q

  3. 看完影片後,再實地利用我的3D印表機列印OTTO的頭部給學生看,並將OTTO機器人的外殼(頭部、身體、兩隻腿(leg)及兩隻腳(foot))發給學生

  4. 接下來介紹什麼是「 Arduino 」 ,每一位小朋友發下一片Arduino Uno板讓學生觀察,並利用LazyTomato Lab 軟爛番茄工作室的影片來教學 https://youtu.be/B4T8hzO0IYc

  5. 發下 Arduino Nano板讓學生觀察,並與Uno板做比較(數位與類比腳位介紹),觀察後再把Uno板收回!

  1. 發下 Nano 的擴展板(擴充板),並說明為何要使用擴展板?因為Nano控制板的VCC與GND的針腳太少,所以利用擴展板(擴充板)來增加GND與VCC的針腳!很多模組(或元件)都將S(訊號)、V(5V或VCC)、G(GND或接地)形成一組方便與擴展板來連接!如果不用擴展板,也可使用「麵包板」來達到同樣功能。

  1. 接下來將 Nano控制板與擴展板進行組合,請先對好腳位再壓下,這時要注意,有些學生會左右顛倒把USB接頭朝內,有些接腳或插槽歪掉,可能要調整一下才能對準插入!

    1. (相片待補)

  2. 每人發下4個 SG90伺服馬達,並說明伺服馬達的功能(控制角度),與一般常見的直流馬達或減速馬達(自走車用)不同!並介紹接腳就是一組SVG的3P接腳,V是接5V提供SG90的電源,G是接GND(接地)讓SG90的電能夠回到負極形成通路,S是訊號輸入,就像一組開關,控制SG90的轉動角度。(註一般G線(負極)為黑色線或咖啡色線;V線(正極)為紅色線;S線(訊號)為橘色線)

    1. 測試SG90,將四個SG90分別接到擴展板的2、3、4、5號的針腳,接的時侯,要注意SG90的橘色線的接腳要接到S的針腳,紅色線的接腳要接到V的針腳,不能接反了!!(可參考下圖)

    1. 學生完成的情況,如下:

  1. 下載 OTTO_todo.ino 的arduino程式 ,這部分很奇怪!!以前舊版下載解壓縮後有附此程式,但上面https://github.com/OttoDIY/DIY下載的竟然沒有此程式,所以請直接在此下載OTTO_todo.ino(點此下載)的程式 (這部分也可參考之前的文章03-官網程式)。下載完成後,直接利用檔案總管,到「下載」的資料夾,找到OTTO_todo.ino

  1. 快點 OTTO_todo.ino 檔案二下,這時會利用Arduino IDE程式來開啟此檔,若出現如下畫面,記得按「好」

  1. 並開啟此檔arduino程式

    1. 利用USB線,將Arduino Nano板與電腦連接,經過幾秒後,更改工具中的開發板為Arduino Nano(如下圖的 2),並選擇正確的序列埠(如下圖的3,通常不會是COM1及COM2),這邊學生最常出現的問題是COM3(或COM4、COM5)沒有出現!這時只好請學生再等待一下或把USB線拔出重插或Arduino IDE關閉後重開,如果還是不行就重新開機或換一台電腦來用!

    1. 將OTTO_todo程式上傳(燒錄)到Nano板子去,點上圖的4的箭頭圖形就是上傳檔案!

    2. 測試馬達是否都會運作,點選Arduino IDE右上角的序列埠監控視窗(如下圖1),並且將右下角的鮑速選115200,中間換行方式選「NL&CR」,最後就是在指令列下指令!!這邊只要先下 M 1 (M要大寫;M 與1之間要有空格;這指令就是要OTTO前進的指令,也就是4個馬達都會動),第二個指令是 S (停止,而且4個馬達都會停止在90度)就可以了!另外也可以 G 90 90 90 90 (G 4個角度),則4個伺服馬達都會轉到90度!只要測試馬達都會動就OK~~

    1. 註:成語教學,一開始請學生拿簽字筆在4個伺服馬達90度的位置做個記號(這部分沒做也沒關係!,如下

    1. 沒想到一位學生把記號畫在伺服馬達的主體上(如下圖,沒有照清楚),這讓我馬上進行「刻舟求劍」成語的教學,居然好多學生沒聽過這成語!!

      1. 測試超音波距離感測器 HC-SR04(我都向學生稱它為「眼睛」,只要說到「眼睛」,學生就知道是在說此感測器),這邊安裝時要注意Trig要接到D8、Echo要接到D9,學生容易將這兩個腳位接反!然後同伺服馬達一樣,在序列埠監控視窗的指令列下指令 D (一樣要大寫),就可以利用感測器測得距離!!也在此向學生介紹超音波距離感測器的一眼寫T,指著是發出超音波的訊號;另一眼寫R,指著是接收訊號,並簡單的出一道題目給學生答:假如超音波的速度是每秒500公尺,當2秒後收到訊號,請問這位體離我有多遠?答案是500公尺,但有幾位答1000公尺!

    1. 測試蜂鳴器,這邊用的是無源蜂鳴器,只有2隻接腳,有+的符號為正極要接到D10的S腳位上,另一隻腳接到D10那組的G腳位上,安裝結束後,一樣透過指令列下指今來發出聲音,這邊的指令有 K 1 到 K 19(K要大寫, 中間要空格)!

    2. 如果以上測試都沒問題,代表我們所使用的伺服馬達、超音波距離感測器、蜂鳴器都是正常的,接下來就要開始組裝OTTO機器人了!!

<組裝OTTO機器人>

  1. 先把剛剛測試的4個伺服馬達的前兩個(接D2、D3)伺服馬達接到身體放伺服馬達的位置,並利用長螺絲鎖緊!機器人面向前(身體內部前方有一個三角形記號)左側的伺服馬達接到D2、右側的伺服馬達接到D3!這邊要注意要讓伺服馬達向下伸出,因為有些外殼印的不是很好,伺服馬達無法與放伺服馬達的洞完全符貼,所以要施加一點力,讓伺服馬達完全到定位!並且完全鎖緊!

    1. 學生組裝畫面

    1. 接下來要將兩隻腿(leg)與身體結合,由於剛剛的伺服馬達都是停在90度向正前方的位置(我們在前面步驟也有做上標記),所以直接將腿朝正前方與伺服馬達結合(照道理只剩短螺絲一隻,但建議還是用長螺絲來鎖,比較堅固)

      1. 兩隻腿都朝正前方鎖上

    1. 為避免誤差太大,導致歪腿的或內八、外八,因此再同上面伺服馬達的測試步驟測試一下!也就是先下 M 1 指令看兩隻腿會不會左右擺動,然後再下 S 指令停止伺服馬達時,兩隻腿是否都朝著正前方,如果有歪就馬上拆螺絲進行重新調整,調整完後再測試,一直到滿意為止!

    2. 註:這邊容易出問題的是腿與伺服馬達的連接處無牙造成空轉,螺絲也鎖不緊!這時可以利用「快乾膠」來黏著伺服馬達外露的部份與腿部,注意不要把馬達給黏死!

    1. 將另2個伺服馬達與腳底結合,一樣左腳的伺服馬達接D4那組腳位,右腳的伺服馬達接D5那組腳位!由於剛剛的伺服馬達都是停在90度上方的位置,所以直接將伺服馬達朝正上方與腳結合

    1. 與上面兩個伺服馬達一樣,為避免誤差太大,導致腳不能踏平地,因此再同上面伺服馬達的測試步驟測試一下!也就是先下 M 1 指令看兩隻腿會不會左右擺動,然後再下 S 指令停止伺服馬達時,兩隻腳是否都朝著正上方,如果有歪就馬上拆螺絲進行重新調整,調整完後再測試,一直到滿意為止!

    2. 註:這邊容易出問題的是腳與伺服馬達的連接處無牙造成空轉,螺絲也鎖不緊!這時可以利用「快乾膠」來黏著伺服馬達外露的部份與腿部,注意不要把馬達給黏死!

    1. 將上面兩個部分結合,由於之前在此有失敗發生過,所以請小朋友結合時要特別注意,又由於這地方要出比較多力量,小朋友第一沒力,第二怕出太大力把腿或腳給弄斷,很多都拿來要老師裝他裝上

      1. 這部分完成,就可說已快完成了!

    1. 小朋友完成情形

    1. 最後是頭部組裝,這部分比較簡單,先裝眼睛,再裝擴展板,短螺絲這時就派上用場,把擴展板固定起來

    1. 組裝完成

<控制OTTO機器人>

  1. 接下來開始控制OTTO機器人,這邊一樣使用Arduino IDE下的序列埠監控視窗下指令來控制,之前只有下M 1及S,現在以下的指令均可使用((一樣可以參考之前的文章03-官網程式

    1. case 1: //M 1 1000 前進

    2. case 2: //M 2 1000 後退

    3. case 3: //M 3 1000 向左

    4. case 4: //M 4 1000 向右

    5. case 5: //M 5 1000 30 上升

    6. case 6: //M 6 1000 30 月球漫步向左走

    7. case 7: //M 7 1000 30 月球漫步向右走

    8. case 8: //M 8 1000 30 搖擺

    9. case 9: //M 9 1000 30 扭一扭

    10. case 10: //M 10 1000 30 扭一扭

    11. case 11: //M 11 1000

    12. case 12: //M 12 1000 30 撲

    13. case 13: //M 13 1000 30 撲

    14. case 14: //M 14 1000 20 墊腳尖

    15. case 15: //M 15 500 向左彎曲

    16. case 16: //M 16 500 向右彎曲

    17. case 17: //M 17 500 搖右腳

    18. case 18: //M 18 500 搖左腳

    19. case 19: //M 19 500 20 雙腳抖動

    20. case 20: //M 20 500 15 上升

    21. 指令 T (與蜂鳴器有關)

    22. 蜂鳴器指令(Tone)為 T 頻率 毫秒時間

    23. 例如:

    24. T 523 500

    25. T 1046 1000

      1. 音階--頻率對照表(單位:Hz)

      1. case 1: //K 1 連線聲

      2. case 2: //K 2 斷線聲

      3. case 3: //K 3 驚喜聲

      4. case 4: //K 4 哦1

      5. case 5: //K 5 哦2

      6. case 6: //K 6 可愛

      7. case 7: //K 7 睡覺

      8. case 8: //K 8 好開心

      9. case 9: //K 9 超開心

      10. case 10: //K 10 微開心

      11. case 11: //K 11 傷心

      12. case 12: //K 12 迷惑

      13. case 13: //K 13 放屁1

      14. case 14: //K 14 放屁2

      15. case 15: //K 15 放屁3

      16. case 16: //K 16 模式1

      17. case 17: //K 17 模式2

      18. case 18: //K 18 模式3

      19. case 19: //K 19 按鈕按下

    1. 指令 H (結合動作與聲音)

      1. case 1: //H 1 好開心

      2. case 2: //H 2 超開心

      3. case 3: //H 3 傷心

      4. case 4: //H 4 睡覺

      5. case 5: //H 5 放屁

      6. case 6: //H 6 迷惑

      7. case 7: //H 7 愛

      8. case 8: //H 8 生氣

      9. case 9: //H 9 煩躁

      10. case 10: //H 10 神奇

      11. case 11: //H 11 波動

      12. case 12: //H 12 勝利

      13. case 13: //H 13 失敗

  1. 學生玩得不亦樂乎

<利用紅外線遙控器控制OTTO機器人>

  1. 這部分請參考 06紅外線遙控 ,加裝了一個紅外線接收器(接在D7)

  1. 註:學生在問:紅外線遙控器內有一顆LED燈,那是做什麼的?那是紅外線發射器,雖然是LED燈,但接上電池是看不到亮燈,因為我們看不到紅外線....

  2. 提供 OTTO_IR.ino檔供學生下載,作法同上面下載OTTO_todo.ino的方法

    1. 請學生開啟 OTTO_IR.ino,並進行修改,我請學生修改按1鍵要執行的指令

    1. 有底下這些指令可以用

      1. 動作指令:(用黑色字)

          1. 音效指令:(所發出的聲音於附件,使用表格後面的指令)(註:上面程式只要用到聲音的指令,遙控器就會失靈,這部分有空再來解決!!)

        1. 官方提供的動作與聲音的組合:

          • Otto.playGesture(OttoHappy); //好開心

          • Otto.playGesture(OttoSuperHappy); //超開心

          • Otto.playGesture(OttoSad); //傷心

          • Otto.playGesture(OttoSleeping); //睡覺

          • Otto.playGesture(OttoFart); //放屁

          • Otto.playGesture(OttoConfused); //迷惑

          • Otto.playGesture(OttoLove); //愛

          • Otto.playGesture(OttoAngry); //生氣

          • Otto.playGesture(OttoFretful); //煩躁

            • Otto.playGesture(OttoMagic); //神奇

          • Otto.playGesture(OttoWave); //波動

          • Otto.playGesture(OttoVictory); //勝利

          • Otto.playGesture(OttoFail); //失敗

  1. 請同學複製想要的指令,貼到OTTO_IR.ino檔的按1鍵的部分,所以同學這時是同時開啟這些指令的網頁及Arduino IDE環境下,互相切換!等同學完成一支舞後,把OTTO_IR檔上傳(燒錄)到Nano板,並用紅外線遙控器按1,這時OTTO機器人就會跳你設計的舞步了!!這時同學比較容易出錯的地方是

    1. 1. 指令後面沒有加 ; (arduino 的語言,每一行最後以 ;做結束 。 // 這是備註的符號)

    2. 2. 沒有把指令寫在 { } 之間

    3. 由於這支紅外線遙控器,除了上方的方向鍵我不去改它外(也就是按向上就是前進;按向下就是後退;按向左就是左轉;按向右就是右轉;按OK就是歸位);下方的數字鍵一共有12個,所以可以放置12位小朋友所設計的舞步,檔案如OTTO_IR2.ino所示

  1. 最後,請每位小朋友開啟OTTO_IR2.ino,並將此檔上傳(燒錄)到你的Nano板上,這時除了可以看自己設計的舞步也可以看別人設計的舞步,這課程也就在此結束!

四、結論

  • 第一次開OTTO機器人的課,學生涵蓋3到6年級的學生,發現問題最多的地方是在組裝的部分,特別是品質不好的外殼,不是裝不上去就是到最後造成空轉,所以外殼的品質真的很重要!再加上學生的手力不足,螺絲無法鎖緊!所以早上的課結束後,我都會利用下午的時間再把學生有問題的部分進行維修、調整!

  • 關於這次利用Arduino IDE下的文字模式環境來下指令或修改局部的程式,對學生而言似乎是沒有問題!本來還想利用宇宙機器人的Transformer下的OTTO積木讓學生編舞,但後來沒有時間,學生對文字模式也沒有排斥就作罷!

  • 有人問我電源的問題:

    • 我是請學生回家利用行動電源來提供電力,這樣就可以離線操作!

    • 我也有提供學生9V電池的插座,但利用9V電池有時動了一下,有時又不動,似乎不是很好!!

    • 還有人教我可以利用mbot的鋰電池來提供電力,但接頭可能要改一下!

    • 還有人教我可以利用一顆3,7V的18650或14500的電池,而且只要一顆就可以動了

    • 當然,官方所提供的四顆3號電池也是一種方法

  • 第一次教學,成功!!