アナログジャイロセンサーについて(その2)
まずは、「GitHub - rpicopter/ArduinoMotionSensorExample: MPU6050/MPU6500/MPU9150/MPU9250 over I2c for Arduino」が動作する環境を用意する。
- Arduino本体。標準サイズでなく、この手のタイプだとテストにも組み込みにも便利。
- ジャイロセンサ MPU6050/MPU6500/MPU9150/MPU9250のいずれか。
Arduinoもジャイロセンサも購入時は対応電圧に注意する。
ArduinoとジャイロセンサのI2C、電源を接続する。
以下の例は5V対応のArduino互換機のProMicroと、5V対応のジャイロセンサを使う場合。
サンプルソースの「inv_mpu.cpp」の48行目に使うセンサ型番を定義する。
準備ができたらシリアルモニタで動作確認する。
センサを動かしてどの値が変わるか確認する。
センサを水平に置いた状態で回転(ヨー軸まわりに回転)させた場合、「Y」の値が変化する。
戦車で例えると、砲塔の左右回転がヨー軸(yaw)、砲身の上下がピッチ軸(pitch)、車体の横転がロール軸(roll)。
(つづく)
アナログジャイロセンサーについて
古い記事に質問があったのでまとめ直してみる。
TJ3Bのオプションにある方位センサはコンパスセンサのみで、ジャイロセンサを使う場合は自作する必要がある。C-Styleを無改造で使うためには
- オプションのコンパスセンサと同様の出力を返すI2C接続のジャイロセンサ
- Inputポートに接続して、ラインセンサ等と同様に電圧を返すアナログ出力のジャイロセンサ
のいずれかが必要となるが、単体でコンパスセンサと同等の値をI2C接続で返すジャイロセンサはググった限りでは見つけられなかった。
アナログ出力のジャイロセンサについては、以下のページで情報が公開されている。利用しているジャイロセンサ「L3GD20」は幾つか使ってみたが、個体差やドリフトが大きく、使うセンサごとの調整が面倒だった。
blog.livedoor.jp
後日公開されたMPU6050を使うジャイロセンサのサンプルにある「DMPライブラリ」を使うと、その調整が不要でドリフトも抑えられるということを知り、DMPを利用するサンプルを幾つか探してみた。
blog.livedoor.jp
自分が理解可能なArduinoベースでDMPを利用するサンプルでは、こちらの作りがシンプルだった。プログラムはページ右側の「Clone or download」→「Download ZIP」で取得できる。
github.com
メインプログラムの「AvrCopter.ino」はこれだけのプログラムで、ジャイロセンサから得た値をシリアル出力する。
#include "freeram.h" #include "mpu.h" #include "I2Cdev.h" int ret; void setup() { Fastwire::setup(400,0); Serial.begin(38400); ret = mympu_open(200); Serial.print("MPU init: "); Serial.println(ret); Serial.print("Free mem: "); Serial.println(freeRam()); } unsigned int c = 0; //cumulative number of successful MPU/DMP reads unsigned int np = 0; //cumulative number of MPU/DMP reads that brought no packet back unsigned int err_c = 0; //cumulative number of MPU/DMP reads that brought corrupted packet unsigned int err_o = 0; //cumulative number of MPU/DMP reads that had overflow bit set void loop() { ret = mympu_update(); switch (ret) { case 0: c++; break; case 1: np++; return; case 2: err_o++; return; case 3: err_c++; return; default: Serial.print("READ ERROR! "); Serial.println(ret); return; } if (!(c%25)) { Serial.print(np); Serial.print(" "); Serial.print(err_c); Serial.print(" "); Serial.print(err_o); Serial.print(" Y: "); Serial.print(mympu.ypr[0]); Serial.print(" P: "); Serial.print(mympu.ypr[1]); Serial.print(" R: "); Serial.print(mympu.ypr[2]); Serial.print("\tgy: "); Serial.print(mympu.gyro[0]); Serial.print(" gp: "); Serial.print(mympu.gyro[1]); Serial.print(" gr: "); Serial.println(mympu.gyro[2]); } }
ジャイロセンサの値を取得する部分はそのまま流用して
- 角度を電圧で返すためのDAC用の処理
- 原点調整の初期化処理
- 原点付近かどうかを知るためのLED表示
等を追加してアナログ出力ジャイロセンサにしてみる。
(つづく)
ジャイロ・コンパス センサ
はやねさん工房で紹介されていた「L3GD20」が秋月のサイトから購入できなくなっていることに気づいた。
- ジャイロセンサで方位を測定 : はやねさん工房
- センサ一般/ジャイロセンサー 秋月電子通商-電子部品・ネット通販
- L3GD20 3軸ジャイロセンサジュール(I2C/SPIタイプ) - L3GD20 - ネット販売
BMX055は、BNO055の代わりにはならないようだ。
ストロベリー・リナックスのHMC6352も品切れのようで。
Adafruit の BNO055情報。
ホームセンターにて(その3)
せとうちオープン2018に持ち込んだこちらのロボットのフレームにはシナベニヤを使っている。
シナベニヤはMDFやラワンベニヤと同様に一般的な素材で大抵のホームセンターで扱いがあると思う。いろいろな厚さ売られているが、そこそこ軽くて、それなりの強度がある4mm厚のシナベニヤを使っている。
シナベニヤはラワンベニヤに比べて、表面がきれいで、反りが少ない(個人的な感想です)。
以前は張ってはがせるスプレーのりで図面を貼り付けて、細工用の片刃のこぎりで部品を切り出していたが、いまは中華製の5.5Wレーザー加工機を使い、直接図面データから部品を切り出している。
4mm圧のシナベニヤなら速度12mm/s、同じラインを繰り返し10回焼き切ることでパーツ化している。
レーザー加工機はこちらで購入した。
ホームセンターにて(その2)
ホームセンターでネジ・ナットを探すと、TJ3Bで扱うM3サイズのものだけ見ても形状等いろいろあり楽しい。
基本のなべネジと皿ネジ。2つは長さの測り方が異なる。
ネジ穴の面取りをすることで、皿ネジは頭を隠すことができる。
プラスチックねじはセンサー周辺などで鉄ネジ使用できない場合に使う。きつく締めると簡単になめるのでねじロック剤などを併用したい。
- 出版社/メーカー: タミヤ
- メディア: おもちゃ&ホビー
- 購入: 1人 クリック: 3回
- この商品を含むブログ (1件) を見る
板ナットは、3Dプリンタ出力のパーツ等で埋め込む場合に舐めにくく便利でないかと思う。
ナイロンナットは駆動部など緩むとまずいところ向けだが、まず通常のナットにねじロック剤などの緩み止めを使うべきと思う。