Archive for Arduino

BP35A1と格闘中

 工事のあった週の週末にはBルートのIDとパスワードが届いたので、スマートメータからの読出しのテストをしている。

 最初にPCでpythonのサンプルを試したらサクッととれた。居間からやっててメータボックスの中のスマートメータに対しても通信は問題ないみたい。

 続いて、ESP8266単体でのテスト。コードはここのをベースにSoftwareSerialはesp用のを入れて、さらに参照サイトの様にBP35A1との通信は9600bpsまで落としてみたが、受信欠落してしまう。
ESP8266でできると小さいし、無線LANで直RESTでデータ送信もできるので良いのだが。BP35A1とはソフトウエアシリアルではなくハードシリアルでつなげばいけそうではあるが。

 うって変わって、mbed1768でのテストに変更。ソースはESP8266の時にいただいてきたのをベースにmbedに合うように修正。mbedですらも、標準Serialだと受信欠落する。デバッグ用にPCともつないでいるからか。バッファリングしないとだめだぁとMODSERIALに変えてみた。したら、欠落することなくスマートメータとコネクトまではできるようになった。しかしそこから進まない。
 どうやら、ECHONET Liteの電文に0x00があるのがバッファリングするMODSERIALだとダメ臭い。MODSERIALはpc側だけにして、BP35A1とはRawSerialにしてみたら、電文がputcできるようになって、無事にワットが受信できるようにはなった。しかし、何度かループさせてると、受信データにゴミがはいることがあり止まる。

 だいぶ元のコードがやってる事がわかってきたので、シリアルのライブラリが便利なArduino系のESP8266単体に戻してハードシリアルでテストしたいと思う。これでダメだったら、Arduino Due出してくるかね。

少電力化(省電力化)

 ハロウイーン用イルミのコードのを見直し。

 pwmで動いてるところはSLEEP_MODE_IDLEのsleep, LED点灯しない部分のdelayはSLEEP_MODE_PWR_DOWNのsleepにしてみた。
SLEEP_MODE_PWR_DOWNの部分はガクッと消費電力がさがった。
 あとは点灯時間中でもすべてのLEDが0のタイミングでSLEEP_MODE_PWR_DOWNが使えるかな?→使えるようだ。

 ただ、デバッグ時はシリアルを使うし、millis()も参照したいので、#ifdefでモードを使いわけようかね。

ATtiny84vにしてみたり ATmega328pに戻したり

 ハロウィーンイルミネーションの話です。

 電池ボックス内に入れる基板の実装に不安を覚えて、14ピンDIPのATtinyでもプロトタイピングしてみました。
PWMも4つ使えるし、ATmega328Pの28ピンと比べると半分の長さですから。
 で、動作時の電流を測定してみると、なんか多い。まぁ、LED点灯時でなければ2mA以下なのですが。タイマーが2つしか無いからPWM使うと厳しいのかしらん?

 結局、328Pで実装しました。

20150913_01
 プログラム書き込み機能は省いて、デスクで書き込んだICを丸毎取り替えるようにICソケットソケット実装です。

 続いて、リースにつけるLEDに電線つけてコネクタを圧着する作業があります。

ArduinoIDE1.6.5にしたら

 デバッグ時はデバッグ文をシリアルに出してるのだけども、表示されない。
タイマーの使い方がArduino1.0.x系と違うのかな?
#ifdef DEBUGを外してやれば動くことは動く。
一旦1.0.x系に戻そう。1.0.6環境をつくるか。

ATmega328PにしたのでArduinoIDE1.6.5に移行

ATtinyからATmegaに移行したので、ArduinoIDE1.6.5が使えるようになった。
どうもLinux版の1.0.5だと日本語文字列がエディターに入らなかったので日本語がインラインではないけども入力可能になって助かった。
もしかしたら1.0.6なら行けたのかもしれない。

1.0系も1.6系もLinuxだとフォントが汚くて嫌気がさしてたのだけど、単にデフォルトでアンチエイリアスがオフになっていただけ。preferences.txtのeditor.antialiasをtrue変更して綺麗になった。助かった。

コードはATtinyの時はi2cのPWMドライバを使ってたので、analogWriteに変更するのとPWM中はウォッチドッグタイマを使ったPowerDownモードに落とすとPWMが止まるのでIDLEで。

電流計測部を変更&ATmega328P化

20150906_01

 昨日、はまっていた168Pの内蔵クロック8MHz化。諦めて手持ちのATmega328Pを使う事にしてさくっと内蔵クロック8MHz化は完了。168は168と168Pがあって、シグネチュアが違ったり、イマイチうまく設定できない。1個だけうまく行ったのがあるのだけども、再現できなかった。

 続いて電圧と電流を計測する部分を単独LCD表示も可能なように変更。うちのi2cLCDは3.3V版しか余ってないので、計測マイコンをArduinoNANOからArduinoProMini 3.3V 8MHzに変更。

 そして肝心要の本体をATmega328P化しました。

20150906_11

 これで書き込みがブートローダ経由なので楽ができる。タイマーも3つあるし。ATmega328PベースでIOの数を絞った14ピンDIPくらいが欲しいなあ。28ピンはでかすぎる。

20150906_21

 電池ボックス内の8×18の基板イメージ。やっぱ狭いし、328Pが長すぎるなw。

CR2032はあきらめた

20150905_01

 こんな感じで電流測定。4mA-7mA。でもATtinyだけでも3mAくらい消費している。まだ、Sleepのコードを入れていないからというのもある。
 CR2032を使うのはやめて単4電池二本の3Vにする。

20150905_02

 秋月のスイッチ付き単4x4本の電池ボックスを改造。

20150905_03

 本来電池4本で6Vのところを端子を外したり移動したりで2本で3Vの仕様に変更。

20150905_04

 残りの2つの電池部分はパーテイションのプラをラジペンでもぎ取って、ニッパーで整形。

 これならATmega328P/168Pでも入るな、と思ってその後ハマった。8MHzのATmega168[P]のArduinoを作るのに。

 なので一旦、初心通りにATtinyでコード&プロダクトまで作っておいて、余裕があったらATmega化を考えることにした。
「小さくつくって大きく育てる」ですかね。

ATtiny開発環境復活

20150903_01

LinuxMintなのでArduinoISPにて書き込み。
ArduinoIDE 1.0.5環境。1.6系でATtiny対応させようとは思ってますが、まずはISPできないと始まらないので後回し。

ハロウィーンの準備

あっという間に9月。8月は休日出勤とか残業とか雨で公共交通機関通勤とかあって時間が取れず。
マトリックス掲示板はまったく進捗してない。でも、seeedstudioに似たようなの4mm 64×32を1枚オーダー中。なぜかシンガポール周りで来るようだ。

さておき

20150902_01
数年前にこれを手に入れたのでなんとか電飾化したい。
ただ、これは直径10cm程度の小さなもの。電源、マイコン類を隠すのに苦労する。

20150902_02
困った時のフリスク頼み。手持ちのフリスク基板とCR2032で何とかしたい。TrinketはLEDが載ってるので除外。ATtiny84は14pinでオーバーサイズ。8pinoかATtiny85Vか。PWMでLED2つ点灯ですけど、CR2032なので良いかなと。欲張っても仕方ないので。ATtiny85 DIPの場合高さがあるのでICソケットが使えなく基板に直付。となると書き込み用の端子が必要になるなぁと。
実は間違えて買ったTSSOPの45Vを2つほど持ってるので、平べったいこっちでなんとかするかも。

一番の問題は10月前半に間に合うか。11月になったら意味ないし。

マイクロテクニカのESP-WROOM-02実装済みブレイクアウトボード

20150829_01

Amazonのマーケットプレイスで売ってるマイクロテクニカ版のESP-WROOM-02のブレイクアウト。
ちょっとまえに2個、先週2個ゲット。これで家のESP-WROOM-02は6個になった。

スイッチサイエンス版とピン配置が違うのですが、リセットスイッチのパターンとかが出てて、タクトスイッチをつければ良いので楽。
自前で基板を起こして、リセットや内蔵フラッシュ焼きモードへの切り替えとかをブレイクアウト基板上で行えるようにしたらいいかな。
多分そんなブレイクアウトも出てくると思う(他人任せ)。

さてwifiのテストをせねば。アドホック通信で1ペアをつかってラジコンにするか、単純に温度センサーにしてアップするか。
あ、このモジュールADCの仕様がMAX1V&1チャンネルのみなのでちょっと残念です。温度センサするならi2c温度センサを使わないと。