« 2014年12月 | トップページ | 2015年2月 »

2015年1月31日 (土)

「誰でもわかるマイコン入門」時間差シャッター分配器

さて、前回は、簡単なインターバルタイマーを作成しました。今日は、本来の目的であるシャッター分配器で改造します。まずシャッター入力用のコネクタを追加します。

1501311
一方をP5に、もう一方を3.3V Regulated Outにつなげます。これで、シャッターONのとき、マイコンに1が入力されます。

プログラムは以下にアップしました。

http://developer.mbed.org/users/Honmaka/code/IntervalShutter3/

プログラム解説です。

DigitalOut Camera1(p30);
p30をデジタル出力として使う、名前をCamera1と名づける

DigitalOut Camera2(p29);
p29をデジタル出力として使う、名前をCamera2と名づける
 
 
 

DigitalIn  Input(p5);
p5をデジタル入力として使う、名前をInputと名づける

int main() {
    Input.mode(PullDown);
Inputをプルダウンする(0Vにつなげる)これにスイッチが解放の場合、0になる

    int PreInput = 0;
整数型の変数をメモリからもらいPreInputと名づける。そして0に初期化する。

ここで変数という新しい概念が出てきました。プログラムでは入力したデータや計算したデータを保存したいことがよくあります。そのときメモリ領域からもらうメモリを変数といいます。変数の名前はプログラマが自由に付けられます。intは整数型を表します。他には小数点型のfloatなどもあります。また上記のようにある値で初期化することもできます。

PreInputという変数ですが、これは、定期的にスイッチの状態を入力するのですが、一回前の入力を保存しておくために使用します。なぜ、前の状態を保存するかと言うと、スイッチの変化を感知したいからです。

    int NowInput;
整数型の変数をメモリからもらいNowInputと名づける。NowInputが前回ではなく現在のスイッチ状態を保存しておきます。

    Camera1 = 0;
カメラ1のシャッターをOFFにします。

    Camera2 = 0;
カメラ2のシャッターをOFFにします。

    while(1) {
無限ループ繰り返し

        NowInput = Input;
スイッチの状態を入力します。

        if (NowInput != PreInput) {
もし、スイッチが前回とい違うならつまりOFF->ON、またはON->OFFなら次の処理をします。

            Camera1 = NowInput;
カメラ1のシャッターをONまたはOFFします。

            wait(1);
1秒待ちます。(時間差シャッター)

            Camera2 = NowInput;
カメラ2のシャッターをONまたはOFFします。

        }
if条件文はここで終わり

       PreInput = NowInput;
現在のスイッチの状態をPreInputに保存、次回のif条件判定で利用する
       

wait(0.1);
0.1秒まつ。あまり頻繁にスイッチの状態を連続して読み込みすると、スイッチの状態が変化したときのバタツキ(ON/OFFを頻繁に繰り返すこと)まで読み込んでしまうため、0.1秒間隔でスイッチの状態を読み込めば十分。
    }
}

さて、次回からは応用編に入ります。手始めにTFT液晶をつけてみます。お楽しみに。

| | コメント (0)

2015年1月29日 (木)

「誰でもわかるマイコン入門」フォトMOSリレーをマイコンで操作

前回、フォトMOSリレーを手動で作動させ、シャッターを切りました。

今日は、マイコンでシャッターを切ってみましょう。ということで、今日は簡単なインターバルシャッターを作ってみます。インターバル3秒、露出を1分を永遠に繰り返すという簡単な構成です。

まずは、ハードから、

1501274_2
フォトMOSリレーの1番ピンをマイコンのP30とP29に写真のようにつなぎます。そして2番ピンをGNDにつなげば、完成です。

プログラムは以下にアップしますが、説明の必要がないくらい簡単です。

http://developer.mbed.org/users/Honmaka/code/IntervalShutter/

次回はいよいよシャッター分配器です。それでは。

| | コメント (0)

2015年1月27日 (火)

「理想のポタ赤を作る」自動導入ぞくぞく対応

先日ステラナビゲーターの自動導入に対応したと言いましたが、他の自動導入ソフトへも対応作業を進めております。

まずは、SkySsfari 4 Pro。

1501271

これはスマフォアプリです。無線アダプタなしでそのままで通信できます。スマフォで自動導入できるのはうれしいですね。これはアンドロイド版です。iPhone版は試していませんが、たぶん大丈夫でしょう。そのうち確認します。

SkySafariは、画面が奇麗ですね。観てるだけで楽しくなります。スマフォアプリとしては少々高いですが、値段分の価値はありそうです。

次に、SUPER STARⅣです。一部ファンの多いソフトです。難なく通信できました。

1501272
ちょっと動作が独特のところがあります。

最後に、フリーウェアのCartes du Ciel 3.10です。

1501273
あまりお金をかけたくない人にはお薦めです。

あと、フリーウェアでは、Stellariumを試してみました。通信できてエラーも出なかったのですが、使い方がわかりません。これはパスということで。

個人的にはステラナビゲーターがやっぱ一番いいかな。

| | コメント (2)

2015年1月26日 (月)

「誰でもわかるマイコン入門」シャッター分配器を作る

最近、赤道儀にカメラを2台載せることが多くなってきました。そこで必要となるのが、シャッター分配器です。

カメラのシャッターはリモートコネクタから出てる2本の信号線をショートさせればシャッターが切れるので、意外と単純です。もちろん、その2本の線を並列に分岐させて、2台のカメラのシャッターを同時にコントロールすることも可能かも知れません。

ただ単純な並列接続では、2台のカメラが電気的交わるわけで、あまり気持ちのよいものではありません。完全に絶縁した状態でコントロールしたいものです。

そこで作成するのが、シャッター分配器です。

キーになる半導体デバイスはこれです。

1501261

フォトMOSリレーです。

名前は難しそうですが、原理は単純です。片側半分にはLEDが入っていて、これが光れば、片側半分のスイッチがONになります。いわゆる電子スイッチです。

1501262
前回紹介したFETも電子スイッチですが、FETの場合はコントロール側とスイッチ側で電気的につながっています。しかし、フォトMOSリレーの場合は電気的に絶縁状態にあります。ですから、コントロール側で何か問題があってもスイッチ側に影響を及ぼすことはありません。安心して使えます。

さて、この電子スイッチをONするには、LEDを光らせれば良いだけです。ただ、電圧を直接かけてはいけません。電流が流れてすぎてしまいます。

フォトMOSリレーは普通数mAの電流を流してLEDを光らせるのですが、LEDが暗いとスイッチONに時間がかかる場合があります。ただ、時間がかかるといっても数m秒のオーダーですから気にしないで、あまり電流を流さないことします。マイコンのポートもそれほど、電流を流せません。

そこで1mA流すことにします。電流を1mAに制限するには抵抗を入れますが、LED自身によって電圧1V使いますので、5V電源の場合は4Vが抵抗にかかります。

よって、オームの法則により

R = 4V / 1mA = 4Kオーム

4Kオームの抵抗はなかったので、3.3Kオームの抵抗を間に入れることにします。

さて、これで準備はできました。実は、シャッターを分配するだけならマイコンは必要ありません。なぜ、マイコンを使うかと言うと、時間差シャッターにしたいからです。

最近のデジカメは省電力ですが、シャッターを切った瞬間やSDに画像を保存しているときなどはけっこう電流を消費します。ですから2台同時シャッターを切ると電源に負担がかかり、つながれている機器に影響がでる場合があります。

実際、私は12V5Aの電源にカメラを2台つなげて、同時にシャッターを切ったら電源が落ちました。車のバッテリーとかは大丈夫です。あれは大電流仕様ですから、ということで時間差シャッターが必要になったわけです。

最初はフォトMOSリレーになれるため、マイコンを使わないで、分配器を作ってみましょう。

1501263
こんな感じです。電源は電池です。これだけでもシャッター分配器として使えます。フォトMOSリレーは向きに注意してください。●の位置が写真の通りになるようにします。

小型化重視なら電池はもっと小さくて大丈夫です。また2本でもいけます。3Vの場合は抵抗は2Kオームくらいです。

1501264
このフォトMOSリレーはオムロンの3VM-61D1です。マルツパーツで購入できます。

http://www.marutsu.co.jp/pc/i/211722/

次回はマイコンを使ったバージョンです。

| | コメント (2)

2015年1月24日 (土)

「誰でもわかるマイコン入門」電源の話

「電子工作は、電源に始まり電源に終わる。」

電子工作をやっていると、5Vとか3.3Vとかの電源を作りださなければならない事に直面します。電源回路は簡単なものから、大げさなものまでいろいろありますが、用途や仕様に合わせて適切に選択しなければなりません。

ただ、趣味の工作ですからね。気軽につかえて、便利なモジュール電源を紹介します。

これです。

1501241

マイコンで良く使う5Vの電源のほか、抵抗で6.5~15.5Vまで可変できる出力をもちます。ただし、ほしい電圧の+4V以上の入力電圧が必要です。

このモジュールの便利なところは、3Aも電流を流せるところです。その割には発熱も少ないです。3Aも流せると、デジカメにも使えます。私は出力を8VにしてEOSで使っています。今のところは問題は出ていません。

購入先はここ
http://www.kugaden.com/
商品ページ
http://www.kugaden.com/kk-s05am-3.html

私はまとめ買いしていろいろ使っています。

5Vで使うのは簡単です。おおきい基板に電源ユニットと電解コンデンサの2つを半田付けするだけです。抵抗はつけません。

それでは、これを前回作ったヒーターコントローラーに取り付けてみましょう。

1501242
入力12Vと出力の5Vの3本の線を上のようにつなげてください。出力のGNDは入力側と共通なので、配線しなくて大丈夫です。(ほんとは配線した方がいい)

これで、これ単体で動作するようになります。

コスト重視なら、ほんとは5V電源なんて、もっと簡単にできるのですが、あれこれ考えずに気軽に使えるこういったモジュールもいいかと思います。

さて、次回は、最近、赤道儀にカメラを2台載せる人が増えてきました(←私)そこで、シャッター分配器を作ってみます。

ちなみに、今後予定しているものとしては、電子水準器、GPS受信機とそれを応用した北極星時角表示器などです。

お楽しみに。

| | コメント (4)

2015年1月23日 (金)

「誰でもわかるマイコン入門」ヒーターコントローラプログラム説明

それでは、プログラムの解説です。

ます、プログラムはここ。

http://developer.mbed.org/users/Honmaka/code/HeaterControler/

内容

PwmOut Heater(p21);
p21をPWM出力として使う。名前をHeaterと名づける。

AnalogIn Level(p15);
p15をアナログ入力として使う。名前をLevelと名づける。Levelは電圧0~3.3Vに対応して0.0~1.0の値をもつ。

int main() {
    while(1) {
       Heater.period_us(10000);
パルス周期を10000μ秒=1/100秒とする
 

        Heater.pulsewidth_us(10000*Level);
パルス幅をアナログ入力に応じて0から10000までの値とする

        wait(0.1);
0.1秒待つ
    }
}

さて、以前パルスモータのプログラムの中で、PWMを初期設定する命令をwhile(1)無限ループの中に入れてはだめと言いました。そのとおりですが、今回は中に入っています。

理由ですが、

1 中に入れないと、ボリュームを回しても出力が変化しない。つまり起動したときのボリュームの値だけではなく、常にボリュームの値を読まないといけません。そのため、ループの中に入れる必要があります。

2 しかし、実際ループの中に入れると、正しく動作しません。なぜか?
Heater.period_us(10000);
Heater.pulsewidth_us(10000*Level);

この2つの命令はパルスを出力する命令ではありません。パルスを出力するための初期設定をする命令です。初期設定している間はパルスを出しません。初期設定すればパルスは勝手に出てきます。

つまり
while (1) {
Heater.period_us(10000);
Heater.pulsewidth_us(10000*Level);
}

と書いてしまうと、パルスを初期設定する命令を永遠に繰り返しているだけで、いつまでたっても、パルスは出ません。そこで登場するのが、

wait(0.1);

です。ここで0.1秒間プログラムを止めます。このとまっている間にパルスを出力させるのです。つまり、余裕を与えてやるのです。これで正常にパルスを出力します。

ただし、このようなことが許されるのは、このプログラムがヒーターコントローラーでパルスの周期が厳密でなくて良い場合だけです。

前回のパルスモーターのように、ぴったし恒星時でなくてはいけない場合などは、絶対ループの中に入れてはいけません。そこだけは注意してください。

プログラムを書き込んだら、ボリュームを回してLEDをの明かりが変化するのを確認してください。なお、LEDには470オーム程度の抵抗を入れておきます。またLEDはピンの長い方がプラス側になります。

LEDの代わりに、ヒーターを入れればヒーターコントローラになります。

次回は電源についてお話します。

| | コメント (0)

2015年1月22日 (木)

「誰でもわかるマイコン入門」ヒーターコントローラを作る

モーターを回転させるためにPWMというパルス出力を利用しました。PWMというのは、本来はパルス幅を調整して電力制御をするものです。

そこで、今日はPWMの応用としてヒーターコントローラを作ってみましょう。またアナログ入力についても学習します。

まずは、回路図の代わりの写真から。

1501221_2
まず、ヒーターコントローラの概略です。ボリュームで3.3Vの電圧を分圧して0Vから3.3Vの電圧を作っています。その電圧を(青い線)マイコンのアナログ入力で読み込みます。したがって、マイコンはボリュームの状態に応じて、0から3.3Vを0から1.0に変換して読み込みます。

次に、パルスを出力しますが、パルス幅は、アナログ入力で読み込んだ値(0から1.0)にします。

FETというのは、電子スイッチだと思えばいいです。写真で一番右側のピンがスイッチ入力です。ここが1になると、右から2番目と3番目のピンがONになります。0になるとOFFになります。

このように高速にON/OFFを繰り返すことにより、電力を制御します。

部品の説明

●ボリューム
50Kオームの可変抵抗です。両端のピンが抵抗の両端につながれていて、真ん中の端子がその抵抗をスライドします。したがって、左の端子と真ん中の端子が0Ωから50KΩまで変化します。逆に真ん中の端子と右側の端子が50KΩから0Ωまで変化します。

Bカーブというのは、抵抗値が回転に対して直線的に変化するタイプです。いっぽう、対数的に変化するのはAカーブといいます。音量とか人間の五感に対応するのはAカーブですが、今回の用途ではBカーブがあっています。

●FET
先に説明したように電子スイッチと思えばいいです。写真のFETはたまたま手持ちであったもので大きいですが、もっと小さくても大丈夫です。Nチャンネルというタイプを購入します。

●LED(ヒーター)
写真ではLEDがついていますが、ここにヒーターを付ければヒーターコントローラになります。ヒーター以外にも、冷却ペルチェ素子や、DCモーターなどを付ければ電力制御ができます。

●電源
ヒーター用の12V電源をつなげます。マイコンの電源はUSBからとりますが、実際に応用する場合はヒーター用の12V電源からマイコン用の5V電源をとった方が良いです。その方法は次の次の回に説明します。

さて、次回はプログラムの説明をします。

| | コメント (0)

2015年1月20日 (火)

久々の遠征

今日は本栖湖に遠征に行きます。

でも、到着するころには冬の星座は西に傾いているので、撮るもんないです。

コントローラのフィールドテストをしてきます。

今日は、自動導入、自動モザイク、ステラによる自動導入、オートガイドの試験をしてきます。

それでは。行ってきます。

| | コメント (2)

2015年1月16日 (金)

「理想のポタ赤を作る」自動導入対応しました

理想のポタ赤のコントローラは、単体でも簡易的な自動導入ができますが、パソコンをつなげれば、天体ソフトからも操作可能です。

411161
LX200コマンドの一部に対応しましたので、ステライメージからASCOMドライバ経由で操作できます。私は普段自動導入を使っていないので、星図画面で望遠鏡の向きがリアルタイムで動いているのを見ると感動します。ポタ赤でも自動導入できるんです。

ソフト作りは順調で、アンドロイド対応もほぼ完了です。iPhoneも、もうすぐできます。スマフォで赤道儀を動かせるのもこれも、けっこう感動ものです。

機能としては、オートガイド機能以外はリリースまでにすべて組み込めそうです。

| | コメント (2)

2015年1月11日 (日)

「誰でもわかるマイコン入門」オートガイド対応

前回は、スライドスイッチを付けて、逆転、0.5倍速モードを追加しました。今回はプッシュスイッチを2個付けて、プッシュスイッチを押している間だけ、速度を倍速または停止に変化させます。

つまり、西側プッシュスイッチを押している間だけ、速度を倍。東側プッシュスイッチを押している間だけ、モーターを停止することにします。

これにより、赤経一軸のオートガイド対応にできます。

それでは、まず工作です。ハード的にはスライドスイッチの場合とまったく同じです。

1501111
西側プッシュスイッチの片方をP8に接続し、もう片方をGNDに接続します。

東側プッシュスイッチの片方をP9に接続し、もう片方をGNDに接続します。

これで工作終了です。ちなみに、スイッチを押していない場合は状態は1です。押された場合はGNDにつながれるので0になります。これは覚えておいてください。

次にプログラムです。

さて、今回は押している間だけという制約がつきます。前回はスイッチの状態が0か1かだけが重要でした。しかし、今回は、状態だけではなく、スイッチの変化にも対応しなければなりません。つまり、いつ押されたか、いつ離されたかが重要なのです。

このような場合は、常にスイッチの状態を監視していなければなりません。そこで前回説明した無限ループの中で、スイッチの状態を読み込むことにします。そして、前回のスイッチの状態と常に比較し、変化がないか監視します。

while (1) {
 if  (西側スイッチの状態が前回と違う) {
    速度を変える
 }

 
if  (東側スイッチの状態が前回と違う) {
    速度を変える
 }

}

プログラムはだいたいこのような構造になります。さらに詳しく分類します。スイッチの状態が変化した場合ですが、それが1->0に変化したのか、0->1に変化したのか、つまり押されたのか、離されたのかで処理が異なります。そこでさらに条件判定を追加して次のような構造にします。

while (1) {
 
if  (西側スイッチの状態が前回と違う) {
    
if  (現在のスイッチの状態が0の時) {
 
     倍速にする
    }

   
else {
     ノーマルに戻す
    }
 }
 
if  (東側スイッチの状態が前回と違う) {
   
if  (現在のスイッチの状態が0の時) {
      停止する
    }

   
else {
     ノーマルに戻す
    }
 
}
}

実際のプログラムはここにアップロードしました。上記の構造を良く理解して読んでください。各行の詳しい説明はまた今度します。

http://developer.mbed.org/users/Honmaka/code/PulseMotor3/

 
 

| | コメント (4)

2015年1月10日 (土)

「誰でもわかるマイコン入門」スイッチをつける

前回、パルスモーターを回すとこまでできました。

今日は、スライドスイッチを2つ付けて、0.5倍速モードと回転方向切り替えをできるようにします。

まずは、ハードの工作からです。

1501101
速度スイッチの一方をP5に接続します。片方をGNDに接続します。方向スイッチの方は一方をP6、片方をGNDに接続します。

さらに、回転方向の切り替え信号をドライバに送るため、白い線のようにmbed側はp7、ドライバ側は6番のピンを接続します。

1501102
これで完了です。

次にプログラムですが、プログラム構成方法としてスイッチの要求仕様は2つ考えられます。

1 動作中でもスイッチの切り替えに対応する
2 電源投入時のスイッチ状態を反映する。状態を変えたい場合は電源を再投入する

後者の方が簡単なので、後者の方で紹介しますが、前者もそれほど難しいわけではありません。そのうちやり方を紹介します。

プログラムは以下のページにアップロードしました。

http://developer.mbed.org/users/Honmaka/code/PulseMotor2/

それではプログラムを解説します。

DigitalIn   MotorSpeedSw(p5);
p5をデジタル入力として使用し、名前をMotorSpeedSwと名づける。

DigitalIn   MotorDirectionSw(p6);
p6をデジタル入力として使用し、名前をMotorDirectionSwと名づける。

DigitalOut  MotorDirectionOut(p7);
p7をデジタル出力として使用し、名前をMotorDirectionOutと名づける。

MotorSpeedSw.mode(PullUp);
MotorDirectionSw.mode(PullUp);

この2つの命令はとても重要です。p5、p6をプルアップしています。プルアップはpicのときに説明しました。スイッチがONの場合は、p5、p6はGNDに接続されるから0になります。ところがスイッチがOFFの場合は、p5、p6は解放状態になります。解放だjから0だと思ってはだめです。解放状態は非常に不安定で0か1かサイコロを振る状態と同じで、ランダムです。それを避けるために抵抗を介して+5Vに接続するのが、プルアップです。

このmbedはプルアップ抵抗を内蔵していて上記のように命令でプルアップを有効にすることができます。これによりスイッチがOFFの場合の入力は1になります。

MotorDirectionOut = MotorDirectionSw;
この命令は方向スイッチの状態(0か1)をそのままモータードライバの方向設定ピン(6番)に送っています。

   if (MotorSpeedSw == 1) { //Normal Speed
        PulseMotor.period_us(83140);
        PulseMotor.pulsewidth_us(83140/2);
    }
    else {                     //Half Speed
        PulseMotor.period_us(83140*2);
        PulseMotor.pulsewidth_us((83140*2)/2);
    }

最後です。ちょっと長いですが、ここではスイッチの状態を読み込んでいます。

if というのは条件判定文です。

if (条件) {
条件成立場合はここを実行
}
else {
条件不成立の場合はここを実行
}

スイッチがONの場合(0のとき)は、0.5倍速にしますので、パルス周期を2倍に伸ばしています。いわゆる星景写真モードですね。

さて、次回はプッシュスイッチを付けて、押している間だけ、回転速度を変えられるようにします。これにより、オートガイド対応にできます。

| | コメント (2)

2015年1月 7日 (水)

「誰でもわかるマイコン入門」パルスモーターのプログラム説明

遅くなりましたが、パルスモーターのプログラムの説明です。

パルスモーターを回すには、マイクロステップドライバのSTEPという端子にパルス、つまり1と0の繰り返しの信号を送ってやればいいだけです。

mbedには、パルスを出力する機能があります。mbedの右下6本のピンがパルスを出力することができるピンです。(P21~P26)PwmOutと書いてありますね。

PWMというのは単なるパルスではなく、パルス幅を周期に対して0~100%まで変えられる機能です。この機能を使えば、ヒーターの温度調整やDCモータの速度制御ができます。

今回のようにパルスモーターを回すだけなら、パルス幅は周期に対してちょうど半分でいいでしょう。(デューティー比50%)

今回はP21をPWMのパルス出力して使います。その命令が

PwmOut PulseMotor(p21);

です。ちなみにPulseMotorという名称は私が勝手につけました。ですからここはABCでもPMでもなんでもかまいません。ただし、PulseMotorをABCに変えるなら、以後すべてのPulseMotorをABCに変えなければなりません。

次に命令

PulseMotor.period_us(83140);

これは、パルス周期を83140μ秒に設定しています。

なぜ、83140μ秒か説明します。

一恒星日は86164秒です。しかし、モータードライブの場合、恒星時は86200秒が使われます。いわゆるキングスレートです。

いっぽう、赤道儀を一回転させるのに何パルス必要か考えてみます。赤経軸のウオームホイルを144枚、パルスモーターのステップ角を1.8°とすると、モーター内蔵ギア比を1/36とすると、一回転させるのに必要なパルス数は

144×(360/1.8)×36 = 1,036,800

よって、一パルスあたりの時間、つまり周期が出ます。

周期=86200÷1,036,800=0.83140秒

マイクロステップ°ドライバを使っているので、これをさらに1/32にすることができます。ただ、あまり短くすると精度が悪くなります。したがって、今回はマイクロステップを使わず、1/1にしました。どうしても使いたいなら精度を落とさない方法もあります。

さて、最後の命令は、

PulseMotor.pulsewidth_us(83140/2);

これは、もうわかりますね。パルス幅を設定しています。

ところで、LEDのプログラムにも出てきた、

while (1) {

}

 

の意味ですが、これは、この中にある命令を無限に繰り返せという意味です。それで、LEDが永遠にチカチカしていたのですね。

ところが今回のパルスモータを回す命令はこの無限のループの外にあります。この違いはわかりますか?なぜか? ループの中に入れたら間違えです。

前回LEDを点滅させていたのは、マイコンの命令です。マイコンの命令でもって、点灯させたり、消灯させたりしていました。

しかし、PWMというのは違います。これは初期設定こそマイコンの命令で行いますが、一度初期設定をしてしまえば、後は、マイコンの命令とは関係なく、勝手にパルスを出力し続けます。暴走列車みたいなものです。ですから、ループの外にあるわけです。

もし、この2つの命令をループの中に入れてしまうと、正しいパルスは出さないでしょう。

while (1) {

 PulseMotor.period_us(83140);

 PulseMotor.pulsewidth_us(83140/2);

 }

 なぜなら、この2つの命令を実行するには、オーバーヘッドが伴いますので、時間がずれてしまうからです。

さて、次回はこのモーターにスイッチをつけて、方向と速さを変えられるようにします。

| | コメント (2)

2015年1月 4日 (日)

「誰でもわかるマイコン入門」パルスモーターを回す

最初は天文工作の基本であるパルスモーターを回すところから始めたいと思います。

マイコンでパルスモーターを回すには、マイコンから4本のパルス信号を出し、それをトランジスタやドライバICで増幅して、モーターを回すのが基本です。
ネットなどで検索するとほとんどこの方法が紹介されています。それとは別に「マイクロステップ駆動」という高度な制御方法があります。

従来はマイクロステップ制御は、専用のモジュールが必要であり、高価で、大きく、よほどの高級機でない限りあまり使われていませんでした。
ただ、最近は事情が異なってきました。半導体の進歩で、驚くほど小さく、低価格なドライバモジュールが出てきたのです。値段もかつては数万円しましたが、今は千円台で購入できます。こうなると、使わない手はありません。マイコンの制御もパルス信号を一本だせばいいので簡単です。

そのようなマイクロステップドライバのうち、写真のようなモジュールを購入しました。

501041

以下のショップで購入できます。
http://strawberry-linux.com/catalog/items?code=12025

キットですが、ほとんどの部品は実装されていて、ターミナルをはんだ付けするだけです。早速、マイコンにつなげてみます。

501042_2
今回からは回路図は書きません。写真が回路図の代りです。回路図書くと難しく思われるので。

モーターの電源ですが、8.2Vから45VまでのDC電源です。容量は2A位あれば余裕でしょう。私は、余っていた12VのACアダプタをつなげました。

モーターですが、このマイクロステップドライバはバイポーラ制御なので、バイポーラのパルスモーターが必要です。見分けるのは、モーターから信号線が4本出てたら、バイポーラです。6本出てたらユニポーラです。
試験的に回すだけなら、ユニポーラのモータも使えます。ユニポーラのモータはコイルの真ん中からもう一本線が出てるのですが、それを無視すればバイポーラと同じになります。
また実際にモーターを買うなら、減速機内蔵タイプがよいでしょう。

モータのつなぎ方ですが、マイクロステップドライバの説明書に書いてあります。写真のモータは日本パルスモーター製ですが、オリエンタルモーターとは信号線の色が違うので注意してください。

501043
配線で注意が必要です。マイクロステップドライバ側の9番と10番は写真のようにショートさせて配線してください。

501044
配線ができたら、マイコンのプログラムを作りましょう。

mbedのサイトにアクセスし、右上の[Compiler]のボタンをクリックすれば、プログラムを作れます。

501045
メニュー左上の[new]をクリックします。ここでテンプレートとプログラム名を入力しますが、テンプレートはLED点滅のものそのままでよいでしょう。プログラム名はPulseMotorとします。

501046

そして、main.cppをクリックすれば、プログラムを記述できます。テンプレートのプログラムを消して、次のように入力します。

#include "mbed.h"

PwmOut PulseMotor(p21);

int main() {
    PulseMotor.period_us(83140);
    PulseMotor.pulsewidth_us(83140/2);
    while(1) {
    }
}

501047

たった、これだけでモーターが回ります。プログラムの動かし方は前回説明したとおりです。

たった、これだけのプログラムですが、書くのが面倒な人のために、このプログラムをアップロードしました。以下のサイトにアクセスし、[Import this program]で取り込めば、すぐ動かせます。このように他人のプログラムをすぐ利用できるところがmbedのいいところです。

http://developer.mbed.org/users/Honmaka/code/PulseMotor/

モータが回るのを確認したら、流す電流を制限しましょう。初期状態では1.65Aも流れてしまうので、(定格はモーターの種類にもよるが1.5A以内) 1Aくらいに制限します。写真のようにVREFとGNDの間の電圧をテスタで測り、だいたい1Vになるように、矢印のボリュームを左に回せばOKです。

さて、次回はこのプログラムの説明と、スイッチを2つ付け、回転方向の切り替えと、0.5倍速(星景写真モード)の設定ができるようにしたいと思います。いつになるかわかりませんが、お楽しみに。

| | コメント (0)

2015年1月 2日 (金)

「天文屋のためのマイコン入門」改め「誰でもわかるマイコン入門」

あけましておめでとうございます。今年もこのブログに来てね。

さて、昨年、中途半端な状態で中断してしまったマイコン入門。忙しいのもあるのですが、難しかったですね。PICは難しい。説明もまずかった。

私も反省しております。

もっと簡単に始められるマイコンはないか? 探してみるとありますあります。mbed(エンベット)というマイコンです。これは、ほんと簡単。だれでも、たぶん小学生でも出来るはずです。というより、できるように設計したシステムです。

ということで、タイトルも「誰でもできるマイコン入門」に改め、出直したいと思います。

mbedというマイコンですが、心臓部のCPUはARMという世界的にシェアNO1のマイコンを使っていますが、そうゆうのは関係なく、一番重要なのは、プログラムの作成環境です。

このmbedは開発環境が、クラウドなんです。つまりブラウザベースで、できるんです。面倒なインストール作業、一切不要。しかも、ネットでつながっているので、世界中のプログラマが作ったプログラムや部品が共有できちゃんです。

たとえば、USBやイーサーネットのようなプロでも作成するのが難儀なプログラム部品が簡単に使えちゃったりします。

唯一の欠点としては、少々高いことですかね。一枚6000円弱です。

理屈はさておき、早速使ってみましょう。

買うのはmbedマイコン本体と入門書です。今回はあまり基本的な話はしないので、入門書も一緒に買っておくと理解の助けになります。いずれもアマゾンで買えます。

mbed NXP LPC1768 : Development Board Cortex-M3」http://www.amazon.co.jp/gp/product/B0078W61AG?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00

超お手軽マイコンmbed入門: みんなで簡単ガジェット作り」http://www.amazon.co.jp/gp/product/4789817520?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00

届いたのがこれ、

1501021

箱を開けると、マイコンが出てきます。ピンの機能を表したカードがついてくるのは親切。

1501022
とりあえず、USBケーブルがついてくるので、パソコンにつなげてみましょう。

1501023
そうすると、マイコンピューターにドライブフォルダができるんです。

Mbed01
そう、USBメモリとまったく同じ。マイコンというより、「動かせるUSBメモリ」と思えばいいでしょう。中を開いて見ます。

Mbed02

HTMLページがあるので、開いてみるとmbedのサイトにつながります。mbedのサイトにつながったら、サインアップしてください。メールアドレス、パスワードなどを入力し、ログインすると、次のような画面が出てきます。

Mbed03
Hello, Worldというサンプルプログラムがあるので、これを取り入れてみましょう。赤丸の部分をクリックします。

Mbed04
ここでプログラム名などを入力しますのが、そのままで良いでしょう。

Mbed05

そうするとこのような画面が開きます。これがプログラムを操作するメイン画面です。赤丸のmain.cppというのは、プログラムを記述するテキストファイル名です。これをダブルクリックします。

Mbed06
そうすると、プログラム画面が開きます。プログラムの内容を見ると、LEDを点滅させるプログラムのようです。上のメニューの[Compile」をクリックします。コンパイルとは、プログラムの翻訳です。プログラム言語を機械語に翻訳する作業です。

Mbed07
プログラムの翻訳が終わると、それをダウンロードするかどうか聞いてきますので、「保存」の横のボタンをクリックして、「名前をつけて保存」を選び、先ほどのmbedのドライブの中に保存します。

Mbed08
そうすると、mbedのフォルダの中にプログラムがダウンロードされました。これがいわゆる、プログラムの書き込みです。PICのようなあの面倒な作業が一瞬で出来てしまいます。

もう、プログラムはマイコンの中に入っていますので、マイコンボードの中央にあるリセットボタンを押してみてください。LEDが点滅するはずです。

どうでしょうか? たったこれだけの作業でプログラムが組めてしまいます。

さて、今回から理屈は抜きで、まず動かすことから、先にやっていきたいと思います。次回は「パルスモーター」を恒星時で回してみましょう。天文工作の基本ですね。

それでは、お楽しみに。

| | コメント (4)

« 2014年12月 | トップページ | 2015年2月 »