2011-03-26

まんだらけ

つい先日大阪梅田のまんだらけに寄ったところ、ハセガワのMiniBoxシリーズが大量に出ていました。全部¥210と安かったので5個ゲット。ほんとは全部買い占めたかったんだけど、持ちきれないので。まだ山積みされてたけど見てる最中に別の人が3個買ってたのでもうないかも。

2011-03-25

Arduinoでリモコン その5

Arduinoでリモコン その5です。
ステアリングサーボとしてその4で紹介したスケッチを組み込みます。 微妙なコントロールはできませんがトイラジと同じ右か左かくらいのコントロールはできます。その2で紹介した Serial.print xxxの変わりに以下のスケッチを挿入します。下はF2を受信した時に右信地旋回するスケッチです。forループの下は左右モータのコントロール信号です。右モーターは逆転、左モーターは正転をさせます。他のボタンもこの下にだらだらと書き連ねていきます。もっとうまい方法はあるけど、これで動くのでまあいいやって事で。
-----------------------------------------------------------
//右信地旋回 F2 242
      if (IrCtrl.buff[3] == 242) {
          for (int i=0; i<100; i++) {
           int c=2047;
           digitalWrite(5, HIGH);
           delayMicroseconds(c+500);
           digitalWrite(5, LOW);
           delayMicroseconds(20000-c-500);
          }
         digitalWrite(9, LOW);
         digitalWrite(10, HIGH);
         digitalWrite(11, HIGH);
         digitalWrite(12, LOW);
       }
-------------------------------------------------------------
動いているところを見てみましょう。

Arduinoの基本はできたのでこれからは本体のプラモを作っていく事にします。

2011-03-22

Arduinoでリモコン その4

Arduinoでリモコン その4です
Sarvoライブラリが使えれば良かったのですが、IrCtrlライブラリと競合するので使えません。そこでかなり強引なやり方でサーボモーターをコントロールする方法を紹介します。下のスケッチはフルスイングを繰り返します。繰り返しパルスの幅を20msecに固定しつつHighとLOWの期間を制御します。サーボがフルスイングする間はパルスを出し続ける必要があるので100パルス出すまで繰り返します。この繰り返し回数はサーボモーターの反応スピードで調整します。
-------------------------------------------------------
void setup(){
  pinMode(9,OUTPUT);
}
void loop(){
  for (int i=0; i<100; i++) {
  int val=0;  digitalWrite(0,HIGH);
  delayMicroseconds(val+500);
  digitalWrite(9,LOW);
  delayMicroseconds(20000-val-500);
  }
  for (int j=0; j<100; j++) {
  int val=2000;
  digitalWrite(9,HIGH);
  delayMicroseconds(val+500);
  digitalWrite(9,LOW);
  delayMicroseconds(20000-val-500);

  } 
}
-----------------------------------------------------
これで基本のスケッチはできたはずです。

2011-03-21

Arduinoでリモコン その3

今回はサーボを動かします。
サーボモーターはPWMで制御されます。ArduinoのanalogWrite(xx)コマンドを使えば簡単にPWM出力する事ができます。
----------------------------------------------------------
void setup(){
  pinMode(3,OUTPUT);
}
void loop(){
  int val=analogRead(0)/4; // (0~1023)/4
  analogWrite(3,val); // (0~255)
  delay(20);
}
----------------------------------------------------------
但しこのPWM周波数はサーボモータにしては500KHz(幅2msec)と早いのでうまく動くものと動かない物があります(実験済み)。動いてもジーッと言う音がしてドライブしっぱなしなのでサーボ自体が熱くなります。analogWriteは使わない方が良さそうです。

次に試したのがライブラリにServoを使う方法です。これはばっちりです。但しここに書いてある様にArduinoの標準的なPWMがいくつか使えなくなっています。調べたところ5番と6番のみ使えます。サンプルスケッチです。
-----------------------------------------------------------
 #include 
Servo servo;
void setup() {
  servo.attach(3);
}
void loop(){
  float val=analogRead(0)*180.00/1023;
  servo.write(int(val));
  delay(20);
  Servo::refresh();
}
-----------------------------------------------------------
サーボを動かすにはばっちりなんですが、IrCtrlライブラリと相性が合いません。一緒にincludeするとコンパイルエラーになりますので、この方法もダメ。
ではどうするか・ ・ ・は次回。

2011-03-20

Arduinoでリモコン その2

Arduinoでリモコン その2です。
前回"▲"ボタンを押した時に受信した"N 85 F8 A F5"は(サンプルスケッチ IrCtrlTest.pde)の↓この部分↓で受信コードをPCへシリアルで送信しています。
----------------------------------------------------------
#if IR_USE_NEC
 case NEC: /* NEC format data frame */
   if (l == 32) { /* Only 32-bit frame is valid */
     Serial.print("N ");
     Serial.print(IrCtrl.buff[0], HEX); Serial.print(" ");
     Serial.print(IrCtrl.buff[1], HEX); Serial.print(" ");
     Serial.print(IrCtrl.buff[2], HEX); Serial.print(" ");
     Serial.print(IrCtrl.buff[3], HEX); Serial.println();
   }
   break;
 case NEC|REPT: /* NEC repeat frame */
   Serial.println("N repeat");
   break;
