ガジェットカフェで 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年6月19日のものです。

上 の写真は中華街ではないのですが、この間中華街に行ったらどこの店の店頭にもこんな感じの巨大な看板が数枚置かれるようになりました。10種類程度のメ ニューが非常に分かりやすく提示されているのはいいのですが、どうにもこうにも下品な感じがします。自分にとって一番いい店は、店のメニューの現物が店頭 に置いてあるところなのですが、確かにわざわざそれをめくってその店のメニューを確認する観光客など殆ど居ません。であれば、このような分かりやすい巨大 な看板を数枚店頭に置いておくのは理にかなっていると言えば理にかなっているのですが・・・。

し かし、この看板、どの店にも「一斉に」導入されたような感じです。中華街の店舗協会みたいな所が旗を振って各店に導入させたのかな。あ、あと副次的な物か も知れませんが、夜なのに安い値段設定のセットメニューを出す店がちらほら見受けられました。看板を出したおかげで、どの店もアピール力が強くなってし まったので、結果、埋もれないようにそのような「夜でも低予算」アピールの店が出てきたのかも。

 

音楽で食べていく、とは

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

先 日、ある人のコンサートに行ってきた。規模はとても小さく、お客さんの収容数は100人くらい。一日2部やって、一回の時間は大体2時間をちょっと切るく らい。スタッフは大体6人前後。チケットは3000円。事前にチラシを刷って近所の商店街とか、関係のありそうな所で告知したりしていた。おかげで、席は ほぼ満席だった。あと、演奏が終わった後にCDの即売会もあった。

計 算上、60万程度の売り上げがあったと思われる。そこからスタッフの人件費12万、チラシの制作費3万、場所代10万で、本人のギャラは35万ほどか。 あ、チケット刷ったり、受け付けて発送したりする手数料もあるからもうちょっと少ないかな。だとして30万。年に20公演すれば600万。怪我や病気のこ とを心配しなければ結構やっていけそうだ。

こ れはあくまで店頭でのCDの売り上げがゼロだった場合の計算。と、言うことは、コンサートに充分な人数が来てくれれば、CDなんて売れなくてもなんとか生 活はしていける、って事だね。ただ、その人の演奏を家で聴きたい人にはCDなりダウンロード販売なりをすればいいだけ。

今の世の中、CDが売れなくて困っているそうだが、実力のない人が、音楽をコンピューターで切り貼りしてCDの形にして売る時代は終わっただけ、なのではないか。音楽としての実力や、エンターテイナーとしての実力があるのであれば、ライブで稼げば宜しい。

となると、一番大切なことはどんなメディア経由でもいいのでひたすらファンの数を増やすことが大切、と言うことになる。昔はラジオかTVがその主な役目を担っていたけど、今はそれに加えてインターネットがある。

一つ気になるのがJASRAC。 実際の演奏内容に全く関係なく使用料を徴収しているようなので、自分の作った曲を演奏しているだけにも関わらず、想定外の出費を強いられるかも知れない。 「自分の作った物は自分の好きなように使える」訳では無いのが音楽のややこしいところか。でも、そのややこし部分をちゃんと理解して上手く回避しないと搾 取されっぱなしってのは世の常とは言え、せちがらいよねぇ。

 

放送事故

※この記事は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,逆流防止ダイオード)

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

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

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

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

リニューアルしました

こんにちは。

以前は iWeb を使って更新していたのですが、メインで使用するPCの変更や、環境の変化から、このサイトの更新方法を変更しました。過去のページにブックマークをされている方がいらっしゃいましたら、お手数ですが変更をお願いいたします。

過去記事は、内容を再確認してこれから投入しますね。これからもよろしくお願いいたします。