星期日, 3月 17, 2013

Arduino筆記(六):紅綠燈號誌

[2013/03/17]
學了兩個多星期的Arduino,都是照著練習的範例做,今天下午跟Max在看前幾個實驗時,他就出了一個功課給我,要我做紅綠燈號控制,心想應該不難,於是找了三個不同顏色的LED燈,接到三個Pin腳,應該就可以做到了。於是就自己動手接。
剛完成時,竟然Pin腳設定為低電壓(LOW)時會亮,高電壓(HIGH)反而熄滅,一定是接錯了,於是重新檢查一次,才知道接地的腳接到+5V的電壓,重新調整後就好了。以下是實際執行的照片及線路圖。


[材料]

• 麵包板 x 1
• Arduino Uno x 1
• LED 紅色 x1、黃色x1、綠色x1、
• 220K電阻 x 3
• 連接線 x N條

[接線]

將LED的一端接地,另一端接220K電阻,電阻的另一端分別接Pin3,4,5代表紅黃綠。


[程式]

/*  Traffic Lights.*/

// 設定紅黃綠燈Pin 值
  int LEDRed = 3;
  int LEDYellow = 4;
  int LEDGreen = 5;
  
void setup() {                
  pinMode(LEDRed, OUTPUT);     
  pinMode(LEDYellow, OUTPUT);     
  pinMode(LEDGreen, OUTPUT);
}

void loop() {
  digitalWrite(LEDRed, LOW);     // 綠燈
  digitalWrite(LEDYellow, LOW);
  digitalWrite(LEDGreen, HIGH);
  delay(7000);      //等待7秒鐘

  digitalWrite(LEDRed, LOW);   // 黃燈
  digitalWrite(LEDGreen, LOW);
  digitalWrite(LEDYellow, HIGH);
  delay(2000);     //等待2秒鐘

  digitalWrite(LEDYellow, LOW);
  digitalWrite(LEDGreen, LOW);
  digitalWrite(LEDRed, HIGH);   // 紅燈
  delay(5000);     //等待5秒鐘    

}
Share:

Arduino筆記(五):使用可變電阻控制伺服馬達

[2013/03/17]
透過可變電阻,控制伺服馬達的轉向。

伺服馬達(Servo Motor)是可以提供動力的一種裝置,可藉由程式來控制速度和方向,伺服馬達內部包括了一個小型直流馬達伺服馬達、一組變速齒輪組、一個反饋可調電位器及一塊電子控制板。標準的微型伺服馬達有三條控制線,通常為紅色(+5V電源)、黑色(接地)及黃色或橘色(控制用, 連接至Arduino pin9)。由於我是在網站買實習的相容套件,這個伺服馬達的三條線顏色不太一樣,不過沒關係,總是離不開電源和控制兩類。

本實驗多接上一個可變電阻,控制伺服馬達的轉向。


[材料]

 麵包板 x 1
 Arduino Uno x 1
 伺服馬達 (Servo Motor) x 1
 10k 可變電阻 x 1
 連接線 x N條

[接線]

伺服馬達有三條線,紅線接電源+5V、黑線接GND,訊號線接Pin 9,可變電阻的中間接腳接到A0,作為類比數值讀取。


[程式]

// 引用 Servo Library
#include  

//建立一個伺服馬達控制物件 
Servo myservo; 

int potpin = 0;   //該變數用於存儲用電位器讀出的模擬值
int val;               // 該變數用於儲存伺服馬達角度位置 

void setup() 
{ 
myservo.attach(9);   // 由Pin 9控制伺服馬達
} 

void loop() 
{ 
val = analogRead(potpin);   //讀取電位器控制的模擬值 (範圍在0-1023) 
val = map(val, 0, 1023, 0, 179);   // 把0-1023的數值按比例縮放為0-180的數值

myservo.write(val);  // 指定伺服馬達轉向的角度 
delay(15);  // 等待15ms讓伺服馬達到達指定位置 
}


[參考資料]

• Arduino Learning:Examples > Servo Library

Share:

Arduino筆記(四):在2x16 LCD上顯示 Hello World訊息

[2013/03/16]
練習使用HD44780相容(或稱1602)液晶顯示 LCD(Liquid crystal display),在2x16的顯示幕印出"Hello World", 並測量可變電阻的數值,也同時學習使用analogRead()函式及LiquidCrystal Library。

執行結果如下圖:


[1602顯示器接腳說明]

LCD顯示器若無背光則會有14個Pin,若有背光則會有16個,而接腳位置大多如下:
------------------------------------
1 VSS (接地)
2 VDD (5V電源輸入)
3 VO 或稱 Vee:調整對比,需接一個1k的可變電阻
4 Register Select(RS):1: D0 – D7 當作資料解釋,0: D0 – D7 當作指令解釋
5 READ/WRITE(RW): 1: 從 LCD 讀取資料,0: 寫資料到 LCD
6 Enable
7 DB0
8 DB1
9 DB2
10 DB3

11 DB4
12 DB5
13 DB6
14 DB7
15 A(+) 背光:可接330 Ohm電阻到電源
16 K(-) 背光:接地
------------------------------------

看過一些HD44780相容的範例,Arduino對LCD的控制有兩個重要的Library,一個是LiquidCrystal,另一個是LCD4Bit,LCD4Bit是改良自LiquidCrystal,所以也提供了較多有趣的function及控制,最重要的是LCD4Bit使用的接腳較少,且可以控制多行顯示。使用 4-bit 模式主要的好處是節省 I/O 腳位,通訊的時候只會用到 4 個高位元 (D4-D7)。

[材料]

•麵包板 x 1
•Arduino 主板 x 1
•HD44780 相容 LCD x 1 (本實驗使用 16 pin 有背光 LCD)
•旋轉式可變電阻 x 1
•單心線 x N條


[接線圖]

• 將 LCD 的 RS(4), Enable(6), D4(11), D5(12), D6(13), D7(14) 依序接到 12, 11, 5, 4, 3, 2 腳位
• 將 LCD 的 VSS(1) 及 R/W(5) 接到 GND,VDD(2)接到 +5V
• 可變電阻中間腳位接到 LCD 的 VO,其中一支接到 5V,另外一支接 GND (註:或是在VO 上串接一顆 1k ohm 電阻連到 GND)


[實驗結果]

• analogRead()這個函式讀取的值是 10 bit,也就是一個位於0到1023之間的值
• analogRead()大約每秒鐘讀取10,000次
• LCD顯示的數值會一直改變,因為會受其他是否有類比輸入以及手是否靠近版子有關等


[程式]

/* 在2x16的顯示幕印出"Hello World", 並測量可變電阻的數值
 * This example code is in the public domain.
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * 10K Potentiometer:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3) */

// 引用 LiquidCrystal Library
#include 



// 建立 LiquidCrystal 的變數 lcd
// LCD 接腳: rs, enable, d4, d5, d6, d7 
// 對應到 Arduino 接腳: 12, 11, 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
 // 設定 LCD 的行列數目 (2 x 16)
 lcd.begin(16, 2);

 // 設定類比串列速率
Serial.begin(9600);

 // 列印 "Hello World" 訊息到 LCD 上
lcd.print("hello, world!");
}

void loop() {
 // 將游標設到 column 0, line 1, (注意: line 1 是第二行(row),因為是從 0 開始數起)
lcd.setCursor(0, 1);

// 列印 Arduino 重開之後經過的秒數
// lcd.print(millis()/1000);

// 讀取A0的類比值
int sensorValue = analogRead(A0);

// 將類比的數值顯示在第二列
lcd.print(sensorValue);

// 顯在一份資料是視窗上

Serial.println(sensorValue);
  delay(2000);     // delay in between reads for stability
}


[參考資料]

Copper Maa Blog:Arduino 筆記 – Lab9 在 2x16 LCD 上顯示 "Hello World" 訊息
Arduino webSite:Examples > Libraries > LiquidCrystal


Share:

星期六, 3月 16, 2013

Arduino筆記(三 ):Arduino主程式與電路繪圖軟體

[2013/03/16] 原創
[2017/03/10] 最後更新
幾年後再度使用Arduino,官方網站已經提供 Web 版的 IDE 介面,可以到官方網站申請一個帳號,登入後,瀏覽器下載 plug-in,安裝完成後,即可開始使用Web IDE編輯 Arduino程式。

[Arduino IDE主程式]

軟體下載(官方網站下載 www.arduino.cc/en/Main/Software)

下載的arduino主程式是一個壓縮檔,解開後目錄內有arduino.exe (以Windows為例),只要執行該程式,就會打開主視窗,下圖為開啟程式後的畫面:



有兩個重要地方要設定,才能正常將程式燒錄到單晶片上:
● 主機板的種類 (在功能表[工具Tools] ➔ [開發板Board] 設定 )
● 連接Arduino主機板的Port (請參考 Arduino筆記(二):Arduino基本介紹 說明)。

設定完成後,就可以開始寫程式了。在程式撰寫區上方有五個按鍵,說明如下圖:


右上角有一個類似放大鏡的圖案,游標移至放大鏡時,左方會出現Serial Monitor,這個按鍵會打開一個視窗,將串列字元顯示在這個視窗內。

安裝完成後,要設定兩件事:一是 Arduino 開發板的名稱,另一件是設定使用的序列埠 Port 是否正確。如果都設定正確後,就可以開始撰寫程式了。

[Fritzing 電路繪製軟體]

「Fritzing」,這套軟體不只提供一個擬真的麵包板,可以讓你將實際麵包板的接線線路,完整的複製到此擬真的麵包板上儲存。除此之外,Fritzing 還會將此麵包板上所接的零件畫出線路圖及 PCB Layout 圖。下圖主程式畫面及16x2 LCD連接的線路圖,左方是工作區,右方有各種不同的電子元件,如電阻、電容及發光二極體等圖案。



軟體下載位置:http://fritzing.org/download/

如果要新增元件,可以到以下網址搜尋相關元件:
http://code.google.com/p/fritzing/issues/list

[2017/03/10] 上述網址已經移到:https://github.com/fritzing/

只要在元件區按右鍵,選擇 Import,再選擇檔案,即可將該元件匯入Fritzing。

[參考資料]

  Arduino.cc
Share:

星期五, 3月 15, 2013

Arduino筆記(二):Arduino介紹

[2013/03/14]
最後更新日:[2017/03/09]

過了四年,再回頭來看以前整理的資料,覺得自己好像成熟一些,覺得以前整理的文章,很生澀,也不夠齊全,因此想找時間,再補充或重新實做以前做過的實驗,甚至提出一些不同的想法,就從這篇文章開始修訂。

[Arduino簡介]

如果 Google一下 Arduino會發現已經有很多文章介紹他了,在此我們就參考一下維基百科的說明:Arduino,是一個開放原始碼的單晶片微控制器,它使用了Atmel AVR單片機,採用了開放原始碼的軟硬體平台,建構於簡易輸出/輸入(simple I/O)介面板,並且具有使用類似Java、C語言的Processing/Wiring開發環境。 [維基百科]
Arduino UNO r3版正面

 
來源:Arduino.cc

當然啦, Arduino不是只有 Uno一個版本,危機百科列了一張圖,有不同型號,不同大小與形狀,如果有興趣的可以自行 Google 一下相關介紹。

Arduino 是開放式的硬體,其線路圖也是公開的,如有興趣可到以下網站下載檔案:
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

 硬體規格:
 微控制器  ATmega328
 運作電壓  5V
 輸入電壓 (建議) 7 -12V
 輸入電壓 (限制)  6-20V
 數位 I/O Pins   14 (其中六個Pins 提供PWM輸出)
 3, 5, 6, 9, 10
11 共六支腳
 類比輸入 Pins  6
 I/O Pin直流電流  4 0 mA
 3.3V Pin直流電流   50 mA
 Flash 記憶體  32 KB (ATmega328) 其中 0.5 KB
 用於 bootloader
 SRAM  2 KB (ATmega328)
 EEPROM  1 KB (ATmega328)

來源: http://arduino.cc/en/Main/ArduinoBoardUno

電源:可使用USB或外部電源。

 VIN  當使用外部電源時,輸入電壓給Arduino版,可透過這個Pin腳提供電壓
 5V  該腳輸出5V的穩定電源,該板可提供(7-12V)直流電源,USB接口(5V)
 3.3V  產生3.3伏的電源板上穩壓器。最大電流消耗為50mA
 GND  接地引腳
 IOREF 提供Arduino板的參考電壓


