跳到主要內容

開發 fly shield 過程記錄

        暫時命名為fly shield,我才慢慢理解sdield,因為一開始我的目的是希望
能夠創照出一塊面包版的概念,上面只要插上模組就可以讓ARDUINO可以飛行
這塊面包板已經將各模組之間的拉線拉好,省去重量與一堆飛線,這樣使用者就可以一目了然的知道每個區塊分工是什麼,如果有錯誤也可以很快地查到問題與解決問題,並且可以改進。這與寫軟體的感覺很像,所以這大概就是人家說的軟體IC的概念吧。
       在設計的時候腳位的定義宗是讓我頭痛,因為沒有一份正式的文件來說明,哪隻腳是什麼,最後必須去看程式碼才能知道,後來看到一些有趣的關鍵字,原來一開始我的設定是錯的我設定我的機器為MicroWii可以在四軸正常動作,但是我的電池怎麼樣就是無法偵測,後來看到一些程式碼有恍然大悟



看到如下
#if defined(PROMICRO)
  #if defined(MICROWII)
    #define A32U4ALLPINS      

如果我是MICROWII的選項,那我就會把A32U4ALLPINS給打開,
A32U4ALLPINS代表使用32U4上所有的接腳,但是PRO MICRO 並沒有把所有腳位都拉出來
所以就會變成一些功能無法執行。
所以不可以選MICROWII,要選擇PROMICRO,但是並沒有PROMICRO的選項可以選擇
在def.h中看到
#if defined(__AVR_ATmega32U4__) || defined(TEENSY20)
  #define PROMICRO
#endif

__AVR_ATmega32U4__這關鍵字我怎麼也找不到,我猜會不會當我在IDE界面選定燒錄是arduino micro時候這個就被定義了。
所以又找到這個,猜測不用定義,它會自動由我的CPU來決定他自己是PROMICR





  #define THROTTLEPIN                  3
  #if defined(A32U4ALLPINS)
    #define ROLLPIN                    6
    #define PITCHPIN                   2
    #define YAWPIN                     4
    #define AUX1PIN                    5
  #else
    #define ROLLPIN                    4
    #define PITCHPIN                   5
    #define YAWPIN                     2
    #define AUX1PIN                    6
  #endif
  #define AUX2PIN                      7

這裡的程式碼可以知道
 THROTTLEPIN                  A3
 ROLLPIN                   A 4
PITCHPIN                   A5
YAWPIN                    A 2
AUX1PIN                    A6
AUX2PIN                      A7 



//由以下程式碼可以知道
 #if !defined(A32U4ALLPINS) && !defined(TEENSY20)
    #define V_BATPIN                  A3    // Analog PIN 3
  #elif defined(A32U4ALLPINS)
    #define V_BATPIN                  A4    // Analog PIN 4
  #else
    #define V_BATPIN                  A2    // Analog PIN 3
  #endif
  #if !defined(TEENSY20)
    #define PSENSORPIN                A2    // Analog PIN 2
  #else
    #define PSENSORPIN                A2    // Analog PIN 2
  #endif
#endif

電池監控是A3。




於Config.h中看到
  /* activate all 6 hardware PWM outputs Motor 5 = D11 and 6 = D13.
          提示:不可用于sparkfun promicro(针脚11 & 13未被引出)
         if activated:
         Motor 1-6 = 10-bit hardware PWM
         Motor 7-8 = 8-bit Software PWM
         Servos    = 8-bit Software PWM
         if deactivated:
         Motor 1-4 = 10-bit hardware PWM
         Motor 5-8 = 10-bit Software PWM
         Servos    = 10-bit Software PWM */

      //#define HWPWM6

PRO MICRO兩種模式選擇
六硬體PWM  或是 軟體PWM輔助,可以看到如果打開硬體PWM,可以讓六軸都使用硬體PWM,剩下兩軸與SERVO都是8Bit,如果只是想飛這個很好,如果要八軸或是空拍就不要解開HWPWM6。

不得不說使用VISUAL STUDIO來開發ARDUINO 真是太爽了一件事情
#if defined(PROMICRO)
  #if !defined(HWPWM6)
    #if defined(TEENSY20)
      uint8_t PWM_PIN[8] = {14,15,9,12,22,18,16,17};   //for a quad+: rear,right,left,front
    #elif defined(A32U4_4_HW_PWM_SERVOS)
      uint8_t PWM_PIN[8] = {6,9,10,11,5,13,SW_PWM_P3,SW_PWM_P4};   //
    #else
    uint8_t PWM_PIN[8] = {9,10,5,6,4,A2,SW_PWM_P3,SW_PWM_P4};   //for a quad+: rear,right,left,front
    #endif

  #else

以上程式碼可以看出我們的四軸或是六軸的腳為9 10 5 6 4 A2 SW_PWM_P3SW_PWM_P4


留言

  1. 請問您MPU6050是否要接INT至arduino nano?

    回覆刪除
    回覆
    1. 不需要喔,因為他使用輪巡的方式不依靠INT 所以不需要

      刪除
  2. 作者已經移除這則留言。

    回覆刪除
  3. 請問這系列的文章只到這一篇了嗎?

    回覆刪除

張貼留言

這個網誌中的熱門文章

使用藍牙BLE 讓iphone android 連接樹莓派3 raspberry pi 3

Raspberry PI 3 終於內建藍牙與網路晶片
這個晶片有點強大,可以同時讓Wifi 與 BLE 和 SPP (RF Com) 同時繁忙通訊都沒有問題。
Raspberry PI 如果是當成藍牙Client 連結身邊的BLE裝置,例如ibeancon、智慧手環、智慧手錶,那只要使用簡單hcitool搭配hciconfig 指令就可以達到將資料要回來,在網路關鍵字一下就可以找到如何使用hcitool 連線並要得資料。
     手機要與Raspberry PI連線的方法可以透過,wifi 或是藍牙,但是操作上使用藍牙比較直覺與簡易。但是要讓手機連線Raspberry PI,Raspberry PI上就需要將藍牙裝置當成Server,這件事情就需要一些程式碼上的撰寫。
    現在的文件說到關於如何將Raspberry PI藍牙裝置當成Server的文章並不太多,開發上總感覺困難重重,我也是在這裡停滯了好多天,不斷的搜尋解決方法,因為通起來了,資料來自網路所以也回饋給網路,讓下一個使用者減少這類問題的負擔。 不過目前這個方法未來開發資源越來越齊備可能不敷使用,但至少現在是可用的備案。
    網路上搜尋之後,整體套件如下
藍牙硬體<== BlueZ <== Nodejs(Bleno) <== Node Ble <== Node Socket  <==你的程式

我們發現藍牙要動起來通常會倚賴BlueZ的套件,好在的是最新的版作業系統已經將BlueZ提升到5.23,支援BLE了。 所以安裝BlueZ套件這件事情就可以省略。
       接著安裝Node環境 ,
http://blog.itist.tw/2016/04/using-raspberry-pi-3-to-build-eddystone-beacons-with-raspbian-jessie.html
於這篇網址提到安裝Node的快速方法,如果隨著時間推移太舊或是失效,在搜尋一下如何安裝Node即可解決。
題外話:Linux上開發要有所體悟,所有的架構都是在變動的,隨著版本的變動舊的API可能就會改變或是失效,期待不變與或是統一開發方式都是不太切合實際的想法,畢竟這不是linux的核心價值也不是在這一塊領域玩樂的人的想法,但多數的答案都可以在GOOGLE一下就可以順利解決(苦笑)。

小四軸飛行器:驅動馬達

等待陀螺儀的這段時間馬達先來了,所以我們開始測試馬達驅動系統飛行器的馬達是透過Arduino發出PWM訊號,傳送給驅動器(小型為MOS FET,大型為電調)控制馬達的轉速,達到控制飛行器。為了測試我們的驅動電路,我們先寫一個簡單的PWM控制,讓PWM輸出值越來越大,到大極限的時候,又慢慢地變小,如果我們的驅動電路可以正常運作時我們應該可以聽到馬達的聲音漸漸地變大,然後漸漸地變小。
測試馬達之前我們先學習Arduino的PWM,學習的過程當中我參考了下面的網站
http://coopermaa2nd.blogspot.tw/2011/07/6-pwm.html http://coopermaa2nd.blogspot.tw/2011/07/61-pwm-modes-part1.html 感謝Cooper Maa。



一開始我們先使用一個LED正腳接再PWM Nano的D3,然後負腳接到GND,接著寫讓PWM變大變小的程式 然後又找到如下網站 葉難:Arduino練習:呼吸燈 http://yehnan.blogspot.tw/2012/02/arduino_16.html
使用網站上的程式碼,我們可以看到燈慢慢亮起來,又慢慢的暗下去, 如果看到這樣的結果代表我們的PWM範例程是可以動作。

當呼吸燈完成了,代表我們的程式碼是沒有問題的(如果有問題就是電路的問題),接下來只要把LED腳換成馬達控制腳,就可以測試我們的驅動。
查詢了一下SI2302,由下表可以知道為什麼選用這個IC ,這張表是在某個賣場抓到的 http://taiwan.tmall.com/item/20689248199.htm?

Google play Game Service Unity 教學

Google Play Gmae Servie Unity教學 概念 我們需要由unity產生兩個資訊 1.package name (com.asssdfream.test2) 2.keystore 的SHA1 然後由 ansdrod developer console 產生兩個資訊回填到Unity中 1.資源檔 2.Client ID(客戶ID) 接著建立測試帳戶即可開始測試
詳細作法標題
1.建立Unity 專案 2.下載https://github.com/playgameservices/play-games-plugin-for-unity SDK,並加入套件 3.將專案設定成Android平台 4.為這個專案的APK