官方網頁
http://www.invensense.com/mems/gyro/mpu6050.html
product spec
http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf
register map
http://www.invensense.com/mems/gyro/documents/RM-MPU-6000A-00v4.2.pdf
2014年3月31日 星期一
2014年3月20日 星期四
Arduino 小技巧 - 修改servo library, 使其更新動作速度更快
http://www.diy-robots.com/?p=1183
一般servo控制,都是20ms更新一次,每次拉高一段時間,拉高的時間範圍約為1000-2000us,
1500us為中間點
可以修改Arduino servo library,使更新間隔降到2500us(2.5ms),對於需要快速控制的用途很有幫助
libraries\Servo\Servo.h
//#define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds
#define REFRESH_INTERVAL 2500
2014年3月19日 星期三
Arduino - LCD控制
參考
可以注意到使用pin 8 9 10 11這樣設定可以當作小電流的5V與GND,提供LCD背光與Vee(調整對比)電壓調整使用
關於把GPIO當作5V來源,可以參考這篇文章:
http://ddddiy.blogspot.tw/2014/03/arduino-gpio5v-or-gnd.html
- http://coopermaa2nd.blogspot.tw/2010/12/arduino-lab9-2x16-lcd-world.html
- http://www.spikenzielabs.com/SpikenzieLabs/LCD_How_To.html
- http://arduino.cc/en/Tutorial/HomePage#.Uym-zvmSyXo 內的 LiquidCrystal Library
使用內建的library可以很輕易的控制LCD
可以注意到使用pin 8 9 10 11這樣設定可以當作小電流的5V與GND,提供LCD背光與Vee(調整對比)電壓調整使用
關於把GPIO當作5V來源,可以參考這篇文章:
http://ddddiy.blogspot.tw/2014/03/arduino-gpio5v-or-gnd.html
範例:
#include
LiquidCrystal lcd(0, 1, 4, 5, 6, 7);//rs, enable, d4, d5, d6, d7
void setup(){
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
lcd.begin(16, 2);
lcd.print("aaaabbbbccccdddd");
}
void loop(){
lcd.setCursor(0, 1);
lcd.print(millis( )/1000);
delay(100);
}
Arduino 小技巧 - 使用GPIO當作5V or GND的方法
有時候測試時沒有使用麵包版,
版子上又有多餘的GPIO時,若電流很小(例如驅動一般LED),可以使用GPIO當作VCC/GND
以Leonardo為例,GPIO可以輸出40mA
http://arduino.cc/en/Main/ArduinoBoardLeonardo#.Uym72PmSyXo
ex:
pin8: 5V
pin9: 0V
code:
版子上又有多餘的GPIO時,若電流很小(例如驅動一般LED),可以使用GPIO當作VCC/GND
以Leonardo為例,GPIO可以輸出40mA
http://arduino.cc/en/Main/ArduinoBoardLeonardo#.Uym72PmSyXo
Summary
Microcontroller | ATmega32u4 |
Operating Voltage | 5V |
Input Voltage (recommended) | 7-12V |
Input Voltage (limits) | 6-20V |
Digital I/O Pins | 20 |
PWM Channels | 7 |
Analog Input Channels | 12 |
DC Current per I/O Pin | 40 mA |
DC Current for 3.3V Pin | 50 mA |
Flash Memory | 32 KB (ATmega32u4) of which 4 KB used by bootloader |
SRAM | 2.5 KB (ATmega32u4) |
EEPROM | 1 KB (ATmega32u4) |
Clock Speed | 16 MHz |
ex:
pin8: 5V
pin9: 0V
code:
pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, HIGH); digitalWrite(9, LOW);
草稿 - DIY 四軸飛行器
- sensor: Gyro + G-sensor
- 機身目前狀態: 將Gyro + G-sensor的值經過Kalman filter運算後取得
- 平衡機身的方法使用PID
- 控制機身:
- 油門:PID運算過程中加入油門量
- YAW: 修改對角線馬達油門量,一組增加,一組減少
- ROLL/PITCH: 修改步驟2的機身狀態
2014年3月18日 星期二
PID控制
PID 的概念其實很簡單,裡面三個大部分
https://www.google.com.tw/search?q=PID&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjQ3MDb8K_OAhWFjZQKHcEICzkQ_AUICCgB&biw=1280&bih=614#imgrc=IoZD3kF8eZVYsM%3A
隨著時間一次次把實際量測的值算出P/I/D後,依各自的權重加總,算出這次控制真正的輸出,一次次這樣做便能趨近預計目標值且穩定不震盪
這個演算法只需儲存少數的資料,用少數的運算量,即可達到不錯的效果,不過需要人工調出PID 的參數
PID調參數也是一門學問,目前有些四軸飛控板有自動調PID參數功能,這部分也是可以研究的領域
===================================================
很不錯的影片表示PID 間的關係
http://4rdp.blogspot.tw/2008/05/pid-speed-control.html
http://4rdp.blogspot.tw/2008/12/apply-pid-to-control-lego-nxts-speed.html
http://4rdp.blogspot.tw/2013/11/pid-control-1.html
http://4rdp.blogspot.tw/2013/11/pid-control-2.html
http://4rdp.blogspot.tw/2013/12/pid-control-3.html
https://en.wikipedia.org/wiki/PID_controller
http://www.expertune.com/tutor.aspx
- P: proportional, 比例控制
- 假設目前四軸姿態是水平於地面,要前傾時,需降低前兩顆馬達轉速並增加後兩顆馬達的轉速,傾斜的速度跟馬達出力差異的對應這邊就是P
- 假設目標是前傾十度,目前姿態為水平,預計要輸出多少轉速差來達到這10度的變化
- I: integral, 誤差的積分
- 誤差:每次預估的結果與實際量測結果的差值,會每個loop一值累加
- 目標是讓平均誤差接近0
- 假設前一個loop,使用10%的前後馬達轉速差依照P預計下一個取樣點會從水平變為前傾10 度, 此時真正從sensor量出來的姿態是前傾9 度,那這次誤差就是-1,這部分可以當作這次控制訊號輸出時的參考因素
- D: derivative, 微分,基本上就是預測之後趨勢
- 對誤差的部分作微分,基本上就是找出斜率,推故下個時間點的誤差,這部分可以當作這次控制訊號輸出時的參考因素
https://www.google.com.tw/search?q=PID&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjQ3MDb8K_OAhWFjZQKHcEICzkQ_AUICCgB&biw=1280&bih=614#imgrc=IoZD3kF8eZVYsM%3A
隨著時間一次次把實際量測的值算出P/I/D後,依各自的權重加總,算出這次控制真正的輸出,一次次這樣做便能趨近預計目標值且穩定不震盪
這個演算法只需儲存少數的資料,用少數的運算量,即可達到不錯的效果,不過需要人工調出PID 的參數
PID調參數也是一門學問,目前有些四軸飛控板有自動調PID參數功能,這部分也是可以研究的領域
===================================================
很不錯的影片表示PID 間的關係
超淺顯易懂的教學
http://bbs.5imx.com/forum.php?mod=viewthread&tid=891184&fromuid=241202http://4rdp.blogspot.tw/2008/05/pid-speed-control.html
http://4rdp.blogspot.tw/2008/12/apply-pid-to-control-lego-nxts-speed.html
http://4rdp.blogspot.tw/2013/11/pid-control-1.html
http://4rdp.blogspot.tw/2013/11/pid-control-2.html
http://4rdp.blogspot.tw/2013/12/pid-control-3.html
https://en.wikipedia.org/wiki/PID_controller
http://www.expertune.com/tutor.aspx
2014年3月10日 星期一
Arduino藍芽遙控小車
使用Arduino搭配兩個模組
車身/履帶/減速機: 田宮 工作樂系列
- MTADRL293D 馬達控制板
- HC-05 藍芽模組
做法:
- 參考這裡將HC-05 藍芽模組設定好,接上VCC/GND,並將HC-05的TX/RX接到Leonardo的RX/TX
- 將MTADRL293D插上Leonardo
- 將MTADRL293D的
M1/M4(在這張版子上這兩顆馬達吃BATT的電,另外兩顆吃5V)接到車子左右兩顆馬達的正負極 - MTADRL293D接上電池
車身/履帶/減速機: 田宮 工作樂系列
範例程式碼:
2014年3月3日 星期一
Arduino小技巧 - Library寫法
觀察一下原本內建的library,可以發現Arduino的library寫法非常簡單
以我自己所寫的74HCT595N library為例:
發現官方說明文件:
http://arduino.cc/en/Guide/Libraries#.Uxxb7vm1bNk
=======================================================
目前發現,無法從一個Library A去使用另一個Library B
以我自己所寫的74HCT595N library為例:
- 撰寫 xxx.h
- class定義, 常數...
- 撰寫 xxx.cpp
- 實做class
- 新增 keywords.txt
- Datatypes (KEYWORD1)
- Methods and Functions (KEYWORD2)
- Constants (LITERAL1)
- 將三個檔案放入一個資料夾xxx後,丟到
- arduino-1.0.5-r2\libraries
- 可以順便寫個範例程式,放入examples資料夾,丟到
- arduino-1.0.5-r2\libraries\xxx
範例:
發現官方說明文件:
http://arduino.cc/en/Guide/Libraries#.Uxxb7vm1bNk
=======================================================
目前發現,無法從一個Library A去使用另一個Library B
- 編譯時會提示找不到B.h
- 將#include "B.h" 改成#include "../B/B.h"後,可以找到.h 檔,但仍找不到實作的部分
目前暫時的解決方法是把B.h/B.cpp複製到A的資料夾內
訂閱:
文章 (Atom)