數位 I/O Pins (0~13):共計14 支數位 I/O Pins,可以當作 input或 output 使用。利用 pinMode(), digitalWrite(), digitalRead() 等函式存取。其中幾支腳有特殊的功能:

 串列通訊  0(RX) 1 (TX) 用來接收(RX)與傳輸(TX) TTL訊號的序列資料。這
 兩支腳也連接到ATmega8U2USB串列晶片
 外部中斷  2 和 3 這兩支腳可以利用低電壓觸發外部中斷,請參考 attachInterrupt()
 PWM  (前置~符號) 3, 5, 6, 9, 10,11六支腳。透過 analogWrite()函式可提供 8-bit PWM 輸出
 SPI  10(SS), 11(MOSI), 12(MISO), 13(SCK)這四支腳搭配 SPI Library 可提供SPI 序列通訊
 LED  13。內建一顆 LED連接該Pin,當 pin腳為HIGH 時,LED亮,當 pin腳為 LOW時,LED關閉

I/O PWM:脈衝寬度調變(Pulse Width Modulation)說明請參閱:維基百科

類比輸入Pins (A0~A5):共計六個類比輸入,每支腳都可提供 10 位元的解析 (即 1024 種不同的數值)。預設電壓是0~5V,可透過 AREF 腳和 analogReference() 函式更改。
TWI A4或SDA引腳和A5或SCL引腳。支援TWI通信使用的Wire Library

其他:

AREF  類比輸入的參考電壓,使用 analogReference()函式
Reset 設定為LOW時,重新啟動,通常會有一個按鍵

USB電流負載過大保護:
Arduino UNO有一個POLYFUSE,當電流過大時,可以保護USB裝置。如果超過500 mA時,保險絲會自動斷開連接,直到短路或過載被移除。

[安裝Arduino驅動程式]

當Arduino連接電腦,出現需要安裝驅動程式時,需注意以下事項:


將路徑指定 "arduino-1.0.x\drivers" 這個資料夾


驅動程式安裝完成之後,在「裝置管理員」會多出一個 "Arduino UNO (COMx)" 的裝置,屆時打開Arduino主程式後,需要設定連接至此COMx Port。

[參考資料]

  Arduino.cc
Share:

星期二, 3月 12, 2013

Arduino筆記(一):緣起-- 巧遇Arduino

[2013/03/12]
從學校唸書開始,自動控制一直是我的興趣,能夠透過程式控制電器或開關,是多麼有趣的一件事。退伍回來,憑藉著學校學的程式語言,開始找相關的工作,十幾年來,都跟程式設計、資料庫離不開關係。在一個偶然的機會下負責專案,竟也成了後來主要的工作內容,心裡總還懷抱著一份想要學習自動控制的好奇心。剛開始時學8051,因為不夠專注,工作也忙(這是藉口),只學到一點皮毛,加上自己不是電子本科系畢業的學生,要瞭解這些電子的特性,更是摸不著頭緒,更別說要做出一些實用的作品來。

知道Arduino這個開放原始碼的硬體組件,是在今年一月底的台北書展,意外發現一本動手做電子相關的作品的雜誌 Make,已經出版到第六冊,就一次購買六本,再加訂一年份。Make雜誌教人如何動手做一些有創意的作品,有些需要搭配電子器材,有些則純粹是手工作品。就在翻閱時,看到Arduino這個名詞,看了相關介紹後,直覺這就是學習自動控制的入門關鍵。

當然,我也在過年後,在拍賣網站買了一個Arduino Uno及一些實習用的零件,如LCD、步進馬達、紅外線遙控等實驗設備,以後也會陸續在此紀錄我的學習心得與筆記。



由於Arduino是開放式硬體,網路上有很多介紹的文章或作品,都很值的參考。以下列出我常造訪的網站,希望對入門想學習的人有點幫助。



Arduino :http://www.arduino.cc/
Arduino 台灣:http://arduino.tw/
Cooper Maa的筆記:http://coopermaa2nd.blogspot.tw/
由RS Components 拍攝的Arduino入門套件中文字幕影片系列
極客工坊:http://www.geek-workshop.com/forum.php

如果你想買Arduino及擴充套件,可以在拍賣網站搜尋,應可找到您要的。

Share: