Tag Archives: LinkIt 7697

[ 教學文 ]你好,我會走路、唱歌跳舞跟偵測障礙物喔!——一起動手做超級卡哇伊的機器人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歐姆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,您也可以比較一下喔。

相關文章:

[LinkIt 7697開發板教學]BlocklyDuino圖形化介面 – 環境建置與介面

本文要介紹可用於LinkIt 7697開發板之圖形化開發環境 – BlocklyDuino,包括環境建置與基礎I/O控制。

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

什麼是Google Blockly

Google Blockly (wiki) 是 Google 開發的圖形化程式介面。並可讓使用者自行包裝成更多指令,非常方便。下圖是 Google Blockly 主頁面,您很快抓到它的使用方法,並由畫面右側轉成JavaScript、Python、PHP、Lua與Dart 等其他語言,就看您喜歡哪一種了。

阿吉老師說:這樣的兩階段開發可以兼顧初學者與進階玩家。初學者只要拉拉方塊就能完成許多應用,進階玩家則可進一步轉乘其他程式語言之後做到更多功能,不會受限於積木指令本身的功能限制,反而可以快速驗證想法是否可行。

國內的 webduino 也有提供這樣的開發介面,可以把 block 轉成 java script,周邊指令也非常豐富。

什麼是BlocklyDuino

顧名思義,BlocklyDuino 是以 Google Blockly 為基礎,也因為可以轉成 Arduino code,也就代表了 Blockly 並不只限於 LinkIt 7697 才能使用,其他Arduino相容開發板也可以使用(回頭看看 LinkIt ONE、LinkIt Smart 7688 Duo 與 Arduino UNO等等…   真是太好了!)

您有3 種使用方式: 1. 離線使用 2. 匯入成 Google Chrome extension  3. 線上版

github: https://github.com/x43x61x69/BlocklyDuino

下載 .zip 檔解壓縮之後,打開您的 Google Chrome瀏覽器,

對,就是把這個資料夾拖到網頁上,就會匯入成一個 extention,完成如下圖:

點選啟動之後就會跳出一個視窗是 BlocklyDuino的主畫面,如下圖:

來看看目前提供了什麼?畫面左側可看到有以下主選項:

  • Logic:
  • loops
  • Array
  • Math
  • Text
  • Variables
  • Function
  • Initializes
  • In/Out
  • Time
  • Serial
  • Interrupt

由於In/Out底下相關功能與後續操作 7697 息息相關,在此特別拉出來介紹。各位讀者日後如果有哪邊覺得不足,除了可以透過github 自行修改,也可以把您的意見告訴我們,一起來向7697開發團隊許願吧!

不只這樣呢,請點選畫面右上角的齒輪[設定],可以看到 Seeed studio(7697生產商) 與 adadruit 的常用套件、第三方雲服務()都有!把想要用的項目勾起來就可以使用了。

值得一提的是,除了自家的MCS雲服務之外,BlocklyDuino也為7697寫好了 IFTTT、M2X與Blynk等其他雲服務的指令,太感動啦!

如何存檔與上傳

BlocklyDuino 可與 Arduino IDE 同步,也就是說您的積木指令不但可轉成Arduino code 還會自動根據修改而轉換,不必擔心不同步的問題。

請開啟 Arduino IDE file/Preferences,找到 External Editors(使用外部編輯器)選項並勾選起來,代表可使用外部編輯程式。

隨便新增一些方塊之後存檔,存檔時您會發現有 .ino 與 .xml 兩個檔案,ino 自然就是 Arduino 草稿碼,但 .xml 是什麼呢?

用瀏覽器來檢視一下,這就是積木指令的定義格式

或直接點選畫面右上角選單中的 Export,BlocklyDuino會把目前這一堆積木指令以 xml 格式匯出。您當然也能反向利用 Import 功能來匯入其他以 xml 格式定義好的積木指令集。

存檔完成之後只要修改任何積木指令,都可以看到Arduino IDE中對應的程式碼也會一併修改喔,不用再擔心漏東漏西了。

後續專題會介紹如何使用 BlocklyDuino 控制 LinkIt 7697 的基礎I/O、BLE藍牙通訊與MCS雲服務,敬請期待喔

 

相關文章:

[課程紀錄]物聯網大專教師研習-使用LinkIt 7697@經濟部通推小組

作者/攝影 曾吉弘
課程時間  2017 5/12
課程講師 曾吉弘
課程場地 經濟部通訊產業發展推動小組會議室

台北市中山區長安東路一段18號6F

通訊大賽物聯網組的大專教師研習開跑,2015年是LinkIt ONE, 2016是 LinkIt 7688,今年則是一片可愛的LinkIt 7697 (具備 Wi-Fi, BLE 的 Arduino相容板)。

7697的投影片在此(還有學習筆記),快100頁喔,喜歡就幫忙分享出去吧!


當天上課內容如下:

  • 7697 硬體介紹以及當作 Arduino使用
  • 基礎電路操作 – 使用 BlocklyDuino 與 Arduino IDE
  • BLE 基礎介紹,使用App Inventor 編寫Android app 來控制 7697
  • 由MCS雲服務來控制7697腳位
  • 上傳感測器資料到 MCS 雲服務指定之資料頻道
  • 如何外部取得 MCS channel 的資料點 (JSON format)

這次有個重要的亮點是 BlocklyDuino 圖形化介面(離線執行,載點請按我),除了基本的I/O指令之外,Seeed Grove套件、Adafruit 套件甚至 IFTTT, Blynk 等雲端服務等都寫好了。請一定要試試看。

對於小朋友來說,拉拉方塊就能寫好當然是最棒啦。但如果是會Arduino IDE 語法的朋友,可以轉成Arduino 語法之後再進行最佳化。不管怎樣,聽起來都是很棒的東西呢。

BlocklyDuino 主畫面

上圖之積木方塊轉為Arduino 語法

BlocklyDuino 之設定畫面

其實像是 IFrog ICblockwebduino 或是 Motoduino慧手科技的motoblockly 都有類似的服務。 

上課實況,感謝諸多老師參加喔!

上課會使用 7697 搭配簡易電子元件來做到各種互動功能,不過物聯網系列的課程重點都是在資料聯網之後的應用,能夠正確控制周邊應該是最大公因數,在此也感謝許多廠商努力提供好用的軟硬體。

使用App Inventor 藉由 BLE 通訊來與 LinkIt 7697 互動

下圖是上傳光敏電阻資料到 MCS 的資料頻道上:

LinkIt 7697(數大就是美)

Motoblockly.com 主畫面

webduino (轉 javascript) 主畫面

 

相關文章: