Arduino Class 1 主講人: 鄧偉華、孫振凱 國家高速網路計算中心
Outline 一、Arduino 開發板介紹。 二、感測器介紹。 三、建立開發環境。 四、數位信號輸入、輸出控制。 五、類比信號輸入、輸出控制。 六、透過 UART 與 PC 交換資料。
Arduino 開發板介紹 Arduino hardware+ Arduino software + Open Source platform / forum
Arduino 與傳統 MCU 開發差別 傳統開發 Arduino 開發時程 長 短 所需設備 多且貴 便宜(just USB) 語言難度 易 Debug tool 強大 無
Arduino Starter Kit Price
Arduino Duemilanove/UNO Boards Diecimila Ethernet Boduino Nano LilyPad Mega
Arduino Duemilanove/UNO Shields GSM Ethernet WiFi Motor RS485
Arduino Duemilanove / UNO Digital I / O [0-13] USB SIO [0-1] DC [7-12] [6-20] ATMEGA 328 RESET
Arduino Duemilanove/UNO Analog output [3,5,6,9,10,11] Pin 13 LED TX/RX LED Power LED Analog input [0-5]
Arduino 相容板 TX/RX LED 5V Digital 對應腳位 GND Analog 對應腳位
Arduino Duemilanove/UNO Microcontroller ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 16 KB (ATmega168) or 32 KB (ATmega328) of which 0.5 KB used by bootloader SRAM 1 KB (ATmega168) or 2 KB (ATmega328) EEPROM 512 bytes (ATmega168) or 1 KB (ATmega328) Clock Speed 16 MHz
感測器介紹 開關:按鍵開關、繼電器、敲擊、傾斜、觸摸。 光電轉換:光敏電組、紅外線、光遮斷、避障、尋線、PIR。 壓電、磁力轉換:壓電元件、麥克風。 氣體偵測元件:CO2/CO 氣體感測器。 溫度轉換:熱敏電組。 位移轉換:3G sensor。 馬達:伺服馬達、步進馬達。 測距:紅外線、超音波
建立開發環境 http://arduino.googlecode.com/files/arduino-0022.zip Step 1:取得 Arduino。 Step 2:下載 Arduino software並解壓縮。 http://arduino.googlecode.com/files/arduino-0022.zip Step 3:插入 USB B-type plug。 Step 4:安裝 FTDI USB driver \arduino-1.0.2\drivers
查出 Arduino 使用的 port 「我的電腦」按右鍵,選內容。 選「硬體」標籤。 選「裝置管理員」。
查出 Arduino 使用的 port 點開「連接埠(COM 和 LPT)。 尋找「USB Serial Port COMXX」。
執行Arduino software 執行arduino.exe。 點兩下
選擇你所使用的板子: 「Tools」→「Board」→「Arduino Duemilanvo or Nano w/ ATmega328」
選擇你所使用的 Port: 「Tools」→「Serial Port」→「COM7」
Arduino software介面 Varify 驗證程式碼 有無錯誤 Serial Monitor 觀察 Serial port 傳輸的資料 Stop 停止驗證或 燒錄程式碼 New 開啟新的程式 Open 開啟舊的程式 Save 將程式存檔 Upload 將程式燒錄至 Arduino
Arduino software介面 編輯的檔名 及 引入的函式庫 程式編輯區 狀態回報 顯示編譯情形 及錯誤訊息
第一個程式 讓 PIN 13 的 LED 一閃一閃亮晶晶。
載入程式碼 File → Examples → Basics → Blink
Verify
Upload
Uploading Arduino 相容板 TX/RX持續閃爍 Arduino UNO TX/RX持續閃爍
Uploading 完成 LED持續閃爍
程式解說 只執行一次,初始化 重複執行 int led = 13; // 將LED 腳立設為13 void setup() { pinMode(led, OUTPUT); // 將 LED 設為 OUTPUT } void loop() { digitalWrite(led, HIGH); // 將 LED 輸出 HIGH(5V) delay(1000); // 等待 1000 ms digitalWrite(led, LOW); // 將 LED 輸出 LOW(0V) 只執行一次,初始化 重複執行
麵包板介紹breadboard
數位信號介紹(Digital Signal)
數位信號輸入、輸出控制 pinMode(pin, mode) digitalWrite(pin, value) digitalRead(pin)
數位信號輸(出)入 pinMode(pin, mode):設定 pin 腳的數位輸出mode 為(OUTPUT) 或數位輸入(INPUT)。 Example: pinMode(2, OUTPUT); pinMode(4, INPUT);
數位信號輸(出)入 digitalWrite(pin, value):設定 pin 腳的 value為 HIGH 或 LOW。 Example: digitalWrite(2, HIGH); digitalWrite(4, LOW);
數位信號輸(出)入-練習1 一、點亮1顆 LED,1秒後關閉。 ●、○ 二、點亮5顆 LED,1秒後關閉。 ●●●●●、○○○○○ 三、讓七段顯示器顯示一個數字。
數位信號輸(出)入-練習1 一、材料:使用 LED 及 300歐姆電阻。 二、材料:使用 LED組 及排阻。
數位信號輸(出)入-練習2 用最少的指令寫出霹靂車前面的掃描燈。 ●●○○○○、○●●○○○、○○●●○○、○○○●●○、 ○○○○●●、○○○●●○、○○●●○○、○●●○○○、 ●●○○○○
數位信號輸(出)入-練習2 一、材料:使用 LED 及 300歐姆電阻。 二、材料:使用 8組LED 及排阻。
數位信號輸(出)入 digitalRead(pin):讀取 pin 腳的 value為 HIGH 或 LOW。 Example: int val = digitalRead(2);
數位信號輸(出)入-練習3 一、使用按鍵開關,按一下點亮 LED,再按一下關 閉 LED。 二、使用按鍵開關,使七段顯示器輪流顯示0~9位 數。 三、使用指撥開關,讀取開關的狀態,並將結果顯 示在對應的 LED。 四、使用指撥開關,使七段顯示器顯示對應數字。
數位信號輸(出)入-練習3 一、材料:使用 LED 及 300歐姆電阻。 二、材料:使用 8組LED 及排阻。
類比訊號介紹(Analog Signal)
類比信號輸入、輸出控制 analogWrite(pin, value) int analogRead(pin)
類比信號輸(出)入 analogWrite(pin, value):設定 pin(3,5,6,9,10,11) 腳的 value為 0 ~255。 Example: analogWrite(3, 100); analogWrite(4, 200);
類比信號輸(出)入-練習1 一、使用 LED 顯示紅、綠、藍。 二、使用 LED 顯示出彩虹的彩色。
類比信號輸(出)入-練習1 一、材料:使用 RGB LED 。
類比信號輸(出)入 AnalogRead( pin ):設取 analog pin(0,1,2,3,4,5) 腳的電壓值(0~ 5V),並回傳整數值(0~1024) Example: analogRead(0); 0V 5V 讀取電壓 1024 回傳值
類比信號輸(出)入-練習2 一、讀取溫度感測器的數值,並以10顆LED表示讀取的值 ,精度為100。 二、分別設取X-Y軸搖桿類比資料,並以10顆LED表示讀 取的值,精度為100。 三、使用光敏電阻讀取亮度。 Led 顆數 代表數值 6 501~600 1 0~100 7 601~700 2 101~200 8 701~800 3 201~300 9 801~900 4 301~400 10 901~1023 5 401~500
類比信號輸(出)入-練習2 一、材料:使用溫度感測器 。 二、材料:使用X-Y軸搖捍、LED。 三、材料:光敏電阻、15K歐姆電阻。
透過 UART 與 PC 交換資料 UART
透過 UART 與 PC 傳送資料 void setup() { Serial.begin(9600); // 設定鮑率為9600 } void loop() Serial.println( analogRead(0) );// 將 analog pin 0 傳至 PC delay(200);
讀取 Serial port 資料 設定 Serial port Baud rate
透過 UART 接收資料 int led = 13; int val; void setup() { Serial.begin(9600); // 設定鮑率為9600 } void loop() if (Serial.available() ) // 如果 UART 有資料? val = Serial.read(); // 讀取 UART 資料 Serial.println(val);
透過 UART 送收資料 輸入資料 傳送資料 接收資料
透過 UART 接收資料-練習1 一、將按鍵開關狀態傳回PC。 二、將指撥開關狀態傳回PC。 三、將光敏電阻狀態傳回 PC 四、將X-Y軸搖捍狀態傳回PC。
透過 UART 接收資料-練習2 一、輸入數字1~8,並點亮相同數量之 LED。 二、輸入數字1~8,並點亮相同數量之 LED組,並使 用File → Examples → Digital → toneMelody及蜂鳴 器發出聲音。 三、輸入數字0~9,並將結果顯示在七段顯示器
IR 紅外線傳輸 Infrared transfer: 產生 700nm 以上的紅外線波長。
IR 紅外線傳輸 Infrared Receiver:Input 37.5KHz~38.5KHz 紅外線脈衝。 10K Ω SINGL GND 5V
練習產生38KHz 脈衝 byte pin = 12; void setup() { pinMode(pin, OUTPUT); } void loop() digitalWrite(pin, HIGH); // 填入程式碼 digitalWrite(pin, LOW);
練習接收紅外線訊號 提示:Infrared Receiver 會將收到的紅外線轉為數 位訊號由 single 傳回。
練習 如何使用現有的東西控制 LED 開關。 透過 Arduino 本身的 I/O pin。 透過 PC 控制。
透過 Xbee 傳送資料 透過 UART 傳輸 XBee GND 5V OUT IN XBee GND 5V OUT IN USB
Reference http://arduino.cc