Category Archives: Arduino嵌入式開發板

[教學文] 係金ㄝ !!不需3D列印外觀元件,也能製作的機械生物——OTTO Like

原本,筆者將此作品命名為「果凍步兵」,但命名後,總感覺已跳脫原始設定的框架,於是便改為前輩Bridan Wang大哥所稱的「OTTO Like」吧!也透過此命名,向Otto開源者Camilo Parra Palacio表達無限敬意!

作者/攝影

機甲人形師 林益成

文章分類教學技術文
時間

成本
難度
材料表
  • Arduino nano X 1組

  • Nano多用擴展板 X 1 組

  • 伺服馬達SG90 X 4 顆

  • 開關(有段)X 1 顆

  • 塑膠罐 X 1 個

  • 塑膠(木)板 X 2 片

  • L型機構件X 2 片

製作緣起

2017年偶然在網路上看見Otto機器人,心中十分喜愛,但因當時手邊並無3D列印機,因此無法列印自造⋯⋯(遺憾啊啊啊……)。

 

在入手3D列印機後的某一天,想起了這過往的殘念,因此在Thingiverse網站取得開源資料後,迫不及待地列印、組裝,同時也下載製作了同類型、貌似青蛙的 arduped。當時,為讓Otto和arduped二者看起來更協調,因此筆者硬是改掉了Otto的腳部。以下是它們共舞的影片:

 

之後,因爲花在3D列印上的時間過長,並且希望外觀上能有更高的自由度,筆者開始試以生活周遭方便取得的物品進行製作。以下是首次試作作品的影片:

 

筆者個人一個很大的願望,是讓沒有3D列印機的朋友們,也能享受自造類Otto機器人的樂趣。因此,透過本文將個人研究成果與讀者們分享,也期待有一天能看見大家製作出更多作品。

 

製作過程

一、本體製作

Step1:開鑿相關機構孔位

圖1

 

Step2:組裝伺服馬達及電源開關

圖2

 

二、腿部製作:

Step3:將伺服馬達擺臂固定於L型機構件(需製作二組)

圖3

 

三、腳掌製作:

Step4:將伺服馬達黏著固定於塑膠板上

圖4

 

四、腿部安裝:

請參考圖5

圖5

 

五、腳掌安裝:

請參考圖6

圖6

 

六、完成Arduino程式燒錄及配線

七、素體完成

圖7

 

八、請讀者們發揮豐富的想像力,以泡棉、瓦楞紙等素材,為Otto like自造出獨一無二的外型吧!

 

相關作品

因考量後續作品會參與某些公開展示的活動,考量到強度及保存,故使用3D列印製作外型零件。目前筆者製作了三架以日系妖怪為主題的Otto like:

 

1.化貍-文福茶鍋

圖8

 

2.河童

圖9

 

3.天狗

圖10

 

目前排定參展的活動:

  • 10/19-21 TIRT全能機器人國際邀請賽暨桃園觀光工廠創客嘉年華

  • 11/2-4 Maker Faire Taipei 2018

 

屆時歡迎讀者們蒞臨展攤「機甲人形師的覓星工坊」,也歡迎至我個人的FB粉絲專頁交流:https://www.facebook.com/lyclovetyc/。而因我過去製作機器生物,有使用過ROSA系統,若讀者想更多了解這個系統,請參考:https://4rdp.blogspot.com/2017/09/rosa-38-robot-like-otto.html?m=1,謝謝。

 

備註:根據小編與作者機甲人形師林益成討論後,他表示,因近來比較忙碌,暫時抽不出時間寫給LinkIt 7697的Otto程式,所以先以Arduino測試。但未來不排除寫給LinkIt 7697的Otto程式,請讀者們靜待好消息囉!若想購買相關的開發板,請點這裡

 

相關文章

[Arduino專題好用] 自己製作Arduino擴充板,使用Multism Blue

 

設計/撰寫者

皓云/鈺莨

時間

三小時

難度

***

材料表

今日要跟大家分享的作品是Arduino馬達擴充板,我們在作馬達控制的專題,尤其要接兩顆馬達的時候(例如:自走車),如果直接接Arduino,可能會因為Arduino的電流太小而推不動馬達,或是馬達電流太大把Arduino燒壞的風險,所以必須要外接馬達驅動晶片L298N。

當我們在做專題時,都會先用杜邦線接,但是馬達驅動晶片的腳位很多,接好之後如果要帶去展示時,在運送過程中難免會有杜邦線脫落的現象,造成要查線路的問題,畫擴充板便可以解決這個問題。

那麼作成擴充板的形式還有何麼好處呢?

  • 馬達驅動晶片接線複雜,可以減少電路斷路的風險
  • 將常用的元件焊在一起,具有獨特功能性
  • 利用擴充板形式可以節省空間,好收納
  • 可以小型量產

在繪製之前必須要先下載Arduino的所需檔案

本文是用Multism Blue的電路軟體來繪製,下載軟體及安裝步驟請參閱:

[不錯用的電路設計軟體Multisim Blue]手把手安裝教學

我們的目標就是要畫出下列的接線示意圖:

圖2

Arduino接腳對應馬達驅動晶片

ArduinoL293D
D3P15
D5P10
D6P7
D9P2
5VP1、9、16
GNDP4、5、12、13

 

 

繪製Arduino擴充板電路圖

1.先開啟舊檔,先匯入 『arduino_uno.ms14』的檔案

圖3

 

2.開啟之後會是Arduino 的電路圖,和l293d馬達驅動晶片底座,為什麼說是馬達驅動晶片底座呢?

因為實際上是鑽16個孔再把馬達驅動晶片底座焊在擴充板上,另外再把l293d嵌入在底座上面,如果l293d燒壞,還可以鑷子更換l293d。

 

圖4

 

3.新增電路的電壓Vcc元件,也就是Arduino所提供的5V

「Source 」→「POWER_SOURCES」→「VCC」 → 點選「OK」

圖5

 

  1. 新增兩個Vcc 元件連接在l293d的1、9、16號腳位

圖6

 

5.再新增接地線共地,以保持電位為零。

「Source」 →「GROUND」 → 點選「OK」

 

圖7

 

6.一樣也是新增兩個接地線接到L293D的4、5、12、13號腳位

圖8

 

 

7.新增當頁接頭,這功能是Multism Blue特點之一

  • 可以取代了從l293d的腳位直接拉線到Arduino腳位的線路複雜度
  • 畫面較為簡潔,能快速了解線路

 

在選項欄位的「Place」→「Connect」→「On-page  connector」

圖9

 

圖10

 

8.選擇IO3,即是代表Arduino的腳位

圖11

 

圖12

 

 

  1. 重複7、8的步驟,另外在新增接頭IO5、 IO6、 IO9

圖13

 

 

10.將IO3、IO5、 IO6、 IO9分別接到l293d的15、10、7、2腳位

11.繪製輸出三個端子台來外接電池和2顆馬達,這種端子台上方有螺絲孔,可用一字起子轉鬆,將馬達或電池的單芯線插入孔內,再利用一字起子轉緊即可完成線路連接。

 

到「Mouser Database」→「Connectors」 →

「CONN_SCREW_TERM_Phoenix_Contact」→「1715721」

圖15

 

  1. 查詢元件相關資料
    有些電路符號都長得很類似,如果想知道實體元件長得如何,可以在上圖第5個步驟有元件的網路連結提供查閱相關資訊

圖16

 

  1. 一個接l293d的3號和5號腳位;一個接l293d的14號和11號腳位;另一個則是接l293d的8號腳位及接地。

圖17

 


將電路圖轉成PCB

 

14.在MultisimBlue電路圖繪製完成之後,再來就是將電路圖轉換成PCB繪圖軟體檔案

欄位上的「Transfer」→「Transfer to Ultiboard」→「Transfer to Ultiboard 14.0」

 

圖18

 

15.轉換完畢之後,MultisimBlue會開啟另一個PCB繪圖軟體,在電路圖中電子元件的接線,會在PCB軟體轉換成預拉線。

圖19
16. 刪除長方形黃色外板框

在左邊PCB欄位,點選兩下Board Outline,Board Outline即是外板框的意思,就是板子的外型,可以任意改變形狀。

[ 電路設計軟體Multisim Blue ] 花朵、小雞、金魚造型LED燈設計 外板框就是設計成圓形。

 

圖20

 

點選黃色外板框之後會變成虛線,之後按下鍵盤的「Delete」,即可刪除。

圖21

 

 

17.匯入Arduino 外板框

「File」→ 「Import」→「DXF」

圖22

 

然後選取『arduino_un.DXF』檔案

圖23

 

在「Ultiboad layer 」裡,有下拉式選單選擇「Board Outline」,再將把所有的單位改成mm(重要)。

圖24

 

18.匯入後需將Arduino外板框回歸到原點(就是白色的十字),要把所有的外框線設為群組,這樣所有的外框線就會一起移動。

 

首先將全選外框線

圖25

 

在外框線上按滑鼠右鍵選擇「Group selection」,再按「Properties」

圖26

 

 

 

會進到 「Group Properties」 裡 ,在分頁的「Position」的X、Y欄位分別都填上0,單位記得也要改成mm。

圖27

 

19.解除群組,一樣也是先框住所有的外框線,按右鍵選擇「Ungroup selection」,這樣的作法是為了要把元件放進外板框裡,如果沒有解除群組,元件就會把外板框擠掉而放不進去。

圖28

 

 

20.將Arduino的腳位和其他電子元件排列,先排列Arduino腳位,之後再放其他元件。

 

網路上有網友繪製出Arduino的尺寸圖,原點一樣也是在左下角,但是圖中所有尺寸皆是mil,必須換成mm(1mil = 0.0254mm ),也就是所有尺寸皆乘上0.0254。

 

圖29

 

(圖片來源: https://blog.arduino.cc/2011/01/05/nice-drawings-of-the-arduino-uno-and-mega-2560/)

 

 

將上述的尺寸轉換成座標,便可以定義出Arduino 腳位配置圖,這邊單位一律為mm。

圖30

 

現在座標已經定義出來了,這邊在畫上圖中J1、J2、J4、IOL時,我要怎麼知道位置是對的呢?以J4為例,在其中一個腳位(就是藍色圈圈)中按下滑鼠右鍵,點選「Properties」,會跑出「Through Hole Pin Properties」的視窗,分頁選「General」,欄位上有「Net」,就知道這個腳位是Arduino的8號腳位了,其他以此類推。

圖31

圖32

 

知道了大概的位置之後接下來要輸入座標,繼續以J4座標(30.22,50.8)為例,點選整個J4元件(注意圖33中虛線),在按一下滑鼠右鍵,點選「Properties」,會跑出「 Group Properties」的視窗,分頁選「Position」,在X欄位輸入30.22,Y欄位輸入50.8,單位選mm,其他腳位以此類推。

圖33

圖34

 

排列好Arduino腳位後,再依序把其他元件排至適當位置

圖35

 

21.點選 ,可以快速佈線。

圖36

22.調整線徑的寬度

[ 電路設計軟體Multisim Blue ] 花朵、小雞、金魚造型LED燈設計的內文有提到: 『設計電路板時,線徑的大小與電磁干擾成反比,線的長度與電磁干擾成正比為了降低不必要的電磁干擾,將線徑加寬。』,在此我們設定0.5mm。

 

我們如果只要選線路,單單對線路做改變的話,只需要打開,再把其他選項關閉,便可以只選線,而不會選到其他元件。

圖37

 

選取所有線路之後按右鍵,一樣點選「Properties」,會出現「Trace  Properties」 視窗 ,「General」分頁欄位有「Width」,填入0.5。

圖38

 

之後會出現會有紅色圈圈的出現,左下角的「DRC」也開始變紅色為警示效果,是因為線和線之間太靠近,還需要做一些調整。

圖39

 

將線路整理

 

圖40

 

23.調整好之後可以按下,做3D預覽查看元件排列位置,焊錫走線是否一致。

 

圖41

 

[Arduino101] 開放資料平台之智慧家電控制

 

 

隨著最近的天氣溫度上升,對住家的環境也會有所影響,所以才想利用政府開放資料平台得到目前台北市氣溫溫度和透過arduino 101 接上 LM35線性溫度感測器得知目前的室內溫度,再與台北市目前溫度和室內溫度比較後,透過藍牙控制電風扇,若室內溫度高於台北市溫度則風扇開啟,反之則風扇關閉。

作者/攝影 許鈺莨
時間  約一小時
成本 NTD 2,000
難度  *  *  *
材料表
  • Arduino 101
  • 繼電器
  • DFROBOT Arduino 擴充板
  • DFROBOT 的 LM 35線性溫度
  • arduino IDE 1.8.1
  • Appinventor 2

 

首先,硬體設備先建置:

  1. 將DFROBOT擴充板接到Arduino101
  2. LM35線性溫度感測器接到A4腳位
  3. 將繼電器接到13號腳位

 

所有硬體接好後會是以下這張圖

再來就是程式撰寫的部分,分別為arduino IDE 和Appinventor 2,先以arduino IDE 環境說明為例:

 

第5行:LM35接DFROBOT 擴充板A4腳位

第6~11行: BLE UUID設定

第12行:設定繼電器腳位為13號腳位

第17~36行:BLE連線開啟

第40~83行:BLE傳輸LM35線性溫度感測器數值至手機畫面,並且Arduino101接收到字元O時則繼電器開啟,收到C字元則繼電器關閉。

完整程式:

#include <CurieBLE.h>

#include <LM35.h>

LM35 temp(A4);
BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService RelayService("19B10010-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedCharCharacteristic switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
BLEUnsignedIntCharacteristic LM35Data( "19B10012-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify);
const int  RelayPin = 13; // pin to use for the Relay
char control = '0';
int old_data ;

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

  // set Light pin to output mode
  pinMode( RelayPin, OUTPUT);

  // set advertised local name and service UUID:
  blePeripheral.setLocalName("LM35");
  blePeripheral.setAdvertisedServiceUuid( RelayService.uuid());

  // add service and characteristic:
  blePeripheral.addAttribute(RelayService);
  blePeripheral.addAttribute(switchCharacteristic);
  blePeripheral.addAttribute(LM35Data);
  // set the initial value for the characeristic:
  switchCharacteristic.setValue(0);

  // begin advertising BLE Relay service:
  blePeripheral.begin();

  Serial.println("BLE Relay service.");
}

void loop() {
  // listen for BLE peripherals to connect:
  BLECentral central = blePeripheral.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the Light:
      if (switchCharacteristic.written()) {

        control = switchCharacteristic.value();
        Serial.print("value : ");
        Serial.println(control);
        
        if (control == 'O') {      
          Serial.println("Relay on");
          Serial.println(switchCharacteristic.value());
          digitalWrite(13, HIGH);                           // Open relay
        } else if(control == 'C'){ 
          
          Serial.println(F("Relay off"));
          Serial.println(switchCharacteristic.value());
          digitalWrite(13, LOW);                            // Close Relay
        }
        
      }
      int new_data = temp.cel();
      if(old_data != new_data)
      { 
        LM35Data.setValue(new_data);
        Serial.println(new_data);
        old_data = new_data;
        delay(1000);
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

 

接下來是Appinventor2程式說明:

Arduino 101 BLE藍牙連線需要MAC序號才可連線成功,每片MAC都不相同,在Arduino101背後QR code下方即可找到,我使用Arduino101的 BLE 藍牙MAC為98:4F:EE:0F:42,每個Arduino101的藍牙MAC都不同。當程式執行時螢幕便會初始化,手機藍牙開始等待連線,當連上Arduino101時,螢幕標題會寫已連線,開始顯示室內溫度。

當手機與arduino101藍牙連線時,Arduino101會開始送出LM35線性溫度感測器的值。

手機利用OPEN DATA 開放資料平台每10秒鐘抓取台北市溫度的json網頁,資料來源:https://goo.gl/Vz49bi
json網頁: https://works.ioa.tw/weather/api/weathers/1.json
而台北市溫度是使用中央氣象局網站公告的氣象預報資訊作為資料來源,每 20 分鐘更新最新天氣概況。

而抓取json網頁的資料有個技巧就是先將所有的json網頁匯到Appinventor 的ListPicker元件裡,ListPicker元件可以自動將json網頁資料排列好,再利用陣列抓取我們所需資料,台北市溫度在第11行第2列中。

 

ListPicker 元件把json網頁排列好,如下圖所示:

比較台北市溫度和室內溫度,一開始抓取台北市溫度時會出現()為開始要抓取第一筆json資料之符號。而台北市溫度大於室內溫度,則風扇打開;反之, 台市溫度小於室內溫度,則風扇關閉。

 

手機端畫面如下圖所示:

 

結論:
本篇實現出藉由抓取open data 之json網頁得知目前台北氣溫數值和LM35線性溫度感測器測量出室內溫度並作比較,更進一步控制家電,未來可應用於溫室或打造智慧家電,有利於植物栽種,或調節房屋溫度,打造人類更舒適的環境。

 

 

相關文章:

[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,您也可以比較一下喔。

相關文章:

[Arduino/Genuino101 專題] Arduino101 x BLE x MeArm x App Inventor 使用手機藍牙遙控機械手臂

本文將帶領讀者認識Arduino/Genunio101的功能,以及如何使用I2C界面來控制機械手臂MeArm、用BLE(Bluetooth Low Energy)來跟手機溝通,並使用MIT App Inventor來撰寫手機的應用程式來跟控制板溝通。

作者/攝影 袁佑緣
時間  3小時
成本  約1,850(不含101)
難度  * * * * *
材料表

 

1.Arduino/Genuino 101 介紹

2015年10月,Arduino與Intel合作發表了一塊名為Arduino/Genuino 101的開發板,使用x86的核心並搭載BLE(Bluetooth Low Energy)以及IMU(Inertial Measurement Unit),也就是內建加速度感測與陀螺儀,而本次範例將使用101上面的BLE功能,如果想要了解IMU在101上面的應用,可以參考部落格上的另外一篇文章[ Arduino101 專題實作計畫] Arduino101二輪平衡小車DIY

 

101 的詳細規格介紹

 

2. Arduino IDE 環境準備

首先請到Arduino的官網下載最新版本的IDE,https://www.arduino.cc/en/Main/Software
以筆者為例,最新的Arduino IDE版本是8.3,Windows使用者如果不想要系統安裝Arduino IDE的話,可以直接點選Windows zip的選項,下載後解壓縮,點選裡面的.exe檔也可以直接執行。

 

打開Arduino IDE後,我們要來安裝最新的101套件包,因為驅動程式也會包含在裡面,所以不需要在額外安裝囉。請打開Tools -> Board -> Boards Manager,並搜尋101,應該就會有最新版本的Intel Curie Boards跳出來,以筆者為例,最新版本為2.0.2版。

接下來因為我們的101在連接到機械手臂之間,會經過一塊16通道的伺服馬達控制板PCA9685,所以我們必須先下載PCA9685的函式庫才能控制我們的伺服馬達。

請到Adafruit的github上面下載Adafruit-PWM-Servo-Driver-Library

請點選Download,並將下載後的壓縮檔解壓縮後,放到Arduino資料夾裡面的libraries資料夾裡面。

 

3.硬體電路

接下來請準備好若干條母對公的杜邦線,以及電池提供額外的電源(6v),以防驅動機械手臂時電源供應不足,導致101控制板無法正常運作。

完整的電路接線圖如下,基本機械手臂上的四顆伺服馬達只要把接頭正確的接上PCA9685上就行了,PCA9685上面黑色的部份表示接地線,紅色部份表示電源線,黃色則是訊號線,我們可以透過此腳位輸入PWM訊號來控制伺服馬達。

PCA9685接到101的部份只要把SDA、SCL這兩個腳位接起來,好讓101可以透過I2C來跟PCA9685溝通,另外再接上VCC跟GND以提供PCA9685工作時所需的電壓就行了。

接完之後大概就會如下完成圖,因為這塊伺服馬達控制板的關係,所以我們不需要一塊額外的麵包板跟很多條的杜邦線互相接,是不是很方便啊?

 

4.Arduino 程式設計

請在Arduino IDE 上面完成以下的程式碼。

#include <CurieBLE.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

#define SERVOMIN  150 
#define SERVOMAX  600 

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

BLEService BLE_serv("19B10010-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedIntCharacteristic BLE_char("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

void setup() 
{
    Serial.begin(9600);
    pwm.begin();
    pwm.setPWMFreq(60);

    BLE.begin();
    BLE.setLocalName("mearm");
    BLE.setAdvertisedService(BLE_serv);
    BLE_serv.addCharacteristic(BLE_char);
    BLE.addService(BLE_serv);
    BLE_char.setValue(0);
    BLE.advertise();

    Serial.println("Waiting for connections...");
}

void loop() {
    BLEDevice central = BLE.central();
    if(central)
    {
        Serial.print("Connected to central");
        Serial.println(central.address());
        while(central.connected())
            if(BLE_char.written())
            {
                int servo_num = BLE_char.value();
                int pulse_len = BLE_char.value();
                pwm.setPWM(servo_num, 0, pulse_len);
            }
        Serial.println("disconnected");
    }
}

程式說明:

以上的程式碼主要會引入兩個函式庫,一個是用來控制馬達的<Adafruit_PWMServoDriver.h>,另一個則是待會要用來跟手機溝通的<CurieBLE.h>,接下來的程式碼就是初始化一個BLE的Service,然後裡面

包一個Characteristic,主要負責來接收手機端傳送過命令。來馬達編號,還有指定的馬達PWM訊號,藉此來操控我們的機械手臂。

在while(central.connected())迴圈當中,101會一直去確認是否有新的訊息送過來,如果有收到訊息,就會把收到的來馬達編號,還有指定的馬達PWM訊號,透過pwm.setPWM(servo_num, 0, pulse_len);來控制指定的伺服馬達,藉此來操控我們的機械手臂。

 

5.App Inventor 程式設計

App Inventor是一款圖形化的Android App設計界面,只要您有google帳號,就可以直接線上編輯,雲端儲存,還可以打包下載成APK檔,然後傳到手機裡安裝,如果想要知道App Inventor的教學與應用,可以參考App Inventor中文學習網

接下來我們就要實際動手來寫我們的應用程式了,請先連到MIT App Inventor官網

接下來請新建一個專案,並進到Designer界面,開始進行我們的手機界面佈置。

因為本次專案會用到BLE的元件,所以我們必須用到App Inventor的擴充元件功能,請複製以下的網址http://iot.appinventor.mit.edu/assets/edu.mit.appinventor.ble.aix

並在extension中把BLE元件import進來,如下圖。

接下來請完成以下的元件佈置,其中Slider的最大數值是600,最小數值是150,跟前面Arduino 程式碼裡面定義的一樣,另外Connect按鈕其實是一個清單(而非一般的按鈕元件),按下去之後可以讓使用者去選取要連哪一個藍牙裝置,最下方有一個scan的按鈕,可以用來掃描新的藍牙裝置,掃描附近的裝置後,app就會自動更新清單中可以連線的裝置列表。

 

接下來我們進到Blocks界面,開始設計我們的後台程式。

首先是初始化以及連線清單的設定,在初始化的過程就會先進行一次掃描的動作,並把掃描的結果更新在清單上,此外,當清單被點選之後,程式就會呼叫BLE元件去連線清單內的指定的裝置。

讀者可能會好奇,其中有一個叫做is_connected的函式,這個自定義的元件是有什麼功能呢?其實它就是會根據是否連接到裝置來做一些按鈕跟拉桿的設定,以及此刻狀態的提示,如下圖。

以下則是基本的連線、斷線功能,以及掃描附近裝置與更新的實作。

接下來的這四個Blocks,讀者可以直接從字面上的意思去解讀他的功能,也就是當編號1到4的拉桿被拖動時,就會執行update_and_send的函式,也就是更新拉桿上面馬達狀態的提示以及送出指定的馬達脈波長度。

update_and_send的實作如下,基本上就是會根據拉桿的位置對應到的數值,送出指定的控制指令,這邊值得注意的是要記得把serviceUuid跟characteriscUuid改成跟前面Arduino程式碼裡面指定的一模一樣喔,不然BLE會無法進行資料的溝通。

到此為止已經大功告成囉,接下來就剩下把App下載到手機上就完成了,您可以點選Build -> App(provide QR code for apk,讓App Inventor把編譯好的程式碼暫時存到雲端,並顯示QRcode,讓您可以掃描它來安裝App。

 

注意:

由於BLE元件是App Inventor相當新的功能,所以對於一些手機較舊的讀者可能會發現無法安裝或者是無法使用的問題,這只能換更新版本的Android系統或者是看看App Inventor官方未來是否會有相關的計畫來支援舊版本的手機。

 

相關文章:

[ Arduino101 專題實作計畫] Arduino101二輪平衡小車DIY

作者/攝影 袁佑緣
時間
  • 3小時
成本
難度  * * * * * *
材料表
  • 厚度3mm壓克力板
  • Arduino101控制板
  • 減速馬達x2
  • 麵包板
  • 杜邦線
  • 排針
  • 電池盒
  • 防滑墊
  • 3.7v鋰電池(14500)
  • 鋰電池充電器
  • TA7279P馬達驅動晶片

1. 平衡車車體製作

本範例的平衡車車體主要是由雷切壓克力構成,壓克力的厚度是使用3mm的板材,再藉由螺絲螺帽組合而成,車子的馬達使用的是兩顆小型的5V減速馬達,輪子的部份也是由壓克力組成,胎皮則是貼上一層防滑墊,車子的底部則有兩個3號電池座,裡面各裝兩顆7V的鋰電池,一個用來驅動控制板,另一個則用來驅動馬達。
詳細的CAD檔可以參考筆者放在網路上的onsahpe專案,有興趣的讀者可以參考看看喔!

圖一、平衡車的模擬動畫

圖二、組裝爆炸圖

圖四六七八、車體的三視圖

圖八、平衡車實體圖

 

2.電路接線

本次範例使用的馬達驅動晶片是TA7279P,其腳位功能與編號如下圖(節錄自官方datasheet) ,請將5號及10號腳位接到鋰電池的電源上,並把A、B兩個channel的馬達訊號輸入腳位,也就是1、3、12、13接到Arduino 101上的3、5、6、9號腳位來當作控制板的訊號控制腳位,因為這些腳位才有辦法做PWM訊號的輸出,也因此才能控制馬達的轉速。
至於馬達的部份,請將下表output(輸出)的腳位各自接到兩顆馬達上即可,例如:A channel想控制左馬達,B channel想控制右馬達,那就把4、6號腳位接到左馬達上,9、11號腳位接到右馬達上。
另外也別忘記要給TA7279馬達驅動晶片供給工作電壓,只要在14號腳位供給5V的電力,7號腳位接地就行囉。

圖九、TA7279P腳位功能圖

圖十、TA7279P腳位編號圖

圖十一、完成車體與電線配置!

3. Arduino環境準備

請先準備好Arduino IDE,並請在Arduion IDE上的Boards Manager那邊搜尋關鍵字intel,並如下圖安裝Intel Cuire Board。至於驅動程式的部份,使用MacOS跟Linux的朋友不用擔心,直接使用就可以了,那如果是windows的使用者在第一次將控制板接到電腦上時,會挑出自動安裝驅動程式的視窗,請耐心等候電腦完成安裝就可以進行到下一步囉!

圖十二、Arduino IDE Boards Manager設定

4.程式設計

#include "CurieIMU.h" //引入Arduino 101 IMU的函式庫,用來偵測車體的            角速度與加速度方向

//宣告PID控制的各個參數,各個參數的最佳數值必須視車體情況而定,不同的車體會有所不同,電力的大小也會有影響
const float kp = 24; 
const float ki = 0.05;
const float kd = 15;

//宣告參數K作為complimentray filter的參數
const float K = 0.95;

//list number的大小會決定取平均的樣本數,越多則越準,但也會花掉更多計算時間
const int angle_list_number = 5;
const int error_list_number = 10;

//設定馬達初速為0
int speed = 0;

//定義馬達的驅動腳位
const int motor_A_1 = 3;
const int motor_A_2 = 5;
const int motor_B_1 = 6;
const int motor_B_2 = 9;

//宣告進行角度計算與PID控制會用到的一些參數
float time, time_pre, time_step;
float gyro_angle = 0;
float acce_angle = 0;
float angle_list[angle_list_number];
float pre_error = 0;
float error_list[error_list_number];
float diff_error = 0;
float offset = 0;

void setup()
{
	for(int i = 0; i < angle_list_number; i++)
		angle_list[i] = 0.0;
	for(int i = 0; i < error_list_number; i++)
		error_list[i] = 0.0;
	pinMode(motor_A_1, OUTPUT);
	pinMode(motor_A_2, OUTPUT);
	pinMode(motor_B_1, OUTPUT);
	pinMode(motor_B_2, OUTPUT);
	pinMode(13, OUTPUT);

	Serial.begin(9600);
	Serial.println("Start!!!");

//設定Arduino 101 的IMU感測器	
      CurieIMU.begin();
	CurieIMU.setAccelerometerRange(4);
	CurieIMU.setGyroRange(250);
	time = millis();
	for(int i = 0; i < 5; i++)
	{
		Serial.println("Ready...");
		delay(200);	
	}
	int time2 = millis();

//待機兩秒後,取得一個初始位置的角度,這個位置將會是平衡車目標的平衡位置
	while((millis()-time2) < 2000)
		offset = get_angle();
	digitalWrite(13, HIGH);
}

void loop()
{
//主迴圈會一直去讀取現在角度與目標角度的誤差,並透過PID控制來回傳修正動作給馬達
	float error = get_angle();
	float feedback = PID_feedback(error);
	if(abs(error) > 70)
//當傾斜角度過大時,會視為倒掉,此時將會停機並等待重啟
	{
		while(true)
		{
			analogWrite(motor_A_1, 0);
			digitalWrite(motor_A_2, LOW);
			analogWrite(motor_B_1, 0);
			digitalWrite(motor_B_2, LOW);
			Serial.println("Stop!!!");
		}
	}
	balance(feedback);
}

//平衡函式將會根據PID算出的回饋數值,呼叫馬達做出相對應的修正動作
void balance(float feedback)
{
	speed = int(feedback);
	if(speed < 0)
	{
		analogWrite(motor_A_1, abs(speed));
		analogWrite(motor_B_1, abs(speed));
		digitalWrite(motor_A_2, LOW);
		digitalWrite(motor_B_2, LOW);
	}
	else
	{
		digitalWrite(motor_A_1, LOW);
		digitalWrite(motor_B_1, LOW);
		analogWrite(motor_A_2, abs(speed));
		analogWrite(motor_B_2, abs(speed));
	}
}

//讀取角度的函式會透過計時器累加的部份,將IMU讀到的角速度離散積分成角度,同時會做平均取值並輔以complimentary filter的方式來將精確的角度數值計算出來
float get_angle()
{
	time_pre = time;
	time = millis();
	time_step = (time - time_pre)/1000;

	float ax, ay, az;
	float gx, gy, gz;
	CurieIMU.readAccelerometerScaled(ax, ay, az);
	CurieIMU.readGyroScaled(gx, gy, gz);

//將以下的註解取消掉的話可以從Arduino 101的Serial讀到此刻感應器的原始數值,記得baud rate要跟前面宣告的一樣設定成9600,另外要提醒一下如果開啟Serial輸出的功能的話,會消耗掉額外的計算資源,所以如果已經不需要再讀取數值時,最好把以下的程式碼註解掉
	//Serial.print(ax);
	//Serial.print("\t");
	//Serial.print(ay);
	//Serial.print("\t");
	//Serial.print(az);
	//Serial.print("\t");
	//Serial.print(gx);
	//Serial.print("\t");
	//Serial.print(gy);
	//Serial.print("\t");
	//Serial.print(gz);
	//Serial.println();
	
	gyro_angle += gy*time_step;
	acce_angle = (180/3.141593) * atan(ax/az);
	for(int i = 0; i < angle_list_number-1; i++)
		angle_list[i] = angle_list[i+1];
	angle_list[angle_list_number-1] = K * acce_angle + (1-K) * gyro_angle;
	float mean_angle;
	mean_angle = 0.0;
	for(int i = 0; i < angle_list_number; i++)
		mean_angle += angle_list[i];
	mean_angle /= 5;
	mean_angle -= offset;
	return mean_angle;

}

//PID回饋的函式會將錯誤進行一連串的計算,並根據開頭我們設定的三個係數來做出適當的回饋
float PID_feedback(float error)
{
	for(int i = 0; i < error_list_number-1; i++)
		error_list[i] = error_list[i+1];
	error_list[error_list_number-1] = error;

	float sum_error = 0;
	for(int i = 0; i < error_list_number; i++)
		sum_error += error_list[i];
	diff_error = error - pre_error;
	pre_error = error;
	float p_term = kp * error;
	float i_term = ki * sum_error;
	float d_term = kd * diff_error;
	float feedback = p_term + i_term + d_term;
	if(feedback >= 255)
		feedback = 255;
	else if(feedback <= -255)
		feedback = -255;

//跟前面一樣,把以下程式碼的註解拿掉的話可以從Serial讀出實際得出的回饋
	// Serial.print("P_term: ");
	// Serial.print(p_term);
	// Serial.print("\tI_term: ");
	// Serial.print(i_term);
	// Serial.print("\tD_term: ");
	// Serial.print(d_term);
	// Serial.print("\tError: ");
	// Serial.print(error);
	// Serial.print("\tFeedback: ");
	// Serial.println(feedback);
	return feedback;
}

 

5.實際操作

 

相關文章:

Arduino (Genuino) 101 與 ScratchX 環境建置

Arduino 101 是 Intel 與 Arduino.cc 合作推出的開發板,主要特色在於使用 Intel Curie 32bit 處理器,並且板子本身就有3軸加速度計與3軸陀螺儀,還有 BLE 藍牙通訊功能。

本文將告訴您如何使用 ScratchX 來控制 Arduino 101 開發板(開發者網頁),請跟著我們一起操作吧!請看實測影片

延伸閱讀:

[開箱文] Arduino 101 / Genuino 101 – Arduino.cc 與 Intel 合作,板載藍牙 BLE 與六軸加速度計/陀螺儀

Scratch 的 Arduino 101 指令說明

Continue reading

Scratch 的 Arduino 101 指令說明

本文是Scratch 的 Arduino 101 指令說明,整理自Scratch for Arduino 101 作者的頁面,請看以下指令說明:

 

設定指定數位腳位(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)為高電位(on)或低電位(off)


設定支援 PWM 的數位腳位(3, 5, 6, 9),數值範圍為0 – 100(%)


指定數位腳位(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)符合條件(on / off)時觸發本事件。


讀取指定數位腳位(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)。如該腳位為高電位,回傳為 true;反之為 false。


指定類比腳位(A0, A1, A2, A3, A4, A5)符合條件時觸發本事件。


讀取類比腳位的數值(A0, A1, A2, A3, A4, A5),回傳值為0~100(%),而非 Arduino IDE 的 0~1023。


當實際搖晃板子時,觸發本事件。請注意無法決定搖晃的力道。


讀取 Arduino 板子的指向。回傳值是三軸各自的轉動角度,單位為度。方向示意圖如下:

showing the Arduino 101 tilt orientation


設定伺服機轉軸位置(非連續型),單位為度。腳位可接在2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13。可接受的數值範圍為0~180度。

CAVEDU註記:Arduino 101 支援 PWM的腳位編號為3, 5, 6 ,9,應該還是要接在這幾隻腳位才能順利控制伺服機。


讀取指定腳位上的伺服機轉軸位置,回傳單位為度 (0~180)

 

Genuino 101 Starter Kit 開箱!感謝DFrobot

DFRobot 寄給我們的除了全套拿鐵熊貓之外,還有 Genuino 101 的 Starter Kit,大家可以和 Seeed Studio 的 Grove Starter Kit 比較一下看看兩者的差異。

之後CAVEDU 實習生會陸續把一些有趣的教學玩玩看,再和大家分享心得囉!(blink 我想就不用了啦~)

拿鐵胖達_6192

包含了以下零件與11個專題

Gravity 是 DFrobot 的特殊接頭,如同 Seeed 的 Grove 4 pin 接頭

教學:

  • Arduino Platform and Genuino/Arduino 101
  • 類比與數位訊號
  • 簡易的自動控制裝置
  • Project 1. LED閃爍
  • Project 2. 感測燈光
  • Project 3. Mini Lamp
  • Project 4. 聲音觸發LED
  • Project 5. LED呼吸燈
  • Project 6. Light調節器
  • Project 7. 潘朵拉的盒子
  • Project 8. 藍牙連線
  • Project 9. 氣象站
  • Project 10. 芝麻開門
  • Project 11. 電子坡度偵測

有個相當好聽的名字:夜光寶盒。但我想應該沒有螢光塗料在上面就是了,哈哈

拿鐵胖達_8597

259-900x600



【Intel Edison】開發板製作簡易的4軸機器手臂 part 1 軟硬體介紹 – 轉載自T客邦創客基地

本文經T客邦創客基地同意之後轉載,(T客邦原文連結),後續內容將分成多篇來刊登,歡迎您跟著一起做喔!以下是原文:

 

桌上型教學機器手臂購買連結請點我

Continue reading

Arduino Cloud 環境介紹

Arduino.cc 去年發表了 MKR1000 這片 IoT 開發板之後,於近日發表了在 IDE 上的重大進展,就是 Arduino Cloud,雖然很多東西都還在 beta 就是了…  其實CAVEDU 在兩年前就已經使用 Arduino Yun 搭配 Temboo 來結合各種雲服務,例如 Gmail、Google 試算表、Facebook 與 Dropbox 等等,直到今天聽到 Arduino 終於有自己的 Cloud 也是夠令人興奮的了。

另一方面,MIT App Inventor 也選用 Arduino 101 作為物聯網套件的核心開發板,您在不同的面向上都有相當好的方案可以選擇。您可以直接從 Arduino project hub 看看目前有哪些有趣的專案

說真的,從 Arduino Yun 之後,經過 LinkIt Smart 7688 到這篇的 MKR1000 (點進去自己看規格吧),各位是否發現這個現象了呢?

延伸閱讀:[Make雜誌] Arduino發表MKR1000、物聯網程式開發環境和社群專題平臺

板子的規格愈來愈不是討論的重點,反正它們一定是愈來愈快,愈來愈好

雲端/後端的完整性才能帶起更多應用

 

Continue reading

[授權翻譯] NXT/EV3 Arduino I2C 終極指南 – 感謝Muhannad Al-Khodari

NXT/EV3 Arduino I2C 終極指南

註:本文經原作者 Muhannad Al-Khodari 同意 CAVEDU 翻譯成正體中文後用於教學推廣,歡迎註明出處後轉載。感謝CAVEDU實習生與台大自造者社長張德芯同學協助翻譯

本文將介紹如何連接LEGO EV3或NXT系列與Arduino UNO。過去幾年,筆者都是使用LEGO Mindstorms提供的圖形化程式與RobotC來控制NXT 和 EV3,但總覺得有些馬達、感應器會受到積木本身的限制,或是希望能擴充一些積木不支援的功能。本文將會告訴您如何按部就班地掌握解決上述問題。未來會再增加 LabVIEW 的做法。

在繼續深入前,請注意這不是”五分鐘掌握NXT/EV3與Arduino的I2C”,您需要投入一些時間,大約2~3天閱讀、消化並測試,之後才能應用到自己的專案上。當然也與耐心和投入的時間有關。

Continue reading

[穿戴式裝置製作] 導電縫線

哈囉!各位好~這次要與大家介紹的有趣物件是導電縫線!
說到電路,不知道諸位對於電路有著什麼樣的想像? 由於C小編曾經在服裝設計系待過兩年,所以對於能夠穿戴的電子裝置特別感興趣~
究竟這塊擁有鮮豔紫色的開發版到底有什麼特別的呢,且讓我們來認識一下 😀

Lilypad Arduino可穿戴的電子紡織科技是由曾是MIT Media Lab Leah Buechley 教授與SparkFun團隊所開發設計的。
◊註:Leah Buechley是一個設計師、工程師也是個教育家,致力研究於介於電子織品與紙上電路。

Lilypad Arduino的特點在於:

  • 可水洗
  • 有多種輸出、輸入、電源
  • 板子上設計有很大的連接點可以縫在衣服上(讓針線可以穿過去更加易於用在穿戴式的專案噢)

材料如下圖:
工具介紹

  • 鱷魚夾->在縫線之前,用來測試電路
  • lilypad 水銀電池供應盒->無開關裝置
  • 水銀電池->國際通用規格CR2032
  • lilypad LED->這次用的是紅色與白色,還有很多顏色呦
  • 導電縫線->規格為兩股
  • 手縫針->建議針孔要選大一點
  • 導電縫線:這次使用的是兩股,市面上還有三股等不同規格,有興趣的朋友可以上sparkfun來查詢詳細資料

https://www.sparkfun.com/products/retired/10118

導電縫線

  • Lilypad水銀電池盒,有兩種不同歸格,另外一種電池盒有附開關。至於水銀電池是國際通用規格,在各大雜貨鋪都可以買得到囉 https://www.sparkfun.com/products/10730

材料-電池盒

  • ~lilypad LED本次選用的是單色led,如果想要調控RGB色彩的話,也有 lilypad pixel 可以選用喔

本次用的led

本篇重點在於導電縫線的介紹,於是選擇了最簡單的測試方法。連接方式很簡單,就是將電池盒的正負極與LED的正負極相連,再放入鋰電池,就能通電! 

先用鱷魚夾測試說明

IMG_3513

由於導電縫線明顯比一般手縫線粗上很多,線頭很亂,所以建議手縫針可以選擇大一點的穿孔,
才會比較方便操作呦。

先穿線 有很多岔口不好穿

開始縫製啦!

導電縫線穿好線

先從led的負極開始縫製電路,就這樣一路縫成一條

開始

再接上電池盒的負極,創造一條完整的電路。縫完一邊之後,為了必免錯誤,可以不時用鱷魚夾測試看看噢~

導電縫線雖然是軟電路,適合用於穿戴,但相對的穩定性不如硬式電路來得高,所以在製作的時候,不要怕麻煩,耐心的用鱷魚夾與電錶量一量每條縫好的電路是否都暢通!不然浪費了不便宜的導電縫線實在是件很可惜的事情啊 QwQ

記得操作期間要量電錶

確認沒有問題之後,接這就是將另外一邊的電路也跟著縫上,形成一個完整的通電路線!

當C編在縫製的時候,覺得線很容易跟布料摩擦,Q起來,或是有扭曲的現象,

所以我會建議在選底布的時候,可以選結構比較強韌的材質進行操錯,比較不容易變形~
如果非得用比較軟或是滑溜綢緞的布料,可能就得在加燙個底襯來增加布的穩定度了!

接著換另外一邊

    如圖,左邊電路是單線,右邊是雙線。我個人覺得雙線真的比較保險,雖然使用單線的網路專題也不少,不過實際操作起來的時候單線不能乖乖服貼在布料表面之上,很容易勾到其他物件,甚至是毛掉、不小心拉扯到…

此外有個膚淺的理由就是雙線的曲度看起來真的比較美觀,能給專案加上很多分。沒錯,Lilypad系列就是個藝術品呀

單線與雙線縫差別

放入電池後,就可以點亮Led燈啦!

封面

由於一拿到縫線,我就手癢想要縫縫看,就隨手縫上自己的鉛筆袋了… 真希望在未來能夠好好的將縫線運用在ㄧ個完整的作品之上 🙄

另外另外~
C小編這裡po幾個相關網站,有興趣的朋友們都可點進去看看,更加的了解Lilypad!

  1. SparkFun Lilypad產品頁面:https://www.sparkfun.com/categories/135
    當然台灣很多拍賣網站也有零售各樣零件,就請各位自行挖寶了
  2. Lilypad官方教學網站:http://lilypadarduino.org/

裡面有些簡易專案,可以跟著操作看看

 

[開箱文] Arduino 101 / Genuino 101 – Arduino.cc 與 Intel 合作,板載藍牙 BLE 與六軸加速度計/陀螺儀

Arduino.cc 與 Intel 合作的開發板:Arduino 101 (美國) / Genuino (美國以外),板載藍牙 BLE 與六軸加速度計/陀螺儀,今天終於拿到了。我們已經開賣 ($1575),歡迎訂購喔

101 的板型與 Uno 是完全一樣的,差別在於 Uno 的 ATmega328 晶片換成了Intel® Curie™ ,也就是說 101 有兩個核心:x86 (Quark) 與 ARC (Argonaut RISC Core)。讓 101 的效能更好、功耗也更低 (3.3V),另一個就是 Curie 晶片上的 Bluetooth Low Energy 與六軸加速度計/陀螺儀。

延伸閱讀:[Make雜誌國際中文版]Arduino 101:具感測器套件且處理器為 Intel Curie的30美元控制板

接頭還是和 Uno 一樣,有種懷舊的感覺

2016-01-26 14.50.47

2016-01-26-14.51.00-1024x768

Continue reading