2016年2月10日水曜日

プルアップ抵抗は小さければ良いの?

すべての回路を思い切り単純化するとLCRです。どーんと電流が流れようとすればインダクタンスLが立ち上がりを邪魔し、静電容量Cが貪欲に電荷を飲み込み、抵抗Rがそれらを邪魔します。今どきのマイコンの入力端子はほとんど全部MOSなので、端子ごとにコンデンサが挟まっているような状態です。

もう1つ前提として、マイコンなどロジックICの仕様書にはスレッショルドというものが記載されています。これは、これ以下の電圧なら確実にLowと判断され、こっち以上なら確実にHighとなる、という仕様を示すものです。数Khz以下の回路であれば、十分な余裕をもってLowはGnd近く、Highは電源近くまで振れますので、問題ありません。

でも、余裕が大きすぎると電圧の振り幅が大きくなるので消費電力が増えるし、動作も低速になります。逆に余裕が小さい場合にはノイズや電源変動で誤動作しやすくなります。

以上を踏まえて見ていきます。

■プルアップ抵抗が大きすぎる場合■

Cに充電するまで時間がかかってしまい、立ち上がり / 立ち下がりの波形がなまってしまいます。これはオシロで見れば一目瞭然なので、問題視する人は多いです。

■プルアップ抵抗が小さすぎる場合■

では、小さくすれば良いのでしょうか?

今度は、Low出力がVcc側に引っ張られることが問題になります。今どきのセンサーやマイコンは省電力仕様なので、大電流を供給できる作りになっていません。センサーの出力をマイコンにつなぐような場合、センサー内部からドライブ回路への出力がLowレベルになっていたとしても、プルアップ抵抗が小さすぎてドライブ回路の能力が足りないとGndに引っ張ることができず出力電圧が下がらずにHighと誤認識されてしまいます。

それに前述の通り今どきのマイコン / センサーの入力端子はコンデンサーみたいなもんなので、Lowに落とす場合ドライブ回路はコンデンサーに溜まった電荷とプルアップ抵抗から供給される電流に立ち向かわなければなりません。

周波数が数百Khzを越える回路だと、回路の静電容量Cや電流供給能力が問題になって、波形がなまりがちです。でも、少し極論になりますが、スレッショルド電圧から離れたところで波形が多少暴れても大きな問題ではありません。要するにデジタル回路は、スレッショルドより上か下かで動く回路なので。

ちなみにドライブ回路からの電流供給能力を支援する意味でもパスコンは重要なのです。ドライブ回路が電流を流そうとしても電源が追いついてくれなければ結局波形は鈍ってしまうのですが、そこにパスコンがついていればコンデンサに蓄積された電荷がドライブ回路に迅速に電荷を供給してくれます。センサーなどを使うときには必ずメーカー推奨回路に目を通してどのぐらいのパスコンをつければ良いか調べておきましょう。

そんなこんなで、デジタル回路も高速になるとアナログ的な配慮が必要になってくるから困ったもんですね。

2016年2月9日火曜日

ダストカウンターPPD42について

先日、ESP-WROOM-02とダストカウンターPPD42 / DSM501を接続しました。

ESP-WROOM-02カスタム基板:ダストカウンター&OLED

受注前に作例を探してみたのですが、Arduinoに接続しているほとんどの作例がP1かP2のどちらか一方の信号しか使っていません。それらのソースを読んでみると、だいたいこんな処理でした:
  • 時計をリセット
  • pulseInでlowの時間を計測し、集計する
  • 時計が30秒経過したら集計結果を計測値とする

pulseInはlowまたはhighの継続時間を簡単に測ることができて便利なのですが、2つ以上の独立事象には対応できません。今回のダストカウンターのように2つのパルスがバラバラに来るものを同時に測定することはできません。まぁ15秒ごとにP1とP2交互に切り替える等で対応は可能ですが、同時でないとなんとなく気持ちわるいですねぇ。

