Re: The history of "M&Y"

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

Arduinoねた その18 0021

2010-10-08 | Arduinoねた

いつのまにか IDE 0021 がリリースされていました。

まあ、あんまり関係ないかもしれませんが・・・

とりあえず、ダウンロードしておきます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その17 サーボを接続してみる

2010-10-04 | Arduinoねた

さて、こんどは・・・サーボを接続してみます。

サーボって、ラジコンとかでジーコジーコ音を立てるモ-ターですね。

(なんちゅう表現!)

Arduinoではサーボ用の命令もあるので簡単に接続できる・・・ハズです。

でも、その出力が9Pinと10Pinを使うようです。

それって、LCDの表示に使っちゃっているじゃないですか・・・

ということで、まずは9,10Pinを空けることからやっていきます。

10Pinに接続していたジャンパー線を13Pinに移動しました。

6~9Pinに接続してたジャンパー線を5Pin~に移動しました。

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

これで、LCDへの接続線の移植は終了です。


さて、肝心のサーボモーターに接続します。

秋月電子で買ってきたサーボは「フタバと同じ接続」だそうです。

これは、白:シグナル 赤:VDD 黒:GND だそうです。

なので、白を9Pin、赤を+5V、黒をGNDに接続してプログラムを実行してみると・・・

サーボモータからは、ギュンギュン音が出ますが、まったく動かず・・・

LCDのバックライトがチラチラと光ります。


なんか、怪しい!


やっぱり、電源を別にしないとダメなのかなぁ。

ということで、電池ボックスで6Vをサーボモーター用に供給したら・・・

あっさりできました。


ということは、やっぱりサーボモーターが出すノイズ?でArduinoが誤動作しちゃうらしいです。

(よく判りませんが、とにかく、ちゃんと動作しない!)

ずっと前に、電子工作の師匠が「制御系と駆動系は別電源」と言っていたのを、改めて認識しました。

Img_1418


で、一旦は実験を終了したのですが・・・

あとで、気が付いて、もう一回・・・

こんどは、パソコンとのUSBケーブルを外して、電池ボックスの6Vだけでやってみたら・・・

出来ちゃいました。


単に、USBケーブルからの給電が弱かっただけみたい!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その16 頭文字D?

2010-09-25 | Arduinoねた

これをArduinoねたにして良いのか判りませんが・・・


M&Y家族が大好きな「頭文字D」

自動車に水を入れたコップを載せ、コップの水をこぼさないように運転していたら、運転が上手になった・・・らしい(笑)


ありゃ現実的には無理でしょうが・・・


でも・・・加速度センサーを活用すれば、水をこぼさない装置とかできそうだなぁ・・・

と思ったら、既にArduinoを使って作った人がいらっしゃいました。

</object>
YouTube: コップの水がこぼれない車載テーブルをarduinoで.wmv


この映像をじっと見ていると・・・酔います! (笑)

いやっ、そうじゃなくて、装置がちゃんと機能しているのがわかります。

Arduinoと3次元加速度センサー、サーボモーターで実現したようです。

実験の時の水の量をもっと増やしてほしいですねぇ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その15 pinMode

2010-09-16 | Arduinoねた

プログラムを組むときに、普通は各pinの入出力を最初に定義します。

夏休みの宿題で、YがArduinoを使って何やらやっていたのですが・・・


「動かない!」と質問してきました。

今やっているのは、単純にボタンを押したら別のランプ(LED)が点くという単純なものなのですが、単純なプログラムなのに、ちゃんと動きません。

いや、単純にA6ポートに接続したLEDが点灯しません。

「pinModeはA5が19だから、A6は20でいいのだよねぇ。」

と首をひねっています。


リファレンスを見ても。

アナログ入力ピンはデジタルピンとしても使えます。アナログ入力ピン0がデジタルピン14、アナログ入力ピン5がデジタルピン19に対応します。

