Category Archives: 作品展示

[介紹文]以LinkIt7697搭配LinkIt Remote打造智慧門禁系統 6項功能、6大特色一次帶您看!!

作者/攝影

智慧門禁系統作者:曾希哲老師

文字整理:CAVEDU 宗諭

圖片:曾希哲老師、pixabay

文章分類介紹文
時間

成本
難度
材料表
  • LinkIt 7697*1(若欲購買,請洽機器人王國商城)

  • RC522 RFID讀取器*1

  • 電磁鎖*1

  • LCD*1

  • 蜂鳴器*1

  • Mifare S50 Card*1

  • 智慧型手機*1

因長期致力於科技教育,CAVEDU團隊認識許多老師,但慢慢地我們才發現,教師當中真是人才濟濟,高手藏身於教育界。對科技、程式教育,有熱忱又富能力的老師其實相當多,例如熱衷於四軸飛行器教學的洪雅慧老師,還有對於Micro:bit深有研究的劉正吉老師⋯⋯等等,而花蓮的曾希哲老師也是其中之一。

圖1 各路高手在教師界

 

若仔細瞧瞧曾希哲老師的臉書頁面,上面幾乎都是他各種學習程式、物聯網、開發板的心得、照片及影片,例如,他最近就在玩LinkIt 7697的擴充板,不斷發出新的貼文,真感受到他的樂此不疲!為將所學得的技術充分教導給學生,曾老師也架設一個網站「曾希哲的學習天地」,上面有他學習物聯網、LinkIt 7697、Arduino⋯⋯等等心得,讀者們記得抽空去逛逛喔!

圖2 曾希哲老師的個人網站

 

本文的主角是曾希哲老師一手打造的「智慧門禁系統」。當初,曾老師有做過RFID的門禁系統,並於2017年以此系統參加過「花蓮創客賽物聯網組」,卻一直找不著適合的按鍵輸入方式。

 

因此,曾希哲老師便逐漸萌生以手機當作藍牙鍵盤的想法,並想透過LinkIt Remote實現。後來,他在手機上實做出藍牙鍵盤,並加入原有的門禁系統中,再把幾項一直想做出的功能實現,最後「智慧門禁系統」就大功告成。(噹啷~~)

圖3 智慧門禁系統

 

讓我們先看看曾希哲老師親自錄製的介紹影片:

 

這個「智慧門禁系統」包含哪些單元呢?請見下圖:

圖4

 

智慧門禁系統的功能與特色

系統是以LinkIt 7697為核心建立,有以下幾項功能:

  1. 可用RFID刷卡輸入

  2. 可以藍牙鍵盤輸入

  3. LCD顯示輸出

  4. 蜂鳴器輸出

  5. 若使用者兩次輸入錯誤,系統就會透過Line即時訊息通知屋主。

  6. 假設使用者受威脅必須開門,可輸入威脅密碼,門一樣會打開,但會在威脅者無法察覺情況下,以Line即時訊息通知屋主,使屋主能盡快報警。

 

這個系統又有哪些特色呢?

  1. 以手機作為藍牙鍵盤,使用起來相對方便。

  2. 使用者受威脅需開門時,可使用威脅密碼。

  3. 同時使用藍牙與WiFi功能,LinkIt 7697是以IFTTT網路服務,透過Wi-Fi傳送Line即時訊息。

  4. 不需使用App Inventor撰寫手機程式,只要撰寫7697程式即可。

  5. 使用LinkIt 7697 BlocklyDuino,程式撰寫比較容易。

圖5

 

圖6 圖5、6為曾希哲老師運用LinkIt 7697 BlocklyDuino,所撰寫的程式碼。

 

6.可透過這個系統,學習RFID的概念。

 

進一步交流

關於如何自造智慧門禁系統,應是因製作步驟較複雜,曾希哲老師只簡單提及,就是拆解系統各部分功能,然後進行各單元製作、測試,逐步組成為一個完整系統。若讀者閱畢本文,有興趣進一步了解此系統,歡迎直接至曾希哲老師的臉書頁面與他交流。

 

前文提及,曾老師設計、製作此系統很重要的原因,是為了實踐把手機當成藍牙鍵盤。而他是用BlocklyDuino撰寫藍牙鍵盤的程式,若讀者想更多了解,可點此下載原始程式碼。

 

結語

總之,曾希哲老師目前正積極測試LinkIt 7697擴充板的各式功能,若後續有任何消息、成果,CAVEDU教育團隊也會成為報馬仔,透過技術部落格或臉書粉絲專頁,跟讀者們分享,敬請期待!

 

附錄:

曾希哲老師以BlocklyDuino撰寫藍牙鍵盤的程式碼

/*
 * Generated using BlocklyDuino:
 *
 * https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
 *
 * Date: Wed, 27 Jun 2018 18:58:00 GMT
 */

#include <LRemote.h>

int SetPasswd;

int PhonePasswd;

int c;

String S1;

String S2;

String S3;

String S4;

String InputPsaawd;

String OpeningDoor;

String PasswdError;

