2014年4月27日 星期日

震動開關推動LED


當一端低於水準位置傾斜,開關尋通,類比口電壓值為5V左右(數位二進位表示為1023),點亮led燈。將A0所讀到數值由0~1023轉為0~255,用意是為了提供給LED推動實縮需要的PWM,另外這不只可以使用在震動開關上面,只要是有類比變化的接可接在Arduino類比端輸入,一樣能推動。





const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {

  Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(analogInPin);          

  outputValue = map(sensorValue, 0, 1023, 0, 255);

  analogWrite(analogOutPin, outputValue);        

  Serial.print("sensor = " );                    
  Serial.print(sensorValue);    
  Serial.print("\t output = ");    
  Serial.println(outputValue);

  delay(2);                  
}

執行結果如下

2014年4月17日 星期四

Arduino 整串封包接收處理

由於Serial所Read 的值都只有一個byte,

要讀取整筆封包還要再自己寫,

所以稍微寫了一下,將"#"當作起始字,"$"當作結尾字,

並且將之間的資料存於Databuf中,

有需要的時候再Send "!" 會將資料丟出來。






以下是code:


1:  char Databuf[100];     // 用來儲存收進來的 data byte  
2:  int addr=1;  
3:  char buf;  
4:  int RW=0;  
5:  void setup() {  
6:   // 開啟 Serial port, 通訊速率為 9600 bps  
7:   Serial.begin(9600);  
8:   Serial.println("Hello Oliver"); Serial.println("http://arduino-oliver.blogspot.com/");  
9:  }  
10:  void loop() {   
11:   // 檢查是否有資料可供讀取#@  
12:   if (Serial.available() > 0) {  
13:    buf = Serial.read();  
14:    switch (buf)   
15:    {  
16:    case '#':  
17:     Serial.println("#");  
18:     RW=1;  
19:     break;  
20:    case '!':  
21:     Serial.println("!");  
22:     while(addr>0)  
23:     {  
24:     addr--;  
25:     Serial.print(Databuf[addr],HEX);  
26:     }  
27:     break;  
28:    case '$':  
29:     Serial.println("$");  
30:     RW=0;  
31:     break;  
32:    default:  
33:    if(RW=1)  
34:    {    
35:    Databuf[addr]=buf;  
36:    Serial.print(Databuf[addr],HEX);  
37:    addr++;  
38:    }  
39:   }  
40:   }  
41:  }  

2014年4月16日 星期三

ReadAnalogVoltage 類比輸入 example




簡單的範例,做輸入電壓的偵測


void setup() {

 //設定serial
  Serial.begin(9600);
}

void loop()
 {

 // 讀取A0的電壓
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
 //透過監看COM數值傳出
  Serial.print("voltage : ");
  Serial.println(voltage);
 //一秒執行一次
  delay(1000);
}

  voltage將會收到0~1023的數值,A0接口可以接上VR,就可以測試這項功能正不正常了。


  int sensorValue = analogRead(AX)
  將取到的值先丟到 Value

執行畫面如下:

2014年4月14日 星期一

第一次如何使用Arduino

Arduino在台灣已經有一陣子了,對於有再接觸程式設計的人應該都不陌生,然而對於不是程式設計,或者是不是電子電機相關科目的,也不會太難以上手。

由於Arduino本身官方由提供許多librarie,與網路上有豐富的資源,使其上手的門檻相對的降低許多,新手要取得硬體設備也不是什麼難事,在各大網拍、較大的電子零件通路都能看到它的身影。至於出版物台灣也有相當多的譯本,但是小弟覺得是不用買那些書,在網路上也能找到相當多的sample code。

現在就開始進入本篇主題:

1.下載Arduino IDE

Arduino官方網站下載點 http://arduino.cc/en/Main/Software

可以看到上圖有兩個方框,如果你手上的開發板是屬於Yun或者是Due請下載1.5.6版本,才有支援這兩款板子的燒錄喔,而其中差別在往後再跟大家介紹。

選擇Windows Installer就可以了ZIP file是屬於免安裝版本,但使用上可能會較為不方便,所以這邊建議Windows Installer安裝就好了。

下載好後執行,也沒有太多需要注意的,Next...Next...Next就好了。

2.安裝Arduino驅動程式

如果是照著上一步,安裝Arduino,在開發板接上時,於電腦設備管理中會看到無法辨識的裝置,選擇它
點選瀏覽電腦上的驅動程式軟體


如果Arduino使用預設安裝可以在安裝路進下的Drivers中找到驅動程式

C:\Program Files (x86)\Arduino\drivers


安裝好了,本文是使用Mega 2560。



