趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Arduino用LANインタフェース(ソフト編)

    投稿日 2011年 7月 27日 コメントはありません

    イーサネットシールドライブラリ(Ethernet Shield Library)はこちらのページにあるものを使用しました。ArduinoとENC28J60の接続も同じページにあるものを参考に接続しています。(ただし、3.3Vロジック→5Vロジックのレベル変換は通常実力的には問題ないので省略しています。)

    このページ(ページの一番下の「6. Links & Downloads」)でダウンロードできるライブラリとサンプルプログラムはArduinoのバージョン0010用のものですが、ライブラリ内の #include で指定しているファイル名の大文字/小文字が間違っていてそのままではコンパイルエラーを出す(対策は当然 #include の中のファイル名修正)以外は問題なく0022でもサンプルプログラムはコンパイル/動作し、デジタル4pinに接続してあるLEDをブラウザから点灯/消灯させることもできました。

    次に、linuxからpingでパケットロスのテストをしてみましたが、0.2秒周期、データ長456バイト(受信バッファが500バイトに設定されているのでこれより長いパケットは受けられない)で一晩連続テストしたり、多数のpingを起動したりしましたが、特にパケットロスが起きることもありませんでした。

    このライブラリとサンプルプログラムはこちらの「HTTP/TCP with an atmega88 microcontroller (AVR web server)」が元になっていて、そちらに使い方が書いてあります。このプロトコルスタックは少ないメモリでTCP/IPを何とか扱うためにTCPでも1パケットの範囲に収まるデータを扱うことに限定しています。(趣味の範囲の)通常の遠隔操作やリモートセンシングではWebベースでも1パケット分のHTMLデータに収まる、という考え方です。

    今後、もうちょっと掘り下げてみたいと思います。


  • Arduino用LANインタフェース(ハード編)

    投稿日 2011年 7月 26日 コメントはありません

    Arduinoで使えるLANインタフェースを作ってみました。イーサネットコントローラは秋月で売っているENC28J60です。トランス内蔵RJ-45モジュラジャックも秋月で売っているJ0011D21BNLです。

    回路はオプティマイズさんのSPIイーサネットモジュールそのまんまです。これも基本的にはデータシートに載っている回路とほぼ同じなのですが、オプティマイズさんの回路図はENC28J60のシンボルがピン番号順に記載されているので、実体配線するのにすごく都合がよかったです。(オプティマイズさんのを買ってもよかったのですが、部品が全部手元にあったのと、ITプラザに行くのが面倒くさかった・・・。)

    ただ、違うのは抵抗が49.9Ωの代わりに51Ω、2.3kΩの代わりに2.4kΩ、フェライトビーズの代わりに22uHのインダクタを使っていること、5V→3.3Vの降圧回路を同居させていること、ホストインタフェースの端子配置をICの3~10ピンの並びをそのまま使っていることくらいでしょうか。あと、誤配線による破損防止に電源のところにポリスイッチ(リセッタブルヒューズ)を入れてあります。

    部品面はこんな感じになりました。

    抵抗・コンデンサは大部分はチップ部品を使ったので、部品面はすっきりしています。半田面はこんな感じになりました。

    終端抵抗の周りの部分で勘違いをしてしまったのでちょっと汚くなってしまいましたが、オプティマイズさんの回路図を見ているとチップ部品を使えば意外に簡単にユニバーサル基板で組めることがわかります。

    全景はこんな感じです。

    シールド形式(イーサネットシールド)にしてもよかったのですが、後でATmega644などでも使えたらいいな、と思い、今回は敢えて単独の基板にしました。


  • 気圧計・温湿度計を改造

    投稿日 2011年 7月 24日 コメントはありません

    以前作った気圧計・温湿度計はLinuxのPCに接続して記録をとるのが元々の目論見でしたので、表示デバイスなどは設けずUSB-UARTでデータ採取し、Webブラウザ越しに見れるだけとしていました。しかしDebianノートPCが壊れてしまい、それもできなくなったので直接表示するLCDを付けてみました。

    といっても、スマートではなく、この写真のように無理やり接続しています。このArduino互換ボードは3.3V動作ですので、接続しているのは秋月の3.3V動作LCDキャラクタディスプレイモジュール[16×2行][バックライト付白抜き]です。

    本当は消費電力が増える=温度が多少なりとも上がるということでバックライトなしにしたかったのですが、3.3V動作のバックライトなしで見えるタイプのものがなかったので、バックライト付きを付けました。

    100円ショップの半透明(ポリプロピレン?)のプラケース越しなのでやや曇りがちですが、今の温度、湿度、気圧がわかるようになりました。


  • ArduinoでSDカード(2)

    投稿日 2011年 4月 6日 コメントはありません

    前回ハードウェアが完成しましたので、とりあえず動かしてみます。

    といっても、サンプルにすでにありましたので、「File」→「Examples」→「SD」→「DataLogger」でデータロガーのサンプルを開きます。

    ソースをみると、冒頭にCS信号に関するコメントが記載されています。どうやらEthernetShieldとの関係で、デフォルトは4pinがCSになっているようです。自分は10pinに接続していますので、最初の方の

    const int chipSelect = 4;

    を4ではなく10に変更します。

    これで、コンパイル・ダウンロードしてやると、A0、A1につないだジョイスティックの値と、何もつないでいないままのA2の値がSDカードに書かれていくようになりました。

    ただ、1回のデータ収集毎にファイルクローズしているせいか、1サンプル/1秒程度の動作となってしまっています。そうしなければ電源断やリセット時にファイルが失われるので、仕方ないのですが・・・。


  • ArduinoでSDカード(1)

    投稿日 2011年 4月 1日 コメントはありません

    センサが読めるようになったら、今度はそれをロギングしたくなるのは当然と言えるでしょう。

    というわけで、こんなものを作ってみました。

    単にSDカードのソケットをユニバーサル基板に載せただけです。載せるにあたって、位置合わせ用のエンボスを切り飛ばしたり、端の方の2.54ミリピッチに合わないピンをそっと曲げたりして載せてあります。当然、SPIモードでの接続です。

    後ろのArduinoは3.3V/8MHz動作版のArduino(Akidukino)です。ただ、液晶モジュールは5V動作のものが多いので両方付けようとすると結構面倒くさい・・・。


  • Arduinoでジョイスティックの値を読む

    投稿日 2011年 3月 31日 コメントはありません

    今度はArduinoでジョイスティックの値を読んでみました。

    こんな感じでA0とA1にジョイスティックの出力を接続します。

    プログラミングはさすがに超簡単です。

    これだけでジョイスティックの値を読んで、シリアルコンソールに出力し、その値に応じてLEDを点滅させてくれました。


  • Arduino+加速度計

    投稿日 2011年 3月 21日 コメントはありません

    ずいぶん前に買ってPSoCにつないで遊んだ加速度センサがあったので、今度はArduinoにつないでみました。

    見ての通り、湿度計の回路に同居させてます。XYZの成分を細かく表示してもそもそもきちんと固定できてきないので意味がありません。そこで、XYZ成分それぞれについて、過去2~3秒程度の平均値を零点として、そこからの差分を取り出してこれをXYZをベクトル量として、そのベクトル長さを計算(単に二乗和の平方根をとっているだけですが・・・)し、表示させました。これだけだと表示が早すぎて見えないので、過去2~3秒の最大値も同時に表示させるようにしました。

    うーん、ずっと放置してあっただけあって、埃で汚いですね・・・。

    最初は震度計にできるかな、と思っでいたのですが、調べてみたら計測震度の計算は結構大変で、加速度波形をフーリエ変換して、フィルタをかけて、逆フーリエ変換、波形のスキャンをかける、ということなので、Arduinoで持っているメモリでは到底無理そうです。

    なので、地震の揺れがこんなセンサで検出できるかな、というところまででおしまいです。幸い余震も減ってきているので、実際にどのくらい見えるのかはいまのところわかりません。


  • 3.3V版秋月Arduino (2)組立・動作確認編

    投稿日 2011年 3月 17日 コメントはありません

    早速、3.3V版として組み立てました。

    結局、パターンカットはせず、写真のように3端子レギュレータ周りの小細工ですませました。

    先に検討していれば、PWR-SELのジャンパは固定にすることになるので必要なかったのですが、後から考えたので美しくなくなってしまいました。

    で、組立後、AE-UM232RとATMEGA328を取り付けて、電源ONし、Arduinoを立ち上げて、ボード選択(Arduino Pro or Pro mini (3.3V,8MHz) w/ ATmega328を選択し、AVRISP mkII でブートローダを書き込んで動作確認しました。

    その後、ExmpleのLEDチカチカをコンパイル&書き込みし、動作確認しました。


  • 3.3V版秋月Arduino (1)部品収集・検討編

    投稿日 2011年 3月 16日 コメントはありません

    最近のデバイスは使用プロセスの関係からだと思いますが、3.3V品が多くなってきています。
    一方で、通常のArduinoは5Vインタフェースなので、なにかと不便になってきています。

    そこで3.3V動作のArduino Proの回路図を参考に、秋月基板をベースに3.3V動作品を組んでみることにしました。で、部品は概ね集まったのですが、1点だけ適当なものがありませんでした。

    秋月Arduino基板には5Vのレギュレータ7805のパターンが準備されていますが、手持ちの一般的な3.3Vレギュレータは低ドロップタイプなので端子配置が異なります。また、秋月基板ではUSBから給電する場合は直接ATMEGA328の電源端子(+5V)に接続されていますので、なんらかの変更が必要です。結局、レギュレータ周りのパターンカットなどの対応の必要がありそうです。


  • HS-15Pを動かしてみる(4)LCD追加

    投稿日 2011年 3月 9日 2個のコメント

    Arduinoの嬉しいところは、電子工作の世界としては珍しくライブラリがあるところです。

    で、早速LCDモジュールを接続し、LCDに出力してみました。表示内容は左から室温、湿度、センサ抵抗値の対数値です。写真を見るとわかるのですが、室温25度、湿度25%なので、めちゃくちゃ乾燥しています。

    接続したLCDは秋月の300円LCDモジュール(HD44780U使用、16文字×1行)です。この手のLCDモジュールは画面の右半分と左半分のアドレスが連続していなかったりします。そのため何らかの工夫が必要になるのですが、残念ながらArduinoのLiquidCrystalライブラリはそこまではサポートしていないようです。ソースをみてもそれらしい記述はありません。ただ、20文字×4行のLCDモジュールを想定した処理は入っているようですので、それを利用して8文字×2行として設定を行い、右半分は2行目扱いで文字を表示することでお茶を濁しました。