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

電子工作関連。

PQI Air Card + Arduino(ダメでした)

そんなわけで、早速試してみましたPQI Air Card + Arduino。

もし、これがうまく行くと、即時性はなくてもArduinoをWi-Fiの環境につなげるわけで、夢が広がるお話しだったわけですが、結論から言ってうまく行きませんでした。

続きを読む

鉄板を切ったり曲げたり、精密板金の工場を見学してきたよ

そんなわけで、行ってきました海内(あまうち)工業さん。

この会社は鉄板を切ったり曲げたりして物を作る会社です。鉄板を切って曲げた部品は、コンピューターの筐体を始め、至る所に使われています。ケーブルの端に付いている端子とかにも使われてます。こういった工場に入る機会はなかなかないので、もうwktkッスよ!
続きを読む

おおらかな時代のACアダプター

自分は貧乏性なので、本体は捨ててしまってもACアダプターだけ残してあることがある。

貯めるばかりではアレなので、使おうと思って試しに出力を確認してみた。ところが、一台目を測ってみたところ本体の表示は8.5Vなのに出力が12Vもあって、一瞬計測間違えかと思ってあせったのだが、秋月で買ってきた5Vの物は計測しても5Vだ。これはもしや、と思い、他の手持ちの物も計測したら、あんまりにもすごい結果だったのでここに共有する。
続きを読む

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 が残ってたりして恥ずかしいー!ダメぢゃん!