3.開啟桌面上Arduino

就可以看到下圖這個畫面了,工作列因為我使用1.5.4它有支援繁體中文。
而工作列底下的圖案分別為驗證、下載、開新檔案、開啟、存檔與最左邊的監看。

 

 4.如何燒錄程式

我們先來點一個簡單的範例,選取 檔案>範例>Basics>Blink


會出現以下的Code

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */


// Pin 13 has an LED connected on most Arduino boards.
// give it a name:

int led = 13;

// the setup routine runs once when you press reset:

void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

接著按下驗證

會出線編譯完成的訊息,與總共使用了多少空間和最大的空間。
接著來選擇"工具",里面可以找到板子與Port這兩個選項,就對應你所使用的板子型號,與於系統中所使用的Port位置。


按下箭頭的圖案上傳


到這邊,就正式的把第一個程式上傳到開發板子上了,這時候板子不用接上任何的線,
可以看到板子上有LED在不停的閃爍。
 

這樣就完成了第一次燒入Arduino的完整動做了。
本篇是針對整個燒入流程做介紹,Code的部分往後再做說明。


如果使用上有遇到其他問題,也歡迎在這邊提問唷,對於本篇文章有錯誤的地方也請大家指教,小弟會立刻更正。

Arduino 介紹 [Wiki]

關於

Arduino
Arduino可以使用 Arduino 語言與 Macromedia Flash、Processing、Max/MSP、Pure Data和SuperCollider等軟體,結合電子元件,例如開關或感測器或其他控制器件、LED、步進馬達或其他輸出裝置,作出互動作品。 Arduino也可以獨立運作成為一個可以跟軟體溝通的介面。

特色

  • 基於創用CC開放原始碼的電路圖設計。
  • 免費下載,也可依需求自己修改,但需遵照姓名標示。您必須按照作者或授權人所指定的方式,表彰其姓名。
  • 依相同方式分享,若您改變或轉變著作,當散布該衍生著作時,您需採用與本著作相同或類似的授權條款。
  • Arduino 可使用 ICSP 線上燒入器,將 Bootloader 燒入新的 IC 晶片。
  • 可依據Arduino官方網站,取得硬體的設計檔,加以調整電路板及元件,以符合自己實際設計的需求。
  • 可簡單地與感測器,各式各樣的電子元件連接,如 紅外線超音波熱敏電阻光敏電阻伺服馬達…等。
  • 支援多樣的互動程式,如 Adobe Flash, Max/MSP, VVVV, Pure Data, C, Processing… 等。
  • 使用低價格的微處理控制器 (Atmel AVR) (ATMEGA 8,168,328等)。
  • USB 介面,不需外接電源。另外有提供直流(DC)電源輸入。

核心開發團隊

Arduino的核心開發團隊成員包括:Massimo BanziDavid CuartiellesTom IgoeGianluca MartinoDavid MellisNicholas Zambetti
據說 Massimo Banzi 之前是義大利 Ivrea 一家高科技設計學校的老師。他的學生們經常抱怨找不到便宜好用的微控制器。2005年冬天, Massimo Banzi 跟David Cuartielles 討論了這個問題。David Cuartielles 是一個西班牙籍晶片工程師,當時在這所學校做訪問學者。兩人決定設計自己的電路板,並引入了Banzi 的學生 David Mellis 為電路板設計編程語言。兩天以後,David Mellis 就寫出了程式碼。又過了三天,電路板就完工了。這塊電路板被命名為Arduino。幾乎任何人,即使不懂電腦編程,也能用 Arduino 做出很酷的東西,比如對感測器作出回應,閃爍燈光,還能控制馬達。隨後Banzi,Cuartielles,和Mellis把設計圖放到了網上。保持設計 的開放源碼理念,因為版權法可以監管開源軟體,卻很難用在硬體上,他們決定採用創用CC許可。創用CC是為保護開放版權行為而出現的類似GPL的一種許可 (license)。在創用CC許可下,任何人都被允許生產電路板的複製品,還能重新設計,甚至銷售原設計的複製品。你不需要付版稅,甚至不用取得 Arduino 團隊的許可。然而,如果你重新發佈了引用設計,你必須說明原始Arduino 團隊的貢獻。如果你調整或改動了電路板,你的最新設計必須使用相同或類似的創用CC許可,以保證新版本的Arduino電路板也會一樣的自由和開放。唯一 被保留的只有Arduino這個名字。它被註冊成了商標。如果有人想用這個名字賣電路板,那他們可能必須付一點商標費用給 Arduino 的核心開發團隊成員。

test

test