Arduino使用入門 建國科技大學 資管系 饒瑞佶.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

LinkIt ONE開發板的簡介.
題目:十六對一多工器 姓名:李國豪 學號:B
Arduino課程 DHT11溫濕感測 中部自造者基地-雲科大.
智慧電子應用設計導論(1/3) Sensor-II
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
LINQ 建國科技大學 資管系 饒瑞佶.
物聯網實務 大仁科技大學 資訊工程與娛樂科技系 李文禮.
Arduino 基本知識.
智慧電子應用設計導論(1/3) Sensor-III
Q101 在701 SDX Linux上的標準安裝與使用程序v2
內容:串列傳輸 實作:Arduino to PC 、 Arduino to Arduino 簡報:廖崇義
多功能智慧家庭萬能手機搖控器 張右昇( ) 李政澤( ) 曾群翔( ) 成員.
动手玩转Arduino (三) 串口输入输出
102年度新北市立三重商工旗艦計畫實施方案 先進車用電子控制技術培育計畫
第1章 認識Arduino.
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
Working with Databases (II) 靜宜大學資管系 楊子青
    Arduino 1602 LCD 量測電壓顯示 LCD 示波器    林品成 月.
Arduino.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
第十讲 TCP协议 协议概述 报文段格式 差错控制 流控和拥塞控制 TCP连接管理 TCP性能问题 TCP软件设计 2018/12/7
Windows 2003 server 進階介紹 麋鹿.
安裝JDK 安裝Eclipse Eclipse 中文化
Echo Server/Client Speaker:Fang.
智慧電子應用設計導論(1/3) Display
內容:2*16LCD & AnalogKeyPad 實作:LCD 顯示 ,KeyPad control 簡報:廖崇義
自動化課程 劉聖元.
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
第5單元 實習1 ilon10 setup.
DHT11 溫溼度感測器 林品成 月.
近代物理实验期末报告 ——by 金宵 周逸卢
第二組 體重計連接wifi 組員:S 羅翊甄 S 江德輝 S 江鴻儀 S 陳彥任.
第一單元 建立java 程式.
VS.NET 2003 IDE.
類比轉數位 IC研究 組員:施怡儒 S 柯曄新 S 張久藝 S
App Inventor 2初體驗 靜宜大學資管系 楊子青
Web Server 王宏瑾.
Arduino課程 RFID 中部自造者基地-雲科大.
    使用Arduino量測交流(AC)電壓    林品成 月.
    使用Arduino量測直流(DC)電壓    林品成 月.
6-1 功能簡介 6-4 實驗成果 6-2 電路說明 6-5 延伸應用與練習 6-3 程式設計
Pocket Access.
TA教育訓練 微處理機系統實習.
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
讓Emulator可以 使用Android Market
語法:結構 實作:Analog in (VR、光敏+七段顯示電壓) 簡報:廖崇義
實驗目的: 明瞭DHCP運作原理 建置DHCP伺服器
IIS Internet Information Services
VS.NET 2003 IDE.
SOCKET( ).
物聯網期末報告 組員: 邱景柏 方嘉慶 陳約翰 洪銘陽
Arduino互動設計 教學課程 本教材僅用於學術教學 請勿用在商業行為.
2019/5/3 JAVA Socket(UDP).
崑山科技大學 微處理機應用暨實習(一) 講師:曹永忠 日期:105學年度第二學期
取得與安裝TIDE 從TIBBO網站取得TIDE
Arduino課程 液晶1602 中部自造者基地-雲科大.
Dreamweaver 進階網頁製作 B 許天彰.
ZigBee PRO教學系統 CC2530 實驗.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
專案建置與封裝程式 建國科技大學 資管系 饒瑞佶.
班級:博碩子一甲 授課老師:鐘國家 助教:陳國政
第五章 序列埠通訊 並列與序列通訊簡介 認識序列埠 認識字元資料類型 字串資料類型 從序列埠監控視窗觀察變數 從Arduino接收序列資料
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
多國語系 建國科技大學 資管系 饒瑞佶.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
Unix指令4-文字編輯與程式撰寫.
Presentation transcript:

