先進四軸研究計画
 Advanced Quad-copter Research Project
 學校: 大安高工
 組長: 楊博洋

 組員: 王瑞霆

杜宏霖

林岳

林仕祥
 指導老師: 張顯盛
目錄
 前言
 團隊成員
 甘特圖
 硬體架構圖
 程式流程圖
 硬體介紹
 軟體介紹
 影片展示
 問題與瓶頸
 結論
前言
 飛行器從發明以來,不斷地在提升效率與機動性,目前渦輪動
力機因為速度和乘載量上的優勢,成為空中運輸的霸主;然而
在機動性和對地形的適應力上則無法跟「四軸飛行器」相提並

論。話雖如此,四軸若真的運用在民生上,其耗費的動力及操
作上的困...
前言
 在觀賞一些資深玩家所做的飛行影片時,千萬別產生「看起來
好簡單、好有趣」的念頭,畢竟在DIY的過程中,他可是一
台每分鐘將近一萬轉的血滴子,不過正因為如此,我們才要謹

慎的從事每次的測試,透過不斷的調整,將牠馴服呈穩定乖巧
的寵物!...
團隊成員
班級

子三甲

1.電子學與實習
2.基本電學與實習
曾修習
專業科目

參與專

3.數位邏輯與實習

題工作

4.計算機概論
5.Visual Basic
6.Innobasci
7.Altium Desinger 09

項...
團隊成員
姓名

杜宏霖

班級

子三甲
1.

1.電子學與實習
2.基本電學與實習
3.數位邏輯與實習
曾修習

參與專
題工作

4.微處理機與實習

專業科目 5.電子電路與實習
6.程式設計實習
7.單板電腦實習
8.電路繪圖實習
...
團隊成員
姓名

王瑞霆

班級

子三甲

1.

Android 遙控程式設計

1.電子學與實習

2.

Arduino控制程式設計

2.基本電學與實習

3.

APM2.5飛行數據校正

3.數位邏輯與實習

參與專 4.

溝通...
團隊成員
姓名

林仕祥

班級

子三甲

1.電子學與實習
2.基本電學與實習
3.數位邏輯與實習
曾修習

4.微處理機與實習

專業科目 5.電子電路與實習
6.程式設計實習
7.單板電腦實習
8.電路繪圖實習
1.101年工業電子丙級...
團隊成員
姓名

林岳

班級

子三甲
1.

1.電子學與實習
2.基本電學與實習
3.數位邏輯與實習
曾修習

4.微處理機與實習

專業科目 5.電子電路與實習
6.程式設計實習
7.單板電腦實習
8.電路繪圖實習

經歷簡介 1.10...
甘特圖
週次 二 暑
(日期) 下 假
期 期
工作項目
末 間
目標訂定
★
資料蒐集
★
硬體規劃組裝
★
★
動力系統測試
★
APM2.5飛控板
投入實際飛行
APM2.5飛控板
信號探索與量測
Android客戶端
程式撰寫
Ardu...
硬體架構圖
Android程式流程圖
硬體介紹
 Android 手機
Android是一個以Linux為基礎的開放原始碼作業系統。
 Android之優點
 媒體支援
Android系統本身支援多種的音訊、影片、圖片格式,例如MP3、
MIDI、FLAC、WAV、JPEG、...
硬體介紹
 藍芽模組
藍芽技術最早是由愛立信公司(Ericsson)創製。是一種低功耗、低
成本無線通訊連線技術。現今,藍芽的應用範圍非常廣泛,從手機資料交
換、印表機、耳機、鍵盤滑鼠等周邊設備都是使藍芽的技術。

藍芽的標準是IEEE 80...
硬體介紹
 Ardupilot 2.5 (APM2.5)
由3DR Robots公司針對航空模型所開發的控制板,內建
三軸加速度計、陀螺儀、電子羅盤,還可以外掛GPS模組和
OSD模組(包含連線狀態、電壓狀況及各種環境數值),本實
驗利用它來...
硬體介紹
 Ardino DUE
Arduino是一個開放原始碼的單晶片微電腦,使用Atmel 8-bit AVR

微控制器。其最大的特色是Arduino可以與各式各樣的電子原件、模組做連
接,如IR(紅外線)、光敏電阻,伺服馬達、超音波或...
硬體介紹
 ARM架構
ARM架構過去稱作進階精簡指令集機器(Advanced
RISC Machine,是一個32位元精簡指令集(RISC)處理器架
構,目前廣放應用在嵌入式系統,包含智慧型手機、硬碟機、
數位電視和機上盒,目前AMD宣布將...
硬體介紹
 無刷馬達
無刷馬達顧名思義即是「沒有電刷的馬達」。由於沒有
與軸承直接摩擦力,在高速且長時間的運轉下,較不會產生熱、
噪音及磨損,不論體積、效率、安全性都優於一般有刷馬達;
但在製作、控制上也顯得困難許多,價格也較為昂貴。目前廣
...
硬體介紹
 電子變速器(Electric Speed Controler , ESC)
由於馬達需要大電流才能啟動,所以不能跟控制電路用
相同的電源,再者,控制電路與馬達中間需要有一個「PWM數
位訊號與單純的電」的轉換橋梁,一般模型來說,如...
軟體介紹
 Arduino IDE
Arduino IDE (Integrated Development Environment)是
Arduino官方開發的一個綜合開發環境,並且使用Java語言撰寫,
所以擁有跨平台的特性。ˇ
程式語言方...
軟體介紹
 Eclipse
eclipse是一款原由IBM公司開發的JAVA「開源綜合開發
環境(IDE)」,其特點在於豐富的外掛模組,使得eclipse具有較
佳的靈活性,是一款主流的Android手機程式開發軟體。
起初IBM開發ecli...
軟體介紹
 Mission Planner
與APM飛控板作搭配的規劃軟體,可以即時顯示所接收到
的油門狀態和三軸加速度計、陀螺儀、電子羅盤所傳回的狀態,
規劃需要的啟動、飛行模式及各種參數調整,如果接上GPS模
組,甚至讓飛行器能完成自動點...
實驗設計


我們利用示波器得知遙控器接收器會送給飛行控制板一
個周期為22ms,脈波寬度為1~2ms的PWM訊號,因次我們必
須利用Arduino製作出一個周期為22ms的PWM訊號,模擬遙

控的功能。
實驗設計—Android部分
 橫向操作介面
為了方便使用者操作,我們把手機設定成橫式握法。必
須在AndroidManifest.xml下加上

「android:screenOrientation="landscape"」。
實驗設計—Android部分
 垂直拖動條
由於是橫向操作的關係,為了更方便的操作,需要一個
「垂直」的拖動條(SeekBar),由於eclipse沒有內建此部件,

所以我們必須手動製作一個出來。


首先先在src/android/wi...
實驗設計—Android部分
 垂直拖動條
 其實概念很簡單,我們只要手動製作一個普通SeekBar,在
onDraw的時候,加入rotate(-90),把整個物件旋轉負90度。

 現在我們可以在主程式的佈置檔(second.xml)中...
實驗設計—Android部分
 建立SeekBar監聽事件
我們在主程式內建立一個Seek Bar監聽事件。當Seek
Bar數值有變化時,把目前的值放到zz這個變數中。
實驗設計—Android部分
 Android操作介面
實驗設計—Android部分
 三軸加速度感測器建立
 宣告一個SensorManager
我們宣告一個名為sm的SensorManager,負責管理、調度、

處理Sensor的工作。

 取得感測器服務
使用getSystemServ...
實驗設計—Android部分
 三軸加速度感測器建立
 宣告一個SensorManager
我們宣告一個名為sm的SensorManager,負責管理、調度、

處理Sensor的工作。

 取得感測器服務
使用getSystemServ...
實驗設計—Android部分
 三軸加速度感測器建立
 設定感測器類型
由於我們實驗需要的是三軸加速度偵測儀,所以設定Sensor

Type為ACCELEROMETER。
實驗設計—Android部分
 三軸加速度感測器建立
 建立SensorEventListener監聽事件
當Sensor數值有變化時,把三軸加速度的其中兩個,values[0]

(X軸數據)、values[1] (Y軸數據)分別丟到xx...
實驗設計—Android部分
 三軸加速度感測器建立
 調整Sensor的更新速率
在registerListener時可以調整感測器的更新速率,更新速率如
下表。
Sensor.manager.SENSOR_DELAY_FASTEST

...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
[使用SerialEvent函式處理藍芽模組資料]
char inChar ;
While (Serial1.available())
inChar =(Serial1.read()) ;
//當...
藍芽信號
處理

實驗設計—Arduino部分
If (stringComplete) //在上個步驟中成立的旗標
// (假設) X軸數據‘X’,Y軸數據‘Y’,Z軸數據‘Z’,模式數據‘M’,航舵數
據'R’
//
10X
5Y
60Z
1...
藍芽信號
處理

實驗設計—Arduino部分
If (stringComplete) //在上個步驟中成立的旗標
// (假設) X軸數據‘X’,Y軸數據‘Y’,Z軸數據‘Z’,模式數據‘M’,航舵數
據'R’
//
10X
5Y
60Z
1...
藍芽信號
處理

實驗設計—Arduino部分
PWM訊號產生

PWM
數值
轉換

控制
信號
產生

我們利用時間中斷產生PWM訊號。由示波器可得
知,遙控器接收器的PWM訊號週期為22ms,高
電位頻寬為1ms~2ms。只要把do lo...
藍芽信號
處理

實驗設計—Arduino部分
首先,重置所有變數。
Total = 0,vx = 0,vy = 0,vz = 0,vm = 0,vr = 0。
為了方便講解,將目標的vx、vy、vz、vm、vr 設成1000、1100、
12...
藍芽信號
處理

PWM
數值
轉換

實驗設計—Arduino部分
vr
For 迴圈持續記數到Total
If Total >= vx ;; 2200) >= 2200us
(++Total <
// 在週期內,且各變數尚未觸發時,
dig...
實驗設計—Arduino部分
 紅外線測距
 使用目的
為了使四軸直升機能夠提醒躲避障礙物,所以在四軸直升機的

四端加上紅外線感測器,以便操縱者控制方向及迴避障礙物,並且
能回報數據給控制板來做下一步地的動作。
實驗設計—Arduino部分
 紅外線模組(GP2Y0A02YK0F)
夏普公司所製作的紅外線測距模組,經由一個接收模組以及一
顆紅外線發射器,透過入射角及反射角來控制調變電壓,以達到測距
的目的,並且擁有高準度的特性在20CM-80CM之間...
實驗設計—Arduino部分
 紅外線模組(GP2Y0A02YK0F)
 紅外線模組工作方式

GP2Y0A02YK0F是由PSD(位置敏度感測器) 和IRED (紅外線
二極體) 以及信號處理電路三部分組成。採用三角測量方法,被測物
體的...
實驗設計—Arduino部分
 紅外線模組(GP2Y0A02YK0F)
 PSD介紹

PSD是一種半導體,他透過光點對於電流大小的變化來感測距

離的遠近,因為是透過電流控制,幾乎不會受到光點強度、分佈、
對稱性和尺寸的影響,因此也提高不...
實驗設計—Arduino部分
 紅外線模組(GP2Y0A02YK0F)
 PSD工作原理

它的特性由於有時受到的光點大小不均勻,所以PSD會將所接

收到的不均勻光點以載子電流擴散的方式均勻分布在半導體上,並
且藉由射入的光點能量產生店子...
實驗設計—Arduino部分
 紅外線模組(GP2Y0A02YK0F)
 紅外線二極體

紅外線二極體是用紅外線輻射效率高的材料(砷鋁化鎵)製成
PN接面,正向偏壓向P-N接面注入電流激發紅外線,其光譜功率分
佈為中心波長850~940nm...
實驗設計—Arduino部分
 紅外線模組測距方法
實驗設計—Arduino部分
 Arduino紅外線程式
實驗設計—Arduino部分
 Arduino紅外線程式
 程式講解-設定腳位

 sensorIR1指定為第0腳
 sensorIR2指定為第1腳
 Induction(紅外線訊號)指定為第7腳
 Out_DUE(Arduino ...
實驗設計—Arduino部分
 Arduino紅外線程式
 程式講解-指定輸出腳

 Induction輸出腳位
 out_DUE 輸出腳位
 LED 輸出腳位
 先將三隻腳位設為初值LOW(避免一開始輸入信號無法準確
抓到準
實驗設計—Arduino部分
 Arduino紅外線程式
 程式講解-轉換電壓值

 先將sensorIR1的值用類比信號轉換設成sensor1
 套入公式y = 10650.08 * x ^ (-0.935) – 10(接下頁)
 ...
實驗設計—Arduino部分
 Arduino紅外線程式
 電壓換算距離-Data Sheet
實驗設計—Arduino部分
 Arduino紅外線程式
 電壓換算距離-EXCEL擴散圖
實驗設計—Arduino部分
 Arduino紅外線程式
 電壓換算距離-二次函數轉換

 在透過積分換算

 得到公式: y = 10650.08 * x ^ (-0.935) - 10
實驗設計—Arduino部分
 Arduino紅外線程式
 程式講解-障礙物警告

 預設是先將障礙物設為30cm以內
要發出警示
 當距離少於30公分時sensor感應
就會轉為HIGH,並且
 會傳送一個HIGH的信號給DUE板
...
實驗設計—Arduino部分
 Arduino紅外線程式
 實地工作照片
影片展示
問題與瓶頸
 在數不清次的實驗中, 因為飛行控制板(APM)在我們「不正常」
的使用下,3.3V穩壓ICTPS79133DBVR被我們燒壞了。本當
輸出3.3V的腳就變成0V了。
問題與瓶頸
 在數不清次的實驗中, 因為飛行控制板(APM)在我們「不正常」
的使用下,3.3V穩壓ICTPS79133DBVR被我們燒壞了。本當
輸出3.3V的腳就變成0V了。
問題與瓶頸
 依照PCB電路佈線圖所示, TPS79133DBVR提供給了四顆感
測晶片3.3V的店源,分別是HMC5883L電子羅盤、
AT45DB161D-MU Data Flash、 MS5611-01BA氣壓感測器、

MPU-600...
問題與瓶頸
 由於此顆穩壓IC在台灣並不常見,目前已積極的尋求貨源,並
且已在配送中,希望能盡早拿到貨,讓直升機重新翱翔天際。
結論
這學期的專題製作課程除了學到基礎的C語言、JAVA語言
和XML語言,更重要的是時間的控管,人員的調度,和尋找問題的
過程與解決辦法。

這些課本沒教的東西,只能靠我們慢慢摸索,才能學習到
的技能。事前理論雖然看似完美,但是實際的狀況卻往...
Upcoming SlideShare
Loading in …5
×

Thrd relase t

1,111 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,111
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Thrd relase t

  1. 1. 先進四軸研究計画  Advanced Quad-copter Research Project  學校: 大安高工  組長: 楊博洋  組員: 王瑞霆  杜宏霖  林岳  林仕祥  指導老師: 張顯盛
  2. 2. 目錄  前言  團隊成員  甘特圖  硬體架構圖  程式流程圖  硬體介紹  軟體介紹  影片展示  問題與瓶頸  結論
  3. 3. 前言  飛行器從發明以來,不斷地在提升效率與機動性,目前渦輪動 力機因為速度和乘載量上的優勢,成為空中運輸的霸主;然而 在機動性和對地形的適應力上則無法跟「四軸飛行器」相提並 論。話雖如此,四軸若真的運用在民生上,其耗費的動力及操 作上的困難讓發展受到限制,不過在各種輔助人們工作和娛樂 方面,他可是令人耳目一新並具有研究價值(跳坑價值)的小 玩具!
  4. 4. 前言  在觀賞一些資深玩家所做的飛行影片時,千萬別產生「看起來 好簡單、好有趣」的念頭,畢竟在DIY的過程中,他可是一 台每分鐘將近一萬轉的血滴子,不過正因為如此,我們才要謹 慎的從事每次的測試,透過不斷的調整,將牠馴服呈穩定乖巧 的寵物!在這邊請允許我大言不慚的以國外「TED」大神為 目標!用最穩定的飛行、最快的機動性演出一場人與機器互動 的表演!
  5. 5. 團隊成員 班級 子三甲 1.電子學與實習 2.基本電學與實習 曾修習 專業科目 參與專 3.數位邏輯與實習 題工作 4.計算機概論 5.Visual Basic 6.Innobasci 7.Altium Desinger 09 項目 招集成員 進度管理 3. 楊博洋 1. 2. 姓名 口頭報告呈現 4. 計劃書撰寫 5. 報告製作 6. 國 7. 英 8. 數 9. 專一 10. 專二 1.101年工業電子丙級技術師證照 經歷簡介 2.巨匠電腦 基礎C# &C++ 課程 3.3pi 自走車研習
  6. 6. 團隊成員 姓名 杜宏霖 班級 子三甲 1. 1.電子學與實習 2.基本電學與實習 3.數位邏輯與實習 曾修習 參與專 題工作 4.微處理機與實習 專業科目 5.電子電路與實習 6.程式設計實習 7.單板電腦實習 8.電路繪圖實習 1.育成高中創意人才培訓計畫 經歷簡介 2.第11屆全國智慧鐵人競賽 3. 1.101年工業電子丙級技術師證照 4. 3pi 自走車研習 項目 機體(電裝搭配、選購、架構) 2. 飛行相關資料蒐集 3. 每周進度紀錄 4. PWM研究 5. 機構組裝 6. Arduino控制程式
  7. 7. 團隊成員 姓名 王瑞霆 班級 子三甲 1. Android 遙控程式設計 1.電子學與實習 2. Arduino控制程式設計 2.基本電學與實習 3. APM2.5飛行數據校正 3.數位邏輯與實習 參與專 4. 溝通協定 題工作 5. PWM研究 4.計算機概論 曾修習 5.Visual Basic 專業科目 6.Innobasci 7.Quartus II 8.Keil uVision3 項目 6. 機構組裝 7. 報告製作 8. 進度管理 9. 口頭報告 9.Arduino 10. Altium Desinger 10 1.101年工業電子丙級技術師證照 2.第十一屆智慧鐵人競賽 經歷簡介 3.3pi 自走車研習 4. 九十九學年度班級網頁競賽入圍 5.第九屆人工智慧單晶片電腦鼠暨機器人國內及國際邀請賽 人工智慧線迷宮鼠高中職組第三名
  8. 8. 團隊成員 姓名 林仕祥 班級 子三甲 1.電子學與實習 2.基本電學與實習 3.數位邏輯與實習 曾修習 4.微處理機與實習 專業科目 5.電子電路與實習 6.程式設計實習 7.單板電腦實習 8.電路繪圖實習 1.101年工業電子丙級技術師證照 經歷簡介 2.第11屆全國智慧鐵人競賽 3.3pi 自走車研習 4.Make Faire 2012 參與專 1. Arduino程式 題工作 2. Bluetooth介面設定 項目 3. GPS設定
  9. 9. 團隊成員 姓名 林岳 班級 子三甲 1. 1.電子學與實習 2.基本電學與實習 3.數位邏輯與實習 曾修習 4.微處理機與實習 專業科目 5.電子電路與實習 6.程式設計實習 7.單板電腦實習 8.電路繪圖實習 經歷簡介 1.101年工業電子丙級技術師證照 參與專 題工作 項目 計畫擬定 2. 材料選購 3. 功能測試 4. 報告撰寫 5. 電路焊接 6. 後備支援
  10. 10. 甘特圖 週次 二 暑 (日期) 下 假 期 期 工作項目 末 間 目標訂定 ★ 資料蒐集 ★ 硬體規劃組裝 ★ ★ 動力系統測試 ★ APM2.5飛控板 投入實際飛行 APM2.5飛控板 信號探索與量測 Android客戶端 程式撰寫 Arduino接收端 程式撰寫 手機藍芽遙控 飛行器平穩飛行 PID與姿態再調整 紅外線自動避障 DEMO影片製作 報告撰寫 口頭報告 預定進度 3 2 3 4 5 6.7 8 9.10 11 12 13.14 15 16 17 18 第 ★ ★ ★ ★ ★ 二 二 ★ 瑞、霖 次 ★ 次 ★ 次 次 期 ★ ★ ★ 模 ★ 模 期 擬 中 ★ 中 ★ ★ ★ 考 ★ ★ 20 25 25 40 40 考 考 50 60 70 瑞 瑞 ★ ★ ★ ★ 負責成員 全員 霖、岳 瑞、霖、祥 瑞、霖、祥 全員 第 一 20 ★ ★ 第 一 ★ 第 19 ★ ★ ★ ★ ★ 瑞 ★ 80 88 92 擬 ★ ★ 考 97 ★ 霖、岳 祥 霖 ★ 全員 ★ 全員 累積百分比 (%)
  11. 11. 硬體架構圖
  12. 12. Android程式流程圖
  13. 13. 硬體介紹  Android 手機 Android是一個以Linux為基礎的開放原始碼作業系統。  Android之優點  媒體支援 Android系統本身支援多種的音訊、影片、圖片格式,例如MP3、 MIDI、FLAC、WAV、JPEG、PNG、GIF、MPEG-4 ……等。  硬體支援 Android可以支援各種的感測器和硬體,例如多點觸控螢幕、GPS、 加速度計、氣壓計、鍵盤、滑鼠、溫度計、2D加速和3D加速等。  多工處理 Android作業系統支援原生的多工處理。
  14. 14. 硬體介紹  藍芽模組 藍芽技術最早是由愛立信公司(Ericsson)創製。是一種低功耗、低 成本無線通訊連線技術。現今,藍芽的應用範圍非常廣泛,從手機資料交 換、印表機、耳機、鍵盤滑鼠等周邊設備都是使藍芽的技術。 藍芽的標準是IEEE 802.15.1,工作於無須許可的頻段----2.45GHz。其最高速度可達723.1kb/s。 若拿WIFI與藍芽相比是不適當的,因為WIFI是一種更加高速的協 定,涵蓋的面積更廣,但是WIFI需要更加昂貴的硬體。藍芽是設計用來建 立裝置與裝置間的連線,而WIFI是個無線區域網路協定,兩者本身的目的 是不同的。
  15. 15. 硬體介紹  Ardupilot 2.5 (APM2.5) 由3DR Robots公司針對航空模型所開發的控制板,內建 三軸加速度計、陀螺儀、電子羅盤,還可以外掛GPS模組和 OSD模組(包含連線狀態、電壓狀況及各種環境數值),本實 驗利用它來啟動及控制電子變速器,進而驅動無刷馬達。
  16. 16. 硬體介紹  Ardino DUE Arduino是一個開放原始碼的單晶片微電腦,使用Atmel 8-bit AVR 微控制器。其最大的特色是Arduino可以與各式各樣的電子原件、模組做連 接,如IR(紅外線)、光敏電阻,伺服馬達、超音波或是本實驗所採用的藍芽 模組等。幾使沒有深厚的電子資訊專業技術也可以做出令人驚豔的作品。 本實驗使用的的是Arduino於2012年10月薪推出的Ardino DUE。 不同於其他Arduino使用的16 MHz Atmega系列,DUE使用的是84MHz ARM架構晶片。他不但提供更高的CPU時脈,更大的記憶空間最重要的是 它有直接記憶體存取(Direct Memory Access,DMA)控制器,能在做密 集型工作時緩解CPU的工作壓力。
  17. 17. 硬體介紹  ARM架構 ARM架構過去稱作進階精簡指令集機器(Advanced RISC Machine,是一個32位元精簡指令集(RISC)處理器架 構,目前廣放應用在嵌入式系統,包含智慧型手機、硬碟機、 數位電視和機上盒,目前AMD宣布將於2014年開始生產基於 ARM架構的64位元的處理器。 Arduino DUE 所採用的ATSAM3X8E是屬於 Cortex系列、 ARMv7-M指令集、Cortex-M3架構。
  18. 18. 硬體介紹  無刷馬達 無刷馬達顧名思義即是「沒有電刷的馬達」。由於沒有 與軸承直接摩擦力,在高速且長時間的運轉下,較不會產生熱、 噪音及磨損,不論體積、效率、安全性都優於一般有刷馬達; 但在製作、控制上也顯得困難許多,價格也較為昂貴。目前廣 泛運用在各種動力模型和硬碟驅動、風扇及壓縮機等。
  19. 19. 硬體介紹  電子變速器(Electric Speed Controler , ESC) 由於馬達需要大電流才能啟動,所以不能跟控制電路用 相同的電源,再者,控制電路與馬達中間需要有一個「PWM數 位訊號與單純的電」的轉換橋梁,一般模型來說,如果不需要 特別複雜的電源分配;又考慮到電路體積的話,通常也會以電 子變速器來代替配電盤,可以同時達到電源分配、馬達訊號控 制的工作,一個好的電子變速器具有不易發熱、高低電壓警告 和安全保護等功能。
  20. 20. 軟體介紹  Arduino IDE Arduino IDE (Integrated Development Environment)是 Arduino官方開發的一個綜合開發環境,並且使用Java語言撰寫, 所以擁有跨平台的特性。ˇ 程式語言方面使用Arduino語言。它是一種「類C (Clike)」程式語言,他把艱澀難懂的C語言簡化讓初級開發者也能 輕鬆寫出程式。不但內建許多的函式庫,更可以外掛其他開發 者撰寫出來的函式庫,使我們可以方便的達到我們所期望的成 果。
  21. 21. 軟體介紹  Eclipse eclipse是一款原由IBM公司開發的JAVA「開源綜合開發 環境(IDE)」,其特點在於豐富的外掛模組,使得eclipse具有較 佳的靈活性,是一款主流的Android手機程式開發軟體。 起初IBM開發eclipse是為了代替商用軟體「Visual Age for Java」成為下一代IDE開發環境。IBM於2001年11月開放給 開源社群,目前, eclipse由非營利軟體供應商聯盟Eclipse基金 會(Eclipse Foundation)管理。本實驗使用2012年9月發行代 號為Juno的4.2版。
  22. 22. 軟體介紹  Mission Planner 與APM飛控板作搭配的規劃軟體,可以即時顯示所接收到 的油門狀態和三軸加速度計、陀螺儀、電子羅盤所傳回的狀態, 規劃需要的啟動、飛行模式及各種參數調整,如果接上GPS模 組,甚至讓飛行器能完成自動點對點飛行或巡航的動作。 本實驗主要對此飛控板所接受的訊號數值作探討,及藍芽 訊號轉換成其所接受的數值,讓其作運算,並送出正確穩定的 PWM。
  23. 23. 實驗設計  我們利用示波器得知遙控器接收器會送給飛行控制板一 個周期為22ms,脈波寬度為1~2ms的PWM訊號,因次我們必 須利用Arduino製作出一個周期為22ms的PWM訊號,模擬遙 控的功能。
  24. 24. 實驗設計—Android部分  橫向操作介面 為了方便使用者操作,我們把手機設定成橫式握法。必 須在AndroidManifest.xml下加上 「android:screenOrientation="landscape"」。
  25. 25. 實驗設計—Android部分  垂直拖動條 由於是橫向操作的關係,為了更方便的操作,需要一個 「垂直」的拖動條(SeekBar),由於eclipse沒有內建此部件, 所以我們必須手動製作一個出來。  首先先在src/android/widget下新增一個JAVA檔命名為 「VerticalSeekBar.java」
  26. 26. 實驗設計—Android部分  垂直拖動條  其實概念很簡單,我們只要手動製作一個普通SeekBar,在 onDraw的時候,加入rotate(-90),把整個物件旋轉負90度。  現在我們可以在主程式的佈置檔(second.xml)中放進剛剛做好的 「VerticalSeekBar」。
  27. 27. 實驗設計—Android部分  建立SeekBar監聽事件 我們在主程式內建立一個Seek Bar監聽事件。當Seek Bar數值有變化時,把目前的值放到zz這個變數中。
  28. 28. 實驗設計—Android部分  Android操作介面
  29. 29. 實驗設計—Android部分  三軸加速度感測器建立  宣告一個SensorManager 我們宣告一個名為sm的SensorManager,負責管理、調度、 處理Sensor的工作。  取得感測器服務 使用getSystemService(SENSOR_SERVICE)取得感測器服務。
  30. 30. 實驗設計—Android部分  三軸加速度感測器建立  宣告一個SensorManager 我們宣告一個名為sm的SensorManager,負責管理、調度、 處理Sensor的工作。  取得感測器服務 使用getSystemService(SENSOR_SERVICE)取得感測器服務。
  31. 31. 實驗設計—Android部分  三軸加速度感測器建立  設定感測器類型 由於我們實驗需要的是三軸加速度偵測儀,所以設定Sensor Type為ACCELEROMETER。
  32. 32. 實驗設計—Android部分  三軸加速度感測器建立  建立SensorEventListener監聽事件 當Sensor數值有變化時,把三軸加速度的其中兩個,values[0] (X軸數據)、values[1] (Y軸數據)分別丟到xx、yy這兩個變數中儲存。 並利用TextView列出並監測數據。
  33. 33. 實驗設計—Android部分  三軸加速度感測器建立  調整Sensor的更新速率 在registerListener時可以調整感測器的更新速率,更新速率如 下表。 Sensor.manager.SENSOR_DELAY_FASTEST 0 ms Sensor.manager.SENSOR_DELAY_GAME 20 ms Sensor.manager.SENSOR_DELAY_UI 60 ms Sensor.manager.SENSOR_DELAY_NORMAL 200 ms 因此registerListener可以寫成 但我們實驗需要細微的調整更新速率,不能使用上述的模式, 所以registerListener也可以直接把需要的更新速率寫上去。(單位:us)
  34. 34. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 10 控制 信號 產生 inChar = 10
  35. 35. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = X 控制 信號 產生 inChar = 10 X
  36. 36. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 5 控制 信號 產生 inChar = 10 X 5
  37. 37. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = Y 控制 信號 產生 inChar = 10 X 5 Y
  38. 38. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 60 控制 信號 產生 inChar = 10 X 5 Y 60
  39. 39. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = Z 控制 信號 產生 inChar = 10 X 5 Y 60 Z
  40. 40. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 1000 控制 信號 產生 inChar = 10 X 5 Y 60 Z 1000
  41. 41. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = R 控制 信號 產生 inChar = 10 X 5 Y 60 Z 1000 R
  42. 42. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 1900 控制 信號 產生 inChar = 10 X 5 Y 60 Z 1000 R 1900
  43. 43. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = M 控制 信號 產生 inChar = 10 X 5 Y 60 Z 1000 R 1900 M
  44. 44. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 控制 信號 產生 inputString = /n inChar = 10 X 5 Y 60 Z 1000 R 1900 M /n
  45. 45. 藍芽信號 處理 實驗設計—Arduino部分 [使用SerialEvent函式處理藍芽模組資料] char inChar ; While (Serial1.available()) inChar =(Serial1.read()) ; //當藍芽串列埠有資料時,把資料串接起來。 PWM 數值 轉換 inputString += inChar ; //把串列埠資料丟進inChar。 If (inChar == ‘/n’) //當找到換行符號時。 stringComplete = ture ; //換行旗標設定為ture表示一行結束。 inputString = 控制 信號 產生 /n inChar = 10 X 5 Y 60 Z 1000 R 1900 M /n stringComplete = ture //外部中斷旗標成立,數值轉換迴圈開始執行。
  46. 46. 藍芽信號 處理 實驗設計—Arduino部分 If (stringComplete) //在上個步驟中成立的旗標 // (假設) X軸數據‘X’,Y軸數據‘Y’,Z軸數據‘Z’,模式數據‘M’,航舵數 據'R’ // 10X 5Y 60Z 1900M 1000R PWM 數值 轉換 控制 信號 產生 p2 = inputString.indexOf(“Y”) ;; //找到Y軸數據的 p3 = inputString.indexOf(“Z”) //找到Z軸數據的 M及R變數依此類推 。。。。。。 p1 = inputString.indexOf(“X”) ; //找到X軸數據的定位點 定位點(index) 定位點(index) (index) vy = (1060 + (inputString.substring (p1+1,p2) . vz (p2+1,p2) vx = (1050 + (inputString.substring (0,p1) . toInt()) * 3.8 / 10 ; toInt()) * 3.8/ 10 ; toInt()) * 9/ 10 ; Y = 60 X=5 Z 10 vy = 1671 vz 1862 vx = 1540
  47. 47. 藍芽信號 處理 實驗設計—Arduino部分 If (stringComplete) //在上個步驟中成立的旗標 // (假設) X軸數據‘X’,Y軸數據‘Y’,Z軸數據‘Z’,模式數據‘M’,航舵數 據'R’ // 10X 5Y 60Z 1900M 1000R PWM 數值 轉換 控制 信號 產生 digitalWrite (pinx , HIGH) ; 數值 */ digitalWrite (piny , HIGH) ; digitalWrite (pinz , HIGH) ; digitalWrite (pinm , HIGH) ; digitalWrite (pinr , HIGH) ; inputString = “ “ //清空。 stringComplete = false ; //恢復初始旗標。 /*最後送達APM飛控板的
  48. 48. 藍芽信號 處理 實驗設計—Arduino部分 PWM訊號產生 PWM 數值 轉換 控制 信號 產生 我們利用時間中斷產生PWM訊號。由示波器可得 知,遙控器接收器的PWM訊號週期為22ms,高 電位頻寬為1ms~2ms。只要把do loop中設定的 10us Timer先輸出高電位做2200次 (10us*2200=22ms),並把指定到的時間輸出低電 位就可以做出週期為22ms的PWM訊號。 //每做一次Timer副程式,Total就+1 //在判斷Total是否大於2200 (T = 2200us)
  49. 49. 藍芽信號 處理 實驗設計—Arduino部分 首先,重置所有變數。 Total = 0,vx = 0,vy = 0,vz = 0,vm = 0,vr = 0。 為了方便講解,將目標的vx、vy、vz、vm、vr 設成1000、1100、 1200、1300、1400、1500 (us) PWM 數值 轉換 X Y Z 控制 信號 產生 M R
  50. 50. 藍芽信號 處理 PWM 數值 轉換 實驗設計—Arduino部分 vr For 迴圈持續記數到Total If Total >= vx ;; 2200) >= 2200us (++Total < // 在週期內,且各變數尚未觸發時, digitalWrite(pinr LOW) digitalWrite(pinx ,, LOW) ;; 維持HIGH。 X Y 第二次迴 圈 ; Z 控制 信號 產生 M R 1100 800 200 1000 600 1200 700 400 Total =1100 2200
  51. 51. 實驗設計—Arduino部分  紅外線測距  使用目的 為了使四軸直升機能夠提醒躲避障礙物,所以在四軸直升機的 四端加上紅外線感測器,以便操縱者控制方向及迴避障礙物,並且 能回報數據給控制板來做下一步地的動作。
  52. 52. 實驗設計—Arduino部分  紅外線模組(GP2Y0A02YK0F) 夏普公司所製作的紅外線測距模組,經由一個接收模組以及一 顆紅外線發射器,透過入射角及反射角來控制調變電壓,以達到測距 的目的,並且擁有高準度的特性在20CM-80CM之間最為精準,工作電 壓介於4.5V-5V適合邏輯電路中使用也是一般常見的紅外線測距模組。
  53. 53. 實驗設計—Arduino部分  紅外線模組(GP2Y0A02YK0F)  紅外線模組工作方式 GP2Y0A02YK0F是由PSD(位置敏度感測器) 和IRED (紅外線 二極體) 以及信號處理電路三部分組成。採用三角測量方法,被測物 體的材質、環境溫度以及測量時間都不會影響感測器的測量精度。
  54. 54. 實驗設計—Arduino部分  紅外線模組(GP2Y0A02YK0F)  PSD介紹 PSD是一種半導體,他透過光點對於電流大小的變化來感測距 離的遠近,因為是透過電流控制,幾乎不會受到光點強度、分佈、 對稱性和尺寸的影響,因此也提高不少的靈敏度,以及工作的速度。
  55. 55. 實驗設計—Arduino部分  紅外線模組(GP2Y0A02YK0F)  PSD工作原理 它的特性由於有時受到的光點大小不均勻,所以PSD會將所接 收到的不均勻光點以載子電流擴散的方式均勻分布在半導體上,並 且藉由射入的光點能量產生店子電洞對,促使載子擴散。
  56. 56. 實驗設計—Arduino部分  紅外線模組(GP2Y0A02YK0F)  紅外線二極體 紅外線二極體是用紅外線輻射效率高的材料(砷鋁化鎵)製成 PN接面,正向偏壓向P-N接面注入電流激發紅外線,其光譜功率分 佈為中心波長850~940nm的二極體,雖然沒有很強的穿透力,在反 射方面確實十分卓越。
  57. 57. 實驗設計—Arduino部分  紅外線模組測距方法
  58. 58. 實驗設計—Arduino部分  Arduino紅外線程式
  59. 59. 實驗設計—Arduino部分  Arduino紅外線程式  程式講解-設定腳位  sensorIR1指定為第0腳  sensorIR2指定為第1腳  Induction(紅外線訊號)指定為第7腳  Out_DUE(Arduino DUE板接收)指定為第6腳  LED指定為第13腳  Sensor1(感應電壓值)設為浮點數
  60. 60. 實驗設計—Arduino部分  Arduino紅外線程式  程式講解-指定輸出腳  Induction輸出腳位  out_DUE 輸出腳位  LED 輸出腳位  先將三隻腳位設為初值LOW(避免一開始輸入信號無法準確 抓到準
  61. 61. 實驗設計—Arduino部分  Arduino紅外線程式  程式講解-轉換電壓值  先將sensorIR1的值用類比信號轉換設成sensor1  套入公式y = 10650.08 * x ^ (-0.935) – 10(接下頁)  為了防止數值跳動過快所以加入一個delay time
  62. 62. 實驗設計—Arduino部分  Arduino紅外線程式  電壓換算距離-Data Sheet
  63. 63. 實驗設計—Arduino部分  Arduino紅外線程式  電壓換算距離-EXCEL擴散圖
  64. 64. 實驗設計—Arduino部分  Arduino紅外線程式  電壓換算距離-二次函數轉換  在透過積分換算  得到公式: y = 10650.08 * x ^ (-0.935) - 10
  65. 65. 實驗設計—Arduino部分  Arduino紅外線程式  程式講解-障礙物警告  預設是先將障礙物設為30cm以內 要發出警示  當距離少於30公分時sensor感應 就會轉為HIGH,並且  會傳送一個HIGH的信號給DUE板 來做轉換處理,LED發亮來警告使用者
  66. 66. 實驗設計—Arduino部分  Arduino紅外線程式  實地工作照片
  67. 67. 影片展示
  68. 68. 問題與瓶頸  在數不清次的實驗中, 因為飛行控制板(APM)在我們「不正常」 的使用下,3.3V穩壓ICTPS79133DBVR被我們燒壞了。本當 輸出3.3V的腳就變成0V了。
  69. 69. 問題與瓶頸  在數不清次的實驗中, 因為飛行控制板(APM)在我們「不正常」 的使用下,3.3V穩壓ICTPS79133DBVR被我們燒壞了。本當 輸出3.3V的腳就變成0V了。
  70. 70. 問題與瓶頸  依照PCB電路佈線圖所示, TPS79133DBVR提供給了四顆感 測晶片3.3V的店源,分別是HMC5883L電子羅盤、 AT45DB161D-MU Data Flash、 MS5611-01BA氣壓感測器、 MPU-6000 六軸感測器(陀螺儀 + 加速度計)。
  71. 71. 問題與瓶頸  由於此顆穩壓IC在台灣並不常見,目前已積極的尋求貨源,並 且已在配送中,希望能盡早拿到貨,讓直升機重新翱翔天際。
  72. 72. 結論 這學期的專題製作課程除了學到基礎的C語言、JAVA語言 和XML語言,更重要的是時間的控管,人員的調度,和尋找問題的 過程與解決辦法。 這些課本沒教的東西,只能靠我們慢慢摸索,才能學習到 的技能。事前理論雖然看似完美,但是實際的狀況卻往往不是如此, 除了靠資料的蒐集和無數次的實驗、檢測外,都不太可能解決。能 夠反覆思考,找出問題的癥結點,才是專題製作最精隨的部分。 雖然在現實生活中的各種壓力和教育體制底下,我們沒辦 法花太多時間在專題製作上,功能還有許多沒有上線的,但是我們 仍然會繼續整個計畫,直到所有功能都上線為止,請各位敬啟期待。

×