へのへのもへじ工作室
12 | 2011/01 | 02
S M T W T F S
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

赤外線データ通信を強化する(japanenoにチャレンジその10)
引き続き、鉄道とは離れた話です。プログラムが好きなわけではないのですが、目的があってやっているので今はガマンです。

実はちょっとした問題が、、、
自作リモコンでちょっとした問題があることがわかっています。向きを変えたり、距離をとったり、またテレビなど他の赤外線リモコンを使うと誤ったデーターを受け取ってしまうことです。リモコン制御で誤動作したり暴走したりするのも困るので、先に進める前に赤外線通信を強化しておきます。

何を変えるのか?
通信データをそのまま送るのではなく、いくつかの工夫をします。一つは、データが壊れたらそれがわかるように、2回データを送って比較し連続したデータのみ正解と判断させるようにします。もう一つは、データの最初と最後がわかるように印をつける(今回はゼロを印とする)ことです。例えば、"ABC”を送るときに赤外線は「ゼロ-A-A-B-B-C-C-ゼロ」と変換して送ります。
これらの処理を入れると多少余分に通信時間がかかりますが、気にしません。また受け取り側はその処理方法を知っているので、先頭と最後のゼロを除き、その後二回同じ文字を受信したら正解として"ABC"であると判定します。もし、お尻が切れたら(例えばリモコンの向きが変わって赤外線が途切れたら)それは、時間切れを検知し次の指令を待つようにします。

スケッチは?
送信側のarduiroのスケッチ(プログラム)は、
int sendIR(char *sdata)
{
int i=0;
Serial.write(byte(0));
for(i=0;sdata[i]!=0;i++)
{
Serial.write(byte(sdata[i])) ;
Serial.write(byte(sdata[i])) ;
if(i>20) return 0;
}
Serial.write(byte(0));
return i;
}
を使います。詳しいことはわからなくても送信したいときに、
 sendIR("ABC");
を実行すれば「ゼロ-A-A-B-B-C-C-ゼロ」を送信します。
"henohenomoheji"とか好きな文字を送ることができます。
なお、受信側はこの暗号めいたデータを、パズルを解くようにして送信文字をとりだすようになります。よって、送信側より複雑ですのでスケッチは省略します。

結果は?
とりあえず、リモコンの混信の影響があるデータは除去し、正常なものだけ受信できるようになりました。
このあたりはもっと良い方法があると思いますが、私は専門家でもないですし、こだわりもないので、今回はこれで完成にします。

続きを読む
スポンサーサイト
自作リモコンでパワーパックを動かしてみる(japanenoにチャレンジその9)
引き続き鉄道とはちょっと離れて、パワーパックをリモコン?で動作させた報告です。リモコンは、arduinoのチップを使って自作し、赤外線通信でコントロールします。今回は開発中の動作テストですので機能も限られますし、「鉄道」という面ではあまり面白さはないかもしれません。

受信機(パワーパック側)の準備:
少し前につくったKQインバーター音発生につかったarduinoボード(動画で赤いプリント基板)です。事前に赤外線通信ができることを確認していますので、少しプログラムを変更しただけです。送信機側のボタンで加速、減速を再現しています。

送信機の製作:
送信機は、にしおかさんから頂いたarduinoのチップにスイッチ、赤外線LED、電池ボックスをつけたものです。一度動作確認はしてあるので気が楽だったのですが、プログラム(スケッチ)を書き込めるようになるまでは何度か試行錯誤がありました。USBが付いているjapaninoを書き込み器として使ったのですが、基板の配線を一度カットしたり、またパソコン側ソフトウエアの設定変更が必要だったり、ちょっと面倒でした。

スケッチの中身は?
テストプログラムは以下の通りです。LEDに高速パルスを作るところだけは特殊ですが、それ以外はスイッチが押されたらデータを送信する簡単なものです。
int sw1 = 11;
int sw2 = 12;
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
DDRD = DDRD | 0x08; // Japaneno= D3 / CPU=PD3(OC2B)
OCR2A=52; //0.5 uS X 52count = 38kHz
OCR2B=26; // onduty = 50%
TCCR2A=0b00100011;
TCCR2B=0b00001010;
Serial.begin(600);
pinMode(sw1, INPUT);
pinMode(sw2, INPUT);
}
void loop()
{
int data;
digitalWrite(ledPin,HIGH); // set the LED off
delay(1000); //**** wait for 0.5S
digitalWrite(ledPin, LOW); // set the LED on
delay(1000); //**** wait for 0.5S
if (digitalRead(sw1)==LOW) Serial.print("1");
if (digitalRead(sw2)==LOW) Serial.print("2");
}
クロックがjapanenoとちがうのですが、待ち時間などを数値で調整しています。(このあたりは別の手もあると思います)

