2014年6月17日 星期二

燒錄 Arduino mini Pro 燒錄

    Arduino Mini Pro 算是Uno的縮小板,使用上也沒太大變化,可以注意的是,市面上可能分為有幾個版本16Mhz、8Mhz就連電壓也會有5V、3.3V,但我這邊使用的是5V-16Mhz,工作於3.3V的時候也是可以正常工作,
 
 該有的腳位也都拉出來了,這塊mini上面還有A4~A7,網路上有些比較精簡的版本就沒有這4pin。
  

接下來介紹燒錄方法,需要準備一組USB to TTL轉換,有RX/TX就可以了, 將
mini RX->TTL TX
mini TX->TTL RX
mini VCC->TTL VCC
mini GND->TTL GND
接妥後,開啟自己的CODE,這邊用範例Blink測試,按下上傳後,等出現Uploading...這時候,立刻馬上,按下mini的 Reset,成功後就會將CODE Upload上去了。

 手腳太慢就會出現下面這畫面
 網路上還有領外一個使用Uno對燒的方式,也是相同原理,只是Reset是接Uno板子上的Reset這樣就不用手去按他了。






2014年6月11日 星期三

趴趴走 RV-3 DIY 改造

最近入手一台掃地機器人,因為很便宜的關係,使用起來機器人也非常癡呆,沒關係,有他的軀體就好,他的靈魂就自己用Arduino來改。
電路主板部份,也只有這部份了,整體看來不複雜,加上機器人的模式判斷與走路的癡呆樣子,MCU沒做太多的判斷選擇。

電路板背面。

整台主機,只有用一個碰裝Sensor,元件是使用光遮斷器做判斷,應該是為了耐久度,並且用彈簧帶開光遮斷。

 需要加強的地方:
 1.走路方式需要急救
 2.吸力不足,需改馬達與葉片

總共使用三個馬達:
1.側面的掃把
2.吸灰塵用
3.走路用
前兩個基本上不用在做判斷,所以我們要控制的只有走路用的。

預計使用arduino mini 搭配超音波 + 馬達控制板就可以完成了。

2014年6月10日 星期二

Arduino 課本可能沒教的事(1)

  相信有用過Arduino的人都會知道,在一個開發板上的IO腳,有分為"數位腳"、"類比輸入",也就是板子上場看到的數字0~13與A0~A5,在比較常見的教材中,往往很少提到A0~A5腳位的使用方式,正常都是說明,如何在上面接上一個可變電阻,在由可變電阻調整電壓進入類比輸入端,再有數位腳輸出對應的亮度,重點來了,因為這樣可能有些人認為A0~A5"只能"做類比的事情,但這些類比腳,亦可拿來當數位腳使用,可以從下圖看到,A0~A5於粉紅色區塊標示為14~19,代表其實該腳位要用於數位時,它的編號,而MEGA版本也是相同道理,數位腳由53之後轉為,A0=54、A1=55…以此類推,總而言之,這樣UNO版本腳位其十就很多,足以供一般專案使用。

2014年6月6日 星期五

SI4432 搭配Arduino

        前陣子從購入兩片si4432模組,拿來搭配arduino使用,傳輸效果算是相當不錯,訊號從1樓可以打到5F,由於已經作成模組化了,使用上也不會太困難,但需要同時接收/發射,所提供的範例是不夠用的。

        Arduino&si4432連接方法,由於Si4432工作電壓用的是3.3V,所以建議以CD4050做電位轉換, 但我測試的時候,是使用arduino mini pro ,工作電壓直接接上3.3V所以沒有在做轉換,要使用5V的MCU則需要加,如果不怕燒掉的話也是可以直接上。




arduino mini pro
si4432


library則是使用RF22
http://www.airspayce.com/mikem/arduino/RF22/
檔案中包含了基本的範例,可以直接使用。






2014年5月1日 星期四

Arduino 交流電功率調整

最近在測試110V功率調整,透過外部觸發與內部65微秒觸發中斷來切割弦波的波型,使其達到功率調整的方式。


 參考連結:

http://forum.arduino.cc/index.php?PHPSESSID=1mlmloei1vpish99327r5gfol0&topic=22512.15



















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