なので私はArduinoと違いESPにはインターバル割り込みがあることを利用して次のような処理を行いました:
  • 100μ秒ごとに割り込みを発生する
  • 割り込みごとにLowだったら回数をカウントする
  • 1秒ごとに結果をテーブルに格納する

これであれば、1秒間に10000回それぞれのポートを見に行って状態を調べることができるので、かりに計測対象がもう少し多いとしても理論上一万分の一の精度が得られます。まぁ原理的に言ってもセンサー自体そこまで高い精度はないのですがw

なお、上で「1秒ごとに結果をテーブルに格納する」と書いてますが、テーブルは60個の要素を用意してます。「秒」を配列の添字にすることによって、ごく単純に「過去60秒間のデータによる移動平均」を求めています。昔からあるリングバッファという技術を単純化したものですが、ダストカウンターのみならず温度や湿度などセンサーへのノイズなどでバラつくデータを扱うときには簡単で良いです。

応用として10秒間の移動平均を取りたい時には table[second()] の替わりに table[second() % 10] と書けばOKです。「%」は割り算の余りを求める演算子なので、秒が0-59に変化しても[ ]の間は0-9までしか変化しないので、結果として過去10秒分をぐるぐるとエンドレスサマーするわけです。nice boat。

また、2秒分集計して1分間なら table[second() / 2] と書きます。正式(?)なリングバッファはいろいろと面倒くさいのですが、時間が相手なら便利に使える方法です。ちなみに、second()のかわりにmillis()やmicros()を使えばミリ秒, マイクロ秒単位での集計も可能です。Arduinoでマイクロ秒はさすがにキツいと思いますが。

以上、最近ハードばっかりいじっているので、ソフトの記事も書いてみました。

しかしソフトの記事だと適当な写真がないな。でもソフトの話だからってgetti imageあたりから外国人幼女がソフトクリームを舐めているフリー写真(鼻の頭にクリームをつけているのはお約束)を貼ったりするのもアレなので、DustCounter基板の写真を貼るw


最初の頃と比べるとリフロー上達したなー、と、誰も言ってくれないので自分で言うw

2016年2月8日月曜日

ESP-WROOM-02カスタム基板:ダストカウンター&OLED

出荷前連続稼働テスト(DSM501版)

■発端■

facebook友達のO先生が「PM2.5センサー欲しいけど高い」と書き込んでいて、私が「ポケットマネーで作れますぜ、しかもWiFi対応」とコメントしたところ、受注が決まりました。

話が早いw

■仕様確認■

当初は、倉橋屋謹製Board1をベースにしてユニバーサルボードかブレッドボードで、と考えていましたが、「持ち運ぶので丈夫かつコンパクトに」とのことで基板を起こすことになりました。
  • MCU:ESP-WROOM-02
  • 表示器:電子工作のお友達「0.96インチ OLED」
  • ダストセンサー:神栄テクノロジー製のPPD 42NJ
  • 電源:5vをモバイルバッテリなどから。USBコネクタは使わず変換ケーブル使用
  • 3ミリのネジ穴を4つ
  • センサー / OLEDはボードに乗せない。
  • センサー / OLEDとの接続は逆差し防止の爪付きコネクタ

コネクタの名前がわからなくて、某電子工作コミュニティに質問したら、みなさん教えてくださって、なかには「近くにいるから寄った」と写真まで取ってきてくださった方も。ありがとうございました。いつかコミュニティにお返しができれば良いのですが。

■設計■

Board1 Ver 0.3をベースにがっつりコネクタなどを配置。PPD 42NJについては5v電源・5v出力なので、抵抗で分圧してからESPに入力。

ほとんどauto route



はい、絵画的センス皆無ですorz

■検証■

Board1 Ver.0.0を使い、ブレッドボードでセンサーとディスプレイの動作を確認しました。ここまでだいたい48時間ほど。ホント、話が早いのは良いことです。


■基板発注〜納品■

例によって、最初の設計が出来てから2-3日寝かせます。今回ちょうど週末にかかっているのと他に3種類の基板が同時に設計出来上がったので、いいタイミングでした。

1/18....発注
1/26....深センから発送(EMS)
1/28....到着

DHLよりEMSの方が安くて早い。DHLは日本に着いてからが遅いんですよね。



で、週末の1/30、早朝からリフローです。2枚並行して作ろうと思ったのですが、もし設計にミスがあったら2枚分の部品がパーなので、1枚だけ作りました。なお、自分用にリフローする時は、ESPの端子には横一列にまとめてハンダペーストを置いてしまうのですが、今回は受託品なので丁寧に一個一個ランドに置いていきました。そしてホットプレートでリフローし、スルーホール部品をハンダ付けして完成。

とりあえずLチカを…と思ったのですが、LEDを取り付けたIO13にはダストセンサーをつなぐことになっているので、その替わりにTxラインに Serial.write("tarepanda");と送って、ランプが点灯することを確認しました。以前間違えてLEDと直列に10kΩの抵抗を入れたらホタルイカのようにササヤカな光が点ってそれはそれで味わいがありました。

今回は元の設計通り1kΩにしたのですが、明るいわぁ(笑)。あまりにも明るすぎるので納品版は2.2kΩにしました。それでも明るい。

■サンプルソース■

例によって難しいことはしていません。センサーからP1/P2の2本の信号線からパルスが出ていては、埃を検出した時間が長いほどP1/P2のLow時間が長くなるとのことです。P1は1.0μm、P2は2.5μmの埃を検出します。

よくあるサンプルだとArduinoのplusIn関数を使ってどちらかのパルスがLowな時間を計測し、それを30秒間合算しているという例が多いのですが、それだとP1/P2の両方を図ることができなくなってしまいます(どちらか一方のパルスに専有されてしまうので)。

なので、このサンプルでは、100μ秒ごとにポートを見に行き、LowかHighを判断し、Lowならカウンタを加算する、という単純な方法をとっています。60個の配列を用意し、各秒ごとに各配列の値を加算すれば、過去60秒間の各秒毎のLow時間を集計できますので、あとは全体を集計すれば過去60秒間の合計Lowを求めることができ、過去60秒間の移動平均も出すことができます。

追記(02/009):ソフトウェアについてもう少し詳しく書きました。

あと、ESP-WROOM-02の作例では、set upで接続されるまで待って、それから処理を継続することが多いのですが、それだとWiFiとの接続ができない場所だとデモもできません。なので、とりあえずbeginで接続を試みたあとは、通常のloopの中で接続成功したか否かを見に行き、結果をOLEDに表示するようにしました。つながらなくてもとりあえず計測および表示を続けていて、つながったら1分ごとにThingSpeak.comへ送っています。



■公開情報■

githubにてeagleデータを公開準備中です。ソースとEagleのデータをひとまとめにして公開しようとしているのですが、ついでに自分の作業用ディレクトリも大整理しているところなので時間がかかってます。

■ビルド方法など■

