月曜日, 1月 11, 2016

Arduino: 距離センサーを使ってみる

超音波距離センサモジュールが届きました。さっそく使ってみます。Arduino の出番です。

モジュールとなっているこのセンサーはトリガー・ピンへパルス信号を送り、反射して帰ってくる超音波をエコーから取得します。

取得した値から距離を計算します。

計算してみるとなかなか正確な距離が出ています。

ここでは近づくとブザーで警告するよう設定してみました。


日曜日, 1月 10, 2016

Arduino: 赤外線リモコンでランプを点灯する

リレーを使った Arduino タイマー回路はちゃんと動いてくれました。使える回路ってのはいいですね。動機とか目的とかいうものがあって使うたびうれしいものです。

極性があります

このたび赤外線センサーを使って遠隔操作できるよう組み直してみました。なかなか便利です。

リモコンはカメラのものを転用しました。まず、コードを取得します。 IRremote というライブラリで信号を解析します。

このライブラリが曲者で、zip ファイルを登録するわけなのですが、もとある RobotIRremote なるライブラリとぶつかるらしく、そのままではコンパイルできません。

こいつはデフォルトのライブラリなので、Program Files (x86) 下の Arduino フォルダの RobotIRremote を取り除く必要があります。もしライブラリをインストールしてしまっていれば、Arduino ドキュメントフォルダ下のローカル・ライブラリの Arduino-IRremote-master を削除し、IDE を再起動です。


ここでライブラリを再インストールすると動きます。サンプルコードの IRecvDump など使い、リモートの信号を解析し、コードを取得します。

コードを取得すればあとは条件分岐でリレーを作動させます。

回路・プログラムが正しければ「カチッ」という音がして、ランプが点灯するはずです。100Vを扱うわけなので注意が必要です。あと、赤外線センサーの足の極性はそれぞれ異なるのできちんと調べる必要があります。


さっそくブレッドボード版 Arduino で組んでみました。

電源を組んで、Atmega328P を配置して、リレーモジュールを組んで、100V 電源から線をとってきて、赤外線センサーをつなぎます。

いつもの百均ケースでぴったりです。


土曜日, 1月 09, 2016

Arduino: 赤外線で動きを感知するセンサー PIR HC-SR501 を使ってみる


赤外線で動きを感知するセンサー PIR というものがあります。手を振るとスイッチがはいるやつですね。赤外線の変化を察知して FET で増幅するという部品です。その信号を増幅する回路が Arduino モジュールとなっています。

これ HC-SR501 届いたのはいいんですがなかなか動いてくれない。動かない回路っていうのはなんかものすごくショックなものです。気落ちするというかトーンが下がるというか。

HC-SR501 ピン配置はカバーを外さないと見えません。

電源を通してアナログ出力を見てみると目の前で手を振ってみても値がぜんぜん変わらない。デジタル出力してみると HIGH となったまま、LEDがついたまま。

絶望の末しようがないのでネットをあたりました。フォーラムを見てみれば「これは動くはず」「難しくない」「壊れない」「丈夫」と書いてあったり(笑

これって安定するまで時間がかかるんですね。

つないでみて手を振って動かない、じゃあ回路を変えてみて手を振って動かない、なんてことを繰り返していくともう絶対動かない。安定化するまで数分待たねばなりません。


あとこれ可変抵抗がついていて、電圧が下がるまでの時間とか、感度とかいうのが調整できるわけでした。設定次第ですぐ ON となり電圧がなかなか下がらない。

このへんをクリアするときちんと動きました。アナログじゃなくてデジタル入力で組む必要があります。なかなかいいものです。手を振ると点灯してくれます。


あとあと考えてみると「動くはず」と信じてトライしたのがよかったわけですね。ネットでそう書いていなかったらあきらめてしまうところでした。

せっかく動いたので消すのが惜しくなりました。そこでチップを取り出してブレッドボード版 Arduino で動かしてみました。Arduino ならではの利点ですね。

この大きさだとこのあいだ見つけた百均のケースがぴったりです。


プラスチックケースは大きさを油性マーカーで印をつけて、ホットナイフを使うとスイスイと切れます。

電源ソケットをエポキシ樹脂で固めて、電源を供給してやると…



 動きました。うまく収まってます。手を振ると点灯してくれます。なかなかいいものです。





火曜日, 1月 05, 2016

Arduino: ホール素子を使ってみる

今日ホール素子が届きました。

ホール素子ってのはホール効果を利用して磁場を感知するセンサーです。

iPad のケースとか、閉じると電源が切れてくれますよね。ケースのカバーの磁石の磁場をホール素子が感知してるわけです。



さっそくホール素子を使ってみよう!電圧の変化を調べてみよう!と思えば Arduino が大活躍です。ブレッドボードで回路を組んで、Arduino を USB ケーブルで接続してプログラムを転送すればいい。

Arduino がなかったら死蔵しちゃうんじゃないかと思ったわけでした。忙しいし。Arduino だとサンプル・プログラムがそのまま使えます。電圧を調べてみました。磁石を近づけると電圧が下がります。

あとはLEDを光らせてみました。動画でどうぞ。


あとはモジュール化するだけですね。

ユニバーサル基板の切れ端を使って Arduino 用ホール素子モジュールを作ってみました。

モジュールだと回路や規格など調べ直す必要がありません。

その分、使ってみようという敷居が低くなります。


月曜日, 1月 04, 2016

PowerBuilder 12.6: 関数を削除・コピー・リネーム

PowerBuilder での関数・イベントの扱いってのが微妙です。

一覧で出てくるのはいいんですが、右クリックで編集とプロパティしか出てこない。

プロパティでいじれるのかと思えばこれが書き込み不可。

こういう常識を軽く裏切ってくれる世界が展開してますが、関数やイベントを削除、コピー、リネームの機能はタブを切り替えないと出てきません。

このタブってのはウインドウの下のスタブをクリックすると出てきます。

ここで出てくるリストでは右クリック・メニューで関数の削除やコピーが可能です。ただし、リネームは別名でコピーする必要あり。

土曜日, 1月 02, 2016

Arduino のための「電子サイコロ・モジュール」

モジュール化ってのは大事ですよね。構造化・抽象化することが大事なわけです。

でもハードウエアでモジュールってのはよっぽどの構想がないとあり得ないです。PCとか。

Arduino はその点でも優れています。センサーからディスプレイまでさまざまなモジュールが利用できます。

休みを利用して、くだんの Arduino 版・電子サイコロをユニバーサル基板で作り直して「モジュール化」してみました。LEDでさいころの目を表現します。

部品はいたってシンプルなものです。


Arduino とはデュポン・ジャンパ・ワイヤで接続します。



回路は同じです。プログラムのほうは、リセットボタンを押すと一定時間サイコロを回し、停止するよう改良を加えておきました。



ちょっと裏側はお見せしたくない悲惨な光景が繰り広げられてますが、この電子サイコロ、きちんと動きます。



Arduino のための「電子サイコロ・モジュール」が完成です。




百均ケースでまとめてみました。


割り込みスイッチをつけてあります。押すとさいころが回ってくれます。 時間がたつと消えてくれます。

金曜日, 1月 01, 2016

Arduino: デュポン・ジャンパ・ワイヤ

みそかの大掃除で部品など整理して在庫表など作って新年を迎えました。たくさんの部品をながめて、ほくほくしながら年を越すってのもオツなもんです。

ジャンパ線など整理していると、先端の壊れたのとかがあるわけですね。

このジャンパ線ってのが直せるってご存知でしょうか。

デュポン・ジャンパ・ワイヤというのがあって、この先端部分が自作できます。



金属部分のコネクタ、プラスチック部分のハウジングがあればいいわけです。
http://www.ebay.com/


はんだ付けは必要ないです。 はんだ付けするといいというサイトもあるようですが、ここではそのままで使っています。挟み込んでペンチで締め付ければいい。ハウジングをつければそれで元通りです。

再利用可能ってのはいいですよね。このハウジングが角ばってるのも並べたとき使いやすくていいです。


デュポン・ジャンパ・ワイヤ
http://www.ebay.com/

そこかしこつけまくっておくとかなり便利ですよー 


時間が経つと鳴るブザーがこれで完成です。



水曜日, 12月 30, 2015

PowerBuilder 12.6: 要素をリネーム

PowerBuilder ってのはクセのあるソフトで、気をつけないと半日を潰してしまう「仕様」があります。バグだと思うんですが

なぜか要素をリネームできないんですよ。右クリックしてもリネームなるメニューがない。

リネームなんて「別名でコピーして元のを消せばいい」、と思うかもしれませんが、PowerBuilder だとこれしかない。別名でコピーするしか方法がないんですね。

Save といっても右クリック→Copy ... とするとその要素はもうあるよ、とエラーを出してきます。
ここは File メニューから Save as とするのが正解です。

これがですね、そのままじゃ出てこない。Window を開かないとダメなわけなんです。

この思いがけない癖ってのが PowerBuilder の特徴です。ってことで

ここで一言: PowerBuilder は不安定ですぐクラッシュします。どうにかしてほしいです

こんなときは Regenerate です。

自作ブレッドボード版 Arduino

作ってみました。自作ブレッドボード版 Arduino です。

Arduino UNO を使ってブートローダーを焼いたので、プログラムのアップロードは完了していたわけなんですが、内部クロック(8MHz)だとそのままで動かないので16MHzのクリスタルが届くまでお預けとなっておりました。

で、昨日届いたわけなのでさっそく動かしてみました。

まず5V電源をつくります。ここではLM317を使いました。こいつは可変型のレギュレーターで、抵抗値で電圧を変えることができます。

基本これで動きますが

発振防止、逆流防止ダイオードなどつけるとこうなります

Atmega328P チップと電源をつなぎ、クリスタルをつないで、と




動きました。感動です。13ピンのLEDが点灯しています。電源とクリスタル、これだけで動くんですね。





電源モジュールです。


これで作ったプログラムを保存することができます。

木曜日, 12月 24, 2015

Arduino: リレーを使って明かりを消す

Arduino ってのはよくできたシステムです。

Arduino がどれだけすばらしいかって「発想から実現へ」の直截さが違うわけです。

例えばですね、明かりを消したいとします。つけた明かりが消えてほしい。一定時間たったら消えてほしいと思ったとします。

どうするかっていうとまず100V電源をいじらないといけないので、リレーを使います。5V回路で100Vを操作すると壊れるのでリレーで隔離するわけです。


このリレーですが、一定以上の電流が必要となります。Arduino 出力端子そのままだと心もとないので、こういうときはたいていトランジスタなどを使って電流を操作します。信号を増幅するわけですね。

まあ面倒なわけです。トランジスタ回路を組むというだけでなんか「仕事から帰ってきてこれって」とかいう気分が襲ってくる。

でそこは Arduino の世界なわけです。これがホントよくできててリレー・モジュールなるものが売っている。しかもいい値段で売っている。

(これです→http://www.ebay.com

早い話がこれをつなぐとそれだけで明かりが消せます。そのままつなげばいい。タイマーをプログラムし、信号線をつなぐだけです。

え、これだけ?これだけで動くんだ、という感動があったわけなんですが、これちょっと考えてみてください。このモジュールの利点です。部品が少ないってことは、つまりそれだけ安全だってことです。100V使うんですから安全第一です。

まあしっかり懐中電灯など用意して動かしてみたわけなんですが、大丈夫でした。リセットボタンなど押すと明かりがついて、一時間たつと消えてくれます。

*)整数型では上限を超えてしまうので時間は long 型である必要があります。

土曜日, 12月 12, 2015

Arduino Uno を使ってブートローダーを焼く



Arduino を使うと書いたプログラムで外部装置を動かすことができます。いくらJava/C++/Android でプログラムを書いても所詮ソフトウエアってだけです。家電、LED やセンサーを動かすことはできないですよね。Arduinoなら可能です。USBでつないで外部装置をつなぎ、アップロードすると動きます。このスムーズな流れが「よく考えられたシステム」であるArduinoの特徴です。
 
このArduino、つないで動くというだけではありません。使える装置を作る方向へ発展させることができます。プログラムの書き込まれたCPUを取り出して使えばいい。

本家Arduino のボードのCPUは取り換えがききます。取り出せばそのまま同じ回路を独立して使うことができます。素晴らしいと思います。

このCPUですが、Atmega328のチップを使っています。ebayなど覗くとこのチップがまとめていい値段で販売されています。ありがたいです。

http://www.ebay.com

これらのチップはブートローダーが書き込まれていない場合があります。自分で書き込む必要があるわけですね。書き込みができると安いチップが使えます。挑戦する価値ありますよね。

どうやって書き込むのか、ですが、ネットではブレッドボードで回路を組む、専用のシールドを作る、専用ライターを使うなどいう手間のかかる方法が語られています。

でもですね、Arduino Unoを使うと手間いらずです。手間いらずということはつまり成功率が高いということです。是非お勧めしたい方法です。




どうするかというと、プログラムしたいチップを載せたArduino UnoArduino本体をつなぎます。

では焼き込みの手順です。まず ArduinoISPをアップロード。

ArduinoISPをアップロード
 
そしてArduino Uno をつなぎます。電源5VGNDをそれぞれ接続し、ピン11, 12, 13Arduino本体と接続します。あとはピン10とリセットとつなぎます。

新しいAtmega328Pチップを載せて、Board, Port, Programmerを設定します。それぞれArduino UnoUSBポート(ポート番号は環境で異なります)、Arduino as ISPを選択します。


 
ボード Board の設定


ポート Port の設定

 
プログラマ Programmer の設定

そして Burn Bootloader を選択してブートローダーを焼きます。
 
いよいよ書き込み


この方法でなんの問題もなくブートローダーを焼き込むことができました。チップをとりかえてLチカとかアップロードすると動くわけですね。これでArduinoマシンを量産できます。なんだろうこの安心感は(笑

#Arduino 基板を使わない場合はクリスタルで外部からクロックを供給してやる必要があります。

 
写真は自作のAVR-ISP・シールドです。

土曜日, 12月 05, 2015

Arduinoの流行るわけ・電子サイコロ


電子サイコロというものを見たことがあるでしょうか。LED回路などでサイコロの目をつくり、電子回路で操作・表示するものです。

乱数を生成し、各LEDを点灯させるというのはもし回路を自分で組むとしたら面倒な話です。


こんな作業も Arduino があるときちんと組めます。乱数はライブラリを利用し、各LEDへの出力をプログラムで操作します。

Arduinoが外部インターフェースとして便利な件


フォトレジスタというセンサーがあります。明るさを探知します。でもこれをどうやって利用したらいいでしょうか。電源を与え、抵抗値を読み取る装置をどうやって作ったらよいでしょうか。
そこで Arduino を利用します。電源を与え、アナログ値を読み取り、シリアル信号としてPCで読み取るなどという作業はこの Arduinoで行います。つまり、Arduino ならUSBケーブルをつなぐだけでアナログ値が読み取れます。





あとは読み取った値を利用して装置を動かすなどという作業をリレーなど通じてArduinoで行えばいい。

この一連の作業がUSB接続できるArduinoならスムーズかつ危険なく行うことができます。考えてもみてください。旧態然とした開発過程だと、マイコンチップを用意し特殊な装置でプログラムを焼き、電源装置を用意して動かすなどという手間が必要です。このハードルをArduinoがあると楽々と超えられるわけです。





金曜日, 11月 20, 2015

EPUB形式で電子本を作る

アドビ社の迫害をものともせずオープン規格EPUB電子本を作るとここで宣言。

mimetype
META-INF/
 container.xml
OEBPS/
 content.opf
 toc.ncx
 xhtml file

できた。が自前のJavaアプリで圧縮する必要があった。こんな感じです。

木曜日, 10月 08, 2015

PowerBuilder 12.6, C#: データベースへの接続方法

PowerBuilder でデータベースへ接続する方法を示します。

DataObject が機能していることが前提です。


C# でいうと以下のようなコードとなります。



月曜日, 10月 05, 2015

PowerBuilder 12.6: 画像ファイルを読み込む

PowerBuilder で画像ファイルを読み込む方法を示します。というか、そのままじゃだめなんですね。

PictureControl とかがあって、じゃあ置いておけばあとで そのまま読んでくれとかファイル名を渡す、そういう形式だと思っておりました。

C# だとかそうですよね。

ところが FileRead() だと 32KB しか読まないらしいわけです。手元の情報だとそれだけしかないんですが、どこか見てるところが間違えてるんでしょうか。



まあいいんですが、バッファが必要なら書くまでです。

こんな感じで書くと画像ファイルが読み込めます。blob で読み込んで渡してやれば表示してくれます。


PowerBuilder 12.6: UTF-8 ファイルを読み込む

ひょんなことで PowerBuilder プロジェクトの案件を扱うこととなりました。ので、関連情報など載せていきたいと思います。

まずは IDE など勝手が違うので、多少の忍耐が必要です。

日本語のファイルを扱うのでまずはまってしまったので、まずはファイルの読み書きから書いていきたいと思います。

UTF-8 ファイルを読む方法です。


UTF-8 ファイルはこれで読み込めます。

書き込みは以下の通りです。

FileOpen で文字コード EncodingUTF8! を指定します。

木曜日, 9月 24, 2015

C#: ハッシュテーブルをXML形式で書き出す・読み込む

C#でHashtableのデータをXML形式で読み書きするためのコードです。

忙しい貴方のため(将来の自分ですね)コピペできるようそのまま置いておきます。

  • writeXML(Hashtable directory, string fileName):
    Hashtable のデータをXML形式で保存します。

  • readXML(string fileName):
    XML形式のデータをHashtable 形式で読み込みます。


出来上がったXML形式のファイルです。

金曜日, 7月 03, 2015

配列をムダなく並び替える

ここでは配列をムダなく並び替える方法を提案します。

提案というより、いつもの「ループをまわして違う値が出るまで繰り返す」という方法をやめようという提案です。

何度もまわしていれば終わる作業ではあるはずですが、当然のごとくこのアルゴリズムだと終わるという確証がありません。

カウンタなどつけていれば無限ループという最悪の事態は防げるわけですが、ここでは「乱数は配列の大きさだけ計算すればいいはず」というアルゴリズムの提案です。

大げさなことはないわけなのですが、計算しなければならない乱数ってのは「まだ選択されていない数からのみ」なわけなので、その方法を示します。

まずはコード permute() をご覧ください。

… というわけです。選択されていない中から選ぶので乱数の計算が配列の大きさで済むというわけです。

どうでしょうか。

permute() の応用で、重複しない要素を選択する関数 withoutDuplicate(int n, int max) というのも作れます。

selectWithout(int n, int max, int excluded) は選択すべき要素から一定要素を除いた重複しない要素を選択する関数です。

よく使うアルゴリズムだと思います。

火曜日, 6月 23, 2015

コマンドラインでシカゴの気温を調べる(C# で JSON データを読む)

先日 Java での JSON データの読み方を紹介しました。

ここでは C# で JSON データを読む方法を紹介します。

DataContractJsonSerializer を使った方法です。

DataContractJsonSerializer.ReadObject() を使うと JSON データを読み、オブジェクトとして出力してくれます。

オブジェクトへの変換が「宣言」となっているところがいくらか分かりやすいといえるでしょうか。

まず、読み込みたいデータ構造をクラスとして宣言し、DataContract 属性を付加します。JSON データは DataMember 属性を付加します。ネストされているデータはクラスとして宣言しDataContract 属性を付加します。コードを参照してください。#配列データは配列として宣言します。

出来上がったデータクラスを DataContractJsonSerializer のコンストラクタの引数として渡します。

準備が出来たらHttpWebResponse として読んできたデータを、DataContractJsonSerializer.ReadObject() で読み込みます。

と、この手順を踏むとめでたく JSON データが読み込めます。あとは出力するだけ。

ここの気温の表示はデフォルト設定でなんとK(ケルビン)です。ので 273.15 を引いてやります。

#華氏(℉)か摂氏(℃)か迷ったんでしょうか(もめたんですかね)。

PHP: 定数を扱う

プロジェクトごとの定数を扱うクラス Config\Constants の紹介です。 <?php namespace Config; class Constants {     public const DB_USER = "linguist...