2012/11/29

回路図入力

今まで、WindowsPCで回路図入力する時は、Bschというフリーソフトを使っていたのですが、Macでは標準サポートがされていませんでした。
(ただし、Qtを利用したBschがあり、それをリコンパイルすれば動作するそうです。)
そのため、回路図入力ツールを探した所、中々これは!というツールが見つからず、
色々考えたあげく少し先の事も考えてEagleを使ってみる事にしました。
ただ、Eagleは基本商用ソフトでフリーで使うとなると、入力する回路規模に制限が発生します。
もちろん、そんな大規模回路を入力する事も無いので、Eagleをダウンロード、手順に沿ってインストールが無事終了。
試しにArduino無しの大気圧測定お天気お知らせシステム(大袈裟だな。。。)の回路図を入力してみました。
デスクトップ画像の上のウィンドウは回路図、下のウィンドウは、、、はい、基板レイアウトのウィンドウです!
できるのか?(^^)

2012/11/13

トランジスタ技術12月号

本屋でなにげなく特集を見ると、無線通信モジュールであるXBeeとセンサーを組み合わせる特集。
今月より節制しようと決意していたのだけど、今後の必要となる技術の勉強だと理由をつけて購入。(^^;)
数種類のセンサーが紹介されていたのだけど、意外とI2CやSPIでつながってくれるセンサーがある。
センサーが安ければ手が出しやすいのだけど。。。幾ら位するのだろう。
とりあえず、今センサーを買う事は無いけれど、どう組み合わせてどんなことができるかを、あーだこーだ考える(妄想する)ネタができた。(^^)

2012/11/10

arduino: 大気圧センサ

個人的事情で、ほぼ停滞していましたが、ようやく時間を作る事ができました。
単に大気圧を測っただけでは面白くないので、Freescale社のMPL115を使った気圧からの
天気予測の機能を追加しました。
ついでに単体動作しても予測を知らせる事ができるように、LEDを3つ付けました。
もちろん、シリアルで気圧値と気圧の変位度合いが出力されます。
結果としては、まずまずで1時間くらいは値がばらつきますが、その後は落ち着いているようにみえます。
画面のダンプと下のソースは、デバッグ用に配列を表示したり無駄な部分が多いです。(^^;)
配列もいらないと思うので、修正しようかと思ってます。
次はarduinoは別の遊びに使いたいので、ATMega328P単体で実現しようかと思います。

#include <Wire.h>
#include <MPL115A2.h>
int loopflag = 0; //周回フラグ
float prss[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; //気圧データ保存用配列
int tcount = 0; //3時間計
void setup()
{
  MPL115A2.begin();
  MPL115A2.shutdown();
  Serial.begin(9600);
  pinMode(2,OUTPUT); //high pressure
  pinMode(3,OUTPUT); //low pressure
  pinMode(4,OUTPUT); //stable
}
void loop()
{
  MPL115A2.ReadSensor();
  MPL115A2.shutdown();
  float sec_total = 0, min_total = 0;

  for (int j=0; j < 15; j++){
   for (int i=0; i < 15; i++){
    sec_total = sec_total + MPL115A2.GetPressure();
    delay(1000);
   }
   float avepress_1min = (sec_total / 15) * 10; // average + kPa->hPa trans.
   min_total = min_total + avepress_1min;
   sec_total = 0;
   delay(45000);
  }
  prss[tcount] = min_total / 15;
  Serial.print("tcnt = ");
  Serial.print(tcount);
  Serial.print(", pr[0]=");
  Serial.print(prss[0]);
  Serial.print(", pr[1]=");
  Serial.print(prss[1]);
  Serial.print(", pr[2]=");
  Serial.print(prss[2]);
  Serial.print(", pr[3]=");
  Serial.print(prss[3]);
  Serial.print(", pr[4]=");
  Serial.print(prss[4]);
  Serial.print(", pr[5]=");
  Serial.print(prss[5]);
  Serial.print(", pr[6]=");
  Serial.print(prss[6]);
   Serial.print(", pr[7]=");
  Serial.print(prss[7]);
  Serial.print(", pr[8]=");
  Serial.print(prss[8]);
  Serial.print(", pr[9]=");
  Serial.print(prss[9]);
  Serial.print(", pr[10]=");
  Serial.print(prss[10]);
  Serial.print(", pr[11]=");
  Serial.print(prss[11]);
  Serial.print(", pr[12]=");
  Serial.println(prss[12]);

  if ( tcount > 0 ){
    float dpdt = (prss[tcount] - prss[0]) / (tcount * (loopflag + 0.25) * 0.635);
    Serial.print("pressure, ");
    Serial.print(prss[tcount]);
    Serial.print(", dP/dt, ");
    Serial.println(dpdt);
// LED on/off
    if(2.5 <= dpdt){
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
      digitalWrite(4,LOW);
    }
    if(0.5 < dpdt && dpdt < 2.5){
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
      digitalWrite(4,HIGH);
    }
    if(-0.5 <= dpdt && dpdt <= 0.5){
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
      digitalWrite(4,HIGH);
    }
    if(-2.5 < dpdt && dpdt < -0.5){
      digitalWrite(2,LOW);
      digitalWrite(3,HIGH);
      digitalWrite(4,HIGH);
    }
    if(dpdt <= -2.5){
      digitalWrite(2,LOW);
      digitalWrite(3,HIGH);
      digitalWrite(4,LOW);
    }
   
//
    if(tcount == 8 ){
      prss[0] = prss[4];
    }
 
    if(tcount >= 12 ){ //tcount initialise
      loopflag = 1;
      tcount = 1;
    }else{
      tcount++;
    }
  }else{
    tcount++;
  }
}

2012/11/09

server: gmail設定

この前の投稿で設定した効果を試したくて、地道にいらないメールを貯めていたのですが、
ようやくメール総数が400通を超えたので結果報告です。
問題無く最新のメールも受信できるようになりました!\(^o^)/
Nov  9 11:40:03 severname fetchmail[16893]: 414 通のメッセージ (そのうち 414 通は 既に読み込んでいます) がアカウント recent:hoge@gmail.com , サーバ pop.gmail.com宛に届いています (8078699 バイト)
見ても面白くないですが、上のメッセージがfetchmailのログです。
とりあえず、これで一安心です。
話しは変わりますが、Macはsshとか標準で装備されているので、本当に便利です。(^^)

2012/10/20

サーバー: gmail設定

単なる趣味の域なのですが、うちのチビサーバーでgmailのバックアップをしているんですが、
1月あたり前から、新しいメールが入ってこなくなりました。
もちろん、Webでのアクセスができるので問題はないのですが、どうも気持ちが悪い。。。。
ログを見ていると、どうも300通あたりでメールの取得が終わってしまうみたい。
gmail側を見てみると、受信ボックスで消したと思っていたメールが、すべてのメールで
みてみると、殆ど残っており100通程度残していたと思っていたメールが700通もの残っていました。。。
gmailは大々に整理を行い、サーバーからgmailを拾ってくる設定は、gmailnにアクセスする時に
ID(メールアドレス)の前に recent: をつければ30日分のメールのみ受信することが出来ることを発見!
現在、上の設定にして様子見中です~。
うまくいきますように。。。

2012/10/03

Mac: MP3プレーヤーの接続

Arduinoが煮詰まっている間に、やったことを一つ。。。

うちには携帯オーディオプレーヤーが2つあり、AppleのiPodと東芝のGigabeatがあるのですが、
PCを使っている時は、iPodはiTunesを使って同期、GigabeatはWindowsMediaPlayerを使って
同期をとっていたのですが、Macになって当然WindowsMediaPlayerが無い。。。
そこで、Gigabeatにどうやって音楽データを送ろうか悩んでいました。
まず、メジャーな方法はGigabeatはUSBメモリのようにドライブとしてマウントされるので、
ドラッグ&ドロップでMP3データをコピーすればいいのですが、調べてみると曲順が乱れてしまうらしい。

さらに調べてみると、SongbirdというソフトがiPodも他のMP3プレーヤーも同期できるらしい、ということが分かり、早速ダウンロード&インストール。
途中でiTunesライブラリをインポートする?、Songbirdのデータをエクスポートする?と
聞かれたので、インポートのみ選択して、しばらくライブラリのインポート処理が行われます。
それ以外はContinueを連打で、インストール作業は終了。

SongbirdのライブラリにもiTunesと同じ曲目が並び、MP3でもAACでも再生できました。
GigabeatとMacをUSBでつないだら、Songbirdがミュージックプレーヤーとして認識していいか?
と聞いてきたので「OK」。
入れたい曲をプレイリストに並べて、Gigabeatへ放り込めば同期が始まりました!!
ただ、当たり前ですがAACデータを同期してもGigabeatでは認識しませんでした。。。
とはいえ、今も使っているMP3プレーヤーが、同期できたのは本当に良かった!
思わずiPod nano(第6世代)を買おうとしていましたので。。。(^^:)

2012/09/28

Arduino:気圧センサ

なんとなく、まともなデータが取れ始めましたので、本当の目的である急速に発達する
低気圧発見かも?機、通称名「爆弾低気圧発見器」に仕上げるため、プログラムを
ちょこちょこと変更してみました。
まずは、ArduinoからPCへシリアル経由でデータのみ出力するようにしました。

#include <Wire.h>
#include <MPL115A2.h>
void setup()
{
  MPL115A2.begin();
  MPL115A2.shutdown();
  Serial.begin(9600);
}
void loop()
{
  MPL115A2.ReadSensor();
  MPL115A2.shutdown();
  float total = 0;
 
  for (int i=0; i < 30; i++){
   total = total + MPL115A2.GetPressure();
   delay(1000);
  }
  float avepress = (total / 30) * 10; // average + kPa->hPa trans.
  Serial.print(" ");
  Serial.println(avepress);
 
  delay(30000);
}
30秒データを取った後、平均化してkPaからhPaへ変換します。
ArduinoからシリアルUSB変換してPCと送られ、PCではRubyでデータ整形&ファイル出力
するようにしました。
require 'rubygems'
require 'serialport'
require 'date'
port = "/dev/ttyUSB0"    #arduinoのポート番号
sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE)
while (press = sp.gets) do
  fp = open("press.log","a")
  day = Time.now
  output = day.strftime("%Y%m%d-%X")+press
  fp.write(output)
  print output
  fp.close
end
sp.close
 で、昨日の0時から動作させて、とりあえず21時までのログを表計算ソフトでグラフ化
してみました。
日中は太陽の影響で気圧が乱されるらしいのですが、傾向としてゆっくりと気圧が低く
なってますね。
現在、気圧と天気について調べているので、それをプログラムに反映できればいいですねぇ。(^^)