Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その7 方位センサー

2010-09-03 | Arduinoねた

また、方位センサー?

と、言われちゃうかもしれませんが・・・

全然違う方位センサーです。


型番はHM55Bというものです。

これは、前の記事でおもちゃを分解して取り出したものです。

以前、AVRねたで紹介したものですが・・・研究を中断していました。

(別名・・・さぼっていた)

Arduinoだと、結構簡単に実験できるので、またやる気が湧いてきました。

ということで、早速接続してみます。


このセンサーは6個の端子があります。

VCCは3Vなので、3.3Vの3端子レギュレータで降圧して供給します。

まあ、いろいろ面倒なことは考えずに接続してみます。

CSB:D3 CLK:D2 DOUT:D1 DIN:D0

にそれぞれ接続します。

Img_1067

で、プログラムは


#include <LiquidCrystal.h>

#define CSB 3
#define CLK 2
#define DOUT 1
#define DIN 0

LiquidCrystal lcd(5,6,7,10,11,12,13);

void OutZero()
{
  digitalWrite( DIN,LOW );
  delayMicroseconds(1);
  digitalWrite( CLK,LOW );
  delayMicroseconds(1);
  digitalWrite( CLK,HIGH );
}

void OutOne()
{
  digitalWrite( DIN,HIGH );
  delayMicroseconds(1);
  digitalWrite( CLK,LOW );
  delayMicroseconds(1);
  digitalWrite( CLK,HIGH );
}

int ReadOut()
{
  int d;
  delayMicroseconds(1);
  digitalWrite( CLK,LOW );
  if( digitalRead( DOUT )==HIGH)
    d=1;
  else
    d=0;
  delayMicroseconds(1);
  digitalWrite( CLK,HIGH );
  return(d);
}

void setup()
{
  pinMode(CSB,OUTPUT);
  pinMode(CLK,OUTPUT);
  pinMode(DOUT,INPUT);
  pinMode(DIN,OUTPUT);
  digitalWrite( CSB,HIGH );
  digitalWrite( CLK,HIGH );
  digitalWrite( DIN,HIGH );
}

void loop()
{
  int d,i,x,y;

  digitalWrite( CSB,LOW );
  OutZero();
  OutZero();
  OutZero();
  OutZero();
  digitalWrite( CSB,HIGH );

  digitalWrite( CSB,LOW );
  OutOne();
  OutZero();
  OutZero();
  OutZero();
  digitalWrite( CSB,HIGH );

  delay(30);

  digitalWrite( CSB,LOW );
  OutOne();
  OutOne();
  OutZero();
  OutZero();
  lcd.clear();
  lcd.setCursor(0,0);
  for(i=0;i<4;i++)
  {
    d=ReadOut();
//    lcd.print( d,HEX );
  }
  x=0;
  for(i=0;i<11;i++)
  {
    x=x<<1;
    x=x+ReadOut();
  }
  if( x >= 1024)
     x=x-2048;
  lcd.print( " x:" );
  lcd.print( x,DEC );

  y=0;
  for(i=0;i<11;i++)
  {
    y=y<<1;
    y=y+ReadOut();
  }
  if( y >= 1024)
     y=y-2048;
  lcd.print( " y:" );
  lcd.print( y,DEC );

  digitalWrite( CSB,HIGH );

  delay( 1000 );
}


これで、2組の数値x、yが取り出されます。

これをarctanで角度に戻すと・・・方位になるハズです。

でも、面倒なので2つの数値を取り出すところまでしか、まだやっていません。

ちなみに、数値の精度は11bitのうち7bit位しか使ってないようなので、実用性は低いと思います。(苦笑)

それでも、ヤフオクで100円とかで手に入れたおもちゃなので・・・そんなもんでしょうね。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 方位センサー再び | トップ | RoboCup Junior internationa... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Arduinoねた」カテゴリの最新記事