2009-06-07[n年前へ]
■電子工作の経験がなくても、誰でもハードウェアを自作できる時代が来ていた!
「電子工作の経験がなくても、誰でもハードウェアを自作できる時代が来ていた!」
Arduinoはどういうものかといいますと、...というものです。
- 完成品が3500円ぐらいで売られている。
- …
- プログラムはC言語ライクな独自言語で、C言語なみの高級言語(のように見えた)。
- Arduino IDEというフリーのIDEを使って、Windows・OSX・LinuxでGUIでプログラムを書いて転送までが全部行える(!)。
- これがほんと手軽で、「ソースコードを書いて、転送ボタンを押すだけ」。
- …
- ソケット通信ライブラリがあり、twitterクライアントライブラリがあるw HTTPクライアントライブラリは未確認。
- Arduinoについている端子には、赤外線LEDや温度センサーなど、およそ電子工作的なものなら何でも接続可能で、プログラムから操作・状態の取得ができる。
- ArduinoをPCに繋ぐと、USBシリアルデバイスとして認識される(Windows的にはCOMポートが追加される)。
2009-11-11[n年前へ]
■Rubyシリアル通信用スレッドクラスで簡単なバイナリ受信処理をしてみよう
以前、Rubyでシリアルポート通信(いわゆるRS-232C)を楽に行うためのクラス"ComThread"を作りました(ここが関連ファイルの置き場です)。そのcomThread.rbを使えば、たとえば、COM3で受信した内容をコンソールに出力するだけであれば、このようなコードで動く、というようなものです。
require 'comThread' receiveComThread=ComThread.new({:icomno=>3}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sleep 60 receiveComThread.stopこれは、「シリアルポートを使って簡単に各種機器からの情報を取得したり、あるいは操作したりするためのクラス」です。もうひとつ例を挙げれば、「シリアルポートで受信した内容を最前面アプリにキー送信するアプリケーション」くらいであれば、以前書いたように十行程度のコードを書けば「はい、できあがり」という具合に(少なくとも私が良く見るシチュエーションにおいては)割に使いやすいクラスです。
ところで、シリアルポートで送受信を行う機器は多いですが、ものによってはASCII(アスキー)コードでなく、バイナリでデータを送ってくるものもあります。小型の計測器などでは、そんな風にシリアルポート(見かけ上はUSB接続で)経由で出力をバイナリ送信するものも多いかもしれません(もちろん、テキスト送信するものも多いです)。そんな場合でも、簡単なものであれば、comThread.rb でも普通に処理を行うことができます(データが頻繁に大量に送られてくるようなものは扱えません)。
そこで、バイナリデータをシリアルポートに送りつけてくる機器に対応するスクリプトを書いてみましょう。それは、たとえばこんな具合です。
require 'comThread' class Comport def receive(size) rcv=@com.receive ret=nil if rcv!=nil if rcv.length==size aHigh=rcv[0] & 0b00001111 aLow=rcv[1] re+=(aHigh*255+aLow).to_s end end ret end end period=ARGV[0] # time(seconds) Waint 10 # waint to activate teraterm receiveComThread=ComThread.new( {:icomno=>4, :ibaud=>57600}) receiveComThread.start( {:receive=>true, :receiveMonitor=>true, :delimeter=>4}) sleep period receiveComThread.stopこれは「4バイトのデータ列を定期的に出力する機器のデータを(COM4に57600bpsで受信し)パース処理した上で、その結果をテキストに変換しコンソール出力する」というスクリプト例です。
バイナリデータとしては、1バイト目のがハイバイトで、2バイト目がローバイトからなるデータ構成になっていて、さらに、ハイバイトは下位4ビットのみが使われる、というような処理がなされています。
サンプル用に書いたので、本来なら書くべき処理をはしょっています。それでも、数バイト程度のデータが、数秒の時間間隔で送信されるような機器のデータ加工程度の用途であれば、(たまにデータを処理しないで無視してしまうこともあるでしょうが)こんなものでも、(プロトタイピング用途としては)十分使うことができることもあるのではないでしょうか。
ところで、comThread.rbを少し手直ししました。そのため、(今日段階で置いてある)zipファイルは以前作ったものとサンプルソース類となっていて、comThread.rbの方は、今日少し作りなおしたものとなっています。異なるのは、ComThread.start の部分に、delimeter指定が入っていること・メンテナンスがしやすいように内部で使う関数の引数をHash(ハッシュ)で渡すようにした、ということくらいです。とはいえ、そのまま上位互換で使うことができるのではないか、(多分)と思います。動かない場合があれば、メールして頂ければ、時間を作って直しておきます。
ふと気付くと、最近Perlを触っていないような気がします。来週あたりは、Perlでも使って何かしてみることにしましょうか。
2009-11-25[n年前へ]
■NEWS今昔物語「浮かぶ・伝える・蘇る」編 (初出2004年09月30日)
5年前のNEWS(未来)を振り返ってみて思うこと
ハードウェア・・・というより、(それがソフトウェアであったとしても)できあがっていくようすが見た目にわかるモノを作るというのは、その作業過程との辛さと楽しさがわかりやすいだろう、と思います。こうしたものの「わかりやすさ」、あるいは、そうでないものの「わかりにくさ」というのは、(想像力を備えた人でなければ)両方を体験・実感しないとわからないのではないか、と思うこともあります。どちらが優れているとか、どちらが劣っている、という話ではありません。ただ、どちらも、世の中には在り・必要とされている、というだけの話です。
昔、ヘリウムネオンレーザと表面鏡と分解したスピーカ2つを組み合わせて、レーザースキャナを自作したことがあります。その時は、出力5mWのレーザでした。後に、出力15Wの切削用レーザを使う機会があった時、これで、レーザースキャナを動かしたら、夜空にレーザ・アニメーションを描けるのではないか、と楽しく想像した記憶があります。
「手を繋ぐ」というインターフェースはとても大切だ、と思ってしまうのは、20世紀の感覚かもしれません。けれど、他の部を使うコネクションに比べても、「手を繋ぐ」というI/Fは重要に思えてしまう、のが不思議なくらい「近く」「繋がる」ように感じてしまうのが不思議なところです。人によっても、世代によっても、さまざまなことによって、この感覚はきっと違うことでしょう。
(記事を書いた時の)ひとこと
最近ハードウェアをいじることが少なくなってしまったせいか、ピカピカ光ったり、グルグル回ったりする電子オモチャを作ってみたい今日この頃。そこで、電子工作関連のニュースを今回は集めてみた。
空に浮かぶ「イメージ」や「ゲーム」
今年の夏休みの課題としてレーザープロジェクタを自作した人がいる。近所のビル外壁にギコ猫をこっそり投射したりしていて、何だかとても楽しそうだ。
光で走査してイメージを描くと言えば「LEDなどを空中で走査し、視覚の残像現象を利用して空中に画像や文字を描く装置」を「バーサライタ」というが、そんなバーサライタをレゴとプログラマブルICのPIC 16C84で作った人もいる。これも十分楽しげな電子工作だが、さらにスゴイのが「バーサライタで画面を空中に表示するバーチャル・ビデオゲーム(テトリスやテニスゲーム)」を作った人だ。空中にメッセージを浮かべてみたり、ゲームを浮かべてみたり、あなたの心にも何か面白い「イメージ」が浮かんでくるかもしれない。
FPGAで蘇る懐かしの「マイコン」
先月の28日、NEC PC-8001が発売された1979年9月28日(NECパソコン博物館も参考になる)からちょうど25年経った。PC-8001が初めての「マイコン」だった人も多いと思うが、それをFPGA(Field Programmable Gate Array=プログラマブル集積回路)で作りあげてしまった人がいる。ちなみに、私の最初のマイコン(1981年発売のCOMMODOREのVIC-1001)もFPGAで再現されているし、 アーケード・ゲーム(スペースインベーダーやパックマン)などもFPGA上で動いていて、古くからのコンピュータ・ファンならば思わず涙を流してしまうはずだ。
ちなみに、10月29日(東京)と11月5日(大阪)に開催されるAltera PLD WORLD 2004ではアスキーらにより報告 FPGAを使ってMSX1レベルの機能を再現する試作機も報告される。FPGAユーザーはもちろん、懐かしの「マイコン」を振り返りたい人ならば要チェックだ。
触れて伝える「メッセージ」
先月、USB接続のRFID開発キットが市販されるようになり、一般の人でも無線ICタグの開発を楽しむことができるようになった。そんな無線通信で遊ぶのも楽しそうだが、さらに楽しそうな「究極」の有線通信技術が実用化された。
なんと、先月13日に松下電工が「人体を通信ケーブルの代わりに利用し、データ通信をおこなう」という「人体通信」技術を製品搭載したと発表した。指先を情報端末の電極に触れたり、あるいは手を触れあうだけで、その指や指を通してデータを転送するものである。通信速度もこれまで発表されていた1200bpsから3700bpsに高速化しており、人体経由の割には高速であることもビックリだ。触れて伝える「メッセージ」なんて、ちょっとドキドキしてきませんか?「歌うハードディスク」や「歌う花」
先月22日、活けた花をスピーカーにしてしまう「花スピーカー」を利用した「花に話しかけると花が答えてくれる-花とおしゃべり-」とハンズフリー電話「花・糸電話」が発表された。花が歌い出したり、花と語り合うのは何だか気持ち良さそうだ。しかし、花ならぬハードディスクがもしも耳慣れない音(Oliver@「スラッシュドット ジャパン」さんのHDDが壊れる直前、壊れる瞬間の音が参考になる)を奏で始めたら、冷汗ダラダラだろうか?
そんなクラッシュしてしまったハードディスクに音楽を奏でさせてしまった人がいる。「音楽アンプの出力をハードディスクのヘッド制御コイルに繋ぎ強制ドライブしまう」という「耳から手ェ突っ込んで奥歯ガタガタいわしたろか」というヤクザもビックリの強引な方法である。その音色を聴いてみると(例えばSTAR WARSのテーマ)、これがそれほど悪くない音質であることにもビックリするハズだ。
2009-11-28[n年前へ]
■LEDを非発光時には光センサとして利用した実装作品
Fast&Firstのblog風「エンジニアアワード」から。
原理は難しいものではなく、LEDを非発光時には光センサとして利用するもの。アイディア自体は珍しくはないのだが、それを形にしたところが素晴らしい。
ようするに、ここまでのアイディアが作られるとそこから先への発展は誰もが思いつく。しかしベースとなるこの作品は容易には思いつかない。
2010-04-15[n年前へ]
■雑貨ショップで「レーザーライト」の内部を覗く
雑貨ショップに、音に連動して適当な模様を描くレーザライトがありました(右上のようなものですが、右上のものとは違い、回折格子などは取り付けられていないものです)。気になったので、店頭でレーザライト内部を覗いてみることにしました。
レーザー照射口周りを外して、中身を覗いてみると、緑色レーザーと赤色レーザーに、小さなガルバノミラー2個とミラーが1個の光学系を付けたような具合になっていて、マイクからの音入力でガルバノミラーを動かしている、という具合です。
なぜ、内部を見たかったかというと、レーザ駆動部分と、ガルバノミラー駆動部分を改造して、(好きな模様を描くことができる)格安レーザースキャナを作れそうかを確認してみたかったからです。このレーザライトが、9千円くらいだったということもあり、部品代を考えるとリーズナブルに思えたのです。
内部を覗いた結果、これは改造してみる価値があるかもしれない、と判断したのですが、さらに、今度は自分の財布の内部を覗いた結果、買うのをあきらめてしまいました。
100円ショップにでも行って、部品をかき集め、レーザースキャナを980円くらいで作れないものでしょうか。スピーカーを買って格安ガルバノミラーを作り、レーザポインターを買って、自由自在に絵を描くことができるレーザースキャナを980円くらいで…作れないものでしょうか。