結果は。。。
なんとか機能はしましたが、操作性や応答性などで、まだ改善できるところはありそうです。今回は、実験段階なので、この位にしておきます。



続きを読む
赤外線データ通信に成功!でもちょっとわからない・・・(japanenoにチャレンジその8)
今回で8回目の報告、先週まではPWM制御のパワーパックを検討していましたが、今週はarduiroの車載化のため、赤外線コントロールを調べております。

前回からなにが変わったの?
一昨日は、赤外線を38kHzでパルスにして送信し赤外線受信ユニットの使い方を確認しました。今回はjapanenoのシリアル通信をつかってデータを送受信しました。動画の通り光をさえぎると通信エラーを検出できます。

送信回路の構造は?
まず、将来的には図のような構成を考えています。リレーとかモーターとかを制御できればいいですね。赤外線通信は左下部分、送信側は赤外線LED、受信側は赤外線受信ユニットを使います。赤外線LEDに38kHzのパルス電流を流すため、LEDのプラス側はPWM出力に、マイナス側をTXデータピンにつないでいます。PWMは常に動作していますが、LEDもダイオードなので必要な時だけ電流が流れ赤外線が出力されます。

ちょっと悩んだところ:
受信側は直接シリアル通信のRXデータピンに接続します。じつはこの信号、japanenoのスケッチ書き込みを共用しているので、図のような回路でUSB側、赤外線受信ユニット側の双方の信号を受け付けられるようにしています。あまり勧められる回路ではないですが、赤外線受信ユニットがちょっと特殊な回路(オープンコレクタ)だからできました。抵抗値は2kΩです。

これからどうするのか?
送信器(操作側)もjapaneno(arduiro)で作ることを目指したいのですが、まだ時間がかかりそうです。また手軽に操作するには、自分で作るものより買ってきたもの。。。市販の学習リモコンが流用できないか考えいました。japaneno側に付けたテスト用赤外線LEDを使って必要な指令を送信し、学習リモコンに覚えさせれば簡単かと思いました。

ところが・・・、
帰りに買おうとしたら、財布が空っぽ(先週飲んで散財したことを思い出す)替わりに思いついたのが、携帯電話の赤外線通信機能で同じことができないか?です。
学習リモコン同様、arduiroからのコマンドを覚えこませることができれば、いつでも携帯から操作できるので便利です。
でも、よく知らないのですよ、携帯電話は。学習リモコンアプリとか使えるようなものはあるのでしょうか?
このブログをここまで読んでいただいた方、もし携帯電話に詳しい方がいらしたら、そのようなことができるのかどうか教えていただきたいです。


続きを読む
赤外線送信に成功(japanenoにチャレンジその7)
またまた鉄道とはちょっと離れて、japanenoの話題です。昨日から気になっていた、赤外線通信にチャレンジです。
通信といっても、今回はオン・オフを伝えるだけですので、まだ通信とは呼べないという方もいらっしゃるかもしれません。

受信側の準備:
まず、受信側の赤外線リモコンモジュールには、電池とオン、オフ確認用LEDを接続しておきます。
リモコンモジュールの使い方は、
http://akizukidenshi.com/catalog/g/gI-03292/
を参考にして、出力にLEDと抵抗を接続しておきます。
OUTピンがLOとなったときにLEDが点灯する回路です。
電池電圧は9Vですので5Vになるよう三端子レギュレータも使っています。
実験の前に、テレビのリモコンを使いLEDが点滅することを確認しておきました。

送信側の製作:
ここから本題ですが、arduiroのボードと赤外線LEDをつなぎ送信機とします。
赤外線LEDも光が見えないだけで、ほぼ赤LEDと同じような接続でかまいません。
今回はD5ピンをプラス側、グランドをマイナス側として抵抗とLEDを接続します。
抵抗値は適当で、270Ωを接続しています。

スケッチの製作:
最後にプログラム(スケッチ)を書きます。
オンにするときのプログラムは、こんなかんじです。
DDRD = DDRD | 0x20;
OCR0A=26;
OCR0B=13;
TCCR0A=0b00100011;
TCCR0B=0b00001010;
これでD5ピンに連続的に約38kHzのパルスを出します。
目には見えませんが、赤外線LEDが高速で点滅しているはずです。
でも何かないと確認できないので、japanenoの赤LEDも同時に点灯させます。
オフにするには、以下のスケッチでパルスを止めます。
TCCR0A=0;
TCCR0B=0;
これらのオン、オフプログラムを適度な周期で繰り返します。
(プログラムは省略です)
これ以外にももっと洗練された方法があるかもしれませんが、まだ途中段階なので、細かい調整はしていません。

実験開始:
作り終えたら、arduinoの環境(IDE)からロードします。
結果は動画の通り、arduiroの赤LEDにあわせて、赤外線で送られた受信側のLEDも点滅します。
(動画がさかさまになっていることをお詫びします。回転の仕方がわかりません)
細かいことを言うと、点灯継続時間に違いがあるのです。しかし、将来的にこの特性は問題にならない予定ですので説明は省略します。

結果として、送信側を高速パルス(38kHz付近)にしないと、伝わらないことが確認できました。また、受信側は高速パルスがなくなった状態でオン、オフのみが出力されるので、受信側arduiroも作りやすいことがわかりました。

終りに:
ここに来るまでの準備について、にしおかさんには、いろいろとお世話になっています。実は、ここで使った素子のほとんど(arduiroのチップと赤外LED以外も)をにしおかさんから頂きました。
何から何まで、お世話になりっぱなしで、申し訳ないです。


続きを読む
やりたいことを整理してみる(japanenoにチャレンジその6)
引き続き、japanenoとaruduiroの話題です。

先日運転会でお会いした、にしおかさんから、写真の部品を預かりました。拓啓ぽんさんと同様のaruduiroと、赤外線リモコンの送受信素子です。

赤外線リモコンの送受信素子は、にしおかさんが予定しているtratrainoの通信機能に使う予定ですが、また使い方が決まっていませんでした。いろいろと考えた末にうかんだアイデアがこれです。

パワーパックからはarduiroを使って常点灯パルスを出せることがわかっているので、これにデータをのせれば赤外線送信ができそうです。さらに将来、送信信号を動力用のPWMに重ねて流せば、受光素子のための車両加工も不要になりますね。もっとがんばって電源の問題を解決すればDCCに近い機能に拡張できるかもしれません。

なお、arduiroのチップですが、私の手元にはjapanenoをがあるのでこの基板に手を加えれば、(シリアル変換モジュールを購入しなくても)スケッチを書き込みできるはずです。。。。




続きを読む
京急2100からインバータ音を出してみる(japaninoにチャレンジ5)
仮の出力回路をjapaninoにつなぎ、試走を行います。

京急2100ですが、モーター車が静かなマイクロエースものを選択しました。結果は、圧電ブザーのときと比べると音がこもるような感じですが、ほぼ予想通りの走行性能と停車時からのライト点灯ができました。

計算に間違いがなければ、走行用は、600Hz~1200Hz程度(duty 0~60%),常点灯用は20kHz(duty 10%)として波形を重複させて1います。

音を改善するなら、スピーカーを搭載すればいいのですが、車両の改造が必要になるのでちょっと面倒です。とりあえず、KQ2100モードはこの程度にして、次はエンジン系を検討してみます。


続きを読む
常点灯機能を追加する(japaninoにチャレンジ4)
今日は、japaninoのパワーパック機能に、常点灯機能を追加してみました。前回作成した走行用パルスとは別に、[D5]ピンから耳では聞き取れない帯域の高周波パルスを出力するようにしました。

また、インバーター音も少しなめらかにしてみました。
あとは、[D10]ピンと[D5]ピンの出力を足して出力回路をコントロールすれば、停止時にライトを点灯したまま音を出して走り出すはずです。

今回のプログラム(スケッチ):
ATMELのHPにありますマニュアルを元に作成します。8ビットタイマーを使って[D5]ピンにパルス(duty=10%?)を連続的に出力します。

void setPulse2()
{
DDRD = DDRD | 0x20; // Port D5 -> output mode
// initialize timer 0
TCCR0A=0;
TCCR0B=0;
TCNT0=0;
// set 20uS (=50kHz)
OCR0A=20;
OCR0B=1;
// B7=COM0A1 =0
// B6=COM0A0 =0
// B5=COM0B1 =1
// B4=COM0B0 =0 -> clear on compare match
// B3=-
// B2=-
// B1=WGM11=1(mode7)
// B0=WGM10=1(mode7)
TCCR0A=0b00100011;
// B7=ICNC1=0
// B6=ICES1=0
// B5=-
// B4=-
// B3=WGM2=1(mode7)
// B2=CS12 0
// B1=CS11 1
// B0=CS10 0 -> 1count=1uS
TCCR0B=0b00001010;
}

続きを読む
インバータ音の再現を考える(japaninoにチャレンジ3)
japaninoを使って、インバーター音を再現してみました。
japaninoには、圧電ブザーも付録についていましたので、これを無駄なく使い確認しました。

う〜ん、なかなか難しいですね。グラフのように周波数と速度(出力のduty)を設定し、excelでプログラムのパラメータに変換しました。音のつながりもまだ改善が必要ですかね。


今回のテスト:
PWM設定のプログラム(スケッチ)は、一度動いてしまえば、試行錯誤で調整できます。
indexを0から100まで変化させることで、japaninoの[D10]ピンの出力が変化します。

const struct { int cycletime; int ontime; } pwmtable[101] = {
 1500,0,
 1500,15,
 1384,28,
 1286,39,
 1201,48,
<省略>
}
void setup_pulseout()
{
DDRB = DDRB | 0x04;
}
void setpulseout(int index)
{
 if (index==0)
 {
  TCCR1A=0;
  TCCR1B=0;
  TCNT1=0;
 }
 else
 {
  OCR1A=pwmtable[index].cycletime;
  OCR1B=pwmtable[index].ontime;
  if (TCCR1A==0) TCCR1A=0b00100011;
  if (TCCR1B==0) TCCR1B=0b00011010;
 }
}


続きを読む
パワーパックの出力制御を考える(japaninoにチャレンジ2)
今日は、japaninoによるパワーパックの出力制御のお話です。
基本動作(カッコ内はプログラムの操作)は以下のようになります。

ボリュームで回転角度を検出する
      ↓
(analogReadという命令でデータを取り込む)
(analogwriteという命令でデータを書き込む)
      ↓
パワーパックの出力が変化してスピードが変わる

ここで、パワーパックの出力操作には、通常analogwriteというコマンドを使いますが、これが電源出力部を高速にオンオフするPWM制御を機能させることができます。

最近発売されているパワーパックもPWM制御が多く、japaninoでanalogwriteをそのまま使った場合にはどうやら490Hzの繰り返し周波数で出力されるようです。

ここからは、いきなりjapaninoの細かい使い方の工夫になりますが、
繰り返し周波数なども自由に変化させることができました。

1.analogwriteという命令は使わないで、
 直接 PWMを制御しているマイコン(atmega168V)
のタイマ機能を操作する。

2.今回は繰り返し周波数とオン時間(duty)を
 連続的に変化させられるようにするため、
 8ビットタイマ1をモード15で使用する。

3.出力はOC1Aのcompare matchを利用する。
  (japaninoのD10に相当)

ただしこの設定は、atmelの英文マニュアルを読んでようやく見つけたようなものですので、あまり勧められる方法ではないかもしれません。





続きを読む
japaninoを買ってみた(japaninoにチャレンジ1)
パワーパックとか自動運転とか、コントローラを自作する話題です。
学研の雑誌大人の科学シリーズ・No27 テクノ工作キットというものを購入してみました(実は、こちらのにしおかさんのブログで紹介いただき、興味を持ったものです)。
japaninoという5cm角ほどのマイコンボードが付録です。japaninoはaruduinoという動作環境をベースに作られたマイコンボードキットなのですが、拡張性も考えられており十分に使えそうです。

とりあえずACアダプタ、液晶表示器、可変抵抗、PWM出力回路を接続、動かせる状態になりました。プログラムはパソコンで編集し、USBポートを使ってダウンロードを行います。これからいろいろといじってみようと思います。

続きを読む


天気予報


-天気予報コム- -FC2-

プロフィール

へのへのもへじ

Author:へのへのもへじ
FC2ブログへようこそ!

最近の記事

最近のコメント

最近のトラックバック

カテゴリー

ブロとも申請フォーム

この人とブロともになる

アルバム

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。