趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • 気圧センサSCP1000を試す

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

    秋月で売っている気圧センサモジュールのSCP1000モジュールを試してみました。

    センサ単体では扱いにくいのですが、モジュールでは8pinDIPにまとめられています。これを3.3V版のArduinoにつないでみました。

    Arduino 0022 にはExampleの「SPI」のグループの中に「BarometricPressureSensor」としてSCP1000を制御するサンプルが含まれています。そのソースの始めの方にSCP1000の端子との接続方法が記載されていますので、その通りにつなぎます。ただし、ここに記載されているのはSCP1000のピン番号ですから、モジュールと接続するときは注意が必要です。モジュールの各端子と、Arduinoの接続方法は以下の通りです。

    1. TRIG信号。無接続。
    2. DRDY信号。ArduinoのDigital Pin 6に接続する。
    3. SCK信号。ArduinoのDigital Pin 13に接続する。
    4. GND。
    5. MOSI信号。ArduinoのDigital Pin 11に接続する。
    6. MISO信号。ArduinoのDigital Pin 12に接続する。
    7. CSB信号。ArduinoのDigital Pin 7に接続する。
    8. VCC。ArduinoのVCCに接続する。このセンサは3.3Vまでしか印加できないので、要注意!

    これで、サンプル「BarometricPressureSensor」をコンパイル・ダウンロードし、シリアルモニタでモニタすれば表示されるはずですが・・・・このサンプルはバグがあります。

    自分が修正した箇所(loop()の中です)を示します。

    //combine the two parts into one 19-bit number:
    long pressure = (((long)pressure_data_high << 16) | pressure_data_low)/4;
    float hPa = (float)pressure/100.0;

    // display the temperature:
    Serial.print(“\tPressure [hPa]=”);
    Serial.println(hPa);

    サンプルでは上記の箇所の2行目で(long)のキャストが抜けているために、正しく表示してくれません。ここを修正すれば、パスカル(Pa)単位で値が表示されます。(他に、SPIのレジスタアクセス部分にデバッグ用の表示があるので、それをコメントアウトしないと表示が鬱陶しいです)
    さらに自分はヘクトパスカルで表示したかったので、計算後にfloatの変数を定義して値を100で割って、それを表示するように変更しています。

    天気の変化に合わせて気圧が変化するのが目に見えるようになるのは面白いです。


  • gnuplotの使い方

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

    データを効率よく(人手をかけずに)グラフ化する方法について考えています。人手をかけてやるなら、ExcelやOpenOffice.orgのSpreadSheetがいいと思うのですが、バッチファイル処理は難しいでしょう。

    ということで、gnuplotについて調べています。

    1.インストール

    本家本元はgnuplot.infoです。 しかし、Ubuntuの場合にはSynapticパッケージマネージャからインストールできますので、直接お世話になることはなさそうです。

    2.GUIフロントエンド・・・はあきらめました

    gnuplotはコマンドラインインタフェースなのがとっつきにくい要因の一つになっています。最終的にはバッチ処理したいのでコマンドラインインタフェースは必要なのですが、とっつきにくい・・・ということで、いくつかGUIインタフェースを付加する試みはなされているようです。

    その一つがcueplotで、比較的情報がありそうな感じ・・・・だったのですが、sourceforgeの方をみるとバージョンが0.08と進んでいないことと、どうもコンパイル済みバイナリ配布が基本のようなのでやめました。

    3.その他の情報源

    その他、使っていく上で参考になりそうな情報源を探してみました。

    • 日本語マニュアル
      新潟工科大学竹野研究室の方が日本語訳を公開しています。→こちら
      PDF化された物などもあり、参考になりそうです。(PDFファイルはGoogle Chromeの内蔵PDFビューアでは文字が表示できませんが、 Ubuntuのドキュメントビューアではしっかり見えました)
    • gnuplotの初歩 →こちら
      もちろん全部を網羅しているわけではないが、やりたいこと別に非常にとっつきやすく整理されています。こちらをみれば、まずはGUIフロントエンドがなくてもとっつけるような気がします。

    またなにか見つかったら追加するつもりです。

     


  • 脈拍検出をPSoCで再現

    投稿日 2011年 4月 26日 2個のコメント

    一昨日のOPAMP(LMC662A)による回路をそのままPSoCで再現してみました。

    使用デバイスはまず制約の少ない条件で楽にインプリメントしたかったので、CY8C29466-24PXIを使っています。センサはGP2S05のままです。

    PSoCらしくローパスフィルタ/ハイパスフィルタ部分もPSoC内に入れたかったのですが、周波数が低すぎて単純に実装するのではうまく取りこめないようです。そのため、CRのフィルタはそのままにしてあります。そして、最後のゲインを稼ぐ部分のみ48倍設定としてあります。

    増幅した後の信号を端子に出力して、その波形を観測してみました。

    動作としては検出はできています。ただ、フォトリフレクタへの指の当て方でだいぶ変わってしまいます。また、インバータ式蛍光灯や外部ノイズに弱いようで、なんらかの対策は必要な感じです。


  • 宅内無線LANのトラブル

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

    自宅内では秋葉原で買ったP社製(Web画面に中国語があるので中国メーカーのOEMでしょう)の格安802.11nの無線LANアクセスポイント(ルータ機能は内蔵されているが使っていない)をサブのネットワークに使っています。ちなみに、家族の写真や年賀状、その他諸々のデータを保管しているNASがつながっているメインのネットワークでは無線接続は設定ミスによるセキュリティリスクを考え、やめてしまいました。

    で、このP社のアクセスポイントが突然つながらなくなってしまいました。そもそも電波が出ていないような感じです。以前も同じようなことがあって、電源を入れなおして復旧したのですが、今回は復旧しません。ルータ機能がハングアップして、電源を入れなおせば復旧する、なんて事象はいままで購入したほとんどのルータで経験していますので珍しい話ではないのですが、電源を入れなおしても復旧しないというのはいままでありません。

    あれやこれややってもうまく行かず四苦八苦していたのですが、工場出荷時設定にWeb設定画面経由で戻したら、なんとみえるようになりました。(背面のリセットボタン長押しでも復旧しなかったのですが・・・!?)
    しかし、以前設定した際に保存しておいた設定ファイルのバックアップを書き戻すと電波が出なくなってしまいます(表示ランプではできているように表示しているのに・・・)。

    結局、再度工場出荷時設定に戻して、全部設定しなおしたら動くようになりました。一体なんだったんでしょうね。
    こういう現象があるから格安なんでしょうか・・・???
    なんにせよ、復旧するのになんだかんだで4時間以上格闘してしまいました。


  • 脈拍検出のテスト

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

    以前書いたようにPSoCで脈拍検出にトライしてみたいと思い、まずこちらの「電気電子工作の部屋」さんの「電池ボックス電子工作(その15)」を参考(っつーかそのままに)に、まずはOPAMPを使ってブレッドボードで組み立ててみました。ただし、検出可否を見てみるのが狙いなので、音を発生する回路は追加していません。

    回路は「電池ボックス電子工作(その15)」そのままです。OPAMPは手持ちのものから単電源動作可能である程度動作電圧範囲の広いLMC662Aを使いました。センサとなるフォトリフレクタには秋月電子で遥か昔に購入したものを使いました。

    動作確認結果は・・・なかなか厳しいですね。センサへの指のあて具合でかなり変わります。

    次にセンサを秋月でちょっと前に売っていたGP2S05に変えてみましたが、そのままではまったく動作しません。フォトトランジスタ側の負荷抵抗を22kΩから100kΩに変更すると容易に検出するようになりました。もとのセンサでも負荷抵抗を変えればもっと容易に検出できたのかもしれません。

    それでも、指を動かしたりすると、表示が乱れます。

    基本的にはセンサの出力をローパスフィルタ/ハイパスフィルタを通して受けた後、1000倍に増幅してトランジスタを駆動しています。鼓動の周波数成分は0.5Hz(30bpm)~4Hz(240bpm)といったところでしょうから、これを指を動かしたりしたら誤検出するのはしかたないところです。


  • M1.5の地震

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

    なにげに地震情報を見ていたら、今朝5時44分に起きたマグニチュードM1.5という規模の小さな地震が地震情報に載っていました。

    震源は神奈川県西部、深さは10kmだそうです。こんな小さな地震が地震情報に載ったり、その上最大震度2とか複数地点で観測って珍しいと思うのですが・・・。


  • さくらのVPS(6) ~FreeNXを試す その2~

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

    FreeNXが動作するようになって、非常に高速なリモートデスクトップ環境ができたのですが、SSHのログイン認証をパスワード認証に戻さざるを得なくなってしまいました。

    が、それはなるべく避けたいもの。

    そこでいろいろしらべていくと、いくつかのことがわかってきました。

    • NX Clientの設定で秘密鍵が登録されているのはなぜ?
    • 秘密鍵があるということは、組になる公開鍵があるはずです。しかし、そんなものをサーバ側に置いた記憶はありません。
    • どうやらデフォルトの秘密鍵/公開鍵ペアをもっていて、NX Serverと共有しているみたい。これは置き換え可能なようです。

    ということで、鍵を作り直して、設定しなおします。

    1. ログイン用鍵ペアを作り直します。
    2. $ ssh-keygen -d -N “パスフレーズ” -f id_dsa
      $ ssh-keygen -d -N “” -f nx_dsa

      として、鍵ペアを生成します。

    3. 「id_dsa.pub」の中身をサーバ側の ~/.ssh/authorized_keys に追加します。
    4. 「nx_dsa.pub」の中身で /var/lib/nxserver/home/.ssh/authorized_keys のキーの部分を置き換えます。冒頭に port/agent forward の禁止に関する記述があったので、そこはそのままにしておきました。(もとのファイルはリネームして取っておきます)
    5. NX Client の Configure設定で、General/Serverの部分の「Key…」を押して、秘密鍵「nx_dsa」の内容を登録します。
    6. ここで一旦 NX Client で接続してみましたが、問題ありませんでした。これでデフォルトの鍵ペアではなく自分専用の鍵ペアでFreeNXが動いているはずです。
    7. ログイン認証時のパスワード認証を禁止します。
      /etc/ssh/sshd_config の「PasswordAuthentication」の行を「no」に変更する。さらに、ローカルホストからのSSHログインではパスワード認証が必要なため、以下の内容を最終行に追加する。
    8. Match Address 127.0.*.*
      PasswordAuthentication yes
      Match Host localhost
      PasswordAuthentication yes

    9. 再起動してNX Clientからログインしてみて問題ないことを確認する。
    10. Teratermからもログインしてみる。SSHではプレインテキストではログインできず、RSA/DSA鍵を使用したログインは成功することを確認する。

    ということで、無事に軽量なリモートUbuntu環境ができました。

    参考にしたサイト:
    NXリモートログインのセキュリティ強化 : 参考っつーか、ほとんどそのまま。実際に作業される方はこちらをご覧になったほうがいいかと思います。


  • さくらのVPS(5) ~FreeNXを試す その1~

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

    デスクトップ環境をインストールしたことで、VNCベースで「さくらのVPS」上の仮想マシンでデスクトップ環境が使えるようになったわけですが、正直遅いです。

    で、WindowsのRDPくらい高速なものはないだろうか、と探していたらFreeNXというのがあることを知りました。

    参考にしたのは(いつもの?)技術評論社のUbuntu Weekly Recipeの『第98回 FreeNXでリモート・デスクトップ環境を実現する』です。

    早速、インストールしてみます。

    FreeNXのPPAページをみると、「Technical details about this PPA」というリンクがあり、そこのプルダウンメニューで「Lucid(10.04)」を選択すると、必要なコマンド

    deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu lucid main
    deb-src http://ppa.launchpad.net/freenx-team/ppa/ubuntu lucid main

    が表示されます。これをさくらのVPS側で動いているUbuntu上のSynaptic パッケージマネージャでリポジトリに追加します。追加した後、指示に従って、パッケージマネージャで「再読込」をして、クイック検索で「FreeNX」と入力すると、関連するパッケージが表示されますので、「freenx」にチェックを入れると依存関係にある多数のパッケージのインストール確認が行われますので、それらを受け入れた後、インストールを行います。インストールは短時間で終わります。

    次にクライアント側のインストールです。
    クライアント側はNoMachine社のDOWNLOADページにある「NX Client for Linux」、その中の「NX Client DEB for Linux – i386」を使います。ローカルのUbuntuマシンでダウンロードしたファイルを「開く」とすると、パッケージインストーラが起動しますので、「パッケージのインストール」を押します。

    インストールが完了すると、「アプリケーション」→「インターネット」の下に「NX Client for Linux」が追加されます。その中の「NX Client for Linux」を起動すると、「NX Connection Wizard」を起動しますので、接続先、SSHのポート、デスクトップの種類(これはUnixとGNOMEを選択する)などを設定します。

    完了するとログインユーザー名とパスワードを入力する画面になりますが、パスワードを入力しても認証に失敗します・・・。

    よく考えると、SSHの秘密鍵の位置もNX Clientは知らないはずだし・・・。
    ということで、/etc/ssh/sshd_config を書き換えて、パスワード認証を許可してみると・・・ログインできました。VNCベースのものとくらべて非常に高速です。この速度なら完全にリモートデスクトップベースで使えます!

    ・・・が、やはりパスワード認証は閉じておきたいもの。もう少し調べてみます。


  • さくらのVPS(4) ~デスクトップ環境のインストール~

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

    セキュリティの設定ができたので、デスクトップ環境をインストールします。VNCコンソール上でログインを行い、

    $ sudo tasksel

    として、タスク選択画面を表示させます。パッケージメニューから「Ubuntu desktop」を選択して「Ok」のところでEnterを押すと、インストールが始まります。インストールが完了したら、再起動させます。このとき、再起動後に表示されたグラフィカルログインではキー入力ができませんでしたが、VNCコンソールを再起動させたら入力できました。

    表示がすべて英語なので、ロケールの変更をしていなかったのを思い出し、

    sudo locale-gen ja_JP.UTF-8
    sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8

    としてロケール変更しました。その後、再起動、ログインするとフォルダ名を日本語に変更するか聞いてきますので、変更させました。

    「Administration」→「Language Support」とすると、「言語サポートがインストールされていないのでインストールするか?」と聞かれるので、インストールします。
    インストール後、タブ2つ(言語とテキスト)についてそれぞれ日本語を選択します。IMEシステムはibusのままとします。

    これで一旦ログアウトしてログインすると見慣れた日本語環境になっています。


  • さくらのVPS(3) ~入れ替え&セキュリティ設定~

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

    今度は本命のUbuntuに入れ替えます。

    カスタムOSインストールガイドに詳しく書いてあるので、作業自体は簡単です。こちらは多少時間がかかりますが、それでもCDROMから古いスペックのローカルマシンにインストールするより早いかもしれません。

    で、カスタムインストールが終わったあと、再起動するだけではCUIモードになっています。ここにいろいろとやっていきます。

    が、まずは何はともあれ、セキュリティです。まず、ログイン用にOpenSSH Serverをインストールします。

    $ sudo tasksel

    で「OpenSSH server」にチェックを入れて、「OK」でEnterを押します。インストールはあっという間に終わります。

    早速、/etc/sshd/sshd_config を編集して、ポート番号をデフォルトの22からxxxx(もちろん内緒です)に変更します。最初の方にある「Port 22」の部分を修正します。修正後、再読み込みをさせたかったのですが、わからなかったのでリブートしました。(「$ sudo /etc/init.d/ssh reload」でできるみたい・・・)

    sshでログインしなおして、ufwで他のポートを塞ぎます。

    $ sudo ufw allow xxxx(sshのポート)
    $ sudo ufw default deny
    $ sudo ufw enable

    とします。最後に「実行するとsshでログインできなくなるかも」みたいなメッセージが出ますが実行します。その後すぐに、別のターミナルからsshでログインできることを確認します。(この状態でもVPSコントロールパネルや仮想シリアルコンソールは使えるようなので大丈夫ですけどね)

    次に、公開鍵認証の設定をします。鍵の生成にはTeraTerm Proを使いました。「設定」→「SSH鍵生成」で、RSA/DSAの公開鍵ペアを生成します。作成したら、id_dsa.pub と id_rsa.pub の公開鍵を連結してサーバ側(さくらのVPS側のUbuntu)の ~/.ssh/authorized_keys に転送し、

    $ chmod 700 ~/.ssh
    $ chmod 600 ~/.ssh/authorized_keys

    として他のユーザー(といっても正常なら誰もいませんが・・・)がアクセスできないようにしておきます。

    ※まだよくわかっていないので、調べなければならないのですが、鍵はDSAだけで良さそうな感じがします。

    で、TeraTermで ホスト名とポートを指定してSSH2で接続した際に、「RSA/DSA鍵を使う」で鍵ファイルを指定し、ユーザー名/パスフレーズ(秘密鍵のパスフレーズ)を入力するとログインすることができました。Windowsの適当な場所に秘密鍵をコピーし、TeraTermで「設定」→「SSH認証」でユーザ名と秘密鍵を指定しておきます。

    ここまで確認できたら、/etc/ssh/ssh_config を改めて編集して、

    # Change to no to disable tunnelled clear text passwords
    #PasswordAuthentication yes
    PasswordAuthentication no

    として、パスワード認証を禁止します。

    Ubuntuからもログインできるように、

    $ ssh-keygen -t dsa

    でパスフレーズを入力して鍵ペアを生成します。生成された ~/.ssh/id_dsa.pub をホスト側の /.ssh/authorized_keys に追加してやると、

    $ ssh -p ポート番号 ホスト名

    でアクセスできるようになりました。