Arduino使用入門 建國科技大學 資管系 饒瑞佶

何謂Arduino? 義大利團隊設計開發 2005.10.1第一批 快速開發prototype: artists、designers、 hobbyists OPEN SOURCE 軟體+硬體+社群 Arduino HOME https://www.arduino.cc/

Arduino能做什麼? 簡單易入門的控制器 可以連接感測器,取得外界的訊號,例如溫度與濕度 可以進行簡易的運算與邏輯判斷 可以對外輸出訊號,進行控制

Arduino架構_軟體_OPEN魅力 開放IDE軟體原始碼,可針對底層做修改。 相同軟體平台,透過OPEN,快速累積應用範例。 玩家、廠商提供多元函式庫

Arduino https://www.arduino.cc/

Open的結果 出現一系列Arduino相關類似產品 Appsduino Arduino Yun…

Arduino架構_硬體 數位I/O腳 類比輸入腳 供電系統 電源輸出 數位 I/O腳位:D0~D13 雙供電系統 10Bit解析度 類比訊號輸入 A0~A5 三種電源輸出供應 Vin、5V、3.3V

數位/類比/輸入/輸出 數位輸出 DO 數位輸入 DI 類比輸入 AI 類比輸出 A0 多數是電壓訊號 再轉成人可以懂的訊號

監控 監視 AI或DI 控制 AO或DO

Arduino架構_硬體_OPEN魅力 Arduino不生產周邊硬體不綁死周邊裝置價格平實 周邊裝置搭配arudino腳位開發 硬體電路開放,可自行製作與開發 這些週邊通常被稱為Shield

擴充Shield MP3播放板 SD卡模組 WIFI模組 GPRS模組 AV端子顯示模組 COLOR LCD模組 CAN BUS模組 RFID模組 MIDI 訊號模組

我們用的是Arduino UNO 直接從USB供電

感測器與線材 杜邦線 麵包板

下載IDE http://arduino.cc/en/Main/Software/ 目前1.x版 (Windows installer-包含usb driver與IDE)

確認驅動程式安裝完成 裝置管理員

Integradted Development Environment 整合開發環境 Arduino IDE Integradted Development Environment 整合開發環境

啟動Arduino IDE

載入範例程式Blink Blink程式會控制Arduino板上的LED產生明滅的效果

Blink專案開啟畫面 Arduino專案是.ino或.pde檔案

Arduino IDE 功能選項區 程式編輯區 編譯訊息區 錯誤訊息區

檔案偏好設定

主要快速功能選項 編譯確認程式是否正確? 上傳程式到Arduino 開新專案視窗 監看程式執行情形

請先確定Arduino UNO硬體已經正確透過USB連接到電腦上 開始前 請先確定Arduino UNO硬體已經正確透過USB連接到電腦上

開始使用IDE 步驟1、選擇對應的硬體設備型號

開始使用IDE 步驟2、選擇連結的通訊埠(port)位置

結果

驗證Verify

執行Blink Upload

Arduino上的黃燈持續閃爍 腳位13

程式碼解說 程式說明

Arduino專案程式架構 Setup() 啟動設定區 Loop() 循環執行區

基本語法 與C語法類似 註解: // 或 /* 多行註解 */ 程式結束需要加上; 程式沒有自動提示的功能

只會執行1次 啟動或reset時 設定腳位腳色為OUTPUT 定義使用腳位

重複執行 開LED 關LED

練習1 透過Arduino控制LED明滅 使用2顆LED 分別接在PIN11(D11)與PIN12(D12) 使用程式控制兩顆輪流間隔2秒做明滅 - +

紅綠燈? 黃燈先閃3次 接著亮紅燈 最後亮綠燈

Serial Monitor 監看執行狀態

使用Serial Monitor監看程式執行狀態 需要設定傳輸速率Baudrate 使用以下指令輸出到監視視窗 Serial.print:輸出後不換行 Serial.println:輸出後換行 Serial就相當於把實際硬體轉成虛擬軟體可以處理的物件

範例 從Serial Monitor輸入文字 Arduino收到後轉成ASCII顯示出來

程式 轉換後的ASCII CODE 設定傳輸速率 檢查監視通訊通道是否開啟成功 讀取輸入值 轉換成ASCII CODE輸出

結果

DHT11溫溼度

DHT11 Digital in

code #include <dht.h> #define dht_dpin 2 //定義訊號要從Pin D2 進來 dht DHT; // 從dht.h建立一個名稱為DHT的軟體物件來代表實際感測器 void setup(){ Serial.begin(9600); delay(300); //延遲3秒 Serial.println("Humidity and temperature\n\n"); delay(700); } void loop(){ DHT.read11(dht_dpin); //使用DHT物件的read11方法讀取還境的溫溼度 Serial.print("Humidity = "); Serial.print(DHT.humidity); Serial.print("% "); Serial.print("temperature = "); Serial.print(DHT.temperature); Serial.println("C "); delay(1000); //每1s更新一次

dht.h函式庫 https://github.com/adafruit/DHT-sensor-library 我們只需要透過引入include方式來使用就可以

練習2 透過溫度控制LED明滅 使用1顆LED與DHT11溫濕度感測器 LED接在PIN11(D11) 使用程式控制 - +

Arduino LCD HD44780

LCD HD44780 2x16 LCD 可以顯示兩行訊息,每行 16 個字元 背面已經焊接好一片 LCM1602 IIC V1 控制板,可以使用 IIC(I2C)來控制 LCD 顯示器 不支援中文字

接線 LCM1602 IIC V1 控制板有 I2C 的四個針腳,分別為 GND、VCC、SDA 與 SCL,用杜邦線全部接出來

接線 VCC 接到 5V,GND 接到 GND,SDA 接到 A4,SCL 接到 A5

開始前 安裝 LiquidCrystal 函式庫,下載之後解壓縮到 Arduino 的 libraries 目錄中即可 https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

CODE 宣告 #include <Wire.h> // Arduino IDE 內建 // LCD I2C Library,從這裡可以下載: // https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads #include <LiquidCrystal_I2C.h> // Set the pins on the I2C chip used for LCD connections: // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址 有些會用0X3F

CODE void setup() { Serial.begin(9600); // 用於手動輸入文字 lcd.begin(16, 2); // 初始化 LCD,一行 16 的字元,共 2 行,預設開啟背光 // 閃爍三次 for(int i = 0; i < 3; i++) { lcd.backlight(); // 開啟背光 delay(250); lcd.noBacklight(); // 關閉背光 } lcd.backlight(); // 輸出初始化文字 lcd.setCursor(0, 0); // 設定游標位置在第一行行首 lcd.print("Hello, world!"); delay(1000); lcd.setCursor(0, 1); // 設定游標位置在第二行行首 lcd.print("CTUIM"); delay(3000);

CODE void loop() { // 當使用者手動輸入訊息 if (Serial.available()) { // 等待一小段時間,確認資料都接收下來了 delay(100); // 清除舊訊息 lcd.clear(); // 讀取新訊息 while (Serial.available() > 0) { // 將訊息顯示在 LCD 上 lcd.print(Serial.read()); }

整合DHT11溫濕度感測器、藍芽程式與LCD 練習4 整合DHT11溫濕度感測器、藍芽程式與LCD 平常將溫溼度值顯示到LCD上 只要藍芽有接收到資料,就顯示到LCD上 需要使用麵包板

Arduino Ethernet https://www.arduino.cc/en/Tutorial/WebClient

Ethernet Shield http://www.techbang.com/posts/25109-future-of-humanity-through-network-monitoring-internet-home-brightness

記得 上傳完程式都要 重新啟動Ethernet Shield

Arduino as client #include <SPI.h> #include <Ethernet.h> // Enter a MAC address for your controller below. // Newer Ethernet shields have a MAC address printed on a sticker on the shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // if you don't want to use DNS (and reduce your sketch size) // use the numeric IP instead of the name for the server: //IPAddress server(120,109,32,19); // numeric IP for Google (no DNS) char server[] = "www.google.com"; // 要連結的網站domain name (using DNS) // 設定IP,這裡使用DHCP的IP IPAddress ip(192, 168, 1, 14); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 80 is default for HTTP): EthernetClient client; // client物件,負責連結server

void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // start the Ethernet connection: Ethernet.begin(mac, ip); //Ethernet.begin(mac); //直接透過DHCP取得IP //Serial.println(Ethernet.localIP()); //取得分配的ip // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); // if you get a connection, report back via serial: if (client.connect(server, 80)) { Serial.println("connected"); // Make a HTTP request: client.println("GET /search?q=arduino HTTP/1.1"); client.println("Host: www.google.com"); client.println("Connection: close"); client.println(); } else { // if you didn't get a connection to the server: Serial.println("connection failed");

void loop() { // if there are incoming bytes available // from the server, read them and print them: if (client.available()) { char c = client.read(); Serial.print(c); } // if the server's disconnected, stop the client: if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); // do nothing forevermore: while (true);

Arduino as Server 瀏覽器打入此IP,會顯示ananlog A0 ~ A5 的數值 #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,14); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80);

void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP());

// listen for incoming clients void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply 判斷是否有client連著Arduino 讀取client送到Arduino的http要求

if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); // output the value of each analog input pin for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog input "); client.print(analogChannel); client.print(" is "); client.print(sensorReading); client.println("<br />"); } client.println("</html>"); break; 判斷是否http要求已經結束 如果http request已經傳送完成 Arduino就將資料回傳到client的瀏覽器

// you're starting a new line currentLineIsBlank = true; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); 看到\n表示http request完成 http request尚未完成

Arduino Socket

Arduino Socket 可以與其他支援Socket的設備/軟體溝通,例如另一台Arduino 需要設定IP與port

Arduino as Socket Server #include <SPI.h> #include <Ethernet.h> // network configuration. gateway and subnet are optional. // the media access control (ethernet hardware) address for the shield: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //the IP address for the shield: byte ip[] = { 192, 168, 1, 12 }; // the router's gateway address: byte gateway[] = { 10, 0, 0, 1 }; // the subnet: byte subnet[] = { 255, 255, 0, 0 }; // telnet defaults to port 1001 EthernetServer server = EthernetServer(1001);

void setup() { Serial.begin(9600); // initialize the ethernet device //Ethernet.begin(mac, ip, gateway, subnet); Ethernet.begin(mac, ip); // start listening for clients server.begin(); } void loop() // if an incoming client connects, there will be bytes available to read: EthernetClient client = server.available(); server.write("i am server"); // 輸出 if (client.available()) { char c = client.read(); // 接收來自client的資料 Serial.print(c);

測試連線

使用ASP.NET實作

傳送 private void SocketSend() { const string ipAddressString = "192.168.11.12";// replace with correct IP address IPAddress ipAddress = IPAddress.Parse(ipAddressString); const int portNum = 1001;// replace with correct port IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, portNum); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(remoteEndPoint); string sendString = TextBox1.Text; byte[] bytes = Encoding.UTF8.GetBytes(sendString.ToString()); client.Send(bytes); client.Shutdown(SocketShutdown.Both); client.Close(); }

接收 可以加入Timer定時接收資料 private void ReceiveData() { const string ipAddressString = "192.168.11.12";// replace with correct IP address IPAddress ipAddress = IPAddress.Parse(ipAddressString); const int portNum = 1001;// replace with correct port IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, portNum); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(remoteEndPoint); byte[] receiveBuffer = new byte[3000]; client.Receive(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None); string bufferString = Encoding.GetEncoding("utf-8").GetString(receiveBuffer); LabelData.Text = "GET:" + bufferString; client.Shutdown(SocketShutdown.Both); client.Close(); } 可以加入Timer定時接收資料

練習 PIN9接上一顆LED 透過ASP.NET+Socket來控制Arduino的LED明滅 傳送的命令為1時,點亮LED 同時將Arduino狀態回傳ASP.NET