タグ別アーカイブ: Arduino

Pro Ethernetと熱

先日、某所でsparkfunPro Ethernetが大分安く出ていたので数台購入した。しかし、思いも寄らぬ問題点があったので共有する。

基本的に、Pro Ethernetってこんな感じのArduino UNO互換機。

本体にはUSB←→シリアル通信のための回路がないので、別売りのUSBシリアル変換器を買う必要がある。
続きを読む

タネマキ用のチェックイン機

タネマキ用にチェックイン用の機材を作成してみました。

Suicaやおさいふケータイを使用してメンバーを特定して、その情報をサーバーに送るという物です。主な構成と機能は以下の通り。


続きを読む

Arduino と「GM管【中】キット GMC-03」

※この記事は2011年6月17日のものです。

楢ノ木技研さんの「GM管【中】キット GMC-03」を入手しました。

単体でもガリガリ言うので、目安にはなるかも知れないのですが、せっかくデータが出るピンも用意されているので、Arduino でカウントするプログラムを作ってみました。

注意!正確な値が表示されるとは限りません!
・計測方法は地上からの距離や、線種・計測対象を考慮する必要があります
・CPM を μSv/h に変換する際の定数は、暫定値です

本プログラムはあくまでも CPM を μSv/h に変換して表示するための物です。実際の正しい測定方法などは、先日行われたガイガーカウンターミーティングの動画などを参考にしてくださいね。(地上からの高さ、土とコンクリートの違い、アルミカバーでガイガーカウンターを覆うかどうか、食品の放射能は測れるか?などなど・・・)また、CPM を μSv/h に変換する式も、出来れば再確認して下さい。本プログラムでは、CPM を 120 で割って算出しています。

【本プログラムの挙動】
起動後、60秒間は正常な値を出力しません。これは、他のガイガーカウンターでも同様だと思います。放射線は一定間隔で来るわけではなく、五月雨的に来ます。そのため、たった一秒間計測しただけでは、たまたまその一秒に検知が集中したのか(もしくはその一秒になにも検出がなかったのか)の判断ができません。ですので、1分間程計測をして検出した値を使う必要があります。実際、市販品のガイガーカウンターの中には、起動して1分は値が表示されない物もあるようです。本プログラムでは最初の1分間は、ある程度の予測を元に μSv/h を表示しています。具体的な仕組みとしては、1秒目には、今後も同一の検知が来ると仮定して現在のカウント(積算値)を60倍に。2秒目にはカウントを30倍に。3秒目には20倍に・・・と言った感じで μSv/h を予想表示しています。1分を過ぎると、実際に直近60秒間に検出されたカウント(CPM)から、μSv/h を計算して表示するように作っています。

また、液晶の2行目はレベルメーターとなっており、0.1μSv/h ごとに1つメーターが上がります。(0.22μSv/h ならメーターは2個点きます)

【動作させるには】
本プログラムを実際に稼働させる手順は
・Arduino に液晶をつなぐ(参考:なんでも作っちゃう、かも
・液晶が動作することを Arduino IDE サンプルの LiquidQrystal の中のどれかで確認する
・本プログラムを IDE に読み込ませて Arduino に転送する
・一度 Arduino を USB から抜く
・GMC-03 がデバッグモードになっていないことを確認する
・GMC-03 と Arduino を 5V, GND, Tx(Arduino側は Rx) の3本で接続する
・Arduino に電源をつなぐ

Arduino のシリアル通信(Rx)を使っているので、IDE から Arduino にプログラムを転送時は GMC-03 と Arduino との接続は切っておいてください。
※ SoftwareSirial を使った場合、どうも文字化けがしてしまいうまく動きませんでした。どなたか、うまくいったらフィードバックして頂けるとうれしいです。

制限事項などとしては
・余り高い値を検出させたことがないので、どこで不都合が出るか未テスト
・連続稼働をさせた場合に、50日程度でオーバーフローして誤動作する可能性がある
・GMC-03 がデバッグモードの時、Arduino は 0x00 を受信してしまうが、液晶などにエラーが表示されない

今後の展開としては
・60秒に達していないときは、液晶の右上に「?」を表示
・1分を経過したら、どれかのデジタル出力ピンを HIGH に
・既定の μSv/h を超えたら、どれかのデジタル出力ピンを HIGH に
・GMC-03 がデバッグモードの時のエラー表示
を検討しています。

もし間違いなど、お気づきの点などございましたら Twitter の @a_ono にご連絡をいただければ幸いです。

ソース GeigerCounter.pde

ガジェットカフェで 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,逆流防止ダイオード)

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

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

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

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