Scratch簡易人工智慧:有智慧的蟑螂與蟲蟲

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者的網誌裡有兩個Scratch遊戲,分別為 Scratch 遊戲:水中踩蟑螂Scratch 遊戲:蟲蟲危機,這兩個遊戲裡的蟑螂是不會動的,而瓢蟲就是直直前進地走,但現實生活中蟑螂與瓢蟲是不會這樣子走動的。底下簡短說明筆者的設計想法。

水中踩智慧蟑螂分身版
蟑螂在鞋子靠近(距離小於100)時,就會到處亂跑(隨機移動)


水中踩智慧蟑螂角色版
與分身版不同,角色版中的每個角色可以有自己的動作,所以筆者用了三種動作。

1. 隨機移動。


2. 沿著 X 軸移動


3. 沿著 Y 軸移動



智慧蟲蟲危機
榔頭靠近時,瓢蟲掉頭逃跑(向左轉180度 或 向右轉180度)。


遊戲試玩
水中踩智慧蟑螂 分身版 https://scratch.mit.edu/projects/210739581/
水中踩智慧蟑螂 角色版 https://scratch.mit.edu/projects/210774882/
智慧蟲蟲危機 https://scratch.mit.edu/projects/210770808/

Arduino 序列繪圖家 (Arduino serial plotter)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

Aduino 序列繪圖家是在Arduino 1.6.6增加的功能,以往要將感測器收集到的資料化成圖時,往往都使用 Porcessing 來輔助,但Arduino 1.6.6以後的版本就可以直接使用序列繪圖家來呈現了。一起試試看畫底下的三角函數圖形吧。


硬體材料:
Arduino UNO x 1

語法說明:
單一資料輸出時
Serial.println(data1);

兩筆資料要同時輸出時
Serial.print(data1);
Serial.print(" ");
Serial.println(data2);
或是
Serial.print(data1);
Serial.print("\t");
Serial.println(data2); 

範例程式:


從Arduino IDE 開啟序列繪圖家

示範影片(Demo videos):

Youtube的使用技巧

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


本文是參考『這就是95%使用者都不知道的「6大YouTube隱藏密技」,只要刪掉網址後的「ube」就會發生不可思議的事!』與筆者本身的使用的一些經驗所作的筆記。

1. 下載音樂
只要刪除網址中的「ube」例如 https://www.youtube.com/watch?v=i0UxYDqlX6o 變成 https://www.yout.com/watch?v=i0UxYDqlX6o

或是在 「.com ]前面與「ube」後面加上「to」,例如 https://www.youtube.com/watch?v=i0UxYDqlX6o 變成 https://www.youtubeto.com/watch?v=i0UxYDqlX6o


2. Youtube 音效庫
此網址 https://www.youtube.com/channel/UCorqI2EE1avwlTCekjfi0LQ 有很多的免費音效可供下載。

3. 快捷鍵

  • K 播放或暫停
  • J 前進10秒
  • L 後退10秒
  • 向右鍵 前進5秒
  • 向左鍵 後對5秒
  • 向上鍵 音量增加
  • 向下鍵 音量減少
  • F 全螢幕
  • M 靜音


4. 重複播放影片
可使用此網站 http://www.tubereplay.com 將要重複播放的 youtube 影片網址複製到 Replay 按鈕前方的 Enter YouTube URL 文字,按下 Replay 按鈕,就可以重複播放影片了。


Scratch 3 遊戲:接籃球

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者把原本的接雞蛋換成接籃球了。

教學影片(由高慧君老師提供)

裡下的積木非唯一方法

1. 建立得分變數


2. 男孩的角色積木


3. 籃球的角色積木



4. 生命的角色積木



那要怎麼改成接雞蛋呢?

專案程式範例:https://scratch.mit.edu/projects/210736447/

BlocksCAD 3D 積木程式建立雪花(Creating a 3D Snowflake Model with BlocksCAD)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

BlocksCAD是以類似Scratch積木程式來設計3D模型的網頁版編輯器。開啟網頁版編輯器後,可見到下圖:


在使用BlocksCAD建立雪花之前,筆者先以Scratch來說明如何做一個雪花圖形。首先切到貓咪角色的造型裡,將中心點設在左上角(這是因為筆者要使用向右旋轉的積木之緣故)

所用到的積木如下:

這裡使用到造型蓋章的功能,會劃出目前角色的造型,而筆者要讓角色造型轉一圈(360),美轉15度就蓋章一次,結果如下
此時就可以用不一樣的造型,以及外觀中的效果積木就可以畫出類似下圖的雪花
複習Scratch在設計雪花用到的觀念
1. 旋轉:轉多少次就複製一次角色造型。
2. 迴圈:要將角色造型複製幾次。
3. 造型複製:畫筆的蓋章功能。
要在BlocksCAD裡建立雪花可分為下面步驟
1. 建立雪花的基本形狀,例如正方體。
2. 平移此基本形狀,例如沿著X軸平移5各單位。
3. 旋轉此基本形狀,例如以X軸為中心旋轉15度。
4. 使用迴圈重複步驟1 ~ 3。

試試劃出下面的雪花圖形。





參考資料:
[1] https://www.blockscad3d.com/hourofcodesnowflake

Otto機器人之簡易版的移動方式

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

Otto機器人動作之程式碼分析2一文中,使用了比較複雜的方式,本文要以比較簡易的方式來實現前後左右的動作。首先說明本文中的腳與腿的位置,腿是指在Otto身體腰部的那兩個Servo,腳是指在Otto腿部的那兩個Servo,見下圖:


為了方便說明,所有的動作先以站立時為中心,實際情況還得考慮機構的一些細節,例如Otto的重量分布的問題。

前進與後退以左腳為起點,讓Otto的重心往前,並讓Otto左右擺動,Otto就會前進了;讓Otto的重心往後,並讓Otto左右擺動,Otto就會後退了。

角度變化可以類似下面的例子。
前進與後退時腿的角度變化:
90 --> 75 --> 60 --> 75 --> 90 --> 105 --> 120 --> 105 --> 90

前進時腳的角度變化:
90 --> 80 --> 70 --> 80 --> 90 --> 100 --> 110 --> 100 --> 90

後退時腳的角度變化:
90 --> 100 --> 110 --> 100 --> 90 --> 80 --> 70 --> 80 --> 90

向左走與向右走的想法就是讓重心偏移,也較就是在向左走時,重心偏左;在向右走時,重心偏右,這想法會很像螃蟹橫著走。

方法之一:
向左走 ==> 將Otto的右腳撐起,然後上下擺動左腳。
向右走 ==> 將Otto的左腳撐起,然後上下擺動右腳。

方法之二:
向左走 ==> 將Otto的右腳撐起,然後同時上下擺動兩腳。
向右走 ==> 將Otto的左腳撐起,然後同時上下擺動兩腳。

在此可以下載mBlock的範例程式

示範影片:


以上兩個影片不同處是在向左右走的方式細節不一樣。

不插電活動:圖畫紙程式設計

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

本篇文章主要參考Code.org上的不插電教材:「Paper Graph Programming」,進行的流程如下:
一、名詞認識
這部分要讓學生認識兩個名詞觀念:「演算法 Algorithm」與「程式 Program」。
可先讓學生先發表對這兩個字的認識,接著問學生Algorithm與Program的發音。

二、了解遊戲規則
說明有底下指令:
  • Move One Square Right 向右移動一格
  • Move One Square Left  向左移動一格
  • Move One Square Up 向上移動一格
  • Move One Square Down 向下移動一格
  • Fill-In Square with color 將方格塗上顏色
以上述指令進行此兩個例子的示範

此時,詢問學生有沒有比較好的指令表示方式?當然有囉。就是以圖形來表示:
問學生:「上圖的每個箭頭符號的動作是什麼?」並說明箭頭符號代表程式文字代表演算法

底下的演算法例子:
向右移動一格、向右移動一格、將方格塗上顏色。

可用圖形(也就是程式)表示:

於是我們就可以用更簡易的方式來表示之前的例子:

三、全班一起練習
以此例子作為開始:
老師念出下面的演算法讓學生開始用箭頭符號(程式)寫在紙上:
向右移動一格、將方格塗上顏色、向右移動一格、向下移動一格
將方格塗上顏色、向左移動一格、向左移動一格、將方格塗上顏色。
向下移動一格、向右移動一格、將方格塗上顏色、向右移動一格。

此時,可能會有學生發現有多餘的步驟,告訴他們這會在之後討論。設計出來的圖形(程式)會是:

如果學生還不熟悉如何進行的話,可再多進行幾個簡單的例子,例如:
等學生熟悉之後,再進行分組活動。

四、分組進行活動
此活動會用到Four-by-Fours Activity Worksheet活動檔案。
  1. 將學生分成兩人一組。
  2. 每組從活動檔案選擇一道題目圖形,例如 Image 5。
  3. 每組討論畫出此圖形的步驟(演算法)。
  4. 以箭頭符號來呈現這些步驟(演算法)的程式。
  5. 將程式與其他組別交換,以其他組別的程式畫出圖形。
  6. 選擇另一道題目圖形持續進行到六張圖形全部完成。