と書かれているだけです。


いろいろ実験した結果の私の結論としては・・・

NANOではA6とA7はデジタル出力に使えない!

です。 

いや、何か単純な間違いをしているのでしょうか?

pinMode( 20,OUTPUT );

と記述しても、エラーも出ないし・・・あたりまえか・・・

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その14 SRF02のアドレス変更

2010-09-15 | Arduinoねた

I2C接続の超音波センサーである、SRF02のアドレス変更に挑戦してみました。

これまで、I2Cモジュールの接続は、あっけないほど簡単だったのですが・・・

今回のアドレス書き換えには苦労しました。


まず、ネットで書き換えのための説明を確認すると・・・

3つのコマンドを順番に送れば良いことが判りました。

0xA0,0xAA,0xA5

です。

その後に、新しいアドレスにしたい数値を送付します。

試しに・・・デフォルトの0xE0を0xF2に変えようと思って、以下のプログラムを実行してみます。 (以下は主要部分だけ)

  Wire.beginTransmission(i2cAddress);
  Wire.send(0xA0);
  Wire.send(0xAA);
  Wire.send(0xA5);
  Wire.send(0xF2);
  Wire.endTransmission();

さて、書き換わったかと思いきや・・・なにも変わっていません。


そうか、やっぱり先頭に Command の 0x00 を書かないとだめなのか・・・

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  Wire.send(0xA0);
  Wire.send(0xAA);
  Wire.send(0xA5);
  Wire.send(0xF2);
  Wire.endTransmission();

よし、これで・・・変わらない・・・


もう、いろいろやってみました。

でも・・・変わらない・・・


もう一回、冷静にネットでSRF02のアドレス書き換えについて書かれているページを検索して、英語を何度も読んでみたところ・・・

アドレス書き換えのためのコマンド1個1個を独立して送らなければならないようです。

ということで・・・

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  Wire.send(0xA0);
  Wire.endTransmission();

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  Wire.send(0xAA);
  Wire.endTransmission();

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  Wire.send(0xA5);
  Wire.endTransmission();

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  Wire.send(0xF2);
  Wire.endTransmission();

としてみたら・・・やっとアドレスが書き換わりました。


今回は長かった!


これで、やり方は理解できました。

(9.99GBPの出資がムダにならずに済んでほっとしてます。)

で、このSRF02の素晴しいところは・・・電源を入れると、設定されている自分のアドレスをLEDの点滅で表示してくれるんです。 これなら、アドレスを変更しても、判らなくなることがありません。

こんなに小さいのに素晴しい機能です。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その13 複数のセンサーを同時に使ってみる

2010-09-14 | Arduinoねた

これまでに、いくつかのセンサーを接続してみました。


じゃあ、今度はI2Cのセンサーを2個同時に接続してみます。

ということで、超音波センサーのSRF02と方位センサーのHMC6352を並列に接続してみました。

結果は・・・普通に使えました。

Img_6385


簡単ですねぇ。


I2Cモジュールのアドレスさえ異なっていれば、簡単に接続できるようです。

おそらく通信自体は遅いのでしょうけど・・・

これで、沢山のセンサーを同時に搭載することも可能・・・なのかな?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その12 超音波センサー SRF02

2010-09-13 | Arduinoねた

怒濤のごとく続く いろいろなセンサーを接続してみようコーナー(勝手に作るな!)です。

 

 

今回は、超音波センサーです。(秋月で購入した SRF02)

 

 

これも、これまで出てきた超音波センサーと何が違うのでしょうか?

はい、こちらは、I2C接続なんですね。

いつものように、2本の線(SDAとSCL)を接続して・・・あっさり完了です。

でもデータのやり取りがちょっとだけ違います。

Img_6379

 

センサーから、測距データを貰う前に、どの単位で計測するかを指示しなければなりません。

(インチかセンチメートルか)

で、センサーから送られてくるデータは、距離の数値がその単位で送られてきます。

17cmなら「17」、25cmなら「25」

NXTの超音波センサーなら当たり前のことですけど・・・普通のモジュールがこのようになっているとは、ちょっとビックリです。

 

 

ただし、このセンサーの弱点は、最小測定範囲が16cmなのです。

ですので、16cm未満の距離は測れないどころか、対象物を16cmより近づけると、センサーが送り出す数値が大きかったり小さかったり不定になります。

ケチケチしないで、もっと高級なヤツを買えば良かったかなぁ。

 

 

でも、こんなセンサーが一個 1,300円で手に入るのだから・・・良い時代ですよねぇ。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その11 非接触型赤外線温度センサー TPA-81

2010-09-12 | Arduinoねた

先日、我が家に届いた赤外線センサーを実験して見ました。

 

 

これも、I2C接続なので、信号線を2本接続するだけです。

そして、プログラムも・・・単純!

と思って実行したのですが、うんともすんとも動きません。

今度はいったい何がダメなんだよ!

いろいろ調べたら・・・SDAとSCLのプルアップの抵抗が必要みたいです。

 

 

SDAとSCLに10KΩの抵抗を入れて、再度やってみると・・・

あっさり動作しました。

Img_6371

 

 

 

これ、すごいです。

単純に温度が表示できます。

何もしないと、気温(室温)が表示され、手をかざすと手の温度が表示されます。

小数が表示されないのが、とても残念ですねぇ。

 

 

さらに、8個のセンサーがあり、8方向の温度をそれぞれ測ることが出来るんです。

これで、測ると・・・私のノートパソコンの熱い部分は37℃のようです。

さらに、熱い空気のでる排気口は42℃と表示されます。

なんか、楽しいです。

 

 

ついでに、サーボを制御する機能まで搭載しているらしいです。

サーボでこのセンサーを動かすと2次元のサーモグラフィーのような出力結果が得られるらしいです。

でも、その制御方法は・・・英語なので全くわかりません。(涙)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

2010-09-10 | Arduinoねた

方位センサーです。

またですか?

そうです。

でも、今回のは、これまでのとはちょっと違います。

3次元での方位検出が出来るのです。

と、いっても完全に3次元とまでは出来ないようで・・・多少傾けても方位を検出できる、というものらしいです。

じゃあ、Arduinoに接続してみます。

って、I2C接続なので、4本の線(電源とGNDを除くと2本)を接続するだけなので、超簡単です。

プログラムもセンサーのレジスタを読み出すだけです。

Img_6362


こんなに、簡単でいいの?

これで、1つのセンサーで方位と傾きを検出することが出来そうです。


ちなみに・・・

このセンサーの実験をしていて・・・

ある時から、液晶(LCD)に文字が全く表示できなくなりました。

何も映らない!?

何で!?

で、よく調べたら、液晶の明るさ(文字のコントラスト)を調整する半固定抵抗がズレていただけでした。


さらに、このセンサーは、あらかじめピンヘッダーが半田付けされているのですが、基板の上側に出ています。

ですので、ブレッドボードに刺すときにはひっくり返さなければなりません。

で、ひっくり返すときに間違って、VCCとGNDを逆に配線してしまいました。 (俗に言う、「逆挿し」)

それを知らずに、Arduinoに接続したUSBケーブルをパソコンに挿すと・・・

「USBに不明なデバイス」と表示されて、Arduinoが接続できなくなりました。

また、何で!? とクエッションマークが頭のなかで回りました。

センサーの基板に触れたら

熱っちぃ!

そこで、逆挿しにやっと、気が付きました。

まあ、気が付いて良かったです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その9 不明なデバイス

2010-09-07 | Arduinoねた

Japaninoを使用していたパソコンに Arduino NANO を接続しても、「不明なデバイス」と言って、認識されないことがありました。

その場合は、

http://www.ftdichip.com/Drivers/VCP.htm

