記事一覧

Arduinoで無線LAN

2013.03.31

着々と環境ロガー的なモノを作ろうと画策している今日この頃ですが。。。
データの保存先としてよく紹介されているのはSDカードやEEPROMですが、ピンの制約やデータの取り出しの不便さ等考えると、外部のWebサーバ等にデータを投げておいて、後はサーバ側で処理させるという手があるかな、と考えています。
で、Aurduino+Wifiで情報を漁っていたらArduino / The Cheapest WiFi Projectというのを見つけました。
一時期少し流行った「Fon」という無線ルータをハックしてDD-WRTというファームウエアに書き換えると比較的自由に使えるようになるので、Arduinoとシリアル接続してサーバにデータを飛ばそうというものです。
Arduinoにはイーサーネットシールドというのもありますが、結構な値段がします。Foneraなら使わなくなったのが家にも一台転がってるので、こいつを使うことにしました。
ファイル 41-1.jpg
改造やファーム導入の手順は、FON まとめ wiki に詳しく書かれているので、ほぼその通りに実行。ただし、Foneraとパソコンの接続にはArduinoを仲介してTeratermで操作します。arduino @ ウィキ参照。
DD-WRTが動くようになったら「イーサネットコンバータ化」というのをやります。これはFoneraを家の無線ルータのクライアントとして動作させて外部のインターネットに出ていけるようにするためです。
ファイル 41-2.jpg
これで、Arduino-(シリアル)-Fonera-(無線)-ルータ-(有線)-インターネット、へと接続できる環境が出来ました。
ついでにNTPの設定をしておくと、Foneraを結構正確な時計の代わりに使えると思います(サーバはntp.nict.jp)。

ただし、今後の実装に向けていくつか注意点があるのでメモしておきます。

  • Foneraのシリアル接続は基本的に115200bpsである
    stty -F /dev/tts/0 9600
    でスピードを変えられるが、リブートすると元に戻ってしまう
  • 共用レンタルサーバの場合、接続はtelnetではなくwgetで行う
    wget -q -O - "http://www.hoge.com/xxx.cgi?xx=yy
    でファイルは残らない

シリアルの速度問題はちょっとやっかいです。
こちらのアンサーによれば、SoftSerialのスピードは38400bpsが限界とのこと。
Foneraとの接続はTXとRX(ピン0と1)を使う必要がありますが、このピンはIDEからの書き込みにも使われているため、スケッチをアップロードする時にはFoneraから外す必要があります。
また、Serial.print()でデバッグ出力をPCで確認するのにも妨げになります。解決法として考えているのは、

  • ArduinoとFoneraはTX/RXで接続し、デバッグ用には別のピンで別のArduinoにSoftSerial出力する
  • デバッグ出力そのものをFoneraのtelnetを使ってPCに吐き出す
    こちらの情報が参考になりそう

といったところです。まだまだ先は長そうです。
にほんブログ村 その他趣味ブログ 電子工作へ

タグ:Arduino センサー

Arduinoで焦電型赤外線センサー(その2)

2013.03.30

前回焦電センサと格闘してあえなく敗退したのですが、その後追加の部品を導入して何とかモノになりそうな気配になってきました。
ファイル 40-1.jpg
追加で購入したのは「超高感度焦電センサー用レンズ」といもので、焦電センサにかぶせて感度をアップします。
このレンズが無いとセンサの前数センチくらいで手をかざした時には反応しますが、それ以上離れると反応を捕えられなくなります。
レンズ装着後はこのような簡易な回路でも、2~3メートル離れた所を人が横切ったのも捕えられるようになりました。
ファイル 40-2.png
センサの前で人が動くと電圧が大きく振れているのが分かります。
あと、どこかでセンサ出力端子からGNDに落とす抵抗を大きくすれば出力の振れが大きくなるという情報があったので抵抗値を1Mに変更しました。
ファイル 40-3.png
サンプルのスケッチを公開しますので、ご自由にお使いください。
以下、一部解説します。

void loop()
{
static int save[100];
static int ix = 0;
save[ix] = analogRead(0);
メインのループでは1ミリ秒ごとにアナログ値を読み取り、テーブルにデータを溜めていきます。


// データが100個溜まったら実行
if (ix > 99){
int v1 = 0, v2 = 0;
for (int i = 0; i < 50; i++){
v1 += save[i];
}
for (int i = 50; i < 100; i++){
v2 += save[i];
}
// 前の50個と後ろ50個の合計を比較し、基準値以上でライトをオン
int v3 = abs(v2 - v1);
int flg = v3 > SENSE ? 1: 0;
light(flg);
ix = 0;


}
ix++;
delay(1);
}
データが100個溜まったところで前半50個と後半50個の合計値を比較し、差分が基準値を越えたら反応ありとみなします。

void light(int f){
static unsigned long light_on;
static byte light_stat = 0;
if (f){
if (!light_stat) {
light_on = millis();
}
light_stat = 1;
} else {
// センス0でもON_TIME経過するまでオン状態を維持
if (millis() - light_on > ON_TIME) {
light_stat = 0;
}
}
digitalWrite(13, light_stat);
}
ライトを一定時間点けるルーチンでは、ライトの状態を保持し、オンになった場合はその時間(millis)を保持しておき、オフの指令が来ても一定時間が過ぎるまではオン状態を維持するようにしています。

このような簡単な回路+スケッチですが、セキュリティ用途などシビアな反応が求められるものでなければ(多少の誤作動が許されるなら)、結構使えるのではないかと思います。
今後いろんなセンサと組み合わせたロガーを作ろうと思っていて、LCDディスプレイのオン・オフにこの仕組みを持ち込もうと考えています。

にほんブログ村 その他趣味ブログ 電子工作へ

タグ:Arduino センサー AKE-1

Arduinoで焦電型赤外線センサーと格闘

2013.03.24

ファイル 39-1.jpg
随分昔に買ったまま眠っていた「焦電型赤外線センサー」を何とかArduinodeで使えないものかと、この土日あれやこれやと弄くってみました
以下のページを参考にさせていただきました

二日間の格闘の結果、人体には反応しているらしいが傾向がつかめず、やっぱりそれなりの回路が必要と改めて感じました
今日の反省

  • オペアンプはそれなりのものが必要。LM358N(5個100円)と電解ではないコンデンサと部品をケチってはちゃんとした結果が出ない
  • やっぱりフレネルレンズは必要?

ファイル 39-2.png
簡易オシロで計測したところ、センサに手をかざした箇所ではグラフが下に振れています。が、無反応時の電圧も結構振れています。これをソフト的にどう扱うか?が課題です
いっそキットを買ってしますという手も無くはないのですが。。。

ファイル 39-3.png
この程度の簡易回路では無理があったのでしょうか

にほんブログ村 その他趣味ブログ 電子工作へ

タグ:Arduino センサー

ブレッドボードのようなユニバーサル基板

2013.03.20

ファイル 38-1.jpg
先日秋葉原の秋月電子で面白いものを見つけました
ユニバーサル基板の表面にブレッドボードのような印刷が施してあるものなのですが、
ファイル 38-2.jpg
なんと裏のパターンはブレッドボード同様に配線されています
これを使えば、小さいブレッドボードに組んだ回路をそのままの配置で基板上に半田付けできるという訳です。
ブレッドボードからユニバーサル基板に移す時って何かと難しいですからね。。。とりあえず3枚ほど買ってみました。

にほんブログ村 その他趣味ブログ 電子工作へ

タグ:Arduino 自作

自作Arduinoを基板に乗せました

2013.03.17

ファイル 36-1.jpg
ボートローダを書き込んだATMEGA328を端材のユニバーサル基板に乗せてみました。部品点数は少ないけど、小さい基板に詰め込むのは結構大変でした。
ファイル 36-2.jpg
いつ断線orショートするか分からない危うい半田付けです・・・
とりあえずブレッドボードに刺せるようピンヘッダを仕込んでいます。

達人の域に達すればこんな技もできるみたいです
One-Chip Arduino ver. 2.0

にほんブログ村 その他趣味ブログ 電子工作へ

タグ:Arduino 自作

ページ移動