三連休の課題です。
イルミネーション、Arduino系は
1) リースへのLEDの実装。
2) 消費電力低下への試み
3) Arduino開発環境を Eclipse化 & github連携
天気が良ければ外へ行きたいです。
仕事も見つけなければ。こつこつ改善しながら系は嫌いではないですというか好み。それができなくなっている環境では手詰まり。
右片麻痺のIT好き。左手で生きてます。
三連休の課題です。
イルミネーション、Arduino系は
1) リースへのLEDの実装。
2) 消費電力低下への試み
3) Arduino開発環境を Eclipse化 & github連携
天気が良ければ外へ行きたいです。
仕事も見つけなければ。こつこつ改善しながら系は嫌いではないですというか好み。それができなくなっている環境では手詰まり。
ステートでの動作の部分がわかりにくくなっていたので、書き直しです。
暗いを検知する部分(数回CDSの値を測って点灯OKを出す部分)。
もう夜は更けたを検知する部分。
日中のなるべく電源消費を抑えてお休みしつつ暗くなるのを待つ部分。
まぁ仕事よりは遥かに面白い。
それとは別に常時ピカピカ点灯モードのまま36時間でも単三アルカリ電池1本で動いてました。さすがに電池の電圧が0.9Vを切る位だったのでそこでストップ。多分現状ママでも単三電池1つで1周間は持つ。でも、日中のSleepを入れたいですね。日中はLEDをは光らないので消費電力は減るのですけども。ウォッチドッグ・タイマからの復帰ってリセットみたいになるんだったら使えないとか調べ中。
今年は可変要素を増やしてテスト中。
1.点灯の最大値
2.点灯の速度
3.消灯時の時間
これらを似非乱数で決定。(Arduinoの乱数はまぁそういうもんレベルです)
2.点灯の速度とは、1.点灯の最大値に行くまでの加算する値。
A) 1.点灯の最大値が100で2.点灯の速度が10だと10段階で明るくなって、10段階で暗くなる。
B) 1.点灯の最大値が100で2.点灯の速度が5だと20段階で明るくなって、20段階で暗くなる。
段階は固定の時間なので、A)よりB)の方が長く灯っている事になる。
なんて事を今日昼間に思いついて、帰宅後にコードにしてみたら意外と旨く行きそうなので採用。
あとは、毎年使ってる、暗くなった動作開始して、特定時間たったら終わって、次に一定タイミング以上明るくなったら暗くなるのを待つようなコードを入れ込めば完成。
追加でなるべくAVRを寝かせる様なモードにして電力消費を抑えたい。点灯パターンタイミングも微調整は必要。
電池がなくなってきた時になんらか知らせる点灯モードも検討中。一応、元の電池の電圧を測定できるように回路は作ってある。RGBLEDを1こ入れる予定なので、それが点滅するようにするか。LEDはRGB1こ(3LED)、白6個、青6個で15個なので、1個PCA9685の端子が余る。これを「電池交換してちょうだいモード」の告知LEDにするのもありだなと。ともあれ明日にはストロベリーリナックスのINA226の電流測定モジュールが届くので消費電流を測定して調整してみたい。まぁ、今のままでも単三アルカリ電池で丸1日は動いてます(デバッグ用のLCDも表示させた状態で)。
このあとは実際のリースへのLEDの設置配線作業が待っています。
来年の課題は、スムースに点灯させる事かな。点灯速度が5だと5,10,15,20,25 … の様に明るさが増す。これを点灯切り替えのタイミン付を短くする事でスムースにしたい。
こんなコードだけど、こういうのの良し悪しを議論できるような職場だったらよかったのにな。
あ、基板はすでに完成させてます。
ArduinoISPでつないで、ArduinoIDEから「ブートローダを書き込み」でOK。実際にブートローダが書かれるわけではないと思うが。
そのままでArduinoIDEでISPでプログラムを書き込める状態になっている。ArduinoISPは遅いのを我慢すれば使い勝手が良い。AVRISPmk2だとドライバの問題でArduinoIDEかAtmel Studioかどちらかの利用になる。どちらでも使えるようにする話もあったが、Windows8だとドライバ署名とかの問題で面倒っぽい。
ArduinoIDEからのブートローダの書き込みではFUSEビットを書き換えられないという情報があった。たまたまデフォルトの値で大丈夫ってことなのかな?
実証結果
買ったばっかのレールに入ったままのATtiny85Vを使って試してみた。いきなりISPでプログラムを書き込んだら、動作が遅い。1/8のプリスケーラが効いていない状態。
その状態で、「ブートローダを書き込み」を行った上で、再度ISPでプログラムを書き込んだら、予定通りの動作でした。やはりFUSEのうちDivide clock by 8 internallyは少なくとも「ブートローダを書き込み」によって書き換わっている様です。
フリスクサイズから4ホールぶんはみ出るけども、30×10で初版を作成します。PCA9685は右側へ持ってきてはみ出た部分の折り目が折れないように補強の役目も。
むりくり入れれば26×10のフリスクサイズにも入るのだけど↓。コネクタ的にフリスクケースには入らないので30×10で余裕をもたせます。
で、配線を書いていてふと思った事が。
i2cのPWMドライバとLEDをセットで小さな基板か空中配線で実装して、バス配線でつなげれば良いのではとか。i2cなら電源の2本とSDA,SCLの4線でバス配線できるし。ただ、PWMドライバicはその4本の他にアドレス指定に何個かとドライブするモノをつなぐのに何個か必要になるから、サイズ的にはDIPは無理。DIPサイズでよければそれこそATtiny85を使えば良いのか。あ、SOPのtiny85(85である必要すらない。45でもメモリ足りそう。)使って変換基板上にLED類と4線を実装してしまえば良いか。んーこのパターンは来年やってみようかな。
調べてみたら、BLINK MというマルチカラーLEDをi2cでドライブするものがATtiny45のSOPの奴を使っている様です。ちょっとブレッドボードで試してみますかね。
→調査結果。ATtiny45/85をArduinoのフレームワークでの利用だとi2cを使用してしまうとPWMが1つしか使えない。
PCA9685をばらまいた方が使い勝手が良いかもしれない。4ポートくらいのi2c PWMドライバで 3Vあたりから動作可能なIC無いかな。
もしくはATtiny44/84を試すか。44/84はI2Cを使ってもPWMが2つ使える。ただパッケージ的に6個ピンが増える(14ピンパッケージ)。