カテゴリー別アーカイブ: 電子工作

電子工作関連。

ガジェットカフェで Arduino の話をしました

※この記事は2010年10月19日のものです。

そんなわけで、まだ Arduino では初心者なのですが、自分の体験をもう一度振り返ってこれから始める人の参考になればと思い、ガジェットカフェさんで数分のスピーチをさせて頂きました。

ガジェットナイト01~Arduinoガジェット特集
http://gadgetcafe.jp/night/101016.html

こういった発表が出来る機会は少ないので、自分自身の勉強にもなりました。後日、自分でもう一度自分の発表を見たのですが、やはり良くないところが目立ちます。

・リハーサルが浅く、プレゼン資料の通りにストーリー進行できないところがあった

・聞いている人の方を向いていない時間が多い

・「あの」「で」「えーと」「その」が多い

・詰め込みすぎなのを時間内に話そうとする余り早口になっている

次回は是非、これらの点を改善して出来ればと思います。また機会があれば是非やらせて頂きたいです。

※この発表で使用した資料を置いておいたサーバーのサービスが終了したため、資料を見ることは出来ません。申し訳ございません。

 

Arduino を使って鉄道模型を自動運転

※この記事は2010年8月17日のものです。

そんなわけで、前にニコニコに投稿した自動運転装置について、ちょっと解説しておきます。

基本的な回路としては
・Arduino (全体の制御を行う)
・液晶 (デバッグなどのために)
・モーター制御部 (12Vのモーターを制御するために)
・ポイント制御部 (同じく、12Vで一瞬電流を流すために)
・測距用センサー (車輌の接近を感知するために)
・可変抵抗抵抗 (車輌の最高速度や、ブレーキ位置を設定するために)
で構成されています。

では、これらを一つ一つ解説していきます。
・Arduino (全体の制御を行う)
一番一般的な Duemilanove 328 を使っています。
本エントリーの後半に今回使用したスケッチを添付します。スケッチの内容については後述。
・液晶 (デバッグなどのために)
液晶は秋月の SC1602BSLB を使っています。
Arduino に液晶をつなぐ配線はこの辺(デバイスの接続)を参考にして接続しました。
・モーター制御部 (12Vのモーターを制御するために)
12Vモーター駆動用に TB6549PG と言うICを使っています。
このICを駆動するための回路はスペックシートの回路をそのまま使用しています。
スペックシートP15に指定されている部品を使ってP16の回路をそのまま組んでいます。
・ポイント制御部 (同じく、12Vで一瞬電流を流すために)
基本的な回路は「Bトレ三昧」を参考にました。コンデンサーは2200μFを使ってます。
ただ、上記回路の切り替えスイッチ部分をリレーに変更しています。
以下の図で、リレーは Y14H-1C-5DS を、抵抗は10KΩを使用しています。
(作図ソフトを持ってないので、ネット上から一部借用して切り貼りしました、 すいません)

・測距用センサー (車輌の接近を感知するために)
基本動作はこの辺(せつぞく君)の赤外線測距を参考にしました。
・可変抵抗抵抗 (車輌の最高速度や、ブレーキ位置を設定するために)
10KΩの可変抵抗を使用しています。
ここまでで基本的な部品の調達や接続は出来ると思います。

引き続き、AutomaticControl001.pdeの説明をします。

本プログラムは「測距センサーに車輌が近づく→減速して停止→次の動作パターンを実行」をひたすら繰り返しているだけです。動作パターンには「どのセンサーで検知し、ポイントをどのように切り替え、車輌をどちらに走らせるか」を列挙します(後述)。各関数は読んで貰うとして、自分のレイアウトに合わせて変更する必要がある部分だけを解説します。変更が必要なのは「// driving pattern」以降です。

先ずは全体像として以下の4つを設定します。

レイアウトに含まれるポイントの数(今回は1を指定しています)。
#define c_NumOfPoint         1
モーター制御用ICの数(今回は1を指定しています)。
#define c_NumOfPowerSupply   1
センサーの数(今回は3個設置しています)。
#define c_NumOfSensor        3
動作パターンの数(今回は4パターンです)。
#define c_NumOfPattern       4

次に、ピンアサインを設定します(// pin Assign 以降)。
今回はポイントは1箇所で、デジタルの10番ピンを使用します。
int c_Pin_Point[c_NumOfPoint]           = { 10 };
モーター制御ICへの接続はデジタル6/7/8/9番ピンを使います。
int c_Pin_Power[c_NumOfPowerSupply][4]  = {{  6,  7,  8,  9 }};
センサーは3個で、アナログの0/1/2番ピンを使います。
int c_Pin_Sensor[c_NumOfSensor]         = {  0,  1,  2 };
可変抵抗から、ブレーキ開始の距離を取得します。アナログ3番ピンを使います。
#define c_Pin_VRDistance      3
可変抵抗からブレーキやアクセルの強さを取得します。アナログ4番ピンを使います。
#define c_Pin_VRAcceleBreake  4
可変抵抗から車輌の最高速度を取得します。アナログ5番ピンを使います。
#define c_Pin_VRMaxSpeed      5
液晶などの接続は、他のページに書いてある解説の通りです。

最後に、運行パターンを設定します。まだ実装していない機能があるので2カラム目に無駄な項目がありますが無視して下さい。
int c_Program[c_NumOfPattern][2+c_NumOfPoint+c_NumOfPowerSupply] = {
{ 0, 0, HIGH, c_DirLeft  },
{ 1, 0, HIGH, c_DirRight },
{ 0, 0, LOW , c_DirLeft  },
{ 2, 0, LOW , c_DirRight }
};
これの
{ 0, 0, HIGH, c_DirLeft  },
について解説します。
1)0番センサーへ接近するパターンで
2)(2カラム目は無視)
3)ポイントは HIGH 側に切り替えて
4)車輌は左方向に進行せよ
と読みます。複数ポイントがある場合は、3)を羅列する形になります。

ニコニコ動画にアップしているのと同じ構成であればもちろんスケッチを変更する必要はありません。ってか、先ずは確実なニコニコと同じレイアウトからはじめるのがよいと思います。その上で内容を理解してレイアウトを変えるのがよいかと。

ご参考まで。

Arduino 用の簡易 Device Operation System

※この記事は2010年6月25日のものです。

そんなわけで、シリアル回線からコマンドを発行すると、その通りに Arduino が動作するようなシェルのような物を作ってみました。

動かし方は簡単で、以下のスケッチを Arduino に流し込んだら、シリアルモニターを 9600bps で起動して下さい。そうすると「A-DOS」とか出て、プロンプト(>)が表示されます。一番分かりやすいのはデジタル13番ピンのLEDを点滅させることだと思います。通常であれば

digitalWrite( 13, HIGH );

delay( 1000 );

digitalWrite( 13, LOW );

とソースに書くところですが、この A-DOS を使う場合は

dw 13 high ;

de 1000 ;

dw 13 low ;

と、ターミナルから命令を送ってみて下さい。まあ、13番ピンの状態を手で遷移させるので、間に delay() は入れる必要はないんですが。 一行に複数の命令を書くことも出来ます。上の例であれば dw 13 high ; de 1000 ; dw 13 low ; と打ち込みます。

他にも digitalRead(dr), analogRead(ar), analogWrite(aw), tone(to), noTone(nt), millis(mi) あたりが使えます。 とりあえず、勢いで作ったんですが、これって需要ありますかね?

β版の注意!

・コマンドラインから送れるコマンドの最大長は 254 文字です・命令の最後に必ず「;」を付けて下さい

・本来なら unsigned long な所を long にしてたりするので、不審な挙動をする事があるかも

・パラメーターは一つ当たり19文字以内でお願いします(20桁の数字とかはとりあえずNGで)

・IDE は0018 を使って下さい

・Japanino の場合、シリアルモニターを起動したら Japanino を一度リセットして下さい

ダウンロードはこちら → A_DOS000002.pde

放送事故

※この記事は2010年5月28日のものです。

さっきネットにアップした動画の一番最初に入るべき文字列がすっかり消え去ってた。動画から何から全て登録し終わった後に気付いたんだよなー。まぁ、しょうがないか。そんなわけで、今回もニコニコ動画に投稿してみました。

ここのところすっかり Arduino 漬けです。まだもうちょっとだけ作る物があるので、後一週間くらいはゴチャゴチャやってると思います。

ちなみに、上の写真がその Arduino + Apple Remote で操作できる鉄道模型。

・Playボタンを押すと、走行中なら減速して停止、停止中なら加速して巡航

・+ボタンを押すと、巡航速度を上げる

・ーボタンを押すと、巡航速度を下げる

・←→ボタンを押すと、走行中なら減速して逆方向に加速、停止中ならその方向に変更

・Menuボタンを押すとポイントの切り替え

今回のレイアウトにはポイントが4器。Menu ボタンを押すと、手前の引き込み線から順に上に向かってポイントが切り替わっていく仕組みになってます。一番上まで切り替わると、次は周回に戻ります。こ のように、Menuボタン一つで4器のポイントが不整合無く動くようにプログラムされているところがポイント(シャレじゃなく)。

しかし Arduino は面白いわ。ハード的にはたいしたことはやってなくても、ソフト的に加減速の微調整が出来たり、特定のパターンに従ってポイントを切り替えたり。PCが起動していなくてもこのマイコンさえあれば動いちゃうってのがオモチャ感覚で凄くいい。

今回のプログラム(スケッチって言います)を書くに当たって、前回のスケッチを読み返したんだけど、無駄なルーチンや include が残ってたりして恥ずかしいー!ダメぢゃん!

 

久しぶりに半田付け

※この記事は2010年5月27日のものです。

そんなわけで、Arduino 用に鉄道模型を簡単に制御できるモジュールを作ってみた。ポイントの自動制御のためのモジュールも作ってみた。

久 しぶりの半田付けだった事もあり、出来上がりとしてはまあまあ程度。しかし、予めブレッドボードでプロトタイプが組めることのありがたさを改めて実感。ブ レッドボードでの借り組みのステップで色々見えてくることもあるし、プログラムの動作も試せるし、実際に動作させて問題がないことを確認した上で制作に入 れる。ブレッドボードがこれほどありがたいとは。

 

今回、5Vの信号で12Vの回路を駆動するワザを覚えたので、今後、24Vと100Vのブツを駆動する予定。長年ホコリをかぶっていたアレが火を噴くときが来たぜ!

Arduino で鉄道模型を制御

※この記事は2010年5月17日のものです。

そんなわけで、Arduino が我が家に来てからちょうど一ヶ月。ああ、目的の場所にやっとたどり着いたよ。

今回やりたかったのは「鉄道模型の自動運転」なんですが、なにぶん半田付けは出来ても自分で回路図なんて書けないので、人様の回路図を Google 様にお願いして探すくらいしか能力がありません。そんな時に発見したのが Arduino 。これを使うと、C言語の基本さえ出来れば誰でもハードウェアに対してちょっかいが出せるらしい。詳しくは、他の人が書いているのでここでは割愛。

で、Arduino を使ってどのように実現しようかと考えたか、っちゅーと

・状態を表示するディスプレイの接続(SC1602BLSB 秋月+10KΩ可変抵抗)

・可変にした方がいいと思われるパラメーターの供給(10KΩ可変抵抗)

・測距モジュールを使って車輌位置の検知(GP2Y0A21 秋月)

・Arduino 経由で車輌の加減速(TB6549PG 樫木総業+スペックシートに書いてある部品)

・Arduino 経由でポイントの切り替え(Y14H-1C-5DS 秋月+2SC1815,逆流防止ダイオード)

これらをクリアすれば、あとはプログラムで何とかすればいい話。

ええ、上から順にぐぐってはテストして動作させましたよ。問題は一番最後のポイントの切り替えでした。これだけどうしても自力では実現できずに人に聞いて教えて貰いました。その節はありがとう御座いました(と北を向いて祈る)。

プログラム(ってかスケッチと呼ぶ)も何とか動いたのでここで動画を公開しておきますね。リセットすると、まず各部の動作チェックが始まります。液晶、ポイント、速度制御、センサーの順にチェックプログラムが動きます。それが終わると自動運転が始まります。

スケッチも公開の予定。ちょっと待ってね。