にある、ドライバを入れると良いようです。

コメント (4)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その8 君は眩しすぎるぅ

2010-09-06 | Arduinoねた

これまで、Japanino で実験をしていたのですが・・・

方位センサーや加速度センンサーの実験をするときに、基板本体とブレッドボードが離れているので、実験がめんどい!

ということで、ブレッドボードにそのまま挿して使える Arduino NANO を購入しました。

Img_1075

手前がNANOです。 ちっちゃい!


このNANOは電源をいれると・・・USBケーブルをパソコンに挿すと・・・PWRのLEDが青色に光ります。

この青色の光が・・・まぶしい!

Img_1298

君が眩しくて・・・真っ直ぐ見ることができません。(ぽっ!)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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でシェアする

Arduinoねた その6 超音波センサー

2010-09-01 | Arduinoねた

次は超音波センサーを接続してみます。

何で買ったかは記憶に無いのですが・・・EZ1という超音波センサーのユニットが転がっていましたのでそれを接続してみます。


このユニットは3種類の出力方法があります。

・シリアル接続

・普通のアナログ出力

・PWM出力

シリアル接続は・・・難しそうなのでパス。

普通のアナログ出力は、問題なくできました。(あたりまえ!)

で、PWM出力に挑戦です。


EZ1のPW端子をArduinoのデジタル入力(D7)につなぎます。

プログラムは


#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,5,4,3,2);

void setup()
{
  pinMode(7,INPUT);
}

void loop()
{
  long x;

  x = pulseIn(7,HIGH);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( x,DEC );
  delay( 250 );
}


こんな感じです。

いや、もう、簡単にできて良いのでしょうか?


これだと、常に超音波を出し続けることになります。

センサーのRX端子をLOWにするとセンサーを停止し、HIGHにするとセンサーを有効にできますので、必要の無い時には停止し、必要のあるときにだけ超音波を出すことができるようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

2010-08-31 | Arduinoねた

では、次はI2Cの実験です。


何で買ったか判らないけど・・・方位センサーHMC6352があったので、これを接続してみました。

HMC6352は、Vcc、GND、SDA、SCLの4本を接続します。

で、ArduinoとはSDAをA4、SCLをA5に接続するならわしのようです。

Img_0930


で、プログラムは


#include <LiquidCrystal.h>
#include <Wire.h>

const int i2cAddress = 0x42 >> 1;
LiquidCrystal lcd(12,11,10,5,4,3,2);

void setup()
{
  Wire.begin();
}

void loop()
{
  int h;
  h = readHeading();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( h,DEC );
  delay( 250 );
}

int readHeading()
{
  int heading;

  Wire.beginTransmission(i2cAddress);
  Wire.send("A");
  Wire.endTransmission();
  delay(6);
  Wire.requestFrom(i2cAddress, 2);
  heading = Wire.receive();
  heading = heading << 8;
  heading += Wire.receive();
  return(heading);
}


これで、方位を0~3600の数値でLCDに表示します。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その4 アナログ入力

2010-08-30 | Arduinoねた

次は早速、3次元加速度センサーでアナログ入力の確認など・・・

使用したセンサーはKXM52-1050という3次元加速度センサーです。

これのX軸出力をA0ポートに、Y軸をA1ポート、Z軸をA2ポートにそれぞれ接続しました。

 

Img_0926

 

プログラムは

#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,5,4,3,2);

void setup()
{
}

void loop()
{
  int x,y,z;

  x = analogRead(0); 
  y = analogRead(1); 
  z = analogRead(2); 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( x,DEC );
  lcd.setCursor(5,0);
  lcd.print( y,DEC );
  lcd.setCursor(10,0);
  lcd.print( z,DEC );
  delay( 250 );
}

こんな感じですね。

 

LCDに x、 y、 z の数値が表示されました。

ブレッドボードごと傾けると数値が変化します。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする