2017年4月25日 星期二

mBot 入門教學:mBot 設計圖紙

有不少學校會為學生提供卡紙,讓他們在卡紙上繪畫,然後放到 mBot 的超聲波感應器及車輪上。

這裡我們將提供圖紙樣本下載(按下放大圖片,再右鍵另存目標),每張圖紙的尺寸是A5(148mm高 x 210mm闊),列印時要注意,切勿縮放列印,以免尺寸不合。

mBot 設計圖紙下載:





比卡超:


湯瑪士小火車:

復仇者聯盟:


本地學校科研分享:手語翻譯手套


去年年中,兩名美國華盛頓大學的學生研發了 SignAloud 手語翻譯手套,配合電腦使用,戴上後就可以將手語配對數據庫中的詞組,直接翻譯成語音及文字。不出一年,香港就有中學生進一步發展這個產品。基督教宣道會宣基中學的三名中五學生-鍾浩輝、陳嘉龍及伍澤林,製作出便攜式手語翻譯手套,配合手機應用程式即可進行翻譯,方便聾啞人士與人溝通。


▲基督教宣道會宣基中學中五學生(左起)伍澤林、鍾浩輝、陳嘉龍。

詳細內文請參閱文章來源:香港中學生開發手語翻譯手套 手語變成多國語音文字 — unwire.hk

2017年4月20日 星期四

mBot 入門教學:mBot 循跡車

簡介

mBot 機械人的巡線感應器左、右兩對紅外線感應器的距離約有 1.2 厘米。mBot 機械人的巡線感應器簡化了使用方法,將紅外線反射結果分成兩種:黑色與白色,其中反射能量強的為白色,反射能量弱的為黑色,因此根據回傳值,共有四種情況:

Sensor 1(左邊)Sensor 2(右邊)回傳值說明圖示
黑色黑色0完全處於黑線上
黑色白色1靠左是黑線
白色黑色2靠右是黑線
白色白色3完全處於白線上

直線前進

狀態 0(左黑右黑):表示仍在軌道內,應該繼續前進。


狀態 1(左黑右白):表示車身向右偏離軌道,應該左轉回軌道。


狀態 2(左白右黑):表示車身向左偏離軌道,應該右轉回軌道。


狀態 3(左白右白):表示車身完全偏離軌道,應該設法回到軌道。

小結


直角銳角

剛才學習的只針對直線軌道,並未針對軌道中出現的特殊情況,但 mBot 機械人每次只會運行一個程式,所以我們需要設計一個能夠應付所有情況的巡線機械人。接下來,我們先了解「直角銳角」的處理方法:

如果我們使用「直線前進」的程式,測試「直角銳角」的情況,會發現 mBot 機械人反覆前進後退的情形:

  1. 我們會在修正這個情況時,先讓 mBot 機械人左轉或右轉(視乎路線)
  2. 然後進入一個重複迴圈,離開迴圈的條件偵測到轉向正確(變數「轉向正確」= 1)
    1. 累積變數「轉動次數」
    2. 如果左轉碰到線,即表示轉向正確,設定變數「轉向正確」= 1 ,跳出迴圈,回到原本的巡線走法。
    3. 如果變數「轉動次數」累積達「轉動上限」 ,表示轉向錯誤,需要反向轉動,待找到黑線後,設定「轉向正確」= 1 ,跳出迴圈,回到原本的巡線走法。

「轉動上限」的數值從何而來?是要根據機器人馬達轉速,當時電量狀況,以及軌跡型態所嘗試錯誤得到的數值,需要自行測試。

巡線避障


當我們在巡線時遇到障礙物,我們可以用以下方法避開:
這個方法較為簡單,只需要利用超聲波感應器偵測到一定距離後,開始執行走半個正方形的路線,然後回到軌道上即可。但這個方法路程遠了,因而較為費時。
這個方法則較為複雜,需要利用超聲波感應器偵測到一定距離後,先向外轉向,再設定左右兩個馬達以不同速度前進,從而讓 mBot 機械人順暢地走弧形,然後回到軌道上即可。這個方法需花時間反復測試,方可成功,但走的路程短了,因而較為省時。

2017年4月19日 星期三

Makeblock電子模組手冊:Me 巡線模組

簡介

Me 巡線模組專為巡線機器人設計。它包含兩個感測器,每個感測器有一個紅外線發射 LED 和一個紅外線感應光電電晶體,機器人能夠沿著白色背景上的黑色線條移動,或是黑色背景上的白色線條移動,具有檢測速度快,電路簡單等優點。本模組介面是藍色色標,說明是雙數位口控制,需要連接到主機板上帶有藍色標識介面。

技術規格

  • 作業電壓:5V DC
  • 工作溫度:0 ~ 70℃
  • 檢測範圍:1 ~ 2 cm
  • 檢測角度:120° 範圍內
  • 控制方式:雙數位口控制
  • 模組尺寸:51 x 24 x 22 mm (長 x 寬 x 高)

特點

  • 模組的白色區域是與金屬梁接觸的參考區域
  • 具有兩隻 LED 指示燈用於巡線回饋
  • 具有反接保護,電源反接不會損壞 IC
  • 注意本模組容易受自然光的影響,對環境光變化較大的場所有一定的局限性
  • 支援 Arduino IDE 程式設計, 並且提供運行庫來簡化程式設計
  • 支援 mBlock 圖形化程式設計,適合全年齡用戶
  • 使用 RJ25 介面連線方便
  • 模組化安裝,相容樂高系列
  • 配有 S1、S2、VCC、GND 接頭支援絕大多數 Arduino 系列主控板

引腳定義

Me 巡線模組有四個針腳的接頭,每個針腳的功能如下表:

序號引腳功能
1GND接地
2VCC接電源
3S1感測器1資料輸出
4S2感測器2資料輸出

連接模式

以 RJ25 連接

由於 Me 巡線模組介面是藍色色標,當使用 RJ25 介面時,需要連接到主控板上帶有藍色色標的介面。以 Makeblock Orion 為例,可以連接到3,4,5,6號介面,如圖:

以杜邦線連接

當使用杜邦線連接到 Arduino Uno 主機板時,模組 S1 與 S2 引腳需要連接到 DIGITAL(數位)口,如下圖所示:

原理解析

Me 巡線模組是根據反射式光電感測器原理開發的機器人配件。利用紅外線在不同顏色的物體表面具有不同的反射強度的特點,在小車行駛過程中不斷地向地面發射紅外線,當紅外線遇到白色紙質地板時發生漫反射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,小車的接收管收不到紅外線;通過是否收到反射回來的紅外光為依據來確定黑線的位置和小車的行走路線(巡線感測器照到黑線時輸出為 0,照到白線時輸出為 1)。

編程指南

mBlock 程式設計

有關 mBot 巡線車的編程策略,可參考這裡

Arduino程式設計

如果使用 Arduino 程式設計,需要使用資源庫 Makeblock-Library-master 來控制巡線模組。

本程式通過 Arduino 程式設計每 200 毫秒(ms)不斷讀取感測器的值,從串口監視器可以看出兩個感測器是否在黑線之外。

Me 巡線模組指令列表:

函數功能
MeLineFollower(uint8_t port)定義連接埠
uint8_t readSensors()讀取感測器狀態

程式範例

#include "MeOrion.h" /* 本範例以Me Orion作主控板 */
#include <Wire.h>
#include <SoftwareSerial.h>

MeLineFollower lineFollower(PORT_6); /* 本範例中以連接埠6連接Me 巡線模組 */

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorState = lineFollower.readSensors(); /* 取得當時Me 巡線模組的回傅值 */

  switch(sensorState) {
    case S1_IN_S2_IN:
      Serial.println(“Sensor 1 and 2 are inside of black line”);
      break;
    case S1_IN_S2_OUT:
      Serial.println(“Sensor 2 is outside of black line”);
      break;
    case S1_OUT_S2_IN:
      Serial.println(“Sensor 1 is outside of black line”);
      break;
    case S1_OUT_S2_OUT:
      Serial.println(“Sensor 1 and 2 are outside of black line”);
      break;
    default:
      break;
  }
  delay(200);
}

2017年4月17日 星期一

編程概念認識:程序結構(Program Structure)

簡介

當我們在撰寫 mBlock 拼圖程式的時候,往往會依照不同的需求,而撰寫一連串的拼圖命令方塊,並且當某一件事件發生時,它會根據「不同情況」來選擇不同的執行動作,並且要反覆的檢查環境變化。因此,我們想要完成以上的程序,就必須要學會拼圖程式的三種流程控制結構。

循序結構(Sequential)

循序結構是指程式由上至下,逐一執行一連串的拼圖程式,其間並沒有分岔及迴圈的情況。

【常用的循序結構拼圖積木】

  1. 持續前一動作或行為
  2. 等待某一條件成立
  3. 停止指定程式

【優點】

  1. 由上至下,非常容易閱讀。
  2. 結構比較單純,沒有複雜的變化。

【缺點】

  1. 無法表達複雜性的條件結構。
  2. 雖然可以表達重複性的迴圈結構,但是往往要撰寫較長的拼圖程式。

【適用時機】

  1. 不需進行判斷的情況。
  2. 沒有重複撰寫的情況。

分岔結構(Switch)

分岔結構是指根據「條件式」來選擇不同的執行路徑。

【常用的循序結構拼圖積木】

  1. 單一分岔結構
  2. 雙重分岔結構

【優點】

  1. 可以判斷出不同的情況。

【缺點】

  1. 當條件式過多時,結構比較複習,初學者較難馬上了解。

【適用時機】

  1. 當條件式有兩種或兩種以上。

迴圈結構(Loop)

迴圈結構是指重複執行某一段「拼圖方塊」。

【常用的循序結構拼圖積木】

  1. 計數迴圈
  2. 條件迴圈
  3. 無窮迴圈

【優點】

  1. 容易表達複雜性的條件結構。

【缺點】

  1. 當使用到巢狀迴圈時,結構比較複習,初學者較難馬上了解。

【適用時機】

  1. 處理重複性或有規則的動作。

2017年4月14日 星期五

編程概念認識:副程式(Sub-Function)

簡介

副程式是集合一些常用且重複撰寫的程式碼。

它的特性:

  1. 可以使程式更簡化,因為把重覆的程式模組化。
  2. 增加程式的可讀性。
  3. 提高程式的維護性。
  4. 節省程式所佔用的記憶體空間。
  5. 節省重覆撰寫程式的時間。

建立副程式

在撰寫 mBlock 程式時,都會希望將獨立的功能寫成「副程式」,以便日後的維護工作。因此,必須先宣告副程式。
  1. 【程式區】【資料和指令】【新增積木指令】
  2. 宣告一個副程式的名稱
宣告副程式時,可以選擇是否加入參數(Parameter)。參數是指呼叫副程式時,主程式會傳遞一些變數給副程式,而這些變數就是參數。參數可以是數字、字串或是一個布林(Boolean),一個「條件式」。而標籤文字就可以為副程式加入簡單的註解。

副程式的呼叫及編輯

  • 副程式的呼叫
  • 副程式的編輯

編程概念認識:清單(List)

簡介

清單是集合一群具有「相同名稱」及「資料型態」的變數。

它的特性:

  1. 佔用連續記憶體空間。
  2. 用來表示有序串列之一種方式。
  3. 各元素的資料型態皆相同。
  4. 支援隨機存取(Random Access)與循序存取(Sequential Access)。
  5. 插入或刪除元素時較為麻煩,因為須挪移其他元素。

建立清單

在撰寫 mBlock 程式時,如果時常要收集連續性的資料時,因此,必須先宣告清單陣列。
  1. 【程式區】【資料和指令】【做一個清單】
  2. 宣告一個清單的名稱
「適用所有的角色」代表「全域性清單(Global List)」,我們一般會使用這種清單,使用時比較方便,但因為任何地方都可以改變它的值,出錯的機會亦因此提高。「僅適用本角色」代表「區域性清單(Local List)」,由於使用彈性低,因此較為少用。

清單的綜合運算

成立建立清單後,它會自動產生指定的「清單名稱」及一系列清單相關的拼圖積木。如下表所示:
取得清單中的所有元素 新增資料到清單中 將第N項的資料從清單中移除
將資料插入到清單中第N項的前面 將清單中第N項的資料換成新的值
取得清單中第N項的資料 取得清單的長度 判斷清單中是否有包含該項資料

注意:清單未能透過「上傳Arduino程式」將程式上傳到 mBot,如果要在 mBot 上使用清單,可以使用 Arduino IDE 編程,或使用多個變數,製成「假清單」。