LRemoteLabel label1;
LRemoteButton button7;
LRemoteButton button8;
LRemoteButton button9;
LRemoteButton button4;
LRemoteButton button5;
LRemoteButton button6;
LRemoteButton button1;
LRemoteButton button2;
LRemoteButton button3;
LRemoteButton button0;
LRemoteButton button10;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);
    label1.setPos(0, 0);
    label1.setText("Input Password");
    label1.setSize(3, 1);
    label1.setColor(RC_ORANGE);
    LRemote.addControl(label1);

    button7.setPos(0, 1);
    button7.setText("7");
    button7.setSize(1, 1);
    button7.setColor(RC_BLUE);
    LRemote.addControl(button7);

    button8.setPos(1, 1);
    button8.setText("8");
    button8.setSize(1, 1);
    button8.setColor(RC_GREEN);
    LRemote.addControl(button8);

    button9.setPos(2, 1);
    button9.setText("9");
    button9.setSize(1, 1);
    button9.setColor(RC_BLUE);
    LRemote.addControl(button9);

    button4.setPos(0, 2);
    button4.setText("4");
    button4.setSize(1, 1);
    button4.setColor(RC_GREEN);
    LRemote.addControl(button4);

    button5.setPos(1, 2);
    button5.setText("5");
    button5.setSize(1, 1);
    button5.setColor(RC_BLUE);
    LRemote.addControl(button5);

    button6.setPos(2, 2);
    button6.setText("6");
    button6.setSize(1, 1);
    button6.setColor(RC_GREEN);
    LRemote.addControl(button6);

    button1.setPos(0, 3);
    button1.setText("1");
    button1.setSize(1, 1);
    button1.setColor(RC_BLUE);
    LRemote.addControl(button1);

    button2.setPos(1, 3);
    button2.setText("2");
    button2.setSize(1, 1);
    button2.setColor(RC_GREEN);
    LRemote.addControl(button2);

    button3.setPos(2, 3);
    button3.setText("3");
    button3.setSize(1, 1);
    button3.setColor(RC_BLUE);
    LRemote.addControl(button3);

    button0.setPos(0, 4);
    button0.setText("0");
    button0.setSize(1, 1);
    button0.setColor(RC_GREEN);
    LRemote.addControl(button0);

    button10.setPos(1, 4);
    button10.setText("Clear");
    button10.setSize(2, 1);
    button10.setColor(RC_ORANGE);
    LRemote.addControl(button10);
  LRemote.begin();
  SetPasswd = 10;
  PhonePasswd = 0;
  c = 0;
  digitalWrite(LED_BUILTIN, LOW);
  S1 = "*";
  S2 = "**";
  S3 = "***";
  S4 = "****";
  InputPsaawd = "Input Password";
  OpeningDoor = "Opening Door";
  PasswdError = "Password Error";
}


void loop()
{
  LRemote.process();
  if (button0.isValueChanged()) {
    if (button0.getValue() == 1) {
      c = c + 1;
      if (c == 1) {
        PhonePasswd = PhonePasswd + 1;

      }

    }

  } else if (button1.isValueChanged()) {
    if (button1.getValue() == 1) {
      c = c + 1;
      if (c == 2) {
        PhonePasswd = PhonePasswd + 2;

      }

    }
  } else if (button2.isValueChanged()) {
    if (button2.getValue() == 1) {
      c = c + 1;
      if (c == 3) {
        PhonePasswd = PhonePasswd + 3;

      }

    }
  } else if (button3.isValueChanged()) {
    if (button3.getValue() == 1) {
      c = c + 1;
      if (c == 4) {
        PhonePasswd = PhonePasswd + 4;

      }

    }
  } else if (button4.isValueChanged()) {
    if (button4.getValue() == 1) {
      c = c + 1;

    }
  } else if (button5.isValueChanged()) {
    if (button5.getValue() == 1) {
      c = c + 1;

    }
  } else if (button6.isValueChanged()) {
    if (button6.getValue() == 1) {
      c = c + 1;

    }
  } else if (button7.isValueChanged()) {
    if (button7.getValue() == 1) {
      c = c + 1;

    }
  } else if (button8.isValueChanged()) {
    if (button8.getValue() == 1) {
      c = c + 1;

    }
  } else if (button9.isValueChanged()) {
    if (button9.getValue() == 1) {
      c = c + 1;

    }
  } else if (button10.isValueChanged()) {
    if (button10.getValue() == 1) {
      label1.updateText(String(InputPsaawd));
      c = 0;
      PhonePasswd = 0;

    }
  }
  if (c == 1) {
    label1.updateText(String(S1));

  } else if (c == 2) {
    label1.updateText(String(S2));
  } else if (c == 3) {
    label1.updateText(String(S3));
  } else if (c == 4) {
    label1.updateText(String(S4));
    delay(500);
    if (SetPasswd == PhonePasswd) {
      label1.updateText(String(OpeningDoor));
      digitalWrite(LED_BUILTIN, HIGH);
      delay(5000);
      digitalWrite(LED_BUILTIN, LOW);

    } else {
      label1.updateText(String(PasswdError));
      delay(5000);

    }
    label1.updateText(String(InputPsaawd));
    c = 0;
    PhonePasswd = 0;
  }
  delay(100);
}

 

相關文章

[教學文]想自己動手做藍牙遙控車?就是這一篇了!

作者/攝影

CAVEDU教育團隊 鈺莨

文章分類教學技術文
時間

成本
難度
材料表
完整程式下載

BlocklyCar7697

導讀

 

本文重點

  我們將介紹馬達轉動原理,還有如何用藍牙裝置接收字元,也會把手機作為遙控車的方向盤,控制遙控車的方向。讓我們一起做出一台屬於自己的LinkIt 7697的藍牙遙控車吧!

圖1 藍牙遙控車,衝啊!

 

  LinkIt 7697的電流無法直接使兩顆直流馬達動起來,所以我們要使用馬達驅動板Robot Shield。

 

Step1:我們先用手機的藍牙裝置,試著控制一顆直流馬達,先接上一顆直流馬達。下面圖片是直流馬達接線圖:

圖2 一顆直流馬達連接Robot Shield

 

馬達的腳位

Robot Shield的腳位

113
217

 

藍牙遙控車程式

  程式部分,我們使用BlocklyDuino來寫程式。程式有分成車子的接收部分,以及手機的發送部分。我們先說明車子接收部分的程式,會用到藍牙的積木有下面幾種:

圖3 藍牙BlocklyDuino積木

 

Step2:打開【BLE周邊】(黃色標籤1)抽屜,可看見「建立藍牙週邊裝置」(黃色標籤2)、「新增藍牙屬性」(黃色標籤3)、「藍牙屬性已更新」(黃色標籤4)、「讀取藍牙屬性數值」(黃色標籤5)。這些是我們需要用到的積木,拼出來的積木如下圖:

圖4 BlocklyDuino藍牙裝置程式

 

Step3:我們要把BlocklyDuino藍牙初始化的裝置建立起來。請大家在「建立藍牙週邊裝置」的「顯示名稱」上改名字,在手機的那一端就會顯示出「顯示名稱」上的名字。

 

  此外,「服務UUID」和「新增藍牙屬性UUID」,只要和App Inventor上面的數值是一樣的,我們就可以讓LinkIt 7697和手機的藍牙裝置連線。

 

Step4:我們要寫出LinkIt 7697接收到字元後所要進行的動作,如下圖:

圖5 BlocklyDuino馬達轉動程式

 

Step5:寫完LinkIt 7697開發板接收到數字的程式後,接下來,我們要寫手機發送指令部分的程式。在此,我們繼續用App Inventor寫成手機的App程式。下圖是App Inventor的手機使用版面圖:

圖6 App Inventor的手機使用版面圖

 

  版面設計完成後,接下來進入App Inventor的程式設計介面,我們要來寫如何用手機傳送字元的程式。

 

Step6:下圖是手機和LinkIt 7697的藍牙裝置連線的積木:

圖7 LinkIt 7697開發板藍牙裝置的UUID

 

圖8 手機搜尋藍牙裝置的名字和名字欄位選擇

 

圖9用手機連上LinkIt 7697藍牙裝置的積木

 

Step7:當我們按下手機上的「搜尋」按鈕時,手機就會自動尋找附近有沒有LinkIt 7697的藍牙裝置。

 

Step8:若有的話,按下「名稱」按鈕,藍牙裝置的名稱就會顯示在選擇名單內,再按一次選擇名單內的藍牙裝置名稱就可進行連線。若連線成功,手機螢幕就會顯示出藍牙遙控車的名字。

 

Step9:按下斷線按鈕,手機就會和LinkIt 7697開發板的藍牙裝置斷線。

 

  接下來,我們要教大家寫如何控制一台藍牙遙控車的程式!

 

Step10:我們再將另一顆馬達接上馬達驅動板Robot Shield

圖10 兩顆馬達連接馬達驅動板Robot Shield

 

馬達的腳位

Robot Shield的腳位

113
217
312
410

 

  我們可以用程式的高電位或低電位,控制馬達的正方向轉或反方向轉。我們用兩顆馬達的正方向轉或反方向轉決定車子的行走方向,車子有下面四種走法:

圖11 車子有五種不同的運動方式

 

  程式部分,我們利用LinkIt 7697開發板的高電位或低電位,控制馬達的正方向轉或反方向轉。就如圖12一樣,馬達驅動板Robot Shield的10和12腳位是控制右邊的馬達;13和17腳位是控制左邊的馬達,所以程式會如下圖:

圖12 BlocklyDuino程式

 

  有了前面的做法後,我們現在來寫寫看LinkIt7697開發板的程式吧!

 

Step11:LinkIt 7697的程式部分,只要把前面程式中的【重複執行】的「轉動」和「停止」積木,改寫成「停止」、「前進」、「後退」、「右轉」、「左轉」積木就可以了。程式積木如下圖:

圖13 BlocklyDuino的全部程式

 

Step12:接下來,我們要改寫手機遙控部分的積木程式,也是按照順序分別改成「停止」、「前進」、「後退」、「右轉」、「左轉」這五種動作指令。完整的手機控制版面如下圖:

圖14 藍牙遙控車手機的控制版面

 

再來是App Inventor程式積木的部分:

圖15 藍牙遙控車連線、斷線的事件

 

圖16 手機發送指令事件

 

  這樣藍牙遙控小車的程式就完成了,趕快拿手機來玩玩看!

 

[教學文] 從Zero到Hero,給想實做動力小車的你——硬體篇

作者/攝影

動力大腳車製作者、資料、圖影片提供:游允赫

文字整理:CAVEDU 宗諭

文章分類教學文
時間

成本
難度
材料表

 

  幾週前,在淡江大學同舟廣場舉辦的「創意皂飛車競賽」,動力組的競爭可真是龍爭虎鬥。其中,我們CAVEDU教育團隊的好夥伴游允赫老師,以動力大腳車在動力組的激烈競爭中脫穎而出,在動力折返挑戰賽中獲得第二名的佳績!

圖1 游允赫老師(左)

 

  對於製作動力小車深有熱忱的允赫老師,便想藉由文字跟讀者們分享製作動力大腳車的過程及心得。因此,這篇文章將為大家簡單介紹,如何製作動力大腳車的硬體設施。

 

先讓我們看一下動力大腳車的測試影片:

 

  在開始製作動力大腳車的硬體設施前,我們先要取得一台Tamiya大腳車。有了大腳車後,我們把車子上的電池盒拆掉,只保留底盤、馬達及齒輪組。

 

  接下來,我們要幫大腳車裝上培林(Bearing)。為什麼要裝培林呢?主要是因大腳車的底盤把齒輪放在同一邊,所以要利用培林使車體置中。大腳車本身輪軸中間是外露的,可以直接使用那邊的空間製作結構,前後是可動結構,可隨坡度有微幅變化,足以確保感應器和軌道的距離不變,便不會因距離不同而產生誤判。

圖2 大腳車輪軸中間的空間外露

 

機械小知識——什麼是培林

  台灣人稱軸承(Bearing)為培林。而軸承這個機件在機械上的作用是,當其它機件在軸上彼此產生相對的運動時,用來保持軸的中心位置,並且控制該運動(參考自維基百科)。

圖3 動力大腳車使用的培林

 

圖4 大腳車安裝上培林

 

  因為我們已把大腳車的電池盒拆除了,所以要讓大腳車有適合的動力來源。在這裡我們使用的是LinkIt 7697開發板 + Robot Shield馬達驅動板。如何將它們固定在大腳車上?不複雜,就是把塑膠殼拆開,使板子可以固定即可,但要注意不要讓板子的重心太高。

圖5

 

  在進行前述流程時,幾兩個事項要注意:(1)需測量底盤軸距,以及裡面有多少空間可製做結構;(2)還有因齒輪箱在左邊,所以在畫3D時,需計算修正,好使車子放在軌道上時,不會偏向一邊。

 

  接下來便都是進行3D建模了。

 

  硬體部分大致介紹至此,若讀者有不了解的地方,歡迎詢問允赫老師,E-mail:yhyu@cavedu.com;下一篇,我們將介紹動力大腳車在軟體層面需有哪些部署。

 

相關文章

[教學文]MIT App Inventor Codi Bot 設計發想

作者/攝影曾吉弘
文章分類教學
時間
成本
難度
材料表

 

  對於會寫程式的人來說,不同程式語言有著極大不同,但對於不會的人來說:

 

都一樣啊!哪有什麼不同,看起來都像咒語⋯⋯

 

  因此需要一個符號或吉祥物來與這種語言產生連結,例如Linux的小企鵝、Arduino的無限符號,或Scratch的小貓⋯⋯等等,在各式場合都能看到代表各自的logo。App Inventor 以往的logo太像Android,為搭配即將推出的App Inventor iOS版,MIT App Inventor小組推出了新的logo,CAVEDU也很高興能設計 MIT App Inventor Codi bot(選購連結)

圖1

 

  之前已經寫過一篇介紹Codi Bot的各類功能教學文件也都出來了:

  • 單機執行:直接執行 (影片)

  • LED:使用按鈕、滑桿來控制翅膀與底座的LED (影片)

  • 翅膀:使用按鈕、滑桿來控制翅膀(伺服機) (影片)

  • 聲音:控制蜂鳴器發出各種音符或自訂義頻率與時間長度 (影片)

  • 完整app:整合上述功能 (影片)

 

  本篇要與大家分享 Codi Bot的設計發想,分成核心、外觀及燈光⋯⋯等等(感謝設計師:游允赫大大):

 

一、核心:

 

  MIT App Inventor在阿吉老師去MIT擔任訪問學者前,藍牙BLE支援的板子只有Arduino 101,但大家知道的⋯⋯Arduino 101已停產,所以自然要有一款平價好用的控制板補上,那便是LinkIt 7697。為方便腳位和電源管理,我們再搭配 Robot Shield for LinkIt 7697 V2.0 好放進Codi bot的肚子裡。

 

  Robot Shield 背面有兩個電容,並且是專門為機器人應用所設計,所以把許多腳位都用 3 pin 的方式接出來,也有兩個直流馬達的螺絲接口。兩者只要疊在一起就好了,並且可用 Robot Shield 來為 7697供電。另一個很棒的地方是 Robot Shield上就有一個蜂鳴器,可讓機器人發出簡易音效。

圖2

 

圖3

 

  把超音波感測器、LED、servo接上後,Robot shield的腳位都快用完了呢⋯⋯,再以螺絲固定即可。

圖4

 

所有內部的線路走法大致如此,要準備組合了。

圖5

 

是不是塞得很滿呢?

圖6

 

二、外觀

超音波感測器裝在Codi bot頭部,線路走脖子接到擴充板上。

圖7

 

就是眼睛啦,很可愛吧!深度是有測試過的,不會影響距離偵測的效果。

圖8

 

我們設計了一個背包,驅動翅膀的兩顆servo 就放在裡面。

圖9

 

Codi bot 底部,很容易就能撥動開關來開機。

圖10

 

組合身體前後兩片零件的螺絲會被條紋(牛皮)遮起來。

圖11

三、燈光

  為了順利呈現MIT App Inventor logo 兩個翅膀的紫色與綠色,又要有互動效果,我們選用LED燈條,從servo的背包孔位拉出線來。

圖12

 

把LED燈條放入翅膀零件的溝槽,這一步難度比較高,小心不要壓到線。

圖13

 

  Codi Bot背包上有一個孔,可以讓壓克力支撐架扣入以固定。底部的RGB LED 則是安裝在壓克力底座的孔,伸進去一點有很不錯的燈光效果喔!

圖14

 

圖15

 

相關文章

[ 新品介紹 ] 2018.5.11-108課綱將上路 編程教育成趨勢 學校、教師、家長如何幫孩子?SAM LABS STEAM套組助學童發揮無限創意!

紀錄撰寫宗諭
紀錄攝影 宗諭/影片由廣天國際提供
受訪者廣天國際有限公司
訪問地點廣天國際有限公司
訪問時間

5月11日下午2:30至4:30

    當108課綱即將上路,培養孩子的「運算思維(Computational Thinking)」,讓他們從小學習邏輯、編程的STEAM教育,成為一大趨勢。在此大趨勢下,「廣天國際有限公司」自英國引進「SAM LABS STEAM套組」,正是為因應學校、教師、家長的廣大需求。

 

SAM LABS STEAM套組是什麼?

    看了上面的影片後,您可能對SAM LABS STEAM套組是什麼,有一些概念。簡而言之,「SAM LABS STEAM套組」是一個教導五歲以上孩子邏輯、編程的教學器材。它由大約20個模塊組成,這些模塊包含Input(輸入)、Output(輸出)及一些感應器。孩子只要把這些模塊組裝起來,便可以藉由SAM LABS設計好的App,內建有許多程式指令,創造出許多有趣應用。

 

圖1 SAM LABS STEAM套組外觀

 

圖2 STEAM套組的內部

 

圖3

 

圖4

 

圖5 STEAM套組由許多模塊組成(圖3、4、5)。

 

SAM LABS STEAM套組的應用

    您一定感到好奇,我們可以用STEAM套組做出什麼樣有趣的應用呢?最基本、簡單的就是透過模塊組裝,控制App內建的小遊戲。

 

圖6 運用模塊控制App內建的小遊戲

 

    因為STEAM套組可以控制馬達、結合樂高積木和紙模型,所以能做出小車、動力機械及紙吉他⋯⋯等等應用。當然,應用可以千變萬化,正等待小朋友們發揮無限創意!廣天國際執行長楊天鐸也表示,引進硬體只是第一步,未來還將持續開發許多幼教教案。

 

圖7 遙控小車

 

圖8 結合樂高積木組成動力機械

 

圖9 結合紙模型製作吉他,讓您搖身一變成為吉他手!

 

SAM LABS STEAM套組的特色

    那這款STEAM套件最大特點是什麼?小編觀察,是它的每塊模塊都是一個藍牙模組,所以完全不用實體接線,只需透過App就可彼此連接,而透過iPad、Android手機、Windows PC或Mac電腦皆連接、控制模塊;此外,STEAM套組也支援Blockly圖形化程式語言介面,只要用Google Chrome瀏覽器,便可在瀏覽器上以SAM LABS開發的SAM Blockly拉積木寫程式。

 

自由探索 錯誤也是種學習

    可能不少教師朋友想了解:「若使用這個套組,在教室或其他教育現場,我應該教些什麼呢?」楊天鐸指出,只要教導小朋友一些程式語法的基本概念即可,剩下就是讓他們自行探索、發揮創意了。

 

    小編現場動手玩STEAM套組,覺得十分有趣。我使用的是一個陀螺儀的模塊,然後透過App,使手中的模塊和小車上的模塊連線,就可以用搖晃的方式遙控小車。雖然在小編操控下,小車一直不斷撞門、撞牆(搞破壞嗎?),但真是見識到STEAM套組的魅力!

 

結語

    小編相信,藉由這個套組能創作出的應用還非常多,最重要就是讓小朋友透過遊戲發揮創意。或許正如廣天國際楊天鐸執行長所言:「只要給他們幾個模塊,小朋友們就能玩得不亦樂乎!」更多訊息,請上網:www.calculator.com.tw

 

相關文章

[新品介紹]MIT App Inventor Codi Bot物聯網教學互動機器人

作者/攝影曾吉弘
文章分類產品介紹
時間
成本
難度*  (1~10)
材料表

對於會寫程式的人來說,Python/C/Java是完全不同的程式語言。但對於沒接觸過的人來說,通通都是一樣的:很可怕。因此程式語言需要一個圖騰來代表,例如,Scratch的那隻小貓、 Linux的企鵝、Java的咖啡,以及Android的小機器人⋯⋯等等,在相關場合中,我們都可以看見這樣的代表符號。

    MIT App Inventor去年發起了一項募資計畫,目標是加速App Inventor 的 iOS版本。贊助$1500美金以上者可以收到一套實體的物聯網教育套件,但這時大家對於內容還不是很清楚應該如何規劃。Hal Abelson教授就問是否可以幫忙?

當然可以啦,不就是為了幫忙才去MIT的嗎?

輪型或多足型機器人設計相關課程算是CAVEDU教育團體的專長,但MIT App Inventor小組盼望能結合它們的新logo,因為之前的logo太Android了,所以他們於去年推出了新的小蜜蜂logo,與Android 3.0 honeycomb 相當神似。

經過一番努力之後,MIT App Inventor Codi Bot 誕生了!

圖1

MIT App Inventor Codi Bot在設計上有幾項重點:

可愛、易用、教育、可擴充

特色:

為了讓使用者更易入手,我們開發了 LinkIt 7697 的 App Inventor extension,(個人覺得比Arduino 101的好用多了)。LinkIt 7697端只要上傳一次程式就可以順利與App Inventor溝通,也就是使用者只要專心寫App Inventor程式即可。如果在辦短期營隊或是體驗活動的時候,可以先把LinkIt 7697準備好,這樣可以省去現場上傳程式的各種麻煩事。

核心使用 LinkIt 7697Robot Shield V2.0,這樣使得整理電線變得很輕鬆,國內也有許多團隊使用兩者開發出許多有趣的專題。

當然,Codi Bot能做的不只是如此,7697 可以結合 MediaTek Cloud Sandbox等雲端服務結合LINE、IFTTT等通訊軟體

 

教學文件:

  • 單機執行:直接執行 (影片)
  • LED:使用按鈕、滑桿來控制翅膀與底座的LED (影片)
  • 翅膀:使用按鈕、滑桿來控制翅膀(伺服機) (影片)
  • 聲音:控制蜂鳴器發出各種音符或自訂義頻率與時間長度 (影片)
  • 完整app:整合上述功能 (影片)

來看實體照片吧,LED亮起的時候真的很漂亮,影片中可以看到翅膀拍動以及發出聲音的效果。

 

圖2

 

圖3 背面

 

圖4側面

    開發過程中,非常感謝聯發科技實驗室MiniPlan,CAVEDU同仁的超強後勤。

7697 extension感謝林祥瑞袁佑緣兩位小超人,以及MIT App Inventor Codi Bot的設計者:游允赫老師。

比較一下 MIT App Inventor的logo 與 Android 3.0 honeycomb:

圖5 App Inventor的logo

 

圖6 Android3.0 honeycomb

 

相關文章:

[Micro:bit] 使用DFROBOT BOSON套件設計智慧小屋

在本篇文章中,我們將介紹如何用micro:bit和DFROBOT BOSON套件打造智慧小屋,套件上安裝孔位與樂高相容,組裝上更方便了。

我們將實做三個特別的功能,第一個是能夠根據環境光源自動調整亮度的LED燈,第二是設計一個可以按鈕控制吊扇,第三則是做出一個地震警報器。

作者/攝影  袁佑緣
時間  3小時
成本 放課後的製作時間便是我的成本
難度  * * *
材料表
  • Micro:bit
  • 樂高積木
  • Micro:bit Boson 擴充板

準備工作

Microbit and Boson Kit

 

在這篇文章中,我們將使用BBC推出的Micro:bit開發板來當作是我們智慧屋的控制器。

為了要能夠控制智慧屋中的電子元件,也就是上面的感測器與制動器,除了原本的Micro:bit之外,我們還要額外裝上一塊DFRobot推出的Boson擴充板來控制Boson Kit中的電子模組。

如果讀者想獲得關於 Boson Kit更進一步的資訊的話,不妨去以下的網站觀看詳細的介紹喔。 (https://www.dfrobot.com/boson).

以下是我們在本篇文章中,我們將會用到的Boson電子積木有LED、按鈕、傾斜、風扇、聲音、光感應。

1.Light Sensor Module
2.LED Module
3.Button Module
4.Fan Module
5.Tilt Sensor Module
6.Buzzer Module

Mu editor

接下來,為了要撰寫micro:bit的micro python 程式碼,我們需要去下載以下的編輯器:Mu Editor(https://github.com/mu-editor/mu/releases).

此外,我們也建議讀者可以去官方的文件查看Micro Python API for Micro:bit (https://microbit-micropython.readthedocs.io/en/0.9/)的詳細使用說明,裡面還有許多的範例教學可以參考喔!

硬體

以下的圖片是本文所使用的雙層樂高屋以及樂高屋內部的構造。

注意到除了一般水平放置的Boson元件可以接在樂高的平板上,一些懸掛的Boson元件可以用其他的方式固定在樂高小屋上面,例如下圖中使用BOSON的中間積木,我們使用金屬螺絲與螺絲帽固定,底座固定之後,Boson電子元件就可以用磁力吸附在上面。

範例教學

 

接下來我們就來在 Mu Editor中撰寫 Micro Python吧!

 

1. 小夜燈

在第一個範例中,我們將原本的LED燈擴充成可以自動調整亮度的LED燈,更進一步它能根據環境光的亮度適當地調整LED燈亮度。

於是我們要在LED燈上再加上一個光源感測器,如下圖。

首先,我們必須先用以下的程式碼來去偵測光源感測器的最大最小值,而為了要讓數值更精確一點,我們讓程式在一段時間內的對光感值進行取樣,將光感值加總後再依取樣的次數做平均,經過計算就能得我們想要的平均值。

 

night-light-measure.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

while (running_time() - timer) <= 3 * 1000:
    light_sensor += pin1.read_analog()
    counter += 1

light_sensor /= counter
print("mean light sensor value: ", light_sensor)

打開Mu Editor的REPL視窗,並在有環境光跟沒有環境光的情況下執行程式,你將會得到如下圖的光源平均值,當環境光很亮時的平均亮值是900多,環境光很暗時的平均暗值10多。

接下來,我們將前面求出的平均亮值跟平均暗值,帶入到變數ligjt跟dark中,將這兩個數值作為最大值與最小值,是按照比例換算成Micro:bit的類比角為數值,控制LED燈的亮度。

 

算式:

((light – light_sensor)/(light – dark)*1023)

比如:light=966、dark=14,數值範圍為952。現在讀到一個光感數值為500,帶入算式((966-500)/(952))*1023 = 500,最後micro:bit的類比輸出值為500。

 

night-light.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

light = 966.4033
dark = 14.81614

while True:
    light_sensor = pin1.read_analog()
    LED = int((light - light_sensor)/(light - dark)*1023)

    if LED > 1023:
        LED = 1023
    elif LED < 0:
        LED = 0

    print("LED lightness: ", LED)

    pin2.set_analog_period(1)
    pin2.write_analog(LED)
    sleep(0.5)

 

範例影片:

 

2. 吊扇設計

在第二個範例中,我們用以下簡單的程式碼來打造一個可以用按鈕控制的電風扇。

在程式中,我們用一個switch的布林變數紀錄開關的狀態,我們希望使用開關時,每次按下開關再放開,switch的狀態就會切換成相反的狀態。

注意到我們在以下的程式碼中會多加一些延遲,例如sleep(0.5),這是為了要確保可以正確的判斷到一次的開關按壓。

ceiling-fan.py

 

from microbit import *

switch = False

while True:
    if pin12.read_digital() is 1:
        while pin12.read_digital() is 1:
            sleep(0.5)
        switch = not switch
        if switch:
            pin16.write_digital(1)
            print("Turn ON")
        else:
            pin16.write_digital(0)
            print("Turn OFF")

 

3.地震警報器

 

在第三個範例中我們將實做一個安裝在小屋的地震警報器。

為了要偵測到小屋的晃動,我們使用一個傾斜感測器,並在每一次的迴圈中,觀察一小斷時間中的傾斜變化。

如果說屋子靜止不動的話,隨著時間的傾斜變化量應該是完全是零,所以我們只要去計算一段時間的變化是否為零的話,就能推出此時是否有地震的發生。

 

而如果偵測到有地震發生的話,程式會播放一段音樂作為地震的警報,播放音樂的方式直接使用Micro Python內建的music函式庫,music函式庫預設輸出聲音為0號腳位,驅動蜂鳴器發出聲音。

 

如果想自己設計音樂的話,不妨去以下網址查看micro python的範例(https://microbit-micropython.readthedocs.io/en/0.9/music.html),裡面有介紹如何用指定的音符做特定的旋律。

alarm.py

from microbit import *
import music

status = pin8.read_digital()

def detect_shake():
    old_tilt_status = pin8.read_digital()
    sleep(0.1)
    new_tilt_status = pin8.read_digital()
    return abs(new_tilt_status - old_tilt_status)

while True:
    counter = 0
    timer = running_time()
    shake = detect_shake()
    while (running_time() - timer) <= 500:
        shake += detect_shake()
        counter += 1

    status = shake/counter
    print(status)

    if status is not 0.0:
        print("Alarm!!!")
        music.play(music.DADADADUM)

 

範例影片:

 

相關文章:

 

 

[ MakeNTU_MTK 研習營 ] 課程記錄&常用的7688Duo作品教學分享

作者/攝影 徐豐智/薛皓云、洪卉君
課程時間  2017 2/17 4hr
課程講師  徐豐智
課程場地  台大-新生教學館

大家好,這周六日即將進行MakeNTU,今天想先跟大家分享一些MTK企業獎主題OpenData的網站,作為製作作品的參考

寒假依然努力不懈的各位

最近佑緣助教也有試一個不錯的API,可以用python抓溫度資料,推薦給大家DarkSky API。六日早上會出現在三創園區,大家可以把握機會捕獲他~

 

其他的助教與老師還在確認時程,我們預計周六周日早上到下午會在各位的場區擺攤,有需要可以來問問題喔。當天上課資料在這裡

 

正在推眼鏡的皓云助教

附上雷虎遙控車 – 使用LinkIt Smart 7688 改裝成FPV第一人稱視角載具一枚

 

台大電機土生土長的宗穎助教

有些操作小技巧可以看這邊

 

在台上抓著麥克風獨唱的我

在大家背後默默付出的阿倫助教

 

以及本團隊的藏鏡人阿吉

 

最後還是寒假也努力學習的各位囉!

打完收工,下台一鞠躬,下次再見。

[喜歡樹莓派的朋友看這裡] 開箱先,大尺寸電視的小電腦新選擇,ASUS Tinker Board

Raspberry Pi相當於明信片大小的小電腦主機,設計者一開始就完全開放它的相關技術,讓有興趣的使用者可以自由的設計這個主機,甚至可以買一些簡單的電子感應器,做一個小小的監控攝影機,諸如此類的構想都可以在Raspberry Pi上實現。今天要向各位介紹剛上市的新小電腦主機,ASUS開發的Tinker。

作者/攝影  豐智
官網

這次我們直接訪問ASUS,ASUS表示這次售價比他們的製造成本低,目的是希望能提供大家自由DIY的平台,這次他們把他們擁有的技術塞進這個小小的主機板,希望能讓我們享受DIY的樂趣,據說ASUS也將他們的資料完全開放,有最新的消息的話,我們會盡快跟進,今天我們先介紹Tinker的硬體部分。

 

Tinker外觀編排

Tinker的外觀基本上與Raspberry Pi相同,使用過Pi的人按照以前的習慣使用即可,Tinker的板子上印有藍色字體,告訴我們(1)相機、(2)螢幕、(3)Wi-Fi、(4)鍵盤滑鼠、(5)電子感測器接線位置(GPIO)、(6)4K影像輸出、(7)四個USB2.0接頭。

這次小編特別喜歡的是上方40個接線針腳,Tinker的針腳用紅色、黑色、綠色、藍色做區分,過去每次要為Raspberry Pi接電子感測器時總是要開圖表對針腳的位置,用顏色區分,小編感受到ASUS的小貼心。

支援4K影像輸出,可以試大尺吋電視機

這次Tinker最大的賣點是支援H.264/H.265、 4K、1080P高畫質的影像輸出,只要接上下方的HDMI接頭即可。Tinker推出的作業系統,內建XBMC基金會提供的KODI多媒體播放器,讓不熟Linux系統的人,能比較輕鬆的把Tinker接在自家的電視旁邊做一個播影片的平台。

3.5mm音訊孔一樣是一孔支援聲音撥放與讀取麥克風訊號兩個功能,音樂檔案的解析度可以支援到192K/24bit,相較一般常用高音質音樂(96K/24bit)應該是蠻夠用的。

先來比一比,Tinker與Raspberry Pi

最後附上表格RPi與Tinker的規格對照表,有興趣的朋友們可以繼續關注這個開發板的最新資訊。

名稱Raspberry Pi 3ASUS Tinker
預設的Linux作業系統Raspbian  (以Debian為基礎)TinkerOS (以Debian為基礎)
是否支援Arduino支援支援
支援最高影像解碼畫質 [Video]H.264H.264、H.265
聲音格式 [Radio]最高解析度96K/24bit最高解析度192K/24bit
藍牙功能內建支援藍牙4.0內建支援藍牙4.0
SoC博通BCM2387瑞芯RK3288
處理器 [CPU]四核心64位元ARM Cortex A53處理器,時脈1.2 GHz四核心ARM Cortex-A17 處理器,時脈1.8GHz
記憶體 [RAM]LPDDR2、1GBLPDDR3、 2GB
繪圖晶片 [GPU]Broadcom VideoCore IVARM Mali-T764
相機連接功能支援支援
顯示器連接功能支援支援
USBUSB2.0x4USB2.0x4

3D繪圖,來做收納盒,7688Duo也可以這樣玩,穿個毛蟲外衣吧!

所以我就有了幫它穿衣服的打算,啥!?我之前不是這樣說的嗎?那不重要啦!來看看本專案的基本規格吧

作者/攝影 陳煜倫
時間  5小時
成本  ❊ 列印時間110分鐘

❊ 預估成本600元

難度* * * *
材料表  ❊ XYZ3D印表機乙台

❊ 耗料乙捲

 

總之我們來看看這次的主角吧。

img_1413

各位看官感覺如何?是不是有蟲的樣子呢?主要是這小傢伙並沒有比原本大多少。個人一開始的設計理念就是最少附加的造型設計。

有人會說,這小傢伙的針腳都沒了只剩插槽,適合它的地方少很多了。其實它不是只有這樣的外型而已,讓我們繼續看下去。

img_1415

小蟲脫皮!?喔不。只是把鞋子脫下來透透氣。各位看到針腳了吧。相信這樣不影響了吧。

什麼!有人說殼會擋住針腳不好插。喔不其實沒這回事,我們就來看看蟲蟲的柔軟肚子吧。

img_1416

 

這照片正上方俯視角拍攝,可能會有些看不出高度,不過我這樣解說好了,有看見針腳後方黃色保護套嗎?這底殼完完全全跟保護套高度對齊,所以基本上各位想要將7688 DUO放在原本設置的任何地方都不是問題喔!

那又會有人說,原本上方有3個按鈕,這盒子安裝後完全按不到,要這有啥用!?

嘿嘿!這就要好好提醒各位看官了。還記得第一張照片上有三個凸凸的小蟲角嗎?大家注意看那個可不是裝飾而已喔。

img_1412

 

這3個可就是原本按鈕的延伸喔。這是直接在按鈕上方製造活動延伸柱,再以方形外框定在需要的位置所完成的,而且完全不影響按鈕的運作,依然可以感覺出按鈕下壓後回彈的力道。

又有人說這設計左右都有支撐,可前後晃動會導致針腳折彎阿,那我只能說您多慮了。

img_1414

 

有看到後方翹起來的尾巴嗎?這可以有效地防止跟鞋子間前後的移動,而且整體結合後幾乎完全不會晃動,除了美觀,亦可完美保護針腳。

再來就說說各位看官看不到的地方吧!

其實7688DUO本身是有天線插孔的,在蟲蟲尾巴旁邊,是有個空洞,這就是要讓各位拉出所連接天線的。而且這小傢伙阿倫有將它放在褲子口袋中3天,帶著走來走去,口袋沒破,蟲蟲沒壞,至少證明還算好用。

希望各位看官喜歡這隻小蟲。有問題可以在CAVEDU中留言,我看到回應也會很高興的。

 

相關文章:http://www.thingiverse.com/thing:1909394