五、複習
1. 從此活動學到了什麼?
2. 使用相同的箭頭符號,但將「將方格塗上顏色」換成「放上磚塊」,那我們將會做什麼事呢?
3. 還可以使用這些箭頭符號來做什麼?
4. 底下哪一句符合學到的名詞觀念?還有哪一個名詞是今天學到的?
「一隻有很長的尾巴與漂亮羽毛的鸚鵡。」
「可以讓你完成工作的步驟清單。」
「一年開一次但聞起來氣味很重的花。」
5. 底下哪一種東西最像「程式」?
*有十二朵粉紅色花的花瓶。
*你最喜愛的歌曲之樂譜。
*裝滿小石頭的鞋盒。
解釋為什麼選擇這個答案。

六、個人練習
讓學生使用Graph Paper Programming Assessment來了解自己學習的狀況。


七、延伸思考
1. 設計圖形,並使用箭頭符號來說明如何畫出此圖形。
2. 有沒有其他箭頭符號可以使用的?
3. 如何設計出類似的活動?

Otto機器人之舞蹈動作App設計

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

下圖為附件Otto_Commander.aia的畫面說明,點一下順序列表上的舞步名稱就會刪除該舞步。

Inline image 1
App 操作方式可參考:https://www.youtube.com/watch?v=zQ1Mn5OlHy0

Otto 動作結果
https://www.youtube.com/watch?v=9HF9vCxN8I4


底下是想法的說明:
目前是以程式是以 a, b, c, d 四個英文字母對應四個舞步動作。
手機只要把這四個字母所組成的指令透過藍牙一次傳給 Otto就可以了。

例如手機傳送 abcdcba 這一串指令給 Otto 時,
Otto就會做 抖左腳抖右腳抬左腳抬右腳抬左腳抖右腳、抖左腳
七個動作。

原因是因為硬體會有緩衝的空間來處理Serial Port(TX與RX)的資料。
另外下圖是在此App舞步指令個數限制的積木所在說明:
Inline image 2


Otto機器人動作之程式碼分析2(Otto Source Code Understanding Part II)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

Otto機器人動作之程式碼分析(Otto Source Code Understanding Part I)一文中沒有看到前進、後退、向左轉、向右轉等動作,於是此文就要說明筆者的閱讀心得。Otto程式中有很多的動作都是呼叫Oscillator.cpp 裡的 Oscillator::refresh()函式

_inc 是以 360除以迴圈次數算出來的。
迴圈次數是以動作總時間除以每次取樣時間。

不過筆者是用別的方式,如下的mBlock積木:


根據refresh()副程式使用sine正弦曲線來產生平順的動作
例如要將馬達角度從60轉到90度時,不是使用下面的動作,
【設定馬達角度60】
【等待x秒】
【設定馬達角度90】

而是使用下面方法
【設定馬達角度60】
重複底下步驟直到跑完一個sine週期就是 2 * PI (360 度)
1.【設定馬達角度60 + 增加(些許)角度】
2.【等待n毫秒】

根據fresh()副程式,筆者設計出上圖的動作(action)積木指令。

成果影片:


讀者可以試著改變動作積木指令中的 LF、RF、LL、RL四個參數的值,例如將
前進積木從原本的
動作 30, 30, 20, 20 , 1 改成 動作 45, 45, 30, 30, 1

看看會怎麼樣。


給讀者思考的問題:
  1. 為什麼前進的動作角度要設定為 30, 30, 20, 20?
  2. 為什麼向左轉的動作角度設定為 30, 10, 20, 20?
  3. 可以不要使用正玹(sine)函數來完成前進、後退、向左轉、向右轉,這四個動作嗎?


MIT App Inventor 2 乒乓球遊戲

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者用過ScratchJava設計過乒乓球遊戲後,此次要用MIT App Inventor 2來開發囉。首先可從App Inventor Starter Apps下載此次用到的素材:PongStarter.aia
準備專案素材


在AI2中匯入此檔案:

選擇PongStarter.aia檔案


此時會看到下圖,如果沒有看到平台的話,請將平台的Y軸設定低一點的值。

程式設計
一、讓球移動
固定方向直線往下移動


不固定方向往下移動
這邊使用亂數(random integer from....)積木來決定球要往下移動的方向。

使球反彈
碰到螢幕邊緣反彈

碰到平台反彈


二、移動平台
水平移動平台


三、計算得分
使用一個副程式(Procedure):changeAndShowScore與一個變數(Variable):Score

並在球碰到平台、開始按鈕按下、重置按鈕按下,此三種事件發生時改變分數。




四、遊戲結束

五、改變背景與增加音效
在UI設計中新增一個Sound元件的積木

使用一個副程式(Procedure):playSound來播放音效

並在球碰到邊緣或平台時,播放音效

六、音效播放控制
此部分要讓使用者可以選擇是否要有音效,使用一個CheckBox來控制,並將命名為SoundOnChkBox。


接著把playSound副程式修改

影片:


參考資料:
http://www.appinventor.org/content/ai2apps/intermediateApps/pong