また、方位センサー?
と、言われちゃうかもしれませんが・・・
全然違う方位センサーです。
型番はHM55Bというものです。
これは、前の記事でおもちゃを分解して取り出したものです。
以前、AVRねたで紹介したものですが・・・研究を中断していました。
(別名・・・さぼっていた)
Arduinoだと、結構簡単に実験できるので、またやる気が湧いてきました。
ということで、早速接続してみます。
このセンサーは6個の端子があります。
VCCは3Vなので、3.3Vの3端子レギュレータで降圧して供給します。
まあ、いろいろ面倒なことは考えずに接続してみます。
CSB:D3 CLK:D2 DOUT:D1 DIN:D0
にそれぞれ接続します。
で、プログラムは
#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円とかで手に入れたおもちゃなので・・・そんなもんでしょうね。