實務專題報告書 -...

48
1 智慧型手機代替人機介面之機電控制研究 : 林助訓 專題製作學生: 四技電三甲 施孟呈 BD104011 四技電三甲 郭東穎 BD104034 中華民國 107 6 25 DEPARTMENT OF ELECTRICAL ENGINEERING HSIUPING UNIVERSITY OF SCIENCE AND TECHNOLOGY

Upload: others

Post on 14-Oct-2019

23 views

Category:

Documents


0 download

TRANSCRIPT

  • 1

    實 務 專 題 報 告 書 智慧型手機代替人機介面之機電控制研究

    指 導 老 師: 林助訓

    專題製作學生:

    四技電三甲 施孟呈 BD104011

    四技電三甲 郭東穎 BD104034

    中 華 民 國 1 0 7 年 6 月 2 5 日

    修 平 科 技 大 學 電 機 工 程 系

    DEPARTMENT OF ELECTRICAL ENGINEERING HSIUPING UNIVERSITY OF SCIENCE AND TECHNOLOGY

  • 2

    修 平 科 技 大 學 電機工程系

    HSIU-PING UNIVERSITY OF SCIENCE AND TECHNOLOGY

    DEPARTMENT OF ELECTRICAL ENGINEERING

    指導老師:林助訓

    專題製作學生:施孟呈、郭東穎

    製作日期:107 年 6 月 25 日

  • 3

    摘要

    鑑於傳統機電控制均使用按鈕開關或人機介面虛擬開關進行機電定位控制

    設備之運型或關閉,但目前市面上之人機介面體積大,彩色畫面價格成本

    高之缺點,由於現人人都有智慧型手機,本專題利用智慧型手機畫面代替

    傳統商用人機介面,可增加手機現有功能。首先使用智慧型手機麥克風接

    收使用者的語音命令,並進行語音辨識,識別出使用者的語音命令,再透

    智慧型手機之機電控制 APP 應用程式,將此語音操控命令藉由智慧手機與

    機電設備上加裝 Arduino Mega 2560 微控制器和藍芽裝置,接收手機傳送的

    藍芽訊息並解析其訊息所代表的動作為何,以達到使用手機控制機電設備

    的目的。

  • 4

    目錄 目錄 ................................................................................ 4

    圖目錄 ...................................................... 6

    一、構想 ................................................... 8

    1-1 開發動機 ................................................ 8

    1-2 開發目標 ................................................ 9

    1-3 開發內容 ................................................ 9

    二、工作原理 ............................................ 10

    三、硬體介紹 ............................................ 11

    3-1 BLE4.0 介紹 ............................................ 11

    3-2 光耦合器介紹 ........................................... 14

    3-3Arduino Mega 2560介紹 .................................. 17

    3-4 PLC小型高度選別機介紹 ................................. 19

    四、軟體介紹 ............................................ 22

    4-1 App inventor介紹 ...................................... 22

    4-2 Arduino 介紹 ........................................... 29

    4-3 Arduino 程式 ........................................... 31

    五、成品 .................................................. 41

  • 5

    六、結論 .................................................. 47

    七、參考文獻 ............................................ 48

  • 6

    圖目錄 圖 1-構想圖 ........................................................................................... 8

    圖 2-工作原理圖 ................................................................................. 10

    圖 3-BLE4.0 ......................................................................................... 13

    圖 4-光耦合器 ..................................................................................... 16

    圖 5-Arduino Mega 2560 ................................................................... 18

    圖 6-可程式控制器 ............................................................................. 20

    圖 7-小型高度選別機 ......................................................................... 21

    圖 8-App Inventor 控制介面 ............................................................ 23

    圖 9-App Inventor 控制介面 ............................................................ 24

    圖 10-App Inventor 控制介面 .......................................................... 25

    圖 11-App Inventor 程式 .................................................................. 26

    圖 12-App Inventor 程式 .................................................................. 27

    圖 13-App Inventor 程式 .................................................................. 28

    圖 14-成品圖 ....................................................................................... 41

    圖 15-第一站圖片 ............................................................................... 42

    圖 16-第二站圖片 ............................................................................... 43

    圖 17-第三站圖片 ............................................................................... 44

  • 7

    圖 18-第四站圖片 ............................................................................... 45

    圖 19-第五站圖片 ............................................................................... 46

  • 8

    一、構想 1-1 開發動機

    傳統機電控制均使用按鈕開關或人機介面虛擬開關進行電梯設備之運

    型或關閉,但目前市面上之人機介面體積大,彩色畫面價格成本高之缺點,

    由於現人人都有手機,如能用手機代替人機介面將增加手機現有功能。本

    專題計畫結合智慧型手機識別功能及藍芽技術,先對目前既有機電系統作

    先期的了解 , 然後實務操作對電梯系統進行控制。

    圖 1-構想圖

  • 9

    1-2 開發目標

    • 可以使系統配合使用者操作習慣。

    • 不管是任何背景的使用者都可以很清楚地知道系統可以幫他完成什

    麼事情。

    • 使用者可以清楚地知道系統如何一步一步地幫他達成他的需求。

    • 使用者可以清楚地預測系統會如何回應他的操作。

    • 使用者可以很簡潔地勾勒出與系統之間應該要有的互動方式。

    1-3 開發內容

    • 手機人機介面製作。

    • 手機藍芽與單晶片傳送、接收。

    • 數位、類筆資料之傳送與畫面轉換。

    • 可程式控制器程式撰寫

    • 軟體穩定度最佳化。

  • 10

    二、工作原理

    圖 2-工作原理圖

    Arduino 2560 Mega 開發版為核心,搭配 App Inventor、智慧型手機做結

    合,建立成一個人機介面透過 BLE 4.0 藍芽技術來去操作我們的機電整合

    系統。

  • 11

    三、硬體介紹 3-1 BLE4.0 介紹

    藍芽 4.0 BLE 的無線傳輸.省電及組網等特性,在物聯網的應用上有著

    很重要的角色,本模組除了藍芽本身的應用,可結合各種 RS232 設備,並

    進而可以結合 Android 4.3 的手機與 Apple 的手機藍芽連結做一些 APP 的

    應用。

    BLE4.0 特色:

    一項低功耗無線通信技術的國際標準。

    採用藍牙 4.0技術的設備可以使用鈕釦電池供電,並與其它藍牙設備連接。

    與傳統藍牙和無線網絡相比:功耗更低,連接速度更快。

    與 ZigBee 的技術相比:協議棧更簡單,抗干擾性能更好。

    與其他 2.4GHz的私有技術相比:通用性和互通性更好。

    現在的藍牙 4.0已經走向了商用,在最新款的智慧型手機與平板電腦上都

    已應用了藍牙 4.0技術。藍牙 4.0它支持兩種部署方式:雙模式和單模式。

    雙模式中,低功耗藍牙功能集成在現有的經典藍牙控制器中,或再在現有

    經典藍牙技術(2.1+EDR/3.0+HS)芯片上增加低功耗堆棧,整體架構基本不

    變,因此成本增加有限。單模式面向高度集成、緊湊的設備,使用一個輕

    量級連接層(Link Layer)提供超低功耗的待機模式操作、簡單設備恢復和

  • 12

    可靠的點對多點數據傳輸,還能讓無線感測網路應用中在藍牙傳輸中安排

    好低功耗藍牙流量的次序,同時還有高級節能和安全加密連接。

    可以同時支援基本速率及藍芽低功耗的裝置稱為雙模(dual-mode)裝

    置;基本上手機及桌上型電腦的藍芽系統都為雙模裝置。如果只支援藍芽

    低功耗的裝置稱為單模(single-mode)裝置,單模裝置一般都會使用在有電

    池使用壽命考量的裝置上,例如使用 CR2032 鈕釦電池(coin cell battery)

    的設備。

    https://www.seeedstudio.com/depot/bluetooth-40-low-energy-ble-mini-p-1366.html

  • 13

    圖 3-BLE4.0

  • 14

    3-2 光耦合器介紹

    光電耦合元件是以光(含可見光、紅外線等)作為媒介來傳輸電信號

    的一組裝置,其功能是平時讓輸入電路及輸出電路之間隔離,在需要時可

    以使電信號通過隔離層的傳送方式。光電耦合元件(英語:optical coupler,

    或英語:photo coupler),亦稱光耦合器、光隔離器以及光電隔離器,簡

    稱光耦。

    光電耦合元件可以在二個不共地的電路之間傳遞信號,二電路之間即

    使有高壓也不會影響。商用的光電耦合元件其輸入對輸出的耐壓可以到

    10 kV,而電壓變化率可以快到 10 kV/μs。

    光電耦合元件可分為類比與數位兩種,都是由光發射器和光偵測器組

    成。光發射器和光偵測器通常會整合到同一個封裝,但它們之間除了光束

    之外不會有任何電氣或實體連接。

    光耦合器一般由三部分組成:光的發射、光的接收及信號放大,輸入

    的電信號驅動光發射源,使之發光,被光探測器接收而產生光電流,再經

    過進一步放大後輸出。這就完成了電—光—電的轉換,從而起到輸入、輸

    出、隔離的作用。由於光耦合器輸入輸出間互相隔離,因而具有良好的電

    絕緣能力和抗干擾能力。又由於光耦合器的輸入端屬於電流型工作的低阻

    元件,具有很強的共模抑制能力。所以,它在長線傳輸資訊中作為終端隔

    https://zh.wikipedia.org/wiki/%E5%85%89https://zh.wikipedia.org/wiki/%E5%8F%AF%E8%A6%8B%E5%85%89https://zh.wikipedia.org/wiki/%E7%B4%85%E5%A4%96%E7%B7%9Ahttps://zh.wikipedia.org/wiki/%E9%AB%98%E5%8E%8Bhttps://zh.wikipedia.org/wiki/%E4%BC%8F%E7%89%B9https://zh.wikipedia.org/wiki/%E6%AF%AB%E7%A7%92https://zh.wikipedia.org/wiki/%E6%A8%A1%E6%93%AC%E4%BF%A1%E8%99%9Fhttps://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E4%BF%A1%E5%8F%B7https://zh.wikipedia.org/wiki/%E5%85%B1%E6%A8%A1%E6%8B%92%E6%96%A5%E6%AF%94

  • 15

    離元件可以大大提高信噪比。在電腦數位通信及即時控制中作為信號隔離

    的介面器件,可以大大增加其工作之可靠性。

    光耦合器的光發射源一般會是紅外線的發光二極體,將電能轉換為特

    定波長的光,在發射源及接收器之間會有封閉式的光通道(也稱為電介質

    通道),接收器是光感測器,感測特定波長的光,可能直接轉換成電能量,

    也可能由此信號調變外部電源提供的電流。接收器可以是光敏電阻、光電

    二極體、光電晶體、可控矽整流器(SCR)或 TRIAC。發光二極體除了發射

    光之外,也可以作為光感測元件,因此可以用發光二極體作光感測元件,

    即為對稱性雙向光耦合器。光耦合的固態繼電器其中由有光電二極體的光

    耦合器來驅動功率開關,一般是一對互補的 MOSFET。開槽光學開關包括光

    發射源及接收器,但其光通道有開口,若其他物體擋住開口,使光無法通

    過,則接收器產生的信號也會隨之變化。

    https://zh.wikipedia.org/wiki/%E7%B4%85%E5%A4%96%E7%B7%9Ahttps://zh.wikipedia.org/wiki/%E7%99%BC%E5%85%89%E4%BA%8C%E6%A5%B5%E9%AB%94https://zh.wikipedia.org/wiki/%E5%85%89%E6%84%9F%E6%B8%AC%E5%99%A8https://zh.wikipedia.org/wiki/%E8%AA%BF%E8%AE%8Ahttps://zh.wikipedia.org/wiki/%E5%85%89%E6%95%8F%E7%94%B5%E9%98%BBhttps://zh.wikipedia.org/wiki/%E5%85%89%E7%94%B5%E4%BA%8C%E6%9E%81%E7%AE%A1https://zh.wikipedia.org/wiki/%E5%85%89%E7%94%B5%E4%BA%8C%E6%9E%81%E7%AE%A1https://zh.wikipedia.org/wiki/%E5%85%89%E9%9B%BB%E6%99%B6%E9%AB%94https://zh.wikipedia.org/w/index.php?title=%E5%8F%AF%E6%8E%A7%E7%9F%BD%E6%95%B4%E6%B5%81%E5%99%A8&action=edit&redlink=1https://zh.wikipedia.org/w/index.php?title=TRIAC&action=edit&redlink=1https://zh.wikipedia.org/wiki/%E5%9B%BA%E6%85%8B%E7%B9%BC%E9%9B%BB%E5%99%A8https://zh.wikipedia.org/wiki/MOSFEThttps://zh.wikipedia.org/w/index.php?title=%E9%96%8B%E6%A7%BD%E5%85%89%E5%AD%B8%E9%96%8B%E9%97%9C&action=edit&redlink=1

  • 16

    圖 4-光耦合器

  • 17

    3-3Arduino Mega 2560 介紹

    Arduino Mega 2560是一款基於 ATmega2560(datasheet)的微控制器板。

    它有 54個數位輸入/輸出引腳(其中 15 個可用作 PWM 輸出)、16 個模擬輸

    入、4個 UART(硬體序列埠)、1 個 16 MHz晶體震盪器、1 個 USB 連接、1

    個電源插座、1個 ICSP頭和 1 個重置按鈕。它包含了支持微控制器所需的

    一切;只需通過 USB 線將其連至電腦或者通過 AC-DC適配器或電池為其供

    電即可開始。Mega與向 ArduinoDuemilanove或 Diecimila 的擴充板大多都

    相容。

    Mega 2560是 Arduino Mega的更新版本。Mega2560與先前的所有電路

    板都不同,因為它未使用 FTDI USB轉串口驅動器晶片。它反而將 Atmega16U2

    編制成 USB 轉串口轉換器。

  • 18

    圖 5-Arduino Mega 2560

  • 19

    3-4 PLC 小型高度選別機介紹

    可程式邏輯控制器(Programmable Logic Controller,簡稱 PLC),

    一種具有微處理器的數位電子裝置,用於自動化控制的數位邏輯控制器,

    可以將控制指令隨時載入記憶體內儲存與執行。可程式控制器由內部 CPU,

    指令及資料記憶體、輸入輸出單元、電源模組、數位類比等單元所模組化

    組合成。PLC 可接收(輸入)及發送(輸出)多種型態的電氣或電子訊號,

    並使用他們來控制或監督幾乎所有種類的機械與電氣系統。

    最初的可程式化序邏輯控制器只有電路邏輯控制的功能,所以被命名

    為可程式邏輯控制器,後來隨著不斷的發展,這些當初功能簡單的電腦模

    組已經有了包括邏輯控制,時序控制、模擬控制、多機通訊等許多的功能,

    名稱也改為可程式控制器(Programmable Controller),但是由於它的簡

    寫也是 PC 與個人電腦(Personal Computer)的簡寫相衝突,也由於多年

    來的使用習慣,人們還是經常使用可程式邏輯控制器這一稱呼,並在術語

    中仍沿用 PLC 這一縮寫。

    在可程式邏輯控制器出現之前,一般要使用成百上千的繼電器以及計

    數器才能組成具有相同功能的自動化系統,而現在,經過編程的簡單的可

    程式邏輯控制器模組基本上已經代替了這些大型裝置。可程式邏輯控制器

    https://zh.wikipedia.org/wiki/%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8https://zh.wikipedia.org/wiki/%E8%87%AA%E5%8A%A8%E6%8E%A7%E5%88%B6https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%94%B5%E8%B7%AFhttps://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%94%B5%E8%B7%AFhttps://zh.wikipedia.org/wiki/CPUhttps://zh.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0https://zh.wikipedia.org/wiki/%E9%9B%BB%E6%B0%A3https://zh.wikipedia.org/w/index.php?title=%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6&action=edit&redlink=1https://zh.wikipedia.org/w/index.php?title=%E6%97%B6%E5%BA%8F%E6%8E%A7%E5%88%B6&action=edit&redlink=1https://zh.wikipedia.org/w/index.php?title=%E6%A8%A1%E6%8B%9F%E6%8E%A7%E5%88%B6&action=edit&redlink=1https://zh.wikipedia.org/wiki/%E9%80%9A%E4%BF%A1https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%A8%8B%E5%BC%8F%E6%8E%A7%E5%88%B6%E5%99%A8https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8

  • 20

    的系統程式一般在出廠前已經初始化完畢,用戶可以根據自己的需要自行

    編輯相應的用戶程式來滿足不同的自動化生產要求。

    現在工業上使用可程式邏輯控制器已經相當接近於一台輕巧型電腦所

    構成,甚至已經出現整合個人電腦(採用嵌入式作業系統)與 PLC 結合架

    構的可程式自動化控制器(Programmable Automation Controller,簡稱

    PAC),能透過數位或類比輸入/輸出模組控制機器裝置、製造處理流程及

    其他控制模組的電子系統。可程式邏輯控制器廣泛應用於目前的工業控制

    領域。在工業控制領域中,PLC 控制技術的應用已成為工業界不可或缺的一

    員。

    圖 6-可程式控制器

    https://zh.wikipedia.org/wiki/%E5%80%8B%E4%BA%BA%E9%9B%BB%E8%85%A6https://zh.wikipedia.org/wiki/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9Fhttps://zh.wikipedia.org/wiki/%E5%8F%AF%E7%A8%8B%E5%BC%8F%E8%87%AA%E5%8B%95%E5%8C%96%E6%8E%A7%E5%88%B6%E5%99%A8

  • 21

    圖 7-小型高度選別機

  • 22

    四、軟體介紹 4-1 App inventor 介紹

    Android 作業系統是一個以 Linux 為基礎的開放原始碼作業系統,中

    文俗稱 為「安卓」,其起源最早是在西元 2003 年由安迪魯賓(Andy Rubin)

    所開發製 作,目前由 Google 公司成立的開放手持設備聯盟 Open Handset

    Alliance(OHA) 來持續開發主導

    App Inventor 是 Google 所提供的 Android 開發環境,目前版本為第

    二版(Beta),只要有 Google 帳戶皆可免費使用。

    App Inventor使用拼塊程式 (Blocky) 來撰寫,以圖像方式來呈現讓

    程式初學者能夠更快上手,同時了解程式設計的脈落及邏輯架構。

    App Inventor所開發的程式可以直接在 Android 手機上執行,也可以安裝

    Android模擬器在電腦上執行。

    MIT App Inventor 2 網站提供雲端服務,讓我們可以免費使用其提供

    的強大功能,來設計 Android 裝 置上的 App 應用程式,完成作品後還可

    以上傳到 Google Play 商店,提供給大眾 下載使用。

  • 23

    圖 8-App Inventor 控制介面

  • 24

    圖 9-App Inventor 控制介面

  • 25

    圖 10-App Inventor 控制介面

  • 26

    圖 11-App Inventor 程式

  • 27

    圖 12-App Inventor 程式

  • 28

    圖 13-App Inventor 程式

  • 29

    4-2 Arduino 介紹

    Arduino 是一家製作開源電腦硬體和軟體的公司,同時兼有專案和用戶

    社群,他負責設計和製造單板微控制器和微控制器套件,用於構建數字裝

    置和互動式物件,以便在物理和數字世界中感知和控制物件。 該專案的產

    品是按照 GNU 寬通用公共許可證(LGPL)或 GNU通用公共許可證(GPL)[1] 許

    可的開源硬體和軟體分發的,arduino 允許任何人製造 Arduino板和軟體分

    發。 Arduino 板可以以預裝的形式商業銷售,也可以作為自己動手(DIY)

    套件購買。

    Arduino 電路板設計使用各種微處理器和控制器。這些電路板配有一組

    數字和模擬輸入/輸出(I/O)引腳,可以連線各種擴充功能板或麵包板(遮

    蔽板)和其他電路。 這些電路板具有串行通訊介面,包括某些型號上的通

    用序列匯流排(USB),也用於從個人電腦載入程式。 微控制器通常使用

    來自程式語言 C 和 C ++的特徵的方言進行編程。 除了使用傳統的編譯工具

    鏈之外,Arduino專案還提供了一個基於 Processing 語言專案的整合式開

    發環境(IDE)。

    Arduino 專案始於 2003 年,作為義大利伊夫雷亞地區互動設計研究所

    Ivrea的學生專案,目的是為新手和專業人員提供一種低成本且簡單的方法,

    https://zh.wikipedia.org/wiki/Arduino#cite_note-1

  • 30

    以建立使用傳感器與環境相互作用的裝置執行器。 適用於初學者愛好者的

    此類裝置的常見範例包括簡單機器人,恆溫器和運動檢測器。

    Arduino 的程式語法基於 C/C++, 其實就是客製化的 C/C++ 語言,

    其程式架構仿自廣為藝術與設計界人士熟悉的 Processing 語言, 而其開

    發工具 Arduino IDE 則是衍生自以 Processing 為基礎的電子開發設計平

    台 Wiring. 由於 Processing IDE 使用 Java 撰寫, 因此 Arduino IDE

    有自帶一個 JRE. Processing 語言撰寫的程式稱為 Sketch (草稿碼), 乃

    是簡化後之 Java 語法, 經 IDE 編譯變成可執行的 Java 類別, 而

    Arduino IDE 則是以 Processing IDE 為架構, 但是採用了 C/C++ 語法。

    https://en.wikipedia.org/wiki/Processing_%28programming_language%29https://en.wikipedia.org/wiki/Wiring_%28development_platform%29

  • 31

    4-3 Arduino 程式 //------------------------------------------------------------------------------ // Title:BLE41_LED_RGB_BZ // Firmware:BLE41_LED_RGB_BZ // Devices:NanoKIT + OLED + LED + RGB LED +Buzzer +CC2541(BLE) // Function: OK //UpDate:2016/11/11 //--------BLE--------------------------------------------- #include SoftwareSerial myBLE(A1, A2); // RX, TX /#define myBLE Serial3 //-------Declare-OLED---------------------------------------------------- //#include //OLED myOLED; //-------Declare-LED1W-MD1------------------------------------------------- #define Lamp1 31 #define Lamp2 33 #define Lamp3 35 #define Lamp4 37 #define Lamp5 39 #define Lamp6 41 #define Lamp7 43 #define Lamp8 45 #define LED 13 //----------Declare-RGB LED WS2812Driver ---------------------------------- #include "FastLED.h" #define LED_PIN A0 #define NUM_LEDS 3 #define BRIGHTNESS 64 CRGB leds[NUM_LEDS]; #define UPDATES_PER_SECOND 100 CRGBPalette16 currentPalette; TBlendType currentBlending;

  • 32

    extern CRGBPalette16 myRedWhiteBluePalette; extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM; //-------Declare- Buzzer -------------------------------------------------- #define buzzerPIN A3 // CN4 set Buzzer pin A3 //-------Declare-KEY--------------------------------------------- #define KEY1 2 #define KEY2 12 int BZState=0; int LEDState=0; int RGBState=0; int DemoFunc=0; char fsgRGB='D'; void setup() { pinMode(Lamp1,OUTPUT); pinMode(Lamp2,OUTPUT); pinMode(Lamp3,OUTPUT); pinMode(Lamp4,OUTPUT); pinMode(Lamp5,OUTPUT); pinMode(Lamp6,OUTPUT); pinMode(Lamp7,OUTPUT); pinMode(Lamp8,OUTPUT); //-------Setup-ED1W-MD1--------------------------------------------- pinMode(LED, OUTPUT); digitalWrite(Lamp1,HIGH);digitalWrite(Lamp2,HIGH);digitalWrite(Lamp3,HIGH); digitalWrite(Lamp4,HIGH);digitalWrite(Lamp5,HIGH);digitalWrite(Lamp6,HIGH); digitalWrite(Lamp7,HIGH);digitalWrite(Lamp8,HIGH); digitalWrite(LED, HIGH) ;delay(500);digitalWrite(LED, LOW) ;delay(1000);digitalWrite(LED, HIGH) ;delay(500); digitalWrite(LED, LOW) ; //-------Setup-FastLED--------------------------------------------- delay(100); // power-up safety delay FastLED.addLeds(leds,

  • 33

    NUM_LEDS).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; SET_RGB(1 ,'D');SET_RGB(2 ,'D');SET_RGB(3 ,'D'); //-------Setup-set OLED FONT_8x16 --------------------------------------------- // myOLED.begin(FONT_8x16); //FONT_6x8 , FONT_8x16 // myOLED.clearScreen(); // myOLED.println("BLE41_LED_RGB_BZ");

    // myOLED.println("Dev:NanoBLExx"); ////自訂 BLE 裝置訂編號

    //============================================== pinMode(buzzerPIN, OUTPUT); digitalWrite(buzzerPIN, LOW); // turn the BUZZER off by making the voltage LOW //-------Setup-KEY--------------------------------------------- pinMode(KEY1, INPUT_PULLUP); pinMode(KEY2, INPUT_PULLUP); //========SETUP BLE============================================== myBLE.begin(9600); //myBLE.begin(115200);

    BLE_setName("NanoBLExx"); //自訂 BLE 裝置訂編號

    Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { String uartRead=""; if (myBLE.available()) { // read the most recent byte (which will be from 0 to 255): uartRead = myBLE.readString() ; ///////////////////////// if( uartRead[0] == '1') { digitalWrite(Lamp1,LOW); delay(500);

  • 34

    digitalWrite(Lamp1,HIGH); } if( uartRead[0] == '2') { digitalWrite(Lamp2,LOW); delay(500); digitalWrite(Lamp2,HIGH); } if( uartRead[0] == '3') { digitalWrite(Lamp3,LOW); delay(500); digitalWrite(Lamp3,HIGH); } if( uartRead[0] == '4') { digitalWrite(Lamp4,LOW); delay(500); digitalWrite(Lamp4,HIGH); } if( uartRead[0] == '5') { digitalWrite(Lamp5,LOW); delay(500); digitalWrite(Lamp5,HIGH); } if( uartRead[0] == '6') { digitalWrite(Lamp6,LOW); delay(500); digitalWrite(Lamp6,HIGH); } if( uartRead[0] == '7') { digitalWrite(Lamp7,LOW); delay(500); digitalWrite(Lamp7,HIGH); } if( uartRead[0] == '8') { digitalWrite(Lamp8,LOW); delay(500); digitalWrite(Lamp8,HIGH); }

  • 35

    // set the brightness of the LED: // myOLED.setPosi(4,0); // myOLED.print("CMD:"); // myOLED.println(uartRead); Serial.println(uartRead); switch(uartRead[0]) { case 'D': if(uartRead[1]=='L') Flash_LED(uartRead[2]-0x30, 1000); else if(uartRead[1]=='S') Flash_LED(uartRead[2]-0x30, 200); else if(uartRead[1]=='O') LEDState=1; else if(uartRead[1]=='F') LEDState=0; else { int duty=(uartRead[1]-0x30)*100+(uartRead[2]-0x30)*10+(uartRead[3]-0x30); analogWrite(LED, duty); } break; case 'B': if(uartRead[1]=='L') Beep(uartRead[2]-0x30, 1000); if(uartRead[1]=='S') Beep(uartRead[2]-0x30, 200); if(uartRead[1]=='O') BZState=1; if(uartRead[1]=='F') BZState=0; break; case 'W': if(uartRead[3]=='L') Flash_RGB(uartRead[1]-0x30,uartRead[2],uartRead[4]-0x30 ,1000);

  • 36

    else if(uartRead[3]=='S') Flash_RGB(uartRead[1]-0x30,uartRead[2],uartRead[4]-0x30,200); else if(uartRead[3]=='O') { RGBState=uartRead[1]-0x30;fsgRGB=uartRead[2]; } else if(uartRead[3]=='F') RGBState=0; else if(uartRead[1]=='A') { SET_RGB(1,uartRead[2]); SET_RGB(2,uartRead[2]); SET_RGB(3,uartRead[2]); } else SET_RGB(uartRead[1]-0x30, uartRead[2]); delay(500); break; case 'T': TrafficLight(uartRead[1]-0x30, uartRead[2]-0x30,uartRead[3]-0x30); break; } delay(1000); // delay in between reads for stability } //=============================================== if(BZState==1) Beep(1, 200); //=============================================== if(LEDState==1) Flash_LED(1, 200); //=============================================== if(RGBState!=0) Flash_RGB(RGBState,fsgRGB,1,200); // Read Key Send String int BnState = digitalRead( KEY1); if(BnState==0)

  • 37

    { delay(500); // delay in between reads for stability if(DemoFunc>8) DemoFunc=1; else DemoFunc=DemoFunc+1; // myOLED.setPosi(6,0); // myOLED.print("Send: S"); // myOLED.println(DemoFunc); } BnState = digitalRead( KEY2); if(BnState==0) { delay(500); myBLE.print("S"); myBLE.println(DemoFunc); } //============================================ if (Serial.available()) { uartRead = Serial.readString() ; // set the brightness of the LED: // myOLED.setPosi(6,0); // myOLED.println(uartRead); myBLE.println(uartRead); } } void SET_RGB(int m, char c) { m=m-1; if(c=='R') leds[m] = CRGB::Red; if(c=='G') leds[m] = CRGB::Green; if(c=='B') leds[m] = CRGB::Blue; if(c=='Y') leds[m] = CRGB::Yellow; if(c=='W') leds[m] = CRGB::White; if(c=='D') leds[m] = CRGB::Black; FastLED.show();

  • 38

    } void Flash_RGB(int m, char c, int n, int finv) { int i; SET_RGB(m, 'D'); for(i=0;i

  • 39

    digitalWrite(LED, LOW); delay(finv); } } void Beep(int n, int finv) { int i; for(i=0;i

  • 40

    // BLE module get mac myBLE.write(0xAA); myBLE.write(0xED); myBLE.write(0xBB); delay(100); // BLE module set name myBLE.write(0xAA); myBLE.write(0xE3); myBLE.write(0x5A); len=strlen(blename); for(i=0;i

  • 41

    五、成品

    圖 14-成品圖

  • 42

    圖 15-第一站圖片

  • 43

    圖 16-第二站圖片

  • 44

    圖 17-第三站圖片

  • 45

    圖 18-第四站圖片

  • 46

    圖 19-第五站圖片

  • 47

    六、結論 本作品實現了機電定位控制系統,以價格低廉且實用的 Arduino 2560

    Mega開發版為核心,搭配 App Inventor、BLE 4.0 藍芽技術、智慧型手機、

    雲端資料庫及物聯網技術,經過實際測試與評估驗證,已初步達成預期的

    成效取代了傳統人機介面價格昂貴操作不易,達成了降低成本以及淺顯易

    懂的操作,物聯網應用將成為 21 世紀引導全球經濟發展和社會進步的重要

    產業,涵蓋範圍非常廣泛,預估未來商機無限。

  • 48

    七、參考文獻 http://s90304a123.pixnet.net/blog/post/43179931-%E8%97%8D%E7%89%994.

    0-ble (BLE4.0 介紹)

    https://zh.wikipedia.org/wiki/%E5%85%89%E9%9B%BB%E8%80%A6%E5%

    90%88%E5%85%83%E4%BB%B6 (光耦合器介紹)

    http://www.playrobot.com/arduino-board/9-arduino-mega-2560.html (Arduino

    Mega 2560 介紹)

    http://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=2782 (Arduino 基

    本介紹)

    https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%BC%96%E7%A8%8B%E9

    %80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8 (PLC介紹)

    http://blog.whsh.tc.edu.tw/app-inventor/?p=3 (App Inventor2 介紹)

    http://im.thu.edu.tw/upload/news_upload/Inventor%E4%BB%8B%E7%B4%B9

    %E5%92%8C%E4%BD%BF%E7%94%A8.pdf (App Inventor2 使用方式)

    http://s90304a123.pixnet.net/blog/post/43179931-%E8%97%8D%E7%89%994.0-blehttp://s90304a123.pixnet.net/blog/post/43179931-%E8%97%8D%E7%89%994.0-blehttps://zh.wikipedia.org/wiki/%E5%85%89%E9%9B%BB%E8%80%A6%E5%90%88%E5%85%83%E4%BB%B6https://zh.wikipedia.org/wiki/%E5%85%89%E9%9B%BB%E8%80%A6%E5%90%88%E5%85%83%E4%BB%B6http://www.playrobot.com/arduino-board/9-arduino-mega-2560.htmlhttp://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=2782https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8http://blog.whsh.tc.edu.tw/app-inventor/?p=3http://im.thu.edu.tw/upload/news_upload/Inventor%E4%BB%8B%E7%B4%B9%E5%92%8C%E4%BD%BF%E7%94%A8.pdfhttp://im.thu.edu.tw/upload/news_upload/Inventor%E4%BB%8B%E7%B4%B9%E5%92%8C%E4%BD%BF%E7%94%A8.pdf

    DEPARTMENT OF ELECTRICAL ENGINEERINGHSIUPING UNIVERSITY OF SCIENCE AND TECHNOLOGY目錄圖目錄一、構想1-1開發動機1-2開發目標1-3開發內容

    二、工作原理三、硬體介紹3-1 BLE4.0介紹3-2光耦合器介紹3-3Arduino Mega 2560介紹3-4 PLC小型高度選別機介紹

    四、軟體介紹4-1 App inventor介紹4-2 Arduino介紹4-3 Arduino程式

    五、成品六、結論七、參考文獻