Tag Archives: LinkIt 7697

[ LinkIt 7697 ] 環保的錦囊妙計:如何用LinkIt 7697搭配聯發科技MCS,製作出魚菜共生裝置

現今,由於環保意識抬頭,社會各界紛紛意識到對環境友好的農耕方法,以及永續經營的重要性。所以,魚菜共生的高用水性,以及養魚、蝦所產生廢棄物的再生利用,是非常好永續利用環境、資源的一種耕種方式。這一篇文章,就是用手把手的方式,教大家如何自己做一個魚菜共生的裝置,一起來看看!

作者/攝影

CAVEDU教育團隊 薛皓云

文章分類教學技術文
時間2小時
成本3700+元
難度***
材料表1.LinkIt 7697開發板*1

(若欲購買,請洽機器人王國商城。)

2.RK IoT EXShield擴充板*1

(若欲購買,請洽機器人王國商城。)

3.5V1A變壓器*1

4.EIC 170孔麵包板*1

5.LED點矩陣 *1

6.土壤溼度感測器*1

7.繼電器模組*1

8.臥式有刷小水泵*1

9.Gravity:Waterproof DS18B20 Sensor Kit*1

(若欲購買,請洽機器人王國商城。)

10.Gravity:類比式酸鹼值感測器模組 *1

(若欲購買,請洽機器人王國商城。)

11.發泡煉石 60兩

12.SAMLA 11/22公升收納盒專用分隔板,透明 *1

13.SAMLA 收納盒 22公升 *1

14.跳線(母對母)10p

15.跳線(公對母)10p

16.塑膠軟管 45cm

 

需要的工具:

1.電工膠帶

2.熱熔膠槍

3.螺絲起子

硬體組裝:

1.將沉水馬達線透過杜邦線延長(紅正白負)

圖1

 

2.將沉水馬達利用熱融膠,黏至SAMLA收納盒 22公升底部角落。

圖2

 

3.將沉水馬達的線,利用熱融膠沿著箱子角落固定住。

圖3

 

4.接上塑膠軟管至沉水馬達上,並放著。

圖4

 

5.將RK IoT EXShield擴充板,利用熱融膠黏至SAMLA收納盒22公升側面(寬的那一面)。

圖5

 

圖6

 

6.在RK IoT EXShield擴充板上方,黏上繼電器。

圖7

 

7.將沉水馬達的白色電線接至繼電器上NO腳位

8.從繼電器COM腳位接一條跳線,至RK IoT EXShield的GND上。

圖8

 

9.繼電器上VCC、GND、IN,分別接上RK IoT EXShield的5V、GND、D8。

10.沉水馬達的正極,接於杜邦母頭左上角數來第4腳位。

圖9

 

11.將Waterproof感測器的水下感測器的黃、紅、黑線,分別接上Waterproof感測器轉接器的A、B、C。

圖10

 

12.將Waterproof感測器轉接器黏至外箱右上角上

圖11

 

13.將Waterproof感測器轉接器,接至RK IoT EXShield擴充版的D2。

14.將Waterproof感測器,放至SAMLA收納盒 22公升中。

圖12

 

15.裁切pH計的泡棉收納盒

圖13

 

圖14

 

16.將裁切完的泡棉,黏至SAMLA收納盒 22公升側面中間(窄的那一面)。

圖15

 

17.在SAMLA收納盒 22公升側面(窄的那一面),左下角黏上pH計轉接器。

18.接上pH計並放入泡棉收納盒中

圖16

 

19.將pH計轉接器,接至RK IoT EXShield擴充版的A1。

20.土壤感測器S、+、-,分別接至RK IoT EXShield擴充版的A0、5V、GND。

圖17

 

21.將發泡煉石,裝至SAMLA 11/22公升收納盒,專用分隔板中約5cm高。

圖18

 

22.將SAMLA 11/22公升收納盒專用分隔板,放至SAMLA 收納盒 22公升上,並將塑膠軟管從SAMLA 11/22公升收納盒專用分隔板中間穿出。

圖19

 

23.將土壤感測器置入發泡煉石中

圖20

 

24.將DHT11黏至RK IoT EXShield擴充板右下角

圖21

 

25.將DHT11的VCC、DATA、GND,分別接到RK IoT EXShield擴充版的VCC、A2(P16)、GND。

這樣硬體部分就大功告成囉!!

圖22

 

接下來是程式部分:

1.申請MCS(MediaTek Cloud Sandbox,簡稱MCS,由聯發科技所推出的雲端服務)帳號。

2.新增產品原型名稱設定如圖23

圖23

 

3.新增完畢後點選詳情

圖24

 

4.新增顯示通道酸鹼值——ID:ph;資料型態:浮點數;單位:N/A。

圖25

 

5.新增顯示通道水下溫度——ID:temp_wa;資料型態:浮點數;單位:攝氏。

圖26

 

6.新增顯示通道土壤溼度——ID:Mo;資料型態:分類Key1名稱:乾;Key1值:D;Key2名稱:濕;Key2值:W。

圖27

 

7.新增顯示通道室內溫度——ID:T;資料型態:整數;單位:攝氏。

圖28

 

8.新增顯示通道室內溼度——ID:H;資料型態:整數;單位:百分比。

圖29

 

9.新增測試裝置

圖30

 

10.完成後前往詳情

圖31

 

11.記下自己的 DeviceID 及 DeviceKey

圖32

 

12.開啟程式ino

13.將第7、8行的WiFi帳號密碼,更改成為自己的WiFi帳號密碼。

圖33

 

14.第10行中的MCS DeviceID及DeviceKey改成自己的ID及Key

圖34

 

15.將程式燒入至LinkIt 7697中,並將7697裝至RK IoT EXShield擴充板上。

16.接上5V1A電源等待7697連上網

 

這樣,我們自己的魚菜共生裝置就完成了!趕快動手嘗試一下喔!

 

相關文章

[教學文] What!智能寶比可遙控!!沒錯,用超級搭檔LinkIt 7697 + Robot Shield達到(文末有彩蛋喔)

作者/攝影

文:Mason Chen (Mason亦為遙控智能寶比的作者,特此致謝!)

圖:Mason Chenfreepik (主題圖片背景)

文字潤飾:CAVEDU 宗諭

文章分類教學技術文
時間

成本

難度

材料表
  • LinkIt 7697*1

  • Robot Shield*1

  • 寶工智能寶比*1

  • 用來遙控的手機 *1

近來,不少Maker皆喜愛把現成的套件、模組加以改裝,置入開發板,例如LinkIt 7697、Arduino系列⋯⋯等等,使改裝後的套件、模組有更、更聰明的應用。比如之前我門曾專文介紹過的Wall-E機器人,便是一個很好的例子。

 

接著這股趨勢,本文所要介紹的,是由Mason Chen大大所改裝,可用手機的低功耗藍牙遙控的AI智能寶比。

 

寶工(Pro’s Kit)出品的「AI智能寶比」是一款智慧型機器人,能與8歲以上的小朋友一起互動、遊玩。它配有紅外線感應器,因此具備避障的功能,經過Mason的改裝後,把原先的紅外線感應玩法,改換成以手機的低功耗藍牙( BLE )進行遙控。

圖1 卡哇伊的智能寶比

 

小知識:什麼是低功耗藍牙(Bluetooth Low Energy,簡稱BLE)?

低功耗藍牙是一種個人區域網路技術,多應用於醫療保健、運動健身、家庭娛樂⋯⋯等領域。顧名思義,低功耗藍牙跟經典藍牙相比,目的在於保持同等通訊範圍的同時,顯著降低功耗及成本。根據藍牙技術聯盟(SIG)預測,至2018年,高於90%有藍牙的智慧型手機將支援低功耗藍牙。

 

接下來,我們就要進到硬體改裝部分:

 

Step1:把寶比的頭部拆下來,並且以斜口鉗或適當工具,把原先的電池檔板破壞掉。這部分會需要花點時間,且要小心處理,只破壞裏面,外殼要保留好。 處理完後可試擺LinkIt 7697與MiniPlan出品的Robot Shield,看看是否可以完全置入。

圖2

 

圖3

 

圖4

 

Step2:把原先的馬達插頭,按照圖5中所標示的,連接至 Robot Shield 中。

圖5

 

Step3:再把寶比的頭部小心地裝回去。這樣,硬體部分就完成了。

 

再來,是軟體開發部分:

Step1:我們使用 LinkIt 7697 arduino 進行開發。

  • 設定好Arduino IDE的環境,並燒錄已經寫好的程式至LinkIt 7697 中。
圖6

 

Step2:手機端請下載LinkIt Remote APP

  • 請打開手機藍芽,以及Robot Shield的電源。
  • 開啟 LinkIt Remote APP,順利的話,便可以找到已改裝好的寶比。
圖7

 

  • 按住Joystick移動,便可遙控寶比了。
圖8

 

文末彩蛋:透過Scratch 3.0遙控智能寶比

還記得之前的一篇文章,教大家運用Scratch 3.0連接micro:bit嗎?在Masen Chen大大的努力下,現在Scratch 3.0也可連接LinkIt 7697,進而控制智能寶比囉!其基本原理仍是運用Scratch Link連接Scratch 3.0與LinkIt 7697,然而,因Scratch 3.0並不支援LinkIt 7697,所以在運用Scratch Link之外,LinkIt 7697的韌體及Scratch 3.0上的指令積木皆必須重寫。至於如何撰寫、操作,就請各位讀者多跟Mason Chen大大交流了。

 

備註:若想購買相關開發板,請點這裡,謝謝。

 

相關文章

[CAVEDU化學小教室] pH值知多少?運用類比式酸鹼感測模組,讓滴定實驗更精準!!

照片改編自pixabay下載的兩張圖片,蒙允免費使用,特此致謝。

炎炎夏日,小編手刀衝進公司附近的7-11,準備好好解一解身體的渴。然而,打開擺放飲料的冰櫃才發現,原來光是礦泉水就有那麼多品牌,而且許多都標榜自己是鹼性水(重點是賣得比較貴)。但是,究竟這些礦泉水是否真為鹼性呢?所以啦,今天CAVEDU化學小教室第一天開張,就是要教讀者們「酸鹼滴定實驗」,這樣就可以測量所喝的飲料,到底是酸還是鹼。

作者/攝影

撰寫:宗諭

攝影:鈺莨、pixabay

文章分類
時間
成本
難度
材料表
  • 蒸餾水

  • 筆記型電腦*1

  • LinkIt 7697或Arduino系列開發板*1

  • 類比式酸鹼感測模組*1

  • 滴定管*1

  • 錐形瓶*1

什麼是酸鹼滴定實驗?

酸鹼滴定實驗的主要原理,主要是利用已知濃度的鹼或酸溶液,透過滴定的方式,測量出未知濃度溶液的酸鹼值。

圖1

 

實驗會使用哪些裝置?

1.滴定管

裝酸性溶液時,多使用玻璃材質;盛裝鹼性溶液時改用鐵氟龍材質,因鹼性溶液會腐蝕玻璃。

 

2.錐形瓶/燒杯

為什麼用錐形瓶會更好呢?因為錐形瓶形狀上窄下寬,當滴入酸或鹼溶液時,液體比較不會噴濺至外面。若是沒有錐形瓶,亦可使用燒杯,但要特別注意液體的噴濺。

 

3.類比式酸鹼感測模組

在一般酸鹼滴定實驗中,會在下方的錐形瓶或燒杯中加入酸鹼指示劑,作用是當酸鹼指示劑變色時,即達到「滴定終點」,表示氫離子(H+)的ml數剛好等於氫氧根離子(OH-)的ml數,完全反用成為水。然而,在此我們使用「類比式酸鹼感測模組」,也是這次實驗的特點。當我們使用「類比式酸鹼感測模組」,便能透過開發板及筆電,更精準測量出每一段實驗時間內pH值的變化。同時,由於我們測量出的是明確的數字,所以,在記錄上會更加精準,並可作為日後實驗的參考。(若欲購買類比式酸鹼感測模組,請洽機器人王國。)

圖2

 

4.LinkIt 7697開發板或Arduino系列開發板

主要是作為感測裝置的類比式酸鹼感測模組,必須連接至開發板,開發板再連接至電腦,才能將感測到的酸鹼值上傳至電腦進行觀測。

 

5.筆記型電腦

作為觀測酸鹼值之用。須在筆電上安裝好Arduino IDE,因為我們會透過這個程式,打開Serial port監測酸鹼值。

 

6.蒸餾水

主要用來清洗實驗器具

 

實驗步驟:

1.以鹼滴定酸:

  • 滴定管中置入鹼液;

  • 錐形瓶/燒杯中置入酸液;

  • 把類比式酸鹼感測模組連接好開發板及電腦;

  • 將類比式酸鹼感測模組置入錐形瓶/燒杯中的溶液;

  • 觀察pH值的變化,以及當達到滴定終點pH 7時,記錄下滴定液體體積為多少。

圖3

 

2.以酸滴定鹼:

  • 滴定管中置入酸液;

  • 錐形瓶/燒杯中置入鹼液;

  • 把類比式酸鹼感測模組連接好開發板及電腦;

  • 將類比式酸鹼感測模組置入錐形瓶/燒杯中的溶液;

  • 觀察pH值的變化,以及當達到滴定終點pH7時,記錄下滴定液體體積為多少。

圖4

 

實驗結果:

1.以鹼滴定酸:

記錄下滴定過程中pH值的變化,可得出類似下面的圖表:

圖5

 

2.以酸滴定鹼:

記錄下滴定過程中pH值的變化,可得出類似下面的圖表:

圖6

 

需要注意的事情:

  1. 類比式酸鹼感測模組是利用置入pH 7的穩定溶液中,進行參數校正。

  2. 水溫要設定。如果水溫沒有設定好,pH值會偏移。所以在進行滴定實驗時,需要準備一個比較準的溫度計。

 

經過這次酸鹼滴定實驗,相信讀者們對於酸鹼混合時的現象,以及當加入的鹼性液體或酸性液體體積漸多時,pH值的變化情形有更深入了解。下一次,若是有富教育意義的化學實驗,我們再跟大家分享。See you!

 

相關文章

[介紹文]以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);
}

 

相關文章

[ 教學文 ]你好,我會走路、唱歌跳舞跟偵測障礙物喔!——一起動手做超級卡哇伊的機器人OTTO97(下)

作者/攝影

文圖轉載自MediaTek Lab官方網站 ,感謝聯發科技創意實驗室授權,特此致謝。而OTTO97(OTTO for LinkIt 7697)為衍生自 OTTO DIYOffical Site / Github / Thingiverse)的專案。

文章分類教學技術文
時間

成本
難度
材料表
  • Robot Shield V1*1

  • LinkIt 7697*1

  • MicroUSB x2

  • Tower Pro SG90 伺服馬達(Micro Servo 9gx4(附轉軸支架以及二長一短的螺絲)

  • HC-SR04P超音波感應器,工作電壓範圍3V~5.5Vx1

  • MAX7219 8×8 矩陣式 LED顯示模組 x1(選配)

  • 被動式(有源)蜂鳴器 x1,工作電壓範圍3V~5V(選配)

  • 3D 列印出機器人各部位零件(頭、身體、腿 x2、腳底板 x2

  接續上一篇:[教學文]你好,我會走路、唱歌跳舞跟偵測障礙物喔!——一起動手做超級卡哇伊的機器人OTTO97(上) ,讓我們繼續製作OTTO97機器人,一起來看接下來的步驟。

 

Step8:組裝左腿(連接擴充板 P15

(1)打開 SG90 伺服馬達套件,會看見一顆伺服馬達、三支轉軸支架(旋臂),以及二長一短的螺絲。在此專案中,僅會用到最短的轉軸支架。

圖8-1

 

(2)用兩隻長螺絲將伺服馬達鎖至OTTO身體的左腳位置。

圖8-2

 

(3)將伺服馬達接線至擴充板的P15,並將手機上的LinkIt Remote APP連結至LinkIt 7697。開啟校正測試UI後,點選Stiff按鈕使伺服馬達回到初始位置,亦即OTTO直立的狀態。

圖8-3

 

(4)OTTO兩隻的零件是相同的(但腳底板左右有分),因此可任意選擇進行組裝。

圖8-4

 

(5)將轉軸支架切短以放入左腿的卡榫溝槽(如圖8-5),並確認與伺服馬達的連接面需平整 (如圖8-6)。不平整的馬達接觸面將導致OTTO無法直線行走。

圖8-5

 

圖8-6

 

(6)以面朝正面的方向(如圖8-7),將左腿連接至OTTO的身體。由於齒輪齒紋的關係,腿部不見得能精準對準身體正面,這可於之後的步驟透過校正測試 APP做修正。

圖8-7

 

(7)用短螺絲將腿上的轉軸支架與身體上的伺服馬達鎖緊,若沒有確實鎖緊會導致OTTO無法順利直線行走。

圖8-8

 

Step9:組裝右腿 P16

(1)採用與組裝左腿相同的步驟完成右腿組裝,並將伺服馬達連接至擴充板的P16 接腳

(2)開啟LinkIt Remote的校正介面進行腿部位置調整,使雙腿的初始方向平行於身體的面向 (如圖9-1)。校正完成後,務必按下Save按鈕儲存相關設定值供之後使用。

圖9-1

 

 

圖9-2

 

Step10:組裝左腳底板(P5LF

(1)將伺服馬達的電線穿過左腿及身體的開孔後連接至Robot ShieldP5

圖10-1

 

(2)選擇校正介面中的Stiff ,將伺服馬達轉軸置於初始位置。

圖10-2

 

(3)切割馬達轉軸支架(懸臂),使它能放進左腳底板零件的卡榫溝槽。

圖10-3

 

(4)用短螺絲將伺服馬達鎖緊固定於腳底板上。

圖10-4

 

(5)整理並反折馬達的線,好將馬達放入左腿的機構中。

圖10-5

 

圖10-6

 

(6)用長螺絲鎖緊固定馬達和左腿(注意正反面,下圖為OTTO的背面)。

圖10-7

 

Step11:組裝右腳底板(P11: RF)

(1)依照與組裝左腳底板相同的步驟,完成右腳底板的組裝,並連接伺服馬達至擴充板的P11

(2)使用校正APP調整腳底板的角度,使它們能平穩站在地面上(如圖11)。

(3)矯正完畢後,務必點選Save儲存相關設定值。

圖11

 

Step12:將Robot Shield裝進OTTO身體內

(1)為留下安裝LED模組的空間,將Robot Shield放進OTTO身體時,盡量將腿部相關走線整理至後方(如圖12-1中,綠色箭頭所指方向)。

圖12-1

 

(2)調整Robot Shield位置,使開發板相關接口能對齊OTTO身上預先開好的孔位。

圖12-2

 

(3)使用Robot Shield附贈的螺絲,將板子固定在OTTO身體機構中。

圖12-3

 

Step13:安裝超音波感應器、蜂鳴器及8×8矩陣式LED

(1)接下來的組裝步驟,會依照圖13-1的接線方法,分別將之前測試過的超音波感應器、蜂鳴器及8×8矩陣式LED,連接回Robot Shield。

圖13-1

 

(2)將蜂鳴器面朝下安裝至OTTO身體中預留的蜂鳴器位置,並將接線接回Robot Shield

圖13-2

 

(3)將超音波感應器模組安裝至OTTO的頭部內(可用銼刀修整眼睛開口邊緣,以方便安裝),並將接線接回至Robot Shield(注意Trig/Echo接線的位置)。

圖13-3

 

(4)將8×8矩陣式LED模組接線回Robot Shield,並以膠帶或其它絕緣物包覆LED模組背面,以避免接觸Robot Shield造成短路。

圖13-4

 

(5)放置LED模組於OTTO身體正面位置(如圖13-5箭頭所指)。

圖13-5

 

(6)最後將頭部身體組合起來,就完成了OTTO的組裝。

圖13-6

 

Step14:執行Demo App

(1)在Arduino IDE中開啟OTTO_Demo.ino範例,並上傳至LinkIt 7697執行。

(2)開啟LinkIt Remote APP並連接至OTTO,從LinkIt 7697載入UI後,會看見如圖14-1的控制介面:

圖14-1

 

  接下來就可開始嘗試OTTO各式各樣的動作了!

  閱讀完了全文,讀者們是否很想趕快動手組裝一台OTTO97機器人呢?若讀者們想購買LinkIt7697 + Robot shield等相關開發板,歡迎前往機器人王國挑選,謝謝。

 

相關文章

[教學文]坦克18步:手把手教您組裝Robot Shield v2坦克車

相信大家對開發板可用來控制車子、手臂、機器人⋯⋯等等,已玩得不亦樂乎。前陣子,在Thingiverse上看見用3D列印出來的坦克,且還能以開發板來控制它,覺得非常有趣,於是下載了3D檔,並準備相關材料進行組裝,大家可由此TANK GO下載列印件,原作者MiniPlan也非常貼心地放上了組裝影片及材料說明連結喔!

作者/攝影

坦克車原作者:MiniPlan

文字整理/圖片:CAVEDU教育團隊郭皇甫

文章分類教學技術文
時間

成本
難度*(1~10)
材料表
  • Robot Shield*1

  • LinkIt 7697*1

  • 坦克3D列印件

  • N20馬達X2

  • M2X8螺絲10顆、M2X4螺絲4顆

  • DFMP3 Player MINI模組X1

  • SG90伺服機X1

  • 紅外線接收器X1、紅外線發射器X1

  • 8歐姆0.25瓦喇叭X1

  先看一下原作者MiniPlan拍攝的組裝影片:

  小編也替讀者們寫了圖文版的組裝步驟,說明如下:

材料準備:

  1. 坦克3D列印件

  2. N20馬達X2

  3. M2X8螺絲10顆、M2X4螺絲4顆

  4. DFMP3 Player MINI模組X1

  5. SG90伺服機X1

  6. 紅外線接收器X1、紅外線發射器X1

  7. LinkIt 7697開發板X1

  8. 8歐姆25瓦喇叭X1

  9. Robot shield v2控制板X1

圖1 材料準備

 

工具準備:

  • 螺絲起子(十字、一字)

  • 熱熔膠槍、熱熔膠條。

 

Step1:首先連接車身與胎框。這裡會有四個大小一樣的胎框,但其連接軸的圓洞有大小之分,請先拿出二個最大圓洞的胎框,並裝至車身卡榫上,如圖2所示。(PLA較無彈性,所以將胎框壓進卡榫時,要邊轉動胎框邊施力壓進。)

圖2 將胎框壓進卡榫

 

圖3 二邊胎框安裝完成

 

Step2:接下來拿出兩個N20馬達,並將其安裝至車身內,馬達的軸對準車身的小圓洞,即可向外推到底,如圖4所示。

圖4 安裝N20馬達

 

Step3:拿出F部件,並將其對準I部件的上、下方凹槽後,壓進凹槽內。(這裡要特別注意,I部件上、下方的邊框有些微不同,F部件的紋路也不一樣,請依照圖5的方向及位置安裝。)

圖5 安裝F部件

 

Step4:拿出C部件,並將其安裝至N20馬達軸上。(在這裡,作者非常貼心將孔洞設計成與N20馬達的輪軸形狀相同,如此一來,安裝時就不會搞錯了。)

圖6 安裝C部件

 

圖7 四胎框安裝完成

 

Step5:將喇叭焊線後,分別接上MP3 Player mini的SPK_1、SPK_2,使用熱熔膠將喇叭固定在I部件中心的圓孔上。(也請在MP3 Player mini的VCC、RX、TX腳位另外接上三條杜邦線。)

圖8 固定喇叭

 

Step6:用四顆M2x4螺絲,將Robot Shield v2對準C部件圓柱上的孔位並鎖上。(如果在這步驟對不到孔位的話,您可稍微扳動C部件的圓柱,對準後鎖上。在此步驟,您就可以將馬達線鎖上Robot Shield的端子台上了。)

圖9 使用M2螺絲固定Robot Shield v2

 

Step7:車身的下半部先告一個段落,接著拿出D部件,左右半部對準後壓緊固定。

圖10 壓緊D部件

 

Step8:拿出四顆M2x8螺絲,對準E部件上的四個孔洞,將螺絲先鎖一些進去。

圖11 將螺絲先鎖一點進E部件

 

Step9:再將E部件對準D部件上的螺絲孔位,用螺絲起子鎖緊後固定。

圖12 鎖緊D、E部件。

 

Step10:接著拿出B部件,並將一字舵片使用熱熔膠固定至凹槽。(注意,舵片中正央圓形凸起的地方朝上。)

圖13 固定舵片在B部件上

 

Step11:將B部件以四顆M2X8螺絲鎖緊固定在D部件上方四個孔洞。

圖14 固定B部件在D部件上

 

Step12:將焊好線的紅外線接收器,穿過H部件的方形孔洞,並使用熱熔膠固定在方形凹槽內,同時將G部件也以熱熔膠固定在H部件的圓形凹槽。(請特別注意,G部件上有四個小方孔,請將小方孔對齊紅外線接收器的位置後再固定。)

圖15 將紅外線接收器穿過H部件孔洞

 

圖16 將G部件固定在H部件上

 

Step13:請將焊好線的紅外線發射器,從線端穿過A部件前方的炮口。

圖17 紅外線發射器穿過炮口並固定

 

Step14:把A部件翻過來後,將SG90以圖18的位置,以M2X8的螺絲固定。(請特別注意,A部件上只有一個螺絲孔,您也可以使用熱熔膠固定SG90沒有鎖螺絲的一邊,或是使用鑽孔工具再多打一個孔。)

圖18 固定SG90

 

Step15:接下來把SG90與紅外線發射器的線,分別穿過A部件下方的兩個方形孔洞,並將多餘的線整理好。

圖19 將線穿過A部件的方形孔

 

圖20 將多餘的線整理好

 

Step16:將H部件固定在A部件上方的方形洞。(請特別注意,請按照圖21的H部件方向固定。)

圖21 將H部件固定在A部件上

 

Step17:接著請將A部件的SG90對準B部件上舵片的圓孔,往下壓緊固定。(請特別注意,在固定前,請先校正SG90的位置,讓您的炮台能夠左右各旋轉約90度為最佳。)

圖22 固定炮台

 

Step18:最後,將SG90接在P5腳位,其餘感測器按照網站文件上註明的腳位接上後,並將D部件壓緊至I部件上即可。

 

  至此,組裝步驟就完成囉!接下來,您便可將網站上給的程式上傳至7697開發板,並且使用手機下載LinkIt Remote後,試試看,坦克車是不是能順利動起來了呢?

 

備註:若讀者想購買相關的開發板,歡迎洽詢機器人王國

 

相關文章

[App Inventor IoT] LinkIt 7697使用BLE(藍牙4.0)傳送光感測器數值

作者/攝影  袁佑緣
時間  1小時
成本
  • 約900元
難度  * *
材料表
  • LinkIt 7697
  • LinkIt 7697擴充板
  • Grove光感測器
  • micro usb線
  • 電腦

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來得到遠端LinkIt 7697的光感測器讀值。

 

App Inventor Extension 安裝

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載-連結

 

 

App Ineventor 程式設計 

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,Connect按鈕是用來連接到指定藍牙MAC位址的7697,連上之後就會變成Disconnect按鈕,可以用來斷掉連接的藍牙。而最底下的有一個label元件用來顯示感應器的數值。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的MAC address,至於這個MAC address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定MAC address的控制板,如果成功的話,按鈕就會切換到Disconnect,以等待下一次使用者按下時就會斷線。

 

如果連接成功的話,應用程式的標題就會切換成Connected,反之則顯示Unconnected。

接下來是本範例的重點部份,如果此刻的狀態是正確連接的話(也就是按鈕是顯示用來Disconnect的狀態),Clock元件每隔一段時間就會啟動一次接收BLE訊息的服務,而這個服務會透過指定的Service跟Characteristic讀到7697上的光感測器數值(提醒讀者這邊的UUID務必確認跟Arduino程式碼端的設定一樣喔),最後當App讀到BLE的Int值時(when BluetoothLE1.IntValueRead),就會將數值顯示在Label元件上,讓使用者可以在手機螢幕上看到光感值!

 

LinkIt 7697 程式設計

請打開Arduino IDE,並確定您的控制板在編輯器中切換成7697,再上傳以下的程式碼到7697上。

本範例的ino檔請到此處下載-連結

#include <LBLE.h>
#include <LBLEPeriphral.h>

int item;

LBLEService AService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt ARead("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup()
{
  Serial.begin(9600);
  LBLE.begin();
  while (!LBLE.ready()) { delay(100); }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  AService.addAttribute(ARead);

  LBLEPeripheral.addService(AService);
  LBLEPeripheral.begin();
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE Ana");
  LBLEPeripheral.advertise(advertisement);


}


void loop()
{
  item = analogRead(A0);
  Serial.println(item);
  ARead.setValue(item);
  delay(1000);
}

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

 

 

範例影片

 

相關文章:

[ App Inventor IoT ] LinkIt 7697使用 BLE(藍牙4.0)控制伺服馬達

這次向各位介紹常用的雲端服務,分別是台灣聯發科技公司搭配旗下LinkIt系列開發板之MCS與ThingSpeak,我們透過LattePanda實作。你可以從遠端來控制板子的腳位狀態或是檢視板子狀態與感測器的數值變化。類似的雲服務近年來如雨後春筍般冒出來,對於想找尋免費方案的使用者或教學單位來說是相當好的事呢。

作者/攝影  袁佑緣
時間  1小時
成本
  • 約800元
難度  * *
材料表
  • LinkIt 7697*1
  • micro usb線*1
  • 伺服馬達*1
  • 電腦*1
  • Android手機*1

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的伺服馬達。

App Inventor Extension 安裝 

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載-連結

 

App Ineventor 程式設計 

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,首先在第一行有TextBox元件,用來顯示現在控制的伺服馬達角度,接下來有兩個按鈕,左邊的connect按鈕主要是用來連線到7697,右邊的Disconnect則是斷線,最後,在最下面有一個滑桿,可以用拖曳來控制馬達的角度(注意因為這邊控制的伺服馬達可控角度為0~180度,所以在Slider元件上要設定最大值為180最小值為0)。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的mac address,至於這個mac address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話,滑桿跟計時器就會被啟動。

而斷線的部份則跟連線差不多,只是Enabled跟Disabled的元件會相反。

接下來是本範例的重點部份,Clock元件每隔一段時間就會啟動一次傳送BLE訊息的服務,而這個服務會將滑桿上此刻的數值先轉成整數後透過指定的Service跟Characteristic送出,而在這邊的UUID務必確認跟Arduino程式碼端的設定一樣,7697才能成功接收到數值喔!

LinkIt 7697 程式設計

 請打開Arduino IDE,並確定您的控制板在編輯器中切換成7697,再上傳以下的程式碼到7697上。 本範例的ino檔請到此處下載-連結

 

#include <LBLE.h>
#include <LBLEPeriphral.h>
#include <Servo.h>

Servo my_servo;
int servo_position = 90;

// Define a simple GATT service with only 1 characteristic
LBLEService servoService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt positionCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);


void setup() {


  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  // to check if USR button is pressed
  pinMode(6, INPUT);

  my_servo.attach(10);
  my_servo.write(servo_position);

  // Initialize BLE subsystem
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  // configure our advertisement data.
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE Servo");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE Servo");

  // Add characteristics into servoService
  servoService.addAttribute(positionCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(servoService);

  // start the GATT server - it is now 
  // available to connect
  LBLEPeripheral.begin();

  // start advertisment
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(300);

  Serial.print("conected=");
  Serial.println(LBLEPeripheral.connected());

  if (digitalRead(6))
  {
    Serial.println("disconnect all!");
    LBLEPeripheral.disconnectAll();
  }

  if (positionCharacteristic.isWritten()) {
    servo_position = positionCharacteristic.getValue();
    Serial.println(servo_position);
    my_servo.write(servo_position);
  }


}

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

範例影片:

 

相關文章:

10/17開始上課,10/16報名截止!物聯網運用與開發​【臺北市職能發展學院 X CAVEDU教育團隊】

$1133元,21小時物聯網精彩課程,整套LinkIt 7697設備帶回家,這次錯過我只能說太可惜啦…  10/17晚上開始上課,先把報名頁面點開吧!

Acupass報名請點我

以下為本次物聯網運用與開發課程招生簡章(詳細報名簡章請按我)

一、主辦單位:臺北市職能發展學院

二、培訓單位:翰尼斯企業有限公司

三、訓練班別與課程資訊:物聯網運用與開發

班別名稱人數時數訓練起迄日期上課時間報名截止日錄取公告自行負擔費用
物聯網運用與開發30人21小時106/10/17

106/11/7

週二、四

18:30-21:30

線上報名;106年10月16日中午12:00截止106/10/161,133元
製表日期:106.10.06

上課地點:台北市中山區長安東路一段18號6F (長安東路 / 林森北路交叉口附近)

四、參訓資格與訓練費用負擔:

(一)年齡:年滿15歲以上民眾有意願參加進修訓練者(自行負擔個人訓練費用之20%)。

(二)性別:男女兼收

(三)開班條件:具特殊身分參訓者人數,須佔每班次實際開訓人數10%(含)以上,如特定對象不足額方開放一般民眾參訓。

 

五、報名方式與繳交文件:

(一)先完成線上報名,報名網址:https://www.accupass.com/event/1710031605591491104938

(二)經培訓單位通知後,請繳交下列文件:

  1. 身分證(正反面影本)
  2. 1吋相片2張
  3. 特定對象身分證明文件(無者免附)

資料不齊或欠缺者,恕不接受報名。

六、錄訓機制:

(一)甄試方式:採「甄選審查錄訓」方式。

甄選審查錄訓將以筆試跟面試兩階段進行。筆試主要針對基礎知識了解程度做評鑑,將其評鑑結果跟面試成績做加總,占甄選審查標準20%。

面試主要針對申請人參與意願、基礎知識了解程度、學經歷及證照進行分數計算作為評鑑標準,占甄選審查標準80%。

筆試以是非題跟選擇題為主,使其學員了解物聯網基礎知識。口試將針對參與意願(50%)、基礎知識了解(25%)、學經歷簡述(25%)為評鑑標準。

【甄試日期】106年10月16日

甄試成績達錄訓標準70分者為合格,依甄試總成績高低順序排列後,分列正取、備取,錄取名單於各班錄取公告日公佈於CAVEDU教育團隊首頁(http://www.cavedu.com/),並以E-mail與簡訊方式通知錄取學員,未錄取者不另通知。

106/10/17開訓後(含開訓當日)如尚有缺額,將於開訓後3日內依備取序號依順序遞補學員。

八、課程大綱   

課程名稱課程內容
教務說明

Linklt7697相見歡

教務管理規定說明

1.  職訓計畫介紹

2.  出缺勤管理辦法與退訓規定

3.  學員應盡權利與義務

4.  申訴管道

Linklt 7697 規格介紹、使用環境設定。

數位控制控制實習

基本電子輸入輸出控制實習基本電子輸入輸出控制實習
雲端服務運用認識  MediaTek Cloud Sandbox 雲服務

上傳感測器資料至 MCS 雲服務

MCS 雲端智慧居家控制

手機程式設計編寫 Android app 使用 App Inventor

Android 裝置透過 BLE 與 7697 互動

擴充裝置電路設計實作使用電路設計軟體設計與製作擴充電路板
開源時代-認識開放政府認識資料格式 JSON

使用 Opendata 開放資料平台抓取 PM2.5 空氣汙染資料

讓 LINE 與 7697 對話吧!認識 LINE API 使用 Python/NodeJS

架設 LINE回音機器人透過 Line API 與 7697 互動

九、注意事項:

1.受訓期間膳宿自理,受訓期滿全期訓練成績合格者,由本單位發給結訓證書。於進修課程期間,除公假、病假、喪假外,其餘請假事由一律以事假認定。未依規定辦理請假時,均以曠課論。

扣除公假及喪假外,請假時數累積達全期課程總時數1/5(含)以上者、曠課時數達全期課程時數1/10(含)以上者或參訓期間行為不檢,情節重大者,勒令退訓。

2.已報名繳費學員因故無法參訓,得於開訓前申請退還所繳費用,未於開訓前申辦者,已繳交之訓練費用,除該班次停辦外,一概不予退還。

更多課程詳情,請參閱CAVEDU教育團隊首頁(http://www.cavedu.com)。

[LinkIt 7697開發板教學]MCS雲端RGB LED類比控制-Blocklyduino圖形化開發環境

作者/攝影  曾吉弘
時間  3小時
成本
  • LinkIt 7697開發板
  • RGB LED
  • 麵包板
  • 線材
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697開發板
  • RGB LED
  • 麵包板
  • 線材

本文要介紹如何使用Mediatek Cloud Sandbox (聯發科技實驗室推出的雲服務)來控制LinkIt 7697上的 RGB LED 的個別顏色亮度。程式使用Blocklyduino圖形化開發環境開發板製作的小型電路專題。您可由此比較與一般Arduino IDE的類C語法的異同。請參考我們上課的投影片(超過100頁喔)!:

 


 

MCS端設定

        請登入MCS雲服務,建立新的原型,其下有三個整數(integer)型態的控制器,channel id 分別是 red, green, blue,下限0上限255,這是對應於Arduino的 analogWrite語法的參數。詳細建立資料通道畫面如下:

View post on imgur.com

建立好三個資料通道之後,請為這個原型建立一個測試裝置,完成如下圖:

View post on imgur.com

硬體線路

請將Linkit 7697插上麵包板,並根據下圖將RGB LED負極(最長腳)接到GND腳位。左到右分別代表R G B三個顏色的腳位,請分別接到LinkIt 7697的P10、P8與P6腳位。

View post on imgur.com

Blocklyduino程式碼

初始化/setup():在此會先連上指定的Wi-Fi AP、MCS伺服器並新增所指定的通道id。請注意相關資訊不要打錯

View post on imgur.com

重複執行/loop()

在此會持續與MCS保持同步,如果任一通道有更新(使用者在MCS輸入新的數值)的話,就會根據新的數值來控決定對應的RGB LED顏色強度。最後則是把MCS的數值顯示於Serial Monitor

View post on imgur.com

7697程式碼

上述BlocklyDuino轉出來的Arduino程式碼如下,請直接上傳到7697之後就可以執行,重要的指令都以註解方式寫在程式碼中。

 

操作

請先檢查相關資料是否都正確,執行7697端程式。確認7697已連上MCS之後,請在各個控制器通道輸入0~255之間的數值,即可看到RGB LED顏色產生變化,也會把相關數值顯示於Serial Monitor

 

由於BlocklyDuino目前尚未提供MCS的PWM控制器資料通道的指令,但您可以自行在轉為Arduino code之後將 MCSControllerInteger red(“red”);     改為 MCSControllerPWM red(“red”);   這樣就能在MCS端使用PWM控制器資料通道的拉桿來控制LED亮度。

#include <LWiFi.h>
#include "MCS.h"

char _lwifi_ssid[] = "";     //Wi-Fi 帳號
char _lwifi_pass[] = "";   //Wi-Fi 密碼
MCSDevice mcs("", ""); //MCS測試裝置的 deviceId, deviceKey

MCSControllerInteger red("red");            //新增 channelId 為 red 的整數型控制資料通道
MCSControllerInteger green("green");  // green
MCSControllerInteger blue("blue");       // blue

void setup()
{
  mcs.addChannel(red);                             //將這三個channel 加入測試裝置
  mcs.addChannel(green);
  mcs.addChannel(blue);
  while (WiFi.begin(_lwifi_ssid, _lwifi_pass) != WL_CONNECTED) {
    delay(1000);                                            //每隔1秒試著去連上指定的 Wi-Fi AP
  }
  while (!mcs.connected()) {                    //持續與MCS保持連線
    mcs.connect();
  }
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(6, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  while (!mcs.connected()) {                         //檢查與MCS的連線狀態,如果斷線會在此重連
    mcs.connect();
    if (mcs.connected()) {
      Serial.println("MCS Reconnected.");
    }
  }
  mcs.process(100);
  if (red.updated()) {                                       //如果各控制資料通道更新
    analogWrite(10, red.value());                 //根據該值來控制LED亮度
  } else if (green.updated()) {
    analogWrite(8, green.value());
  } else if (blue.updated()) {
    analogWrite(6, blue.value());
  }

  Serial.print(red.value());
  Serial.print(", ");
  Serial.print(green.value());
  Serial.print(", ");
  Serial.println(blue.value());                      //顯示各資料通道數值於Serial monitor
}

 

 

相關文章:

 

 

 

 

 

[LinkIt 7697 iOS 方案] 寫出 Arduino code自動生成手機介面!

作者/攝影  曾吉弘
時間  3小時
成本
  • LinkIt 7697開發板
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板
  • iphone

本文要介紹聯發科技實驗室推出的LinkIt Remote iOS小程式,透過BLE來與 7697開發板互動,特色在於可以輕鬆設計各種簡易的控制界面喔!

 

LinkIt Remote iOS app

LinkIt Remote 是一個用來產生app介面的iOS小程式,是以 BLE 與 LinkIt 7697開發板搭配使用。只要在7697端設定好,就可以在兩者連線之後產生對應的介面。您需要做兩件事:

  • Arduino IDE 的 7697 SDK需要升級到9.5,才可使用最新LRemote 函式庫與本文的範例。

View post on imgur.com

  • 找一隻 iphone 安裝 LinkIt Remote iOS app,可用於掃描鄰近的 7697 開發板(需執行類似於本文的程式),並彼此溝通。

重點就是這一句:

寫Arduino code 可以自動生成 app 介面!

1.請開啟 File > Examples > LRemote > RemoteControl 範例,並上傳至您的 7697開發板。

2.下載 LinkIt Remote 到您的 iphone上,目前版本需要 iOS 10。

3.啟動 LinkIt Remote app,會看到 中的 7697 顯示在畫面的裝置清單中。

View post on imgur.com

4.點選這個 LinkIt 7697。item, the app connects to LinkIt 7697 and display the following remote UI control: (如果範圍裡有多台的話,就會看到多個項目,後續程式碼中的#25 LRemote.setName(“LinkIt 7697”); 可以修改開發板所顯示的名稱)

 

View post on imgur.com

5.請點選畫面中的 USR LED 搖頭開關,就會觸發 7697 的 USR LED (P7腳位)亮起。

6.請開啟 Arduino 的Serial Monitor,並拖拉畫面中的 Value Slider 滑桿,就可以在Serial Monitor中看到數值的變化,我們後續可以拿這個數值來控制LED亮度(analogWrite)、伺服機角度等等都可以喔。

View post on imgur.com

完工了,開始玩吧~

 

7697程式碼

 

最後是7697的程式碼,路徑是 File/Exmaples/LRemote/RemoteControl

由此可以看到如何編寫Arduino code 去定義畫面上的元件

  //設定 app 端介面 UI canvas
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);         //設定螢幕棋盤格數 3行5列

  //加入按鈕
  button.setText("Press Me");   //加入文字
  button.setPos(1, 1);               //設定位置
  button.setSize(2, 1);              //設定元件尺寸
  button.setColor(RC_PINK);   //設定位置
  LRemote.addControl(button); //加入按鈕

  //加入大型圓形按鈕
  bigButton.setText("!BIG!");
  bigButton.setPos(0, 3);
  bigButton.setSize(3, 2);
  bigButton.setColor(RC_GREEN);
  LRemote.addControl(bigButton);

  //加入滑桿
  slider.setText("Value Slider(-100 ~ 1024)");    
  slider.setPos(0, 2);
  slider.setSize(3, 1);
  slider.setColor(RC_ORANGE);
  slider.setValueRange(-100, 1024, 0);   //設定滑桿範圍
  LRemote.addControl(slider);

  //加入文字標籤
  label.setText("Remote Test");
  label.setPos(0, 0);
  label.setSize(3, 1);
  label.setColor(RC_GREY);
  LRemote.addControl(label);

  //加入on/off搖頭開關
  switchButton.setText("USR LED");
  switchButton.setPos(0, 1);
  switchButton.setSize(1, 1);
  switchButton.setColor(RC_BLUE);
  LRemote.addControl(switchButton);

 

完整程式碼如下:

/*
  This example configures LinkIt 7697 to a reciver of the iOS LinkIt Remote App

  created Aug 2017
*/
#include <LRemote.h>

LRemoteButton button;
LRemoteSlider slider;
LRemoteLabel label;
LRemoteSwitch switchButton;
LRemoteCircleButton bigButton;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  Serial.println("Start configuring remote");

  // Initialize GPIO
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // Setup the Remote Control's UI canvas
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);

  // Add a push button
  button.setText("Press Me");
  button.setPos(1, 1);
  button.setSize(2, 1);
  button.setColor(RC_PINK);
  LRemote.addControl(button);

  // Add a big, round button
  bigButton.setText("!BIG!");
  bigButton.setPos(0, 3);
  bigButton.setSize(3, 2);
  bigButton.setColor(RC_GREEN);
  LRemote.addControl(bigButton);

  // Add a slider
  slider.setText("Value Slider(-100 ~ 1024)");
  slider.setPos(0, 2);
  slider.setSize(3, 1);
  slider.setColor(RC_ORANGE);
  slider.setValueRange(-100, 1024, 0);
  LRemote.addControl(slider);

  // Add a simple text label
  label.setText("Remote Test");
  label.setPos(0, 0);
  label.setSize(3, 1);
  label.setColor(RC_GREY);
  LRemote.addControl(label);

  // Add an on/off switch
  switchButton.setText("USR LED");
  switchButton.setPos(0, 1);
  switchButton.setSize(1, 1);
  switchButton.setColor(RC_BLUE);
  LRemote.addControl(switchButton);

  // Start broadcasting our remote contoller
  // This method implicitly initialized underlying BLE subsystem
  // to create a BLE peripheral, and then start advertisement on it.
  LRemote.begin();
  Serial.println("begin() returned");
}

void loop() {

  // check if we are connect by some BLE central device, e.g. an mobile app
  if(!LRemote.connected()) {
    Serial.println("waiting for connection");
    delay(1000);
  } else {
    delay(100);
  }
  
  // Process the incoming BLE write request
  // and translate them to control events
  LRemote.process();

  // Now we poll each control's status
  
  if(button.isValueChanged()){
    Serial.print("button new value =");
    Serial.println(button.getValue());
  }

  if(bigButton.isValueChanged()){
    Serial.print("big button new value =");
    Serial.println(bigButton.getValue());
  }

  if(switchButton.isValueChanged()){
    digitalWrite(LED_BUILTIN, switchButton.getValue());
  }

  if(slider.isValueChanged()){
    Serial.print("slider to new value = ");
    Serial.println(slider.getValue());
    analogWrite(7, map(slider.getValue(),-100, 1024, 0 , 255)); 
    //將slider的數值轉換之後用來控制LED
  }
}

 

相關文章:

[Linklt7697系列] 八校國中小夏令營不藏私大公開-Linklt7697搶答器

前情提要:LinkIt 7697開發板教學]BlocklyDuino圖形化介面 – 環境建置與介面

作者/攝影 趙偉伶
時間  1小時
成本 $1500
難度 * *
材料表
  • Linklt7697
  • 麵包版
  • 公母杜邦線
  • 10 mmLED燈
  • 大型按鈕
  • Mico USB線
  • 連接器
  • 極限開關

透過前篇   [LinkIt 7697開發板教學]BlocklyDuino圖形化介面 – 環境建置與介面   了解了BlocklyDuino圖形化介面後,接著要認識電腦程式是如何運作的。想問問大家,覺得電腦跟人類的思考方式有什麼不同呢?

電腦其實需要我們人類給他非常明確指令去控制,才會順利做事情,例如:媽媽請你拿桌上的水,人類會直接走到水杯前面後拿起來,在這之前如何移動、如何伸出手、張開手指、握住水杯等等幾乎都是身體自發性完成的。而電腦就不一樣了,他需要明確的指令才行。例如:走到座標XYZ哪個位置,機械手臂向下移動到哪個位置,先張開手指再闔上手指等等,一個都不能錯!寫程式就是我們與電腦的溝通方式,你會更了解電腦的思考模式。

 

動動手

要做搶答器,要先將按鈕組裝起來,就跟著圖一起來做吧!

 第一步:組裝連接器與極限開關

第二步:組裝按鈕

第三步:接上LED

接著,將7697開發板插上麵包板,拿出兩顆LED及四條公母杜邦線,將兩顆LED的正極(比較長的腳)分別接到7697開發板的P7與P8腳位,負極(比較短的腳)則接到開發板的GND腳位,完成如下圖:

第四步:接上按鈕

先了解按鈕的電路原理,再將接好的兩顆按鈕拿出來,並依下列圖示接在P3、P4及GND的位置。

動動腦,寫程式

BlocklyDuino圖形化程式有很多不同的抽屜,而每個抽屜都代表了不同功能的程式指令。今天的搶答器會用到〝程式流程抽屜〞、〝邏輯抽屜〞跟〝數位I/O抽屜〞,讓我們一邊認識程式積木一邊完成搶答器的程式吧!

第一步:搶答器動作分解

先了解程式的思考邏輯,再去認識所需積木,一步步將搶答器程式構築出來。

試試看,在了解這些邏輯後,是否可以完成搶答器的程式呢??

 

第二步:認識搶答器所需的程式積木

每個Blocklyduino程式都會有"初始化"跟"重複執行"兩個積木,如果沒有,可以從"程式流程抽屜"找到,就跟小豬一起來認識這兩個積木吧!

 

要如何知道誰先按下按鈕來搶答呢?這時登場的是邏輯抽屜的"如果(if)",它可用來檢查某個條件是否發生了,以搶答器來說就是按鈕被按下了。本次搶答器有三個條件,讓我們來看如何形成三個條件判斷吧!

條件判斷,電腦的邏輯有所不同,請看下圖。

Linklt Smart 7697這塊開發板背面有一根根的針腳,可以用來連接各種不同的電子元件。在程式中會用Pin X代表不同的元件,例如把按鈕接在Pin3的話,在程式鐘就能用Pin3來得知按鈕的狀態。

電腦傳輸資料,有分成兩種訊號:數位訊號跟類比訊號,讓小豬告訴大家這兩種訊號的差別。

搶答器會根據哪一個按鈕被壓下來決定LED要亮或暗,就是先前介紹的數位訊號,所以會使用到數位I/O抽屜的程式積木。

讓LED燈亮跟暗,代表要讓7697開發板對某一支針腳提供高電位或低電位。在此,如同按鈕,可用腳位編號來表示LED。

認識了這些積木,應該可以寫出搶答器的程式了吧?

還沒還沒~因為程式的速度跑很快,如果只用LED亮燈指令的話,實際上是看不清楚地,所以要加入"時間抽屜"的"延遲積木"來決定LED到底要亮或暗多久時間。

知道這些積木作用之後,將這些積木阻合起來就是搶答器的程式了吧!!

完整的程式,如下:

 

可以找同學一起玩可愛搶答器囉!

相關文章:

 

[BlocklyDuino] 自製Blockly積木教學,以Linux、 windows10系統製作積木

本文說明Blocklyduino 的檔案架構以及範例:如何自製一個弧度轉角度的數學指令。

※此例為使用Windows 10 操作

 

作者/攝影 翁偉傑
時間  1小時
成本
難度  *  *  *  *
材料表
  • Linux or Windows10作業環境
  • 7697BlocklyDuino環境

環境需求:

  • win執行需運行Ubuntu Linux 的Bash Shell
  • mac可直接在terminal執行
  • 需安裝Python且須使用7以前的版本,需要import lxml 函式庫(Python) 在shell輸入pip install lxml,此函式庫可處理xml & html格式資料 。
  • blockly/apps/blocklyduino/index.html & offline-editor/main.html

切勿手動修改,會被覆蓋可能引發錯誤

 

BlocklyDuino檔案架構:

1.   首先請用 git 下載 MediaTek-Labs的Github。下載完成後,解壓縮到任何你知道的位置。

2.   解壓縮之後有許多資料夾,簡述如下:

  • blockly:是我們主要新增使用到的資料夾
  • example:範例程式,每個資料夾都會有一個同名的 .ino 與 .xml 檔。Blocklyduino 可匯入這個 .xml檔來開啟範例。

  • offline-editor:是將blocklyduino作為Chrome的擴充套件
  • html:會連結至blockly/apps/blocklyduino/index.html,可離線執行網頁版blocklyduino
  • sh:重新編譯時要用到本指令

  1. 進入blockly/blocks資料夾中,在此有對應設定Blocks外觀之程式碼,可以定義版型、顏色、積木連結位置、輸入… (與arduino程式無關,但在此須設定參數以及其類型 )

例如開啟 dht.js 即可看到 dht溫濕度感測器相關指令

常用的函數指令:

  • setHelpUrl:說明文件網址,在IDE中對某指令點選右鍵->說明(HELP)即可進入。
  • setColour:Block的色調
  • setPreviousStatement & this.setNextStatement:決定本指令的上與下是否能再接受其他Block
  • appendDummyInput():告訴程式此處要塞字串
    • appendField 則是引導程式到字串的地方
      • 延伸用法:appendField(new Blockly.FieldDropdown(OPERATORS), ‘OP’);
      • 可以插入圖片 如下: .appendField(new Blockly.FieldImage(Blockly.Blocks.servo.image, 64, 64))
      • 可以輸入值 如下:.appendField(new Blockly.FieldTextInput(“255″),”TOHIGH”);
    • setCheck:確認資料型別
    • setAlign:確認邊界
    • setTooltip:是將blocky\msg資料夾中相關的說明訊息映射至Block中供使用者可以在IDE中參閱。將滑鼠放置某個block上即會顯示,如下圖。

  • FieldDropdown:建立下拉式選單
    • 以appendField(new Blockly.FieldDropdown(OPERATORS), ‘OP’)為例,OPERATORS是變數名稱。在Logic裡面的範例中,OPERATOR會引導到在同一個Block的Tooltip變數中,再轉換成字串

例如數學中的 + 實際上是六個指令的集合,可以透過下拉式選單來切換

  • setOutput:變成Data Block,從右邊插入其他Block
  • setPreviousStatement上方可接其他Block
  • setNextStatement下方可接其他Block

  • appendValueInput:允許該block右側產生輸入欄位你讓Data Block從右邊插入
    • appendValueInput(“VariableName”):VariableName 可在寫轉換Arduino code時使用
    • .setcheck:則是決定輸入的資料型態。 Number, string …

可以允許多個setcheck,不允許的資料型態將無法放入該輸入欄位中。

 

  • appendDummyInput:沒有讓Data Block從右邊插入的功能,但是可以讓你繼續增加Block內部的文字字串,不需要在appendDummyinput()裡面宣告特定的文字,也可以塞一些選項
    • 可加入上述 appendField()之各種用法

 

4.      blockly/generators/arduino資料夾:此資料夾下皆是負責將blocks轉換為Arduino code,Generator 會生成對應 Blocks 的 Arduino code,因此在 BlocklyDuino\blockly\Blocks 資料夾下的檔案或 function,在 Generator 端都要有一個同樣函數名稱的對應。

  • 注意:Blocks[‘function name’] 務必要注意兩邊function name的名稱要相同
  • 最後要 return,以顯示在 IDE 之 Arduino 頁面
  • 還有要注意的是,在同一個Block中,function name 的部分要避免使用相同的名字,否則在轉為Arduino Code中的時候將會產生後宣告的function覆蓋掉前面的同名Function的情形。
  • 關於Arduino.ORDER_ATOMIC,則是會告訴 Blockyduino 現在即將要進到下一個 Block 而不是進到子Block運行。

 

Example:

  • 當item=1000 賦值完畢後,function將會return Blockly.Arduino.ORDER_ATOMIC,並開始執行下一個Block的指令。

5.     blockly/msg資料夾:msg目錄下的js檔案,此功能為將blocks資料下的變數名稱對映到實際的block上,在js資料夾下還有en.js & zh-hant.js需一併更改,功能為將變數名稱改為不同語系。

※在blockly/blocks與blockly/generators中的js檔創建block時,選擇哪個js檔或自行創建js檔案並不會影響在實際使用blocklyduino時的位置,block位置皆是由category.xml設定之。

 

自製一個弧度轉角度的數學指令

1.   更新 Windows 10

Build 14316  微軟從 Windows 10 開始加入原生的 Ubuntu Linux 環境,Linux 的開發者現在可以在 Windows 10 系統中直接使用 bash shell

2.      安裝 bash

點選Wins 10開始 → 更新與安全性 → 開發人員專用 → 選擇開發人員模式

回到設定首頁 → App → 應用程式與功能 → 程式與功能 → 左側點選開啟或關閉

Windows功能 → 將”適用於Linux的Windows的子系統(搶鮮版(Beta))”勾選 → Windows 點選重新開機

重新開機後 → 開啟cmd → 在cmd輸入”bash” → 依照指示步驟安裝Ubuntu

 

3.      設定block外觀:

於/blockly/blocks 新增該 block 的外觀定義,以本指令來說要加在 math.js 中的最底部,(※注意不要放在任何括號中),如下:

Blockly.Blocks['math_radian_to_degree'] = {
 init: function() {
   this.setHelpUrl(Blockly.Msg.MATH_RADIAN_TO_DEGREE_HELPURL);
   this.setColour(Blockly.Blocks.math.HUE);
   this.appendValueInput("RADIAN")
     .setCheck("Number")
     .appendField(Blockly.Msg.MATH_RADIAN_TO_DEGREE_TITLE);
   this.appendDummyInput()
     .appendField(Blockly.Msg.MATH_RADIAN_TO_DEGREE_APPEND);
   this.setInputsInline(true);
   this.setOutput(true, "Number");
   this.setTooltip(Blockly.Msg.MATH_RADIAN_TO_DEGREE_TOOLTIP);
 }
};

4.      設定block之Arduino轉換碼:

於/blockly/generator/arduino資料夾中,新增該 block的邏輯。以本指令來說要加在 math.js 中的最底部(※注意非3. 的math.js,且不要貼於任何括號中) ,如下:

Blockly.Arduino['math_radian_to_degree'] = function(block) {
 Blockly.Arduino.definitions_['const_pi'] = 'const float __MPI = ' + Math.PI + ';';

 var code_radiansFromDegree = '\n' +
'float __radiansFromDegree(float radians) {\n'+
'  return radians * 360 / 2 / __MPI;\n' +
'}\n';
 Blockly.Arduino.definitions_['radiansFromDegree'] = code_radiansFromDegree;

 var argument0 = Blockly.Arduino.valueToCode(block, 'RADIAN',
                                             Blockly.Arduino.ORDER_NONE) || 0;
 console.log(Math.PI);
 var code = '__radiansFromDegree(' + argument0 + ')';
 return [code, Blockly.Arduino.ORDER_NONE];
};

 

5.      更改block上顯示語言:

更改在msg目錄下的js檔案,此功能為將blocks資料下的變數名稱對映到實際的block上,在js資料夾下還有en.js & zh-hant.js需一併更改,功能為將變數名稱改為不同語系。

先依第1步驟搜尋MATH_DEGREE,接著在第2步的位置放入程式碼,英文版亦同。

Blockly.Msg.MATH_RADIAN_TO_DEGREE_HELPURL = "https://en.wikipedia.org/wiki/Radian";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_TITLE = "Radian";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_APPEND = "turn into degree";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_TOOLTIP = "";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_HELPURL = "https://en.wikipedia.org/wiki/Radian";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_TITLE = "弧度";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_APPEND = "轉換為角度";
Blockly.Msg.MATH_RADIAN_TO_DEGREE_TOOLTIP = "";

6.      加入製作的block至目錄:

將新增的Block加入blockly/apps/blocklyduino/category.xml,這裡的順序、category位置就是實際顯示順序。type名稱需與定義block版型之名稱相同。請注意我們在<category math>標籤中加入了一個新的 block:

 <block type = “math_radian_to_degree”></block>

 

7.      build檔案 :

最後請開啟cmd

輸入bash

輸入cd BlocklyDuino-for-LinkIt-master    進入資料夾

輸入ls    確定資料夾內有make.sh

輸入sh make.sh     去建立檔案

 

make.sh 要沒有 error 才會正確產生所有檔案

目前Github最新版本的資料

為 @x43x61x69 修改後之版本

修改過 make.sh 和其他 script

會檢查所需的 command 是否存在

之前的版本沒有檢查

bash
cd BlocklyDuino-for-LinkIt-master 
ls
sh make.sh

成功建立之畫面

 

Blocklyduino畫面

 

Blocklyduino轉Arduino code畫面

常見問題:

  1. 找不到新增的block:可能在xml新增的位置有問題。

或是如果再terminal看到ERROR訊息寫”NameError: name ‘lxml’ is not defined” or “ImportError: No module named lxml.html”,則需要將lxml安裝後,在重新輸入sh make.sh。

  1. block全部重疊在一起:如下圖,可能有更動到html檔,以至於覆蓋掉原本的code導致出錯,請使用sh make.sh重新建立一次。

 

相關文章:

 

[課程紀錄] 5、6、7月份 LinkIt 7697全台跑透透@全台灣

LinkIt 7697上市到現在大概快四個月,新台幣$500左右的價格就可以擁有 Wi-Fi、BLE的物聯網終端(相較於LinkIt Smart 7688適合扮演物聯網的gateway)。足此之外還有專屬的BlocklyDuino圖形化介面編輯器,可以把圖形化指令轉成Arduino sketch之後再行燒錄(上傳還是需要Arduino IDE,但也正因如此其他的Arduino板子也可以享用Blocklyduino)。

本文是紀錄5 6 7三個月,CAVEDU全台跑透透的紀錄,雖然大部分的照片是阿吉老師,但實際上要在密集三個月中執行這麼多場次,需要許多事前事後的協調與後勤工作,這樣講師上課才能順利。

作者/攝影  曾吉弘
課程時間 2017 5 6 7月份
課程講師  曾吉弘
課程地點
  • 金門大學
  • 東華大學
  • 通推小組辦公室
  • 台中女中
  • 屏東唐榮國小
  • 日新國小

 

CAVEDU的目標是讓更多老師們能運用好用的教材,把實用又有趣的課程帶給小朋友們。其實有些老師們私下都表示對於這領域的課程既期待又怕受傷害,對於學校的網路是否可撐得起欲聯網教學課程也有點擔心。不過,我們都幫大家準備好了,請來電(0223062900)或來信(service@cavedu.com)喔:

歡迎洽詢CAVEDU的物聯網教室基礎設施規劃!

 

以下是我們的投影片,有110頁!


上課用的範例程式與相關檔案下載都在這邊: https://goo.gl/6DRDGA

 

以下是課程大合照,歡迎找我們去辦研習啦~

5/12 7697大專教師研習@台北場,通推小組辦公室

6/6 5/12 7697大專教師研習@花蓮場,東華大學

6/6 7 7697大專教師研習@台中場,台中女中

6/8 7697大專教師研習@高雄場

6/14 7697大專教師研習@金門場,金門大學

6/15 國小教師研習@台北日新國小

6/29 7697研習@屏東縣國中小種子教師,屏東唐榮國小

7/24, 25 教師物聯網研習@台北日新國小

另外還有七月底由臺北市政府與聯發科技基金會所推動的自造札根教育運動,於北市八所國中小使用 LinkIt 7697 搭配 Blockly

(日新國小、社子國小、新湖國小、長春國小、東湖國中、南港國小、萬興國小、龍山國中)

這是小朋友一週所完成的趣味搶答器,程式都是用Blocklyduino完成的喔。外殼是雷射切割紙板,maker課程當然不只是寫程式而已啦~(未來也將在blog文上分享搶答器教學喔~)

 

相關文章:

 

[LinkIt 7697開發板教學]PWM類比模擬控制-Blocklyduino圖形化開發環境

本文要介紹聯發科技實驗室推出的Blocklyduino圖形化開發環境搭配LinkIt 7697開發板製作的小型電路專題。您可由此比較與一般Arduino IDE的類C語法的異同。

作者/攝影  曾吉弘
時間  3小時
成本 LinkIt 7697開發板
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

 

Blocklyduino簡介

        Blocklyduino是由聯發科技實驗室所開發,是根據Google Blockly搭配LinkIt 7697 開發板的圖形化開發環境。說是搭配LinkIt 7697,但其實轉成Arduino code之後,要燒到別片Arduino當然也可以。差別就在於一些特殊的函式庫。這樣的兩階段開發可以兼顧初學者與進階玩家。初學者只要拉拉方塊就能完成許多應用,進階玩家則可進一步轉成Arduino類C語言之後做到更多功能,不會受限於積木指令本身的功能限制,反而可以快速驗證想法是否可行。

 

阿吉補充(阿不整篇都是我寫的嗎?):說真的聯發科技實驗室真的…與眾不同。除了開發板之外,還有一個免費的MCS雲服務,現在又出一個Blocklyduino來降低使用者門檻。也許就是因為這樣才樂得一直寫書。不是做一片可以上網的板子,就是物聯網的player

 

6月於台北市日新國小暨台北市自造教育示範中心已經舉辦了第一梯物聯網種子教師研習,就是使用LinkIt 7697喔,請參考我們上課的投影片


 

硬體線路

請將Linkit 7697插上麵包板,並如以下示意圖將LED正負極接到P9與GND腳位。

 

7697支援PWM的腳位相當多,供電得當的話可以做出8-servo的四足機械獸。請參考本圖:MTK pinout (來源: https://docs.labs.mediatek.com/)

接下來將使用Blocklyduino 與 Arduino 類C語言來比較,使用LED呼吸燈範例。

Blocklyduino程式碼

本程式中用到了變數i,請先由Blocklyduino左側的變數中找到第一個指令,預設變數名稱為item,點選下拉式選單即可改名。

另外在本指令的左側”整數”點選下拉式選單可以看到目前Blocklyduino支援的資料型態,雖然是給小朋友或初學者用的開發環境,定義上可不馬虎呢。(對比:App Inventor只把資料型態分為數字、文字與布林)。

請對邏輯的”或”點擊滑鼠右鍵,選擇”多行輸入”,就會從原本的一個橫列改為多個橫列,這樣在畫面擷圖或製作學習單上會比較方便喔。

7697程式碼

這是Arduino IDE的基本範例。使用analogWrite()指令去控制腳位的PWM狀態,藉此來模擬類比輸出的效果。Arduino與相容開發板在此通常都是把0~1之間再劃分成256格,意即2的8次方。其他高檔一點的開發板可能可到2的10次方或更高的解析度。

 

if判斷式去檢查亮度是否達到上下限值,如果brightness變數值等於255,就將fadeamount x -1,下ㄧ次進迴圈執行 brightness += fadeamount 就會變成 255 + (-5),這樣LED就會慢慢變暗了。一路當 brightness 降到0時,fadeamount 又再次乘以-1,負負得正,LED就慢慢變亮囉。

 

在此我們特意把Arduino IDE 與 BlocklyDuino的變數命名方式一致,您可以比較看看彼此異同。

路徑:File/Example/Basic/Fade

int brightness = 0;	//本變數會在0~255之間變化,用於控制LED亮度
int fadeAmount = 5; //每次亮度的累加值
void setup() {
  pinMode(led, OUTPUT);   //設定9號腳位模式為輸出
}
 
void loop() {
  analogWrite(led, brightness);  //本指令控制 LED 亮度
 
  i += 5; //累加或累減
  if (brightness == 0 || brightness == 255) {  //判斷上下限
	fadeAmount = -fadeAmount ;
  }
  delay(30);   //每秒更新33次
}

以下是本blocklyduino程式轉出來的Arduino code,您也可以比較一下喔。

相關文章: