Category Archives: Arduino嵌入式開發板

Scratch X.org Arduino 相關指令介紹

請先參考本文來聯通您的 Arduino 與 Scratch X.org 網站:

Scratch Extension for Arduino – Scratch + Arduino 的新方案

簡單來說這個解決方案看起來是比較完整且容易做到的 Scratch 網頁結合 Arduino 控制,也支援部份 Seeed Studio 的 Grove 設備,目前支援的 Grove  裝置有以下六種,除了溫度感應器之外其實不太需要買啦,就是圖個方便囉。

螢幕快照 2015-05-16 上午1.20.54

以下是在 Arduino extension 中可用的 Scratch 指令

當電腦與 Arduino 連線成功時,,執行本事件下的指令。


將 LED、按鈕或伺服機連接到指定的數位腳位 (D2, D3, D4, D5, D6, D7, D8).


將電位計、光感測器或溫度感測器連接到指定的類比腳位 (A0, A1, A2, A3).


點亮或熄滅LED


指定 LED 的亮度,範圍為0 – 100%.


以指定 % 來改變 LED 的亮度。


讓伺服機轉動到指定位置,一般來說都是 0 – 180 度。


以指定角度來控制伺服機的位置。


當指定按鈕被壓下時,執行本事件下的指令。


檢查某個按鈕是否被壓下。


當旋轉式電位計、光感測器或溫度感測器的值滿足指定條件時(<, = , >),觸發本事件下的指令。


讀取旋轉式電位計、光感測器或溫度感測器的值,回傳值為0 – 100。


將指定的數位腳位(D2, D3, D4, D5, D6, D7, D8) 打開或關閉。


設定支援 PWM 的數位腳位的值 (D3, D5, D6) 為 0~ 100,單位為 %。


當指定數位腳位(D2, D3, D4, D5, D6, D7, D8) 為開(on)或關(off)時,執行本事件下的指令。


檢查指定數位腳位(D2, D3, D4, D5, D6, D7, D8) 的狀態為開(on)或關(off)。


當指定類比腳位的數值 (A0, A1, A2, A3) 滿足指定條件時(<, = , >),觸發本事件下的指令。


取得指定類比腳位的數值(A0, A1, A2, A3).


將輸入值對應(map)到所指定的兩個數值之間,例如可以將某個類比感測器的值(0 ~ 100) 對應到動畫角色的 x 座標 (-240 ~ 240).

Scratch Extension for Arduino – Scratch + Arduino 的新方案

Arduino.cc 的 blog 有個有趣的消息: Scratch Extension for Arduino。之前的作法大多是使用本機執行的 S4A 小軟體。這一版的亮點是支援 Grove 系列感測器, 搭配 Grove Base shield 之後就能控制 Grove 的數種感測器 與 servo,另外也可以使用 picoboard 與 wedo。

英文教學: http://khanning.github.io/scratch-arduino-extension/

操作方式如下:

1. Arduino 端一樣要安裝一個小程式 : Standard Firmata,負責回應來自 Scratch 的所有呼叫。如果要使用 Processing  來控制 Arduino 也需要它喔。請確認這隻程式已經上傳到您的 Arduino 並執行。

2. 安裝瀏覽器 plugin 檔名為 ScratchDevicePlugin.msi 或 ScratchDevicePlugin.dmg, (目前有 Windows 與 MAC)。安裝完成之後開啟  http://scratchx.org/?url=http://khanning.github.io/scratch-arduino-extension/arduino_extension.js 瀏覽器會詢問是否要起動外掛, 在此要同意才能使用.

  • Firefox:

 fox1

fox2

npapi

3. 順利完成的話, 會看到畫面中間的 Arduino 字樣旁邊的小圓圈變成綠色, 代表連線成功.

005

指令來看是差不多的, 在[更多積木] 之下有Arduino 相關的指令, 之後會專文介紹

 

005

這就是讓 #D13 LED 亮滅的小程式, 您完成了嗎?

006

 

Microsoft 與 Arduino.cc 的進一步合作關係

今天看到的消息:Microsoft 與 Arduino.cc 的進一步合作關係 (本文為翻譯消息)

windowsarduino

另一方面,Windows  也發布了它們的 IoT solution。支援 Raspberry Pi、Arduino Yun, Intel Galileo (一定要的啊)與 MinnowBoard Max (沒用過)

Arduino.cc 創辦人之一 Massimo Banzi 近日宣佈了Arduino.cc 與 Microsoft 進一步合作關係:Windows 10 is in fact the world’s first Arduino certified operating system!

Arduino Certified’  的 Windows 10 讓 maker 能結合 Arduino  的硬體驅動能力以及 Windows  的各種好用軟體來開發各種有趣的智慧物件。

想像一台監控攝影機,用Arduino來驅動馬達來控制鏡頭轉動,並使用 Universal Windows Platform (UWP) 來完成使用者介面,連接攝影機到雲端來處理動態偵測甚至可加入臉孔 / 語音辨識。另外也推出了 Windows Remote Arduino 與 Windows Virtual Shields ,當然是 open source啦

remotew02

使用Windows Remote Arduino,開發者就能控制(無線) 可執行 Windows 10 的裝置,就好像真的接上一片 Arduino 擴充板一樣,直接讓 Arduino 與 Universal Windows Application 接軌。

Microsoft 希望以這樣的方式讓使用者能用熟悉的 Arduino 指令 (執行在一台無線連接的 Arduino  裝置上) )就能延伸到 Universal Windows Platform Application。有那些好處呢?包括影像處理、語音辨識、網頁解析、攝影機與 Advanced Audio pipelines,並藉由 Arduino  整合了與真實世界的互動性,創造各種嶄新的應用。專案請參考:Basic Windows Remote Arduino project。.

另一方面還有 Windows Virtual Shields,使用者可以透過無線通訊協定來強化他們的 Windows 10 裝置。例如 Nokia 的 Lumia 530 手機就具備了許多 Arduino Shield (當然是虛擬的概念不能真的插啦) 的功能,玩家可藉此來連接各種元件,例如手機上的 GPS、網路連線/解析、觸碰螢幕、語音科技等等。例如 Picture the Weather project。期待能看到更多有趣的應用喔

「用Arduino Yún自造智慧家電」工作坊

20150425_163934
這次的智慧家電研習工作坊,這次上課對象是對有Aruduino使用基礎的Maker及Pre-Startup,這次來的同學有好多是在台灣擔任工程師的前輩阿,這次的上課內容是一天使用ArduinoYun上網到物聯網應用。

20150425_155253

本次上課內容有:

認識 Arduino Yún 開發板

–       安裝 Arduino 程式編輯介面

–       Arduino Yún  使用環境建置:透過網路將程式上傳到Arduino Yun。

–       Arduino  無線網路介面設定

–     使用ArduinoYun偵測周圍環境的溫度濕度

端家電監控(1)

–       認識Restful API

–       量測家電能源消耗狀況

–       遠端啟動以及關閉繼電器

Temboo 網路服務

–       自動上傳能源消耗資料到 Google Doc

–       運用雲端資源,整合紀錄並分析數據

–       發送警告電子郵件

 

 

大家開始組裝溫溼度感應器。恩恩,今天室內溫度大約是26度,濕度是46%

20150425_155103

 

這是很好用的Temboo網站,可以讓我們跟Google Gmail、雲端試算表進行連線

20150425_155210

 

開始製作家電控制器囉,大家很認真地在剝延長線,通電的那瞬間大家都好緊張啊。

20150425_154527

我們的鄭經理也上台跟我們分享一些有關電路設計、3D列印設計的相關軟體套件

20150425_152509

 

今天也是圓滿的結束囉,謝謝大家~~~

20150425_163934

 

今天的講義都在這裡,招待不周~

1_ArduinoYun物聯網

2_ArduinoYun物聯網

3_ArduinoYun物聯網

 

 

 

Ardublock 圖形化Arduino – 電位計 PWM 控制LED

使用 ArduBlock 來寫一寫個簡單的小程式,這是一個需要另外安裝(.jar)於 Arduino IDE 的圖形化程式,拉拉方塊就可以寫好 Arduino 程式,還可以回到 Arduino IDE 微調,非常方便喔。

.jar 請由 ArduBlock 網站下載。接線很簡單,請將電位計接到 A0腳位,LED 接到 D9腳位(PWM)。執行程式之後,轉動電位計就可以控制LED漸明漸暗。如下圖:

螢幕快照 2015-04-21 上午12.11.18

安裝環境請參考:Ardublock : Arduino中的圖形化環境

點選 ArduBlock 的 上傳(Upload)按鈕後,會先轉成 Arduino code 之後再準備上傳,您可以在此微調之後再上傳。

螢幕快照 2015-04-21 上午12.00.43

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

大家久等了, 本篇文章告訴您如何在 Android 手機端接收兩筆 Arduino 的資料,這次是以 A0, A1 兩隻腳位來處理。本範例感謝嘉義高工張老師提供。

如果您要換成其他元件,例如數位感測器的話,做法是一樣的。請先看一下這個元件的資料範圍是多少。對於本範例的架構來說,最後就是透過藍牙傳一個陣列出去,因此重點在於您是否可先在 Serial Monitor 中看到正確的資料範圍。不過一般來說都會有讀值得範例程式,所以不用太擔心啦!

您可以擴充這個架構到 N 筆,但是筆數愈多,掉資料的機會也愈高。請自行斟酌喔!

[雙A計畫] 常見問題整理

[雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫] Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

English version

Arduino LED Blink

Arduino LED PWM

Arduino LED Blink (Arduino 101 with BLE)

Arduino LED PWM (Arduino 101 with BLE)


在撰寫程式前我們先準備以下材料:範例程式請點我下載(App Inventor中文學習網檔案庫)

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板

3.藍牙收發接收器 (本系列使用JY-MCU04 or JY-MCU05)

4. 電位計

5. 光敏電阻

6. 1k~10k 歐姆電阻,用於光敏電阻

請按照電路圖將電路接上,接了一個電位器(A0)與光敏電阻(A1)。當然啦,您也可以兩個腳位都用相同的元件,方便就好。為了不讓大家眼花,藍牙發射器另外獨立出來表示 (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位):

未命名
A0:電位計。A1:光敏電阻
螢幕快照-2014-10-30-上午12.41.36
TX: Arduino D11, RX: Arduino D10

 


App Inventor 端程式:

由於連線斷線的做法都是差不多的,在此把連線相關指令整理如下圖。請注意Clock timer 一開始是關閉的,我們會在連線成功之後才會將其啟動來發送藍牙指令,否則會一直跳出錯誤訊息(因為還沒連線啊!)
在 Clock.timer 事件中,首先發送一個數字49給Arduino,代表”我要發資料囉!” Arduino 則是先用 BluetoothClient.ReceiveText 指令,如果讀到’a’,就接續讀取後面兩筆資料,這就是 A0 腳位的數值。請注意在此之所以要判斷 text 變數之否小於0再加上 256,是由於Arduino 的 8 bit 整數範圍是 -127 ~ 128 的緣故。
反之如果App 收到字元 ‘b‘ 就是 A1 腳位。作法同上。
接著在Clock.timer 事件最後將這兩筆數值(value_A0value_A1) 顯示於 Textbox,並且用這兩筆數值來控制 Canvas 上面的小飛機移動,快點來玩雷電遊戲吧!
螢幕快照 2015-04-05 上午1.11.29
因為資料傳輸過程中難免會遺漏,因此我們都是先抓到火車頭(就是’a’ 與 ‘b’),確定這是一筆新的資料開頭之後,再去讀取數值,否則可能會發生數值亂跳的情形。另一方面,App Inventor 在藍牙傳輸的延遲狀況較明顯,請注意喔

Arduino 端程式如下,我們把 A0 腳位的資料用 ‘a‘ 作為標頭,由於資料長度大於 1 byte ( 2的8次方),因此需要用到 2 bytes 才能把 A0 的數值範圍 (0~1023) 涵蓋進去,因此 Data[1]~Data[2] 就代表A0 腳位的資料,Data[4]~Data[5] 就是A1 腳位的資料:(Data [0] = ‘a’, Data[3] = ‘b’ 這兩個火車頭別忘記囉~)
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;

void setup(){ 
  Serial.begin(9600);
  I2CBT.begin(9600);
}
 
void loop (){
    byte Data[6];
    byte cmmd[20];
    int insize;
    int x=analogRead(A0);//read sensor value
    int y=analogRead(A1);//read sensor value
    serialA=I2CBT.read();
    Data[0]='a';
    Data[1]=x/256;
    Data[2]=x%256;
    Data[3]='b';
    Data[4]=y/256;
    Data[5]=y%256;
     Serial.print(x);
     Serial.print(" , ");
     Serial.println(y);
 
     if (serialA == 49){
         for(int j=0;j<5;j++)
         I2CBT.write(Data[j]);
         serialA=0;
      }
  delay(100);
}

150321 自己的Arduino自己做

3/21 星期六是自製 Arduino 的工作坊,來賓會自行焊接必要的元件到雷射切割的木板(可以客製化簽名!) 來做出一片 XXduino。這片 DIY 板子麻雀雖小,可是五臟俱全,不但有 PWM  腳位,也可以接藍牙來遙控喔!

詳細製作說明請按我,您也可以在家自己做

10313058_564941250275462_3981001481030917287_n

來看看影片吧

藍牙也沒問題!

七段顯示器

控制伺服馬達

 

150316 臺大黑客松 IoT 課程 with LinkIt ONE #1

3/16 是2015 台大黑客松的第一天,與30位台大各系所的學生與外校的同學一起進行為期十周的 IoT 物聯網課程. 本期課程的開發板使用 LinkIt ONE, 感謝 MediaTek Labs 熱情支持

第一天的內容就是測通電腦與 LinkIt ONE, 只要 LED 可以亮滅就ok囉. (最簡單的日子也就只有今天啦~)

之後每周的課程內容都會與大家分享, 也請大家多多關注相關消息. 3/29 CAVEDU Day 當天也會有 LinkIt ONE demo, 總之就是歡迎參加啦!

20150316_193427 2015-03-16 19.07.11 2015-03-16 19.17.59 2015-03-16 19.06.40 2015-03-16 20.09.25

 

[123D Circuit] 丟骰子遊戲 – 海大機械作業

上週阿吉老師在海洋大學 Arduino 微處理機課程的作業,用丟骰子遊戲來教隨機數與 if / else 判斷式。按下Arduino 的按鈕之後,會根據莊家與玩家各自的三顆骰子點數合來亮起兩顆 LED 其中之一。本範例感謝海洋大學機械系劉哲甫同學分享。

[iframe width=”725″ height=”448″ src=”http://123d.circuits.io/circuits/652275-hw_0317_throwthedice/embed#breadboard” frameborder=”0″ marginwidth=”0″ marginheight=”0″ scrolling=”no”]

程式碼:

int player1 = 4;
int player2 = 5;
int bsensor = 0;
int bswitch = 7;
int randomMax = 6;
int randommin = 1;
int Point = 0;
int a=0;
int b=0;

void setup() {
  Serial.begin(9600);
  Serial.println("Ready......");
  pinMode(player1, OUTPUT);
  pinMode(player2, OUTPUT);
  pinMode(bswitch, INPUT);
  delay(500);
}

void loop() {
  digitalWrite(player1,HIGH);
  delay(100);
  digitalWrite(player2,HIGH);
  delay(100);
  Serial.println("Player1 throw the dice");
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  for(int i=1;i<=3;i++){
    Point=random(randommin,randomMax);
    Serial.print("Dice");
    Serial.print(i);
    Serial.print("=");
    Serial.println(Point);
    a=a+Point;
    delay(100);
  }
  delay(500);
  Serial.println("Player2 throw the dice");
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  for(int i=1;i<=3;i++){
    Point=random(randommin,randomMax);
    Serial.print("Dice");
    Serial.print(i);
    Serial.print("=");
    Serial.println(Point);
    b=b+Point;
    delay(100);
  }
  Serial.println("Counting......");
  delay(1000);
  Serial.print("Player1 point=");
  Serial.println(a);
  Serial.print("Player2 point=");
  Serial.println(b);
  Serial.println("Push button to restart......");
  if(a<b){
    digitalWrite(player2,LOW);
    delay(100);
  }
  else{
    digitalWrite(player1,LOW);
    delay(100);
  }
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  a=0;
  b=0;
  digitalWrite(player1,HIGH);
  delay(100);
  digitalWrite(player2,HIGH);
  delay(500);           
}

[3/29_C-Day有什麼?]系列之四:台北市校際盃機器人選拔賽(三)- 使用Arduino uno與NXShield

本篇內容是由  CAVEDU 的實習生-袁佑緣提供的使用心得

這次採用Arduino UNO搭配mindsensors公司所生產的NXShied來控制我們的機器人(本次使用的是NXShield-D),Arduino相比Raspberry Pi功能雖然比較簡單,但是卻相對容易操作而且穩定,而NXShield則是讓我們可以透過這塊板子來控制LEGO的電子零件,以下是以「機器人駕訓班」中的一個任務:將指定物件(例如:乒乓球)推開或取得,取得有額外加分。

首先我們先來看看機器人的核心:左邊是Arduino UNO控制板,右邊則是NXShield,NXShield主要可以接四個馬達與四個感應器,其他的特殊的針腳則可以用來接servo或I2C用

08注意到NXShield對感應器的支援上僅有NXT,如果想要支援EV3的話,則需另外購買轉接線,而馬達的部分則是NXT與EV3皆可使用,而mindsensors公司不愧是專門出產LEGO機器人相關的配備,對於支援的函式庫與感應器種類相當多,對於新手算是相當友善的選擇。

緊接著是機器人手部的設計,這次改用EV3的大馬達來取代先前的EV3中馬達,大馬達的扭力大概是中馬達的2~3倍,所以這次就直接裝在馬達上,而不用再另外裝齒輪組來加大扭力。

09

 

而電源供應的部分,筆者實際測試過的情況是必須要將兩塊板子各自都接上電源才行正常運作,只有接其中一塊板子的話,有可能會發生”插著USB線的時候可以正常運作,可是拔掉USB線(也就是只有吃電池的電源時)會發生運作不正常的現象,常常跑幾個步驟後就arduino就突然重新啟動了”。因為LEGO馬達的運作電壓是9V,所以筆者的作法是為兩個板子各自接上9V的電源,跑起來就是相當的有力啊

11_2 11

 

再來就是軟體的部分啦,開發環境的設定相當容易,先下載官方提供的函式庫(附上連結http://sourceforge.net/projects/nxshield/files/ ),然後打開電腦中的Arduino IDE->點選上方的草稿碼->點選匯入程式庫->匯入程式庫,然後選擇你剛剛下載的檔案就行大功告成了!

那麼我們就來看看實際跑起來的樣子,以下是簡單的範例程式:

#include <Wire.h>
#include <NXShield.h>

NXShield nxshield;
//引入必要函式庫與新增NXShield變數
void setup() {
 
  delay(500);
  nxshield.init(SH_HardwareI2C);//初始化I2C
  nxshield.bank_a.motorReset();//初始化馬達
  nxshield.bank_a.motorReset();
  nxshield.waitForButtonPress(BTN_LEFT);//等待按下左鍵才開始(NXShield板子上有四個按鍵分別是RIGHT,LEFT,RESET,GO)
 
}

void loop() {
  
  delay(5000);
  nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 20);//Bank B 的Motor-1以馬力20正轉,機器人將手臂往下壓
  delay(2000);
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 20);//Bank A 的Motor-1,Motor-2以馬力20反轉,向前進
  delay(2000); 
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);//Bank A 的Motor-1,Motor-2以馬力20反轉,碰到蓋子後向後退
  delay(500); 
  nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
  nxshield.bank_b.motorRunDegrees(SH_Motor_1, 
                     SH_Direction_Reverse, 
                     60,
                     70, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//Bank B 的Motor-1以馬力60反轉70度,機器人手臂向上抬一個角度
                     
   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Reverse, 
                     30,
                     230, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);
                     //Bank A 的Motor-1,Motor-2以馬力30反轉230度,機器人向前進一小段距離,只要改變這段距離就可以解決正方形或者是三角形的題型
                     
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 100);//Bank B 的Motor-1以馬力100正轉,機器人將手臂全力往下壓
   for(int i = 0; i < 5; i++)
   {
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 30);
     delay(130);
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);
     delay(100);
   }//前後來回壓球,使得進球率變高
   nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
   
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Reverse, 100);//Bank B 的Motor-1以馬力100轉,機器人將手臂全力往下上舉,把球收今去
   delay(300);
   nxshield.bank_b.motorStop(SH_Motor_1, SH_Next_Action_BrakeHold);//Bank B 的Motor-1停止鎖死

   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Forward, 
                     30,
                     210, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//機器人退回原位
   while(true){;}//無限迴圈當作程式的終點,方便觀察
   
}

 

實際運作的情形:

一、收取正方形區塊的物件

注意到影片中的機器人雖然一開始放得很歪,但是卻可以靠前面的導角來修正回來,是個可以參考的設計喔!

12

 

二、收取三角形區塊的物件

同樣的程式架構,也使用同樣的網子,只是改變了舉起手後機器人前進的角度,也是可以輕鬆入袋!

 

三、那如果網子裡面有上次的取得物件呢?

也是可以滿載而歸喔!

 

四、當然最安全的還是分開一次一次的收好啦

以上,希望透過這次一系列簡單的範例測試來吸引更多人一起來使用各種控制器來比這種開放是硬體的比賽,也預祝即將參賽的各位選手們比賽順利!

零件提供來源在這裡

[123D Circuit] 一元二次方程式公式解

這是本周海洋大學與元智大學的課堂作業,示範各種算術運算子以及副程式傳值練習。ax^2 + bx +c = 0 的一元二次方程式公式解是 (QQ, 為什麼還要算這種東西…):

用程式語法來表示就是這樣:

(-b + sqrt(pow(b,2)-4*a*c))/(2*a)  (-b  sqrt(pow(b,2)-4*a*c))/(2*a)

未命名

code 如下,直接上傳到 Arduino 就可以在 Serial Monitor 看到結果,或是用 123D Circuit 來線上模擬也可以喔。 x^2 -2x + 1 的兩個根都是 1 ,您算對了嗎?

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

void loop() {
  formula(1,-6,8);
  delay(2000);
}

void formula(int a, int b, int c){
   float result1 = (-b + sqrt(pow(b,2)-4*a*c))/(2*a);
   Serial.print(result1);
   Serial.print(", ");
   float result2 = (-b - sqrt(pow(b,2)-4*a*c))/(2*a);
   Serial.println(result2);    
}

 

MindSensors 推出的 Grove Sensor Adapter,可用於樂高 EV3 與 NXT 機器人主機

Grove 感測器系列是 Seeed Studio 推出的感測器套件包,搭配自家的擴充板,讓複雜的接線變得簡潔許多。現在 MindSensors 推出了 Grove Sensors 轉接頭,可將各種Grove 感測器轉接到樂高 EV3 與 NXT 主機上使用。

 

GSAwithsensorsw1024

 

當然,也提供了 EV3 的指令,請在本頁面下載後匯入 EV3 環境即可使用。但由下圖可知,提供的是底層的讀寫指令,並未針對特定的感測器提供專屬的讀寫指令。分別有 I2C Read, I2C Write, Analog 與 Digital 等四大類指令。

螢幕快照 2015-02-28 下午11.53.39 螢幕快照 2015-02-28 下午11.53.50

[雙A計畫] 常見問題整理

許多朋友對於 App Inventor 透過藍牙來控制 Arduino 這個議題相當有興趣,事實上通訊這個主題一直是非常吸引人的,當然也有一定程度的難度啦…

首先整理我們雙A計畫文章總覽:

[雙A計畫] 常見問題整理

[雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫] Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

English version

Arduino LED Blink

Arduino LED PWM

Arduino LED Blink (Arduino 101 with BLE)

Arduino LED PWM (Arduino 101 with BLE)

就以下這兩點來說,讓大家有些基礎的概念:

1. 絕大部分的狀況,控制端(例如Android手機) 與被控端(例如 Arduino ) 的程式語言是完全不同的。

2. 牽涉到通訊與硬體就是很麻煩,錯任何一項就是不會動,所以要檢查再檢查喔!

請先參考我們的教學投影片,所有的雙A計畫範例請點我下載


補充一些常見問題如下

1. BTList 點選下去漆黑一片

手機需要先與藍牙發射器配對,我們才能用這個指令來抓到 Android 手機已配對的藍牙裝置位址(address)與名稱(name)。當然您可以直接使用藍牙發射器的 MAC address 來連線,但非常不建議這麼做,因為很容易輸入錯誤而當機。或是您很確定就是要連某片藍牙發射器的話,就把位址寫死在App Inventor 裡吧。

螢幕快照 2015-02-19 下午8.58.27

2. Serial Monitor 亂碼

請檢查鮑率。這會寫在 Arduino 程式中的這一行: Serial.begin(9600);

3. 藍牙發射器上的 LED 燈閃爍或是一直亮是什麼意思?

以 HC05, Hc06 這兩款常見的藍牙發射器來說,只要通電就會閃紅燈,代表正常啟動並可接受外來連線要求。一旦連線成功之後,

4. 藍牙發射器配對碼是什麼?

一般來說都是 1234 或 0000 。您可以透過 AT  command 來修改,但沒有必要。

5. 為什麼需要修改藍牙發射器名稱?鮑率需要改嗎?

就教室管理的角度來說,這件事很重要,否則 Android 掃描下去會看到十幾片同樣名稱的裝置,這樣就無法順利配對完成了。因此建議學校老師可以先使用 AT command (請參閱以上投影片)把藍牙發射器名稱改成 BT001, BT002 或任何好管理的名稱,再把這個名稱用標籤貼紙貼在發射器上。

鮑率一般來說不需要修改。

以上兩件事,如果您是個人使用者,周遭只有一片藍牙發射器而不容易搞混的話,就不太需要做這件事。

6. 什麼是序列通訊?

 

簡單來說,就是在同一條線上一次發送一個位元,因此是先發出去的一定先到。Arduino 端是透過I2CBT.read() 與 I2CBT.write() 來讀寫藍牙序列資料。與序列通訊對應的就是平行通訊,可以同時發送多筆資料。

補充:維基百科的序列通訊頁面

7. 為什麼在範例3 中要加入檢查碼?不加會怎麼樣?

封包傳輸過程中,會有一定的機率遺失,這與傳輸長度以及訊號強弱有關係。當然無線又比有線來的容易掉封包,因此如果掉了一個封包導致讀取位置錯誤的話,您就會感覺到資料怪怪的(例如電位器明明沒有轉動,但手機畫面的數值跳動範圍很大)。因此我們加了字元 ‘a’ 作為資料的第一段,App Inventor 每次讀到a,就知道這是一段封包的第一包(data[0]),就會接續處理後續兩筆資料(Data[1] 與 Data[2])。

至於要使用什麼字元,只要通訊兩端講好就好。重點在於哪邊是頭,以及一次要讀取多少 byte 的資料。這可以說是最基礎的通訊協定(protocol)喔!

螢幕快照 2015-02-19 下午9.31.52

另一方面,手機端會透過 Clock 元件定期發送 49 ,告訴 Arduino: [你可以把資料丟過來囉!]。Arduino 會在讀取到這筆資料後,把 Data[] 陣列送出去。我們可以將其視為基礎的握手(hand shaking)機制

螢幕快照 2015-02-19 下午9.31.41

 

 

8. 同一片藍牙發射器可以同時被多台 Android 裝置連線嗎?

無法。藍牙發射器是被控端 (slave),Android 裝置 (master)則視實際狀況可以控制多個 slave。例如兩台樂高機器人:

9. 程式無法順利執行?

這其實牽一髮動全身,大概會有幾個問題

a. 兩邊的程式沒有對應,請再次檢查程式是否正確

b. 藍牙發射器沒有先與Android 手機配對完成,請參考 1.

c. 連線失敗,請確認藍牙發射器的燈號是閃爍的紅燈。連線成功會恆亮紅燈。如果一開始就恆亮紅燈代表前一個連線還沒結束,這時候就無法被連。我們在 App Inventor 程式中是在點選之後發起連線 (BluetoothClient.Connect 指令),因此您在此會感覺到程式稍微停頓了一下,就是這時候 Android 會對藍牙發射器進行連線。

螢幕快照 2015-02-19 下午9.12.03

d. 執行程式時,可以先按一下 Arduino 的 reset 鈕讓程式強制重新啟動,確認藍牙發射器在閃紅燈,這時再執行手機 app。

最後也請大家參考 Cooper Maa 的藍牙教學,祝大家順利成功喔~

 

LabVIEW 藉由滑鼠控制 MeArm (四伺服機的機械手臂)

使用LabVIEW 控制 Arduino,藉由滑鼠點選左右鍵來控制 MeArm 的單顆伺服馬達 (四伺服機的機械手臂)。能控制一顆就能夠控制四顆,但我們先從一顆伺服馬達開始。

程式如下:在 while loop 中的下段是取得滑鼠狀態,並取得滑鼠左鍵 (button 1) 與右鍵 (button 2) 的狀態。

進到上段的兩個 case structure 之後,如果左鍵被按下就讓 servo 角度累加5,如果是右鍵就累減5。藉此達到滑鼠控制的效果。當然啦,改用電玩手把的話就可以用類比搖桿來控制 servo,效果就更棒了。

更多 LabVIEW + Arduino 的教學請按我 ,別忘了 CAVEDU 的 LabVIEW for Arduino:控制與應用的完美結合 這本書喔gggg

 

最後來看影片吧

[新譯書上市] 實戰數位家庭自動化:使用Arduino

書名:實戰數位家庭自動化:使用Arduino

作者: Marco Schwartz
譯者:CAVEDU教育團隊  曾吉弘
出版社:碁峰
出版日期:2015/02/25
語言:繁體中文

定價:$320,特價$240元

與咱們翻譯的另一本 實戰物聯網開發:使用Arduino Yun 相比,這本書是同一位作者的另一本著作,使用 Arduino UNO 搭配 Xbee 無線模組,用多個專題來介紹家庭自動化這個議題。歡迎列入參考書單喔!

ach017900-01_Fotor

購書請按我

Arduino已經被上百萬人用來開發電子裝置的原型,同時它也是用來打造家電自動化的完美平台。本書將以專案實作的形式,帶領您應用Auduino打造家電自動化系統。一開始先從幾個簡單的小例子開始,像是打造動作感測器、遙控電燈、利用藍牙傳送溫度感測器的數據。接著,將導入物聯網技術,您可以將資料送上雲端,並學會如何控制現有的裝置,打造一套您專屬的家電自動化系統。

您可以從本書學到:
.利用Xbee打造動作感測器
.如何使用Arduino控制家電
.如何利用Wi-Fi控制電燈
.利用藍牙與Aruduino遠端監測溫度
.透過雲端監控用電狀況
.使用EAGLE軟體自己設計PCB,自製PCB板

Chapter 01 製作 XBee 無線動作感測器
Chapter 02 使用手機或平板電腦控制燈光
Chapter 03 透過藍牙來量測溫度
Chapter 04 用 Xively 建置雲端氣象站
Chapter 05 在雲端監控能源消耗
Chapter 06 改裝商用家庭自動化裝置
Chapter 07 自製家庭自動化系統