goo blog サービス終了のお知らせ 

つれづれなるまゝに

単なる作業メモ。主に、Linux, arduino, raspberry piとか?

arduino SparkFunブレッドボードホルダ

2013-10-06 21:26:24 | arduino
SparkFunブレッドボードホルダーを買ってみたのだが、、、



なんか変、、、



真ん中で曲がっている。orz
機能的には問題ないのだが、格好が悪い。

これなら少し高いが、アクリル製のスイッチサイエンス製の方にしておけばよかったよ。

ご購入の際はご注意ください。

arduino RTC その2 & HH10D その1

2013-10-06 14:10:40 | arduino
RTCですが、ストロベリーリナックスでM41T62を見つけて、これにしようかと思っています。

CR2032電池ホルダーが付属しており、モジュールにダイオードものっておりはんだ付けするだけで使用できるようになっています。また、プルアップ用の抵抗ものっているので、モジュール自体をブレッドボードから外しておいておいても時間が維持されるっぽい。

RTC-8564NBに劣る点は5Vで動作できないことくらい。

-----

HH10D湿度センサーを入手。
が、これにはプルアップ抵抗がのってないので、抵抗を買ってこないと組み込めない^^;

じゃぁ、いくつの抵抗が必要なのか。
こちらのサイトでは10kΩのものを使用されています。

プルアップ抵抗についてのウィキペディア
必要性はわかりますが、いくつの抵抗を使えばよいのかはわからない。。。

もう少し調べてみたところ、こちらのサイトで、I2Cの接続構成とプルアップ抵抗について書かれてました。

Rp > (Vdd - 0.4) / 3mA
⇒Vddが3.3vなので、0.9kΩ以上

Rp < 300nsec/100pF = 3kΩ

んー、10kΩだと大きすぎるような気が。

おそらく、通信速度を100kpbsとすると立ち上がり時間が1000nsecになるので、
Rp < 1000nsec/100pF = 10kΩ

ということなのでしょか。

On電源が0.4Vmaxとか100pFがどこから出ていたかも不明。

-----

I2Cですが、Arduinoは5v駆動なので「3.3vのセンサー使うときはレベルシフトしなければセンサーにダメージ与えるから注意ね」って記載がここにあった。

当然、3.3vと5vのセンサーをI2Cで繋いて制御する場合は、レベルシフターが必要なのは知っていたが、3.3vだけを使用する場合も必要なものなのだろうか。

んー。わからないことてんこ盛りorz

arduino RTC その1

2013-10-02 23:56:09 | arduino
RTCを購入するための下調べを実施

スイッチサイエンスでsparkfunのこの製品を買えば早いのだろうが\1,600もする。
RTC, arduinoで検索すると、秋月電子で売っているセイコーのRTC-8564NBを使う例が多くヒット。値段も\500と安く、動作電圧が1.8V~5Vと3.3Vでも使えそう。(sparkfunは5V)

ただ、バックアップは別途つけなければいけない。私でもできるのかなと少し調査。
arduinoそのものではないが、このサイトでAVRでRTC-8564NBを使って同じようなことをされてる方が回路図を公開されていたので、参考にさせていただいた。あとこちらで関連サイトをまとめられてたので参考になりました。

以下のものを買えばよさげ。
※プルアップ抵抗はRTC-8564NB上のものを使用することを想定

リアルタイムクロックモジュール RTC-8564NB, \500
ボタン電池基板取付用ホルダー CR2032用, \50
整流用ショットキーダイオード 1S4, \30 x 2
・CR2032電池, \200くらい

⇒トータル、\810と半額くらいでできそうだ。


他のサイトもいろいろ調べたが、RTC-8564NB上のプルアップ抵抗を使わず、別途用意されてる方が多いようなのは何か理由があるのだろうか。

arduio SDカードへのデータ保存 その1

2013-09-29 21:33:55 | arduino
最近は、arduinoにどっぷり。
次はSDカードシールドを使って、取得したデータを保存させようと思う。

SDカードライブラリの主な使い方は、こちらをみて勉強。

購入しているのは、arduino純正のxbee + ワイヤレスSDシールド。

一瞬ケーキ?と思わせるようなおしゃれなパッケージングは、made in Italy。

サンプルスケッチをみていて、あることに気が付いた。

SDにファイルを書き込む際のタイムスタンプだが、

 SdFile::dateTimeCallback( &dateTime );

という形でコールバック関数を登録できるそうだ。
このコールバック関数の中で時間を取得する必要がある。。。そういえば、考えてなかったよ。。。

サンプルスケッチのコメントに書かれているが、GPSかRTCが必要ですね。
ネットワークに繋がってるならntpから取得する方法もあるようですね。ちなみにRaspberry piにもRTCは搭載されてないので、起動時にntpでの時間設定が必要ですね。

先に、RTCモジュールを買ってきて、試してみることにします。

(続く)



arduino 雑記 - delayとsleepとか

2013-09-29 00:12:13 | arduino
これまでスケッチについては、よそ様のをもってきて少し手直しする程度でした。

今後、本格的に使っていくにあたり、今日は少しarduinoの言語を調べてみた。主に以下を参考にしました。

Language Reference
Arduino 日本語リファレンス


1) 基本仕様

・C/C++をベース
 一般的なOSでのC言語はmain()が最初に呼ばれるが、Arduinoでは1:Setup() 2:loop()で以降、loop()が繰り返されて呼ばれる仕組みということね。

AVR Libcにリンクされていてその関数を利用可能
 なければ、このライブラリを直接つかって拡張可能ということですね。


2) delayとsleep

 arduinoの基本的な使い方は制御や測定。ということで、loop()の繰り返しという基本的な仕組みは納得。これまで使ってきたスケッチは、delay()を使って周期をコントロールしているもばかりで、それが普通なのかと思ってましたが、、、

「熟練したプログラマーは、よほどスケッチが簡単になる場合を除き、10ms以上のイベントのコントロールにdelay()を使うことは避けるでしょう」

そうなんですか^^;
理由は、「計算やピン操作といった他の処理が実質的に止まってしまう」から。
なので、millis()を使いなさいと。つまり、delay(1000)なら、


unsigned long last = 0;
unsigned long time = 0;

loop(){
 time = millis();
 if(time - last > 1000){
  // 処理を実行
   ・・・
  last = time;
 }
}

ってことですかね。javaのgetTime()、WindowsのCTime::GetTime()的な処理ですね。
unsigned longなので約50日でオーバフローするので、連続使用するときはその考慮も必要ですね。

ただし、割り込み処理は実行されるので、簡単なものだとdelay()でもよさげ。
このmillis()だと、loop()は常に呼ばれるので、省電力ということではdelay()の方がよい気がします。

さて、じゃぁsleep()は?と思ってみてみたところリファレンスにはない。
こちらをみると、sleepはAVR Libcにはあるようです。スリープメソッドも何種類かあって、処理実行後にパワーダウン、外部割り込みで起きるようなこともできるようです。


今日はここまで。次はC/C++以外の言語でarduinoを使用する方法とか調べてみようかと思います。Processingとか。