アナログジャイロセンサーについて

 古い記事に質問があったのでまとめ直してみる。

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」が秋月のサイトから購入できなくなっていることに気づいた。


BMX055は、BNO055の代わりにはならないようだ。


ストロベリー・リナックスのHMC6352も品切れのようで。


Adafruit の BNO055情報。

ホームセンターにて(その3)

せとうちオープン2018に持ち込んだこちらのロボットのフレームにはシナベニヤを使っている。


シナベニヤはMDFやラワンベニヤと同様に一般的な素材で大抵のホームセンターで扱いがあると思う。いろいろな厚さ売られているが、そこそこ軽くて、それなりの強度がある4mm厚のシナベニヤを使っている。
シナベニヤはラワンベニヤに比べて、表面がきれいで、反りが少ない(個人的な感想です)。


以前は張ってはがせるスプレーのりで図面を貼り付けて、細工用の片刃のこぎりで部品を切り出していたが、いまは中華製の5.5Wレーザー加工機を使い、直接図面データから部品を切り出している。

4mm圧のシナベニヤなら速度12mm/s、同じラインを繰り返し10回焼き切ることでパーツ化している。

レーザー加工機はこちらで購入した。

ホームセンターにて(その2)

ホームセンターでネジ・ナットを探すと、TJ3Bで扱うM3サイズのものだけ見ても形状等いろいろあり楽しい。


基本のなべネジと皿ネジ。2つは長さの測り方が異なる。

ネジ穴の面取りをすることで、皿ネジは頭を隠すことができる。



プラスチックねじはセンサー周辺などで鉄ネジ使用できない場合に使う。きつく締めると簡単になめるのでねじロック剤などを併用したい。

ネジ止め剤

ネジ止め剤


板ナットは、3Dプリンタ出力のパーツ等で埋め込む場合に舐めにくく便利でないかと思う。

ナイロンナットは駆動部など緩むとまずいところ向けだが、まず通常のナットにねじロック剤などの緩み止めを使うべきと思う。


いろいろな化粧ネジと化粧ナット。それぞれ手で締めることもでき、頻繁に開け閉めするフタの固定などに使うとよいかも。



化粧ナットの使用例。バッテリー交換時には外す。

ホームセンターにて

四国の田舎暮らしでは、ロボットパーツは通販を利用して購入するため、専門店で実物を見てから買うという機会は殆どないが、工具やネジ・金具などであれば現物を確認できるホームセンターで購入することも多い。そこに並んだ工具類を眺めるだけでも楽しい。

最近は100円ショップでも工具類を扱っているところは多いが、特にドライバーなど繰り返し利用する道具は精度の高いメーカー品をオススメしたい。近所のホームセンターだと、KTC・ベッセルあたりが定番だと思う。


ベッセルといえばボールグリップドライバー。TJ3Bだと「+2」「+1」というサイズのプラスドライバーを使う。ベッセルの細軸タイプはグリップも小さめで工具箱にも入れやすく愛用してる。

またネジとナットを固定する際、ナット側はボックスドライバーを使うとしっかり締めることができる。TJ3Bで使われる「M3」サイズのナットだと「5.5mm」のサイズを使う。

ボーックスレンチが入らない場所用にコンビネーションレンチ(片目片口スパナ)も同じサイズがあると便利。


道具の正しい使い方はこちらで確認しよう。