#endif
----------------------------------------------------------
"N 85 F8 A F5"の例では buff[0]に85、buff[1]にF8、buff[2]にA、buff[3]にF5が入っている事が解ります。押されたボタンの種類はbuff[2]又はbuff[3]で解りますから、条件判断を入れてSerial.print(xxxxx)の変わりにサーボやモータードライバに出力してやれば良い事になります。

モータードライバはTA7291等を使います。TA7291は秋月等で容易に手に入ります。ポートを2つ使い、一方のみをHighにすれば正転、もう一方のみをHighにすれば反転という動作をします。モーターを2個使う為には4つのポートが必要になります。

サーボを使う場合はちょっと難しいです。その話はその3で。

Arduinoでリモコン始めました。

おじやです、こんばんは。
ラジコンはまともに送受信機やアンプを買ってくると非常に高くつきます。そこでTV等に使う赤外線リモコンを使って自作する人がいらっしゃいます。PICを使った例がありますが、おぢやはArduinoを使います。写真のArduino Unoは¥2,995と非常に安く手に入ります。ここにIR受信機やモータードライバ、サーボ等をくっつければ良いと言う事です。作り方を数回に分けて解説して行きます。但し基板が大きいので小型の車両には使えません。おぢやはドラゴンの"SS-1C スカッドB"に組み込む予定です。
 受信側コードの解析にはこれを使わせて頂きます。そのへんに転がっている送信機を使って受信コードを調べてみます。写真のリモコンの▲ボタンを押すと"N 85 F8 A F5"と帰ってきます。実際に受信しているコードは"85 F8 A F5"です。最初の"N"はNECフォーマットという意味で受信ソフトが解析して付け加えたものです。このプログラムはこの他にSONYフォーマット("S"がつく)と家製協フォーマット("A"がつく)が解析できます。ここからはNECフォーマットを前提にソフトを作って行きます。次の"85 F8"はメーカー毎に決まっているコードでこれで混信しない様になっています。その次の"A"が押されたキーを指します。次の"F8"は"A"を反転させたものです。従ってこの"A"もしくは"F8"が押されたら"前進"という様な動作をさせれば良い訳です。
次回は実際のスケッチ(Arduinoではソフトウェアの事をスケッチと言います)を紹介していきます。まあ、忘れない様に書き留めるくらいになると思いますが。

2011-03-19

地震

地震お見舞い申し上げます。
おぢやは大阪在住で地震当日東京出張の予定でしたが、客先の都合で延期になり帰宅難民にならずに済みました。 昨日延期になった会議の為東京へ行ってきました。朝の新幹線上りはいつもならほぼ満席なんですが、昨日は一両に15人しか乗っていません。千葉から来る東京勤務の人と待ち合わせたんですが、その人が家を出たのが6時でおじやが家を出たのも同じ6時、10時過ぎに落ち合いました。山手線は空いてますが、都区内へ入ってくる足が大変な様です。
一方帰りの新幹線は満席です。明らかに3連休だけでも東日本から脱出しようとする子供連れでいっぱいです。
客先に行った帰りに多少ですが支援物資を持って秋葉にある支店に行ってきました。電気の街に懐中電灯を届けるなんて皮肉な話です。秋葉にはメイドさんも居て賑わっていましたが、普段ほどの活気はありません。こんなにがらがらの東京を見たのは初めてです。こんな時に出張なんてと言う人も居ますが、こんな時こそ関西が頑張っていかねばと思いました。

2011-03-06

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer. 完成

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer.完成です。
基本シールより分厚いので貼りにくいかと思ったらそうでもありません。凹部は後から爪で押し付けてやると延びて貼り付いてくれます。シェリルの顔の部分は大き過ぎて一度に貼れません。いくつかに切り分けて貼りました。あちこち浮いている所がありますが、箱絵の作例も良く見ると空気が入っている所があります。まあ、こんなもんか。
やっぱりシェリルはいいですね。

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer. その3

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer. その3です。
機体のベースとなるシールを貼り終えました。機体の裏表で貼り合わせの部分が繋がらずに隙間が空いてしまいますが、シールなら仕方の無い事でしょう。これを塗り分ける人の忍耐には脱帽です。

2011-03-02

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer. その2

YF-29デュランダルバルキリー ファイターモード シェリルマーキングVer. その2です。
色プラ、パチ組みなのでそのまんま組み立てます。ガンプラ(じゃないけど)は久しぶり(初代以来)ですが、昔に比べると格段に進化しています(←今更)。ストレスなく組めるんですが、最近海外キットばかり組んでいたのですごくおもちゃっぽく感じてしまいます。
添付のシールはなかなか良くできていますが、さすがにカーブに沿って貼ると皺ができてしまいます。
 
色塗らないので、操縦席にはこの人形の下半身をぶった切って載せました。
 
部品点数が少ないので二時間ほどで組み立て完了です。
 これからが本番です。シェリルのシール貼り、上手くいくかなぁ。