長いことArduino / ESPを使っていると、いつの間にかいろいろなライブラリが充実しているのですが、「これが最初!」ということになると素直に走ってくれません。というわけで、ビルドに必要な方法を挙げて行きます。
  • USBシリアルのドライバをインストール
    • Windowsの場合は、お使いのUSBシリアルのドライバをインストールするだけ
    • MacOS Xの場合、10.8以降、ドライバに認証が必要になったため、ややこしくなってしまいました。
      • 大まかな手順としては、Appleの認証のないkextの使用を許可する、という設定をして、それからライブラリをインストールします。
      • 使用許可はセーフティモードで再起動した後、ターミナルから以下のコマンドを実行し、また再起動し、それからライブラリをインストールします。
      • 使用しているUSBシリアルがFTDIの場合はここからダウンロードします。
      • 最近多くなってきたCH340についてはここの一番下(らしいのですが読めないのでわかりません…)。
      • うまくいかない場合には、ご遠慮なくお問い合わせください。
  • Arduino IDE 1.6.5
    • とりあえず動作確認した環境は1.6.5です。
    • 公式ページからダウンロードしてインストールしてください。
  • OLEDライブラリ
    • 以下のgithubからzipをダウンロードします。
    • Arduino IDEを起動し、スケッチ>Include Library...>Add .ZIP Libraryで先ほどダウンロードしたOLEDライブラリを指定して読み込んでください。
  • Time.h
    • 時間を扱うためのライブラリに含まれます。
    • このページの「Download ZIP」をクリックしてダウンロードしたファイルを上記と同じ手順で読み込みます(スケッチ>Include Libraryうんぬん


■謝辞■

各ライブラリの作者の皆様、

そして、この基板の発注主であり記事として公開することを快く許してくださったO先生、

ありがとうございました。

■お問い合わせ■

ご購入や製品開発についてのご相談はこちらまでお気軽に。

ご参考までに今回のオーダーメイド完成品で1セット2万円以下です(完成品1個+未使用基板8枚、デモ用ソフトと送料)。

また、5台からElecrowにて量産可能です。その場合、今回のものなら外付け部品も全部そろえて10台5万円程度です。

オーダの流れ:
  • メールで「こんな機能が欲しい」とご相談ください。
  • 何度かのやりとりの後、構成案と費用をお知らせします。
  • PayPalにてお支払いください。
    • PayPalはショッピングプロテクションがあり、もし納品されない場合には返金されるので安心です。私もebayで何度かお世話になりました。
  • 試作、基板設計、基板発注、基板完成、実装…など各段階で進捗をお知らせします。
  • 宅配便にて完成品をお送りします。
  • Google+にてユーザサポートを承ります。
    • グループでのサポートは無償です
    • privateサポートについてはご相談ください。

□追記(2018年12月14日)□

経験値上昇の伴い、値上げしました。最低4万円からですm(_ _)m。

あと、お取引にはココナラハンドメイドを使いますので、契約時にクレジットカード等でココナラに対して支払っていただき、納品後に私に対して決済される形になります。

ご相談はこちらまで。お気軽にどぞ。

2016年2月7日日曜日

白ドットのESP-WROOM-02が正常に動作しない

■まとめ■

比較的最近のESP-WROOM-02のEN端子はVccに直結するか、少なくとも1kΩ程度の低い抵抗でプルアップしないと動作しない。

■詳細■

1月中旬に購入したESP-WROOM-02がおかしい。ESPはロットによって検査印の色が違いますが、白いドットのやつです(白が全部ダメというわけではないが、おかしいのは全部白)。

症状はこんな感じ:
  • パワーオンリセットしない。
  • ファームウェア書き込み後にワームブートしない。
  • リセットボタンを押しても反応しないことがある。
  • Arduino IDE  1.6.5から単純な1HzのLチカを実行した際に、点滅が不規則になる。それも3秒動いては1秒休むという状態。単純なカウンタを追加してシリアルから出力するとその間にリセットされている様子はない。
  • しっかりした電源をつないでいてもcause: 4でException
  • I2Cがおかしい。他で動くものが動いたり動かなかったり。

とりあえずArduino IDEのiot sdkではなくrtosのLチカを実行してみると正常に点滅を続けます。この手順でファームv1.2を組み込んでもiot sdkではやっぱりダメ。

いずれのファームウェアでもパワーオンリセットはかからないのは同じ。ESPの周辺の回路は普段ブレッドボードなどと同じだし、オシロで見ている限りは電圧ドロップアウトなども起こっていないけれど、status 4で落ちるのはどのファームでも同じ。

うーん。困った。で最近1ヶ月の記事で検索してみたらコレがヒット。

CH_ENを使って外部からESP8266を起動させていて、動作が不安定な場合はハードウェアユーザーガイドを参照し、RC遅延回路を追加すること

前にHardware Guideを読んだ時に見落としていたか…。

今までENは10kΩでプルアップしてて問題ありませんでした。で、上の記事に引用されているHardware Guideによれば内部的にプルアップしているから外付け不要とのことなのでプルアップ抵抗を外してみたのですが…まったく動きません。

でもVccと直結してみたら、パワーオンリセットが効くようになりました。つまり、内部ではプルアップされていないということですね。Lチカが不安定だったのもENが中途半端だったのが原因だったのでしょう。もう何を信じていいのかわかりません。

しかし困りました。

何が困ったって?

Elecrowでボードに組み込んでもらったので不良品が20個目の前にww


俺オワタwwwww

2016年2月2日火曜日

新製品リストに出てこない秋月

結構あるんですよね。たまたま別のものを検索してて見つけたり、秋葉原店頭の「新製品コーナー」で見つけたり。

今回見つけたのは以下の点。

秋月のWebから


並んでしまった。「4桁赤色7セグメントLED表示器(コロン付) カソードコモン(カソード共通)」はWebの新製品ページに並んでいるのですが、カソードコモン各色とアノードコモンの緑は未掲載です。さっそく全色買ってしまった。もう一回り大きければいいんだけどなぁ。でも、これで、時刻なのか経過時間なのか温度なのかが今ひとつわかりにくかった我が家の7セグLEDデジタル時計も改善されるってもんです(まだ作るのかデジタル時計)。

次。

秋月のWebから

12chLEDドライバIC MY9221TE

…この2つは写真が違うんだけど、見た目は似たようなもんだからいいやw で、この2つ、何が違うのかと思って両方買ってみたんですが、違うのはパッケージだけのようです。両方買った意味がなかった。

HT16K33みたいにシンクとドライブでマトリクス駆動みたいな使い方ができるのかと思ったんですが違いました。単に(と言ってはアレですが)12chのLEDを独立してかなり精密にPWM制御できる、というチップでした。RGBごと(3色☓4ch)に外付け抵抗で電流のリミットを決められるのでホワイトバランス(?)をアナログ的に設定できたり、それなりの小技は使えるようです。

でも、何に使ったらいいのかわからない…とりあえずナイトライダー的にクルマやバイクでチカチカさせたりするのには丁度良いのかも。LEDで検索すると、バイクやクルマのストップランプ / ウィンカーをLEDでどうにかしようっていう層が結構アツいんですよね。

なかにはかなり無謀な使い方をしている例(1A流してセメント抵抗で電流制限とかはまだ良いほう)もあるので、そういう方々にはマイコンとMOSFETでちょっくら制御して差し上げたい。

関係ないですが、AnlogDiscovery2が出ましたねぇ。Windowsを入れなくても使えるようになったみたいで、無印を買おうかどうしようか悩んでいた私の背中をどーんと押されたような気分ではあるのですが、さてどうしたもんか。

秋月のWebから

そういえば新製品で「2端子デジタルIC温度センサ LMT01LPG」、ってのも出てますね。2端子で電源どうすんだろう?と思ったら、【出力パルス数で、温度を表します「0℃:800パルス」「50℃:1600パルス」】とのこと。


へー、そんなのもあるんですね。88khz、100mSと書いてあるので間欠的にパルスが出てくるんでしょうか。150円とデジタルの温度センサとしては安い方ですし、入力1本しか使わないので、I/Oの足りないESP-WROOM-02で使うと良いかもしれません。

ってか、風呂温度計に丁度いいなぁ。買おうっと。

なお、安いデジタル温度センサといえば「高精度12ビットI2C接続デジタル温度センサ STTS751」なんてのもあります。こっちは100円。ただしSOT-23-6なので変換基板等が必要です。

そんなこんなで。

2016年2月1日月曜日

ピンソケットの小さな落とし穴

秋月電子通商のサイトより


秋月の「分割ロングピンソケット 1x42 (42P)」は大変便利です。10本単位で買って愛用しております(割引にならないのが残念)。

が。小さな落とし穴があります。

この分割ロングピンソケットは、ピンヘッダに対応していません。ピンヘッダのピンが接点までギリギリ届くか届かないか、という状態です。今までジャンプワイヤでしか使っていなかったのですが、同社の「超小型USBシリアル変換モジュール」に同梱のピンヘッダをつけて使おうとしたらスカスカで、指で軽く押さえていないと通信が途絶してしまいます。

なお、分割タイプでないピンソケットの場合には、ピンヘッダがしっかりと固定されます。中の接点の構造が異なるのでしょうね。また、長足タイプのピンヘッダは当然、問題なく使えます。

どうぞお気をつけて。

2016年1月29日金曜日

ESP + 2軸サーボ


いやー、やっぱり金曜日の夜はサーボに限りますな(意味不明)。

某Elecrowは基板だけでなく、いろんな電子部品も扱っています。ある日、2軸のサーボモータを使ったカメラ台?を見つけたので、すぐに注文する私であった。

Elecrowのサイトより

で、買ってそのまま忘れるのが私のいつものパターン。

で、思い出したのですぐ作る。

基板は、今や我が家の電子工作標準品となったESP-WROOM-02のバグあり試作品ボード(笑)。Tx-Rx-Vin-GndあたりはFTDIとつないだ方がラクなので足長ソケット、その他はブレッドボード用のヘッダピンを取り付けました。

机の塗装塗り直そう(と毎回思う

回路は、サーボモータのVCCとUSBシリアルのUSB 5V(VIN)、GNDとGND、上のサーボの信号線(黄色)とIO12、下のサーボの信号線(黄色)とIO13をつなぎます。その他、VINとGNDの間に1000μFの電解アルミコンデンサをブチ込んでやります。サーボの中身はモータなのでかなりノイズ乗ったり電源に悪さをしますので。今回、サーボモータ用のコネクタ(JRタイプ?)を買い忘れたので、テフロン線をひんむいてヒシチューブ加工し、IO12/IO13とつなぎました。

まだ何に使うか決めていないので、とりあえず試運転。レーザーポインターでも買ってくるかな。



そういえば高校時代(物理部)で、物理室にあったレーザーチューブを使ってレザリアムとかやったなー。当時ものすごく効果だったHe-Neレーザなので、先生に壊すな壊すなくれぐれも壊すなと顔を見るたびに言われたっけ。レーザーの値段は当時の1/1000ぐらいになったんじゃないかなぁ。あの頃1mWのレーザで10万円してたもんね。i8255の先にお手製のラダー型DACをつないでステレオのアンプでスピーカーを駆動し、スピーカーにミラーを取り付けてレーザーを当てる式。表面反射ミラーじゃないと像が二重になるんだけど、高いので銀鏡反応でプレパラートにメッキして試したもんだった。制御に使ったのはTRS-80。1.78MhzのZ80では当然アセンブラではないと間に合わず、カセットテープからアセンブラを読み込んではテストラン、テストランしてはアセンブラをロードしなおし、の大変つらい開発じゃった。



…昔話の方が長くなってすみません。

Elecrow基板、発注から10日で到着w


Elecrowへの発注は1月18日の夜、1月28日夜到着しました。

最初は何度も確認して、それでも足りないところがあったのですが、今ではググることもなくさくさくとCAMプロセッサアイコンをクリック→ファイルを開く→Elecrow Garber Generatorファイルを選び→Process Jobボタンを押すまで進み、あとは必要なファイルを選んでzipかけて送るだけ。慣れたものです。

で、EMSで26日発送。いつまで経っても中国EMSの配送ステータスが変わらないのでヤキモキしていたのですが、丸2日でした。EMSは約11ドルです。

一方、今まで使っていたDHLは$16。発送したその日に成田に着いていることがあって驚くのですが、それから先は最悪。日本に着いてから3日ぐらい止まったままなんてことがよくあります。高いし、再配達依頼のタイムリミットが前日昼までだったりする殿様商売のDHLなんてもう使わない!

それにしても、今回も仕上がりはバッチリ。今回4種類10枚ずつ頼んで例によって12枚ずつ到着、送料込みで1枚120円。ありがたやありがたや…。

初めて黄色を選んで見たけど透けたところが懐かしい色だなや

さて、今週末は充実した休みになりそうです。いや、2月は春節で中国とのやりとりはほぼ何もできないので、今週末ではなく2月一杯というべきかもしれませんが…。

2016年1月27日水曜日

お風呂時計(第三回・小改良)

■少しだけ改造■

はい、続きです。


電池が弱くなると実際より明るく判断してしまう傾向があるようで、風呂場の照明を切っていても脱衣場を点灯すると時計のスイッチも入ってしまいます。

また、ちょっと向きを変えたりした時に手で影ができると計時が止まってしまい、入浴時間ゼロに戻ってしまいます。

ということで、時計が点灯中は、暗くなったかどうかの基準値をより小さくします。つまり、一度点灯したと判断したらかなり暗くしないと止まらないよ、という改造。今までは明暗の判断を1つの数値(45)で行っていたのですが、今回、明るくなったという判断には60、暗くなったという判断は50にしてみました。これで使用中にちょっと影になっても止まらなくなりました。

もう1つ、一度止まっても、30秒間以内に明るくすれば計時をリセットしないようにしました。これでちょっと影になっても、入浴時間がゼロに戻ることがなくなりました。

というわけで、フル充電した電池での開始時間は1/27 22:10です。

追記:終了は3/4 06:00でした。37日と8時間。「暗くなった」という判断値が大きすぎたようで、入浴後に脱衣所からふと風呂場を見ると点灯している、ということがしばしばありました。うーん、しかし、こうやってパラメータをいじって正解にたどり着いたとしても、それは「うちの風呂場で、今のLED電球使っていて」という限定条件ですからね。ここはやっぱり適応制御か何かしないといけない気が。それはそれとして、良いアルゴリズムを思いつくまで、とりあえず70 / 60で使おう←直さない予感 開始:3/4 21:00。

追記の追記:70 / 60だと横にてぬぐいを置いただけで消えてしまい、それはそれで面白いのですが、実用性にかけるので70 / 45にしました。再充電して3/5 08:25再開。

それにしても、こうやってバージョンごとにソースを張っているのはあまりにも頭が悪いので、github使います。

追記^3:あ、記録してなかった。もうちょっとLEDを暗くしたいのですががっちり配線してしまったユニバーサル基板に抵抗入れるのは面倒くさい。ので、デューティー比を変えてみたのですが1:500でもまだ十分明るいです。瞬間何mA流れてるんだろ。5月27日 5時再開。

追記@4:7月6日ぐらいから物凄く暗くなりましたが、7月9日の朝、まだ生きてます。でも、表示読めないしエネループ破損が怖いので止めます。7月9日 06:00。43日で思ったほど伸びなかったのですが、夏になって朝シャワーだけでなく夕方浴槽に浸かるようになったので1日あたりの点灯時間はほぼ倍になっているはず。さすがにデューティー比1:500は暗すぎたので、次は1:200ぐらいにしてみます。7月9日 17:00スタート。明るいw

追記@5:8月21日ぐらいから暗くなり、8月24日ほとんど表示は見えませんが、ここでおしまいにします。1:200だとチラツキが目立つので1:100にしました。デューティー比あんまり電池寿命と関係ないんじゃないか?という気がしてきました(笑)。ということで8月24日5時スタート。

追記@6:いきなり10月2日に消えました。明るいと電池の余力ないですね。でも、明るさと電池寿命はほとんど関係ないですね。精密な微小消費電流計測のできる機材が欲しい。ともあれ、1:100でほぼ支障ないので、そのまま継続。10月4日、電池セット。

2016年1月24日日曜日

BME280とOLEDをESP-WROOM-02で使ってみた


■構成■

BME280はボッシュ製の気温湿度気圧センサー。ワンチップでこの3つが計測できてなかなか便利、しかも秋月で600円1080円。SPIかI2Cで接続できますが、今回はI2Cとします。しかし秋月さん、どのぐらいの単位で仕入れているんでしょうね。Mouser.jpとかでこのチップ取り寄せても700円以上するし基板は特殊形状なので普通ならかなり高価になるはずです。考えるだけで恐ろしい。

OLEDは今や電子工作標準品ともいうべき0.96インチサイズのアレ。作例もライブラリも豊富、I2Cと電源/GNDの合計4本だけで動いてしまいフレームバッファ(画像メモリ)も持っているので何かとラク。

できあがったあとで、WiFiついてるのにセンサーと表示器を同居させてどうすんだ?と自分自身に突っ込みました。

■製作■

何かケースに入れて外に設置したいので、今回もユニバーサル基板で組みました。以前、「いつかきっと使う」という想いで買い集めたaitendoのFRISK大の変換基板を適当に折って使います。基板上にモジュールを挿したヘッダソケットを挿して見て、レイアウトに見当を付けます。ハンダ付けが終わったあとでおとなりと干渉して実装できない、なんてのは悲しすぎますので。

それから秋月の資料とOLEDの実物をみながら、簡単に配線メモを書きます。前回のLEDで懲りました。複数の資料をあたりながら裏側での配線を考えるのは私の脳ミソでは無理だ、と。ということで、裏側、配線面で各要素のピンがどうなっているかをメモにしておきます。



上の段からOLED、ESP基板、BME280基板I2Cでの接続(ユニバーサル基板上での位置、I2Cでの接続、BME280基板での名前)と並んでます。下の2つは作業過程のメモで使うのは上の3つです。上から4ピンヘッダソケット、9ピン足長ソケット(10ピンのを切断して使用)、6ピンヘッダソケットを使います。BME280のCSBは3.3v、SDOはGNDに接続しました。SDOはHIGHかLOWかでI2Cのアドレスを切り替えることができますが、GNDに接続するとデフォルトの0x76になり、今回使ったライブラリもそのままで動きます。



VDD、GND、SDA、SCLをそれぞれ接続します。ああ言葉で言うと簡単。朝っぱらから2時間かかったですよ、これ作るのにorz ヘッダソケットで3階建てになっているので、ヤケに高さがあります。

一番上で緑の背中を見せているのはBME280


■ソフトウェア■

BME280はこちらのライブラリを使い、サンプルを参考にさせていただきました(参考というかほぼ手直しが必要ないのですけども)。

OLEDはこちらです。今回、単純な文字表示にしか使わなかったのですが、uiクラスがあってそれを使うと複数画面を指定したアニメーションで入れ替えつつ任意の位置にミリ秒単位で別の画面をオーバーレイできる、という素晴らしい完成度です。また文字表示も素晴らしく、きれいなフォントはサイズが3種類あって右寄せ左寄せなども使えます。残念ながらクラスにラインを引っ張る命令がないので、そのうちDDAか何かで作って貢献したいですが…。

これら素晴らしいライブラリの作者に経緯を表し、感謝申し上げます。

さて、書いたプログラムはごく単純です。setupで各要素を初期化、loopでは1秒ごとに計測して表示を更新し、1分ごとにThingSpeak.comに送っています。

ご質問などはコメント欄にご遠慮なく。