チカラの技術

電子工作やプログラミング

共立電子2000円液晶で画像表示

こんばんわ。

先日、日本橋のシリコンハウスで購入したTFT液晶ディスプレイ「FG040346DSSWBG03-DJK」
液晶コントローラを使わずSTM32F4DISCOVERY単体で駆動しました。

イメージ 1

480×272bit 24bitカラー リフレッシュレート75Hz
外付けのSRAM,ROMは使っていません。
背面にあるのはロジアナのLAP-Cです。

今回は前回の秋月300円液晶での反省点を活かして駆動方法を工夫しました。

まず液晶の仕様を紹介した後で、STM32F4による駆動方法を説明します。


○液晶の仕様
共立液晶はいわゆる秋月3000円とほぼ同じ仕様の液晶です。
またPSPの液晶に近い仕様になっていますが電源電圧やピン配置はPSP液晶と異なるため
互換性はありません。

秋月液晶との違いは秋月液晶の画面がノングレアであるのに対し、
共立液晶はグレアタイプで光沢があります。
個人的にはグレアタイプの方が色が鮮やかに見えるので好みです。

イメージ 2

ピン配置です。
画素データ以外の信号はクロックのPCLKとデータのゲート信号のDEのみで
水平と垂直の同期信号は使用せずにNCとしても良い事になっています。
どうやって同期を取っているのかというと次のような仕組みになっています。

イメージ 3

ブランキング期間の記載はデータシートに無かった為、シャープのPSP液晶を参考にしました。

表示期間中にDEをHIGHレベルにして、
その間のPCLKの立下りクロックごとに1pixelを取り込むようになっています。
水平ブランキング期間は45PCLK以上,垂直期間中は14H以上の間 DEをLOWレベルにします。
DEのHIGH期間で画像の表示タイミングを同期できるのでLCDコントローラの付いていない
液晶の中では比較的簡単で使いやすいと思います。


○回路

1.STM32F4DISCOVERY
LCDとの接続は上記の表どおりですが、
私の使っているボードはピンを自由に使うためにボード上の加速度センサ以外の部品を取り除いています。

イメージ 4


2.昇圧・定電流回路


このLCDLEDバックライト用に24Vの電圧と20mAの電流を必要とします。
これを5Vから生成する為に、MC34063を使った昇圧 + 定電流回路を組みました。
定電流にしたのはDCDCのリプル電圧でバックライトがチラつかない様にする為です。
イメージ 10


C3までが昇圧回路でそこから右側が定電流回路です。
右端の2つのピンにLEDアレイをつなぐと、21mAの定電流が流れます。
この時入力には160mAの電流が流れたので出力から見た効率は63%です。
MC34063は安い割に昇降圧どちらにも使えるので手元にあると便利ですね。

3.FPCコネクタ
前回、秋月300円液晶で散々接続に苦労したので今回は最初からaitendoにて
40pinのFPCコネクタを購入しました。
接続は下接点です(一度間違ってしまいました)。


○STM32F4による駆動

○前回の反省点
前回、秋月300円液晶を駆動した時の反省点は下記のとおりです。

①DMAのソフトウェア制御
DMAで内臓SRAM→GPIOへデータを転送していたが、ブランキング期間にDMAリクエストを止める
必要があり、ソフトで制御していた為にタイミングの調整が非常にシビアで大変だった。

②不正確な1フレーム
内臓SRAMの容量が一画面に足りないので小刻みに画像データを送り出していた。
1フレーム(30FPSなら1秒に30フレーム)に画像一枚を対応させる必要があるので1フレームの期間が正確に1/30秒になっていないと動画を再生する際に、本来の再生時間とずれてしまう。
しかし液晶の1クロック単位の長さをソフトでうまく調整する事が出来なかった。

○分析
結局、数MHzの周期で動き続けているDMAデータ転送やクロックを、
無理にソフトウェアで止めたりタイミングを調整していた事が主な原因でした。
CORTEX-M3は割り込みルーチンに入るまでに12クロック掛かるので
とめたいLCDクロックを先読みしてルーチンに入り、ルーチンの中でもタイミングの微調整が必要で苦労しました。根性で動かしていましたがw



○タイマ最高
そういう訳で今回はタイミングの制御は一切ペリフェラルに任せられるようにしました。
結果、正確なタイミングで転送できるようになり、ソフトはサーキュラーバッファに画像データを供給すれば良いだけになりました。

STM32F4は高機能なタイマが合計10個もあるので非常に応用の幅が広く便利です。
FPS=60の場合を例にとり説明します。

1.使用タイマの概要
今回は以下のようにTIMを5つ使用しました。全てPWMモードで駆動しています。
イメージ 6

●用語
タイマのゲート機能について
ゲート機能においてマスターとなったタイマはスレイブのタイマにゲート信号を送ります。
そしてゲート信号がHighレベルの間のみ、スレイブにclock(今回はAPBクロック)が供給されます。

タイマのリセット機能について
マスターはスレイブにリセット信号を送ります。
スレイブのカウンタはリセット信号の立ち上がりエッジで、カウントをリセットします。

DMAリクエストについて
DMAはDMAリクエスト毎にメモリ上のデータをペリフェラルに転送できます。
今回はタイマのPWM立ち上がりエッジのタイミングでサーキュラーバッファのデータをGPIOの出力レジスタに転送し、LCDへ1画素分の信号を送っています。
サーキュラーバッファの半分もしくは完全にデータを転送した時点で割り込みが起こり、
CPUにデータのプッシュを要求します。

2.信号の全体像
イメージ 5
実際のブランキング期間は仕様よりも長くなっています。
これは内臓クロック84MHzからPCLKの1周期を作ると分解能が足らず端数が出てしまう為です。
例: 1PCLKに対する内臓クロック = 84MHz ÷ (480 + 45) ÷ (272 + 14) ÷ 60fps =  9.32
端数は切り捨てになるので、切り捨てた分の誤差をブランキング期間で調整しています。

5つのタイマーの中で実際にLCDに信号を送るのはTIM2の水平ゲートとTIM3のPCLKのみであり、
他は同期とDMAリクエスト用のタイマとなっています。
水平ゲートは画素の送出を制御し、垂直ゲートは水平ゲートを制御しています。
また、垂直ゲート用タイマはPCLKを画素の出力タイミングと同期させる役割もあります。

3.水平ゲートの説明
以下はロジックアナライザで測定した水平ゲートの立ち上がり,画素表示の開始部分の波形です。イメージ 7水平ゲートの立ち上がり後にDMAリクエスト用タイマのPWM波形が現れているのが分かります。
DMAリクエスト用タイマの立ち上がり時にDMAリクエストがDMAへ送られます。

DMAリクエスト用のタイマを二つ使用しているのは1つのGPIOポートが16bitなので24bitカラーを表示するために2つのGPIOが必要で、各々のDMAリクエストを送るタイマが必要だった為です。
本当はDMA1とDMA2を併用させたかったのですが、DMA1はGPIOとバスが繋がっていないためDMA2のみ利用しました。
各々のGPIOに対してサーキュラーバッファを用意してデータを供給しています。
(DMAにスキャッタギャザー機能が有ればバッファは一つで済んだかも知れませんが。)

TIM3は常にLCDにPCLKを供給し続けますが、DMAリクエスト用タイマは水平ゲートがHighの間のみ画素をLCDに送ります。
そして水平ゲートがLowの間、水平ブランキング期間を作ります。

LCDはPCLKの立下りエッジで画素を取り込むので、それまでにGPIOにデータをセットアップしなければなりません。(厳密にはLCD側に信号取り込みのセットアップ時間が必要なのでそれより12nsec早く)
PCLKの立下りまでの時間を稼ぐために、DMAリクエストのタイミングをPCLKの立ち上がりより早くなるよう周期をずらしています。

横向きの矢印がDMAリクエストからGPIOの出力までの期間を示していますが、PCLKの立下りよりも十分早く出力されています。
明らかにDMAの反応がSTM32F1より早くなっています。
GPIOがAHBバスに直結されて、APBバスを経由するレイテンシが無くなったおかげですね。

4.垂直ゲートの説明

以下は垂直ゲートの立ち上がり,1フレームの開始部分の波形です。
イメージ 8
垂直ゲートはLCDに信号を送っていませんが重要な役割を担っています。
垂直ゲートがLowの間、水平ゲートのクロックが停止し垂直ブランキング期間を作ります。
また、1フレームを正確に1秒/FPSの期間に調整しています。
1フレームをTIMクロック単位で調整すれば水晶振動子の精度で正確な1フレームが作れます。

ただし、PCLKはクロックと同期しているわけでは無いので、1フレームごとに調整しなければ
ゲートやDMAリクエストのタイマ周期とずれを起こしてしまいます。
そこで垂直ゲートの立ち上がり時にPCLKにリセット信号を送って同期を取っています。
リセット信号から実際のリセットが起こるまでは矢印で表されるように数クロック分の遅延があります。

水平ゲートのLow期間の中央で垂直ゲートが立ち下がるようにしているので、水平ゲートの立ち上がりは画面外のずっと先です。

○ハマったポイント

TIM1とTIM8はSTM32の中でも高機能タイマに分類され、
モータ制御用に使用されるBREAK入力機能がついているのですが、ここでハマりました。
このBREAK機能の中でoutputの有効化という機能があるのですが、これがデフォルトの設定では
タイマー出力ごとにoutputが無効になるように設定されていてPWM信号を止めてしまうのです。
他の汎用タイマのようにPWMを設定するとここでハマると思います。

解決策ですがタイマごとに下記のように設定して
タイマの更新イベントごとにoutputが自動的に再有効となるようにします。

    //These settings are needed for continuous PWM cycle.
    TIM_BDTRInitTypeDef bdtr;
    TIM_BDTRStructInit(&bdtr);
    bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
    TIM_BDTRConfig(TIM1, &bdtr);


○小技

☆DMAでGPIOの上位bitのみ操作する方法
今回GPIOBポートのB8 - B15までを8bitカラーに割り当てています。
STM32F4はGPIOがAHBに直結しているのでB0 - B7 に影響を与えずに
上位bitにアクセスする事が出来ます。 

具体的にはDMAの設定時に下記の通りペリフェラルアドレスを設定してバイト転送を行います。
DMA_InitStructure.DMA_PeripheralBaseAddr =  (uint32_t) ((uint8_t *) &(GPIOB->ODR) + 1);


なお、STM32F1はGPIOがAPBブリッジを経由している為、ワード未満のアクセスはワードに拡張されるので上記のようなアクセスは出来ないと思われます。(未確認)


○画質は?
今までに扱ってきた液晶の中で一番綺麗でした!

ただ、写真に撮るとどうしても画質が劣化してしまうのが残念です。
肉眼で見るともっと綺麗なのですが。
イメージ 9

画像データは無圧縮でSTM32F4の内臓ROMに収められ、1枚 480 * 272 * 3 = 391680byteです。
秋月液晶のときは16bitカラーで駆動したので 400 * 96 * 2 = 76800byteだったので5倍以上ですねw

これほど大量のデータを処理できるSTM32F4の能力は素晴らしいと思います。

それでは次は動画の再生にチャレンジします!

参考にさせて頂いたページ:
Chanさん    :秋月3000円液晶モジュールの試食
charanori さん:RX62Nで秋月3000円液晶 ATM0430D5の味見
Coocox forum :PWM STM32F4

STM32F4DISCOVERYと戯れる

こんばんわ。
今日の日記には電子工作要素はありません。


○ピンヘッダの改造

2週間前からSTM32F4DISCOVERYを始めたのですが
「念願のSTM32F4DISCOVERYを手に入れたぞ!」という感じでは全然無く、
一年前に買ってはいたものの言語の壁や開発環境がネックとなって使っていなかっただけです。

使い始めてすぐ分かったのですが、ピンヘッダがとても使いにくい。
2列になっているのでブレッドボードに差して使えるわけでもありません。

STBeeに慣れ親しんだ自分としてはソケットピンに変更したい。

そう思ってヘッダピンを抜く方法を考えました。
一本づつ抜くのは大変なのでアイロンでピンを熱して一気に抜こうと考えました。
イメージ 1

しかしいくら時間をかけても抜けない。

イメージ 2

均等に全てのピンにアイロンが当たらないのです。
しかも点接触なので全然熱量が足らない感じでした。

普通はここで諦めてチマチマ抜いていくところです。




でも僕は、オリーブオイル!
イメージ 3

油にピンヘッダの足がどっぷり漬かれば熱がしっかり伝わって抜けるに違いない!

「料理は科学だ」と昔の偉い人は言いましたが、
じゃあ逆に科学を料理してもいいんじゃないか、俺は正義だ。などと考えました。
(しかしオリーブオイルは高いのでサラダ油に変えました。)

イメージ 4

汚いコンロで申し訳ないです。
基板の下にカマボコの板を乾かしたものを敷いて基板をかさ上げしています。
こうしないと上からピンを押しても抜けませんからね。

しかし、火をつけて数分、予想外の事態が発生しました。
乾いていると思っていたカマボコの板に水分が残っており、油がはじけ始めたのです。

イメージ 5
必死に押してます。

飛び散る油、火に炙られる手、「晩御飯が作れない」と訴える家族。
そういった諸々に耐えつつピンヘッダを抜こうと頑張ってみましたがどうにも抜けません。

しばらくして・・・諦めました。
終わってから基板にベッタリついた油を拭いている時が一番惨めでした・・・
イメージ 6
結局ピンヘッダは抜かずに、上面のみ切りそろえてソケットピンをはんだ付けしました。
当初の目標は達成できたので良しとします。
イメージ 6

それからもう基板を油で煮るのは辞めようと思いました。
もこみち凄い。


○豊富過ぎる周辺部品

STM32F4DISCOVERYボードはMEMSやオーディオコーデック等の部品が沢山載っています。
しかし、それが設計をする上で障害となる事も多くあります。
特にSDIOとFSMC関連のピンが塞がれているのが非常に辛い。
STM32の良さはそこにあると信じている自分としてはなんとかしたい所です。

MotionJpegによるメディアプレイヤー』を作られたとんすけさんに伺ったところ
FSMCとSDIOが繋がっているのは周辺部品の入力ピンなので、
部品を取り外さなくても使えるという事が分かりました。

これは非常に助かりました。
しかし、他のピンを新しい回路に使おうと考えるたびに周辺部品と競合してしまうので
とうとう心が折れ、もういっそ綺麗にしてしまおうと思って加速度センサ以外全部取り外しました。

イメージ 7

これでほぼ全てのピンを自由に使えます。凄くスッキリした!

外した後にUSBは外さないほうが良かったかも知れないと思いましたが、
テンションが上がっちゃってたからしょうがないですね。

○外しにくい部品

写真を見れば分かりますがオーディオコーデックの底面は全面がパッドになっており、
非常に取り外しにくいです。
外側から熱して外すのはまず無理でしょう。
参考までに自分の場合を書いておきます。

1.パッケージをコテで熱する。半田を盛って熱が伝わる範囲を大きくする。
2.30秒熱しても取れないが、パッケージは熱で劣化するのでラジオペンチで砕く事ができる。
3.砕いて薄くなったパッケージをさらに熱すると部品が外れる。

もっと綺麗な外し方があるかもしれませんね。

これで安心してこのボードを使っていく事ができます。
それでは!

STM32F4DISCOVERYでWAV再生

こんばんは。
STM32F4DISCOVERYに載っているオーディオコーデック(アンプ付DAC)CS43L22の
音質を確かめてみたかったのでwav再生を試してみました。


○ソフト
STマイクロのファームウェアの中にあるCS43L22のAPIサンプルと、
MMCをFatFsから読み出せるように移植されたねむいさんのライブラリを使わせて頂きました。

プログラムの構成は以下のようになっています。
1.DMAをサーキュラーモードに設定してバッファ全体をSDカードから音声データで埋める。
2.I2Sはコーデックへの送信前にDMAへリクエストを送り、バッファからからデータを受け取る。
3.I2Sはサンプリング周波数の周期でコーデックに音声データを送信。
4.バッファの半分、もしくは全てが送信されるとDMAが割り込みを発生させる。
5.割り込み時にバッファへ半分ずつSDカードからデータを埋める。
6. 2~5を繰り返す。



○嵌ったポイント

1.DMAのバッファサイズ
STのライブラリの関数「Audio_MAL_Play」ではI2Sインターフェイス時のDMAバッファサイズの設定が
Size /2 となっています。
しかし引数の「Size」は4バイトで、DMA送信サイズが2バイトなので、DMA_BufferSize=(データ転送回数)はSize×2としなければいけません。
ここを変更しなければデータ転送がバッファの一部だけになって、まともに音楽が再生できません。

イメージ 1
1517行目が修正箇所

2.I2S_PLLの設定
サンプリングレートに応じたI2Sクロックを設定する為にはerrorの低いI2S_PLLの設定値が必要です。
パラメータが多いので手計算では難しいのですが、pcm1723さん
計算用プログラムを公開されていたので使わせて頂きました。

結果を載せておきます。
イメージ 4

基準周波数2MHz (HSE=8MHz, PLLM=4)


イメージ 5
基準周波数1MHz HSE=8MHz, PLLM=8)

○音量の調整
サンプルの設定では音量が物足りなく感じました。
「Codec_Init」内の設定を以下のように変更しました。
PCMボリュームは最大値にしています。
Headphone Analog Gainはまだ大きく出来ますがデータシートで音質に影響が出ると
警告があったので影響のない範囲で一番大きな値にしました。

 
イメージ 6


この設定でMasterVolumeを最大にしましたが、残念ながらまだ音量が物足りなく感じました。
CS43L22のチップサイズから見てこれが限界なのでしょうか。
実用レベル以下なので、何か設定が間違っている可能性が高いと思います。
もしも、音量をさらに上げられる設定をご存知の方が居たら教えてもらえると非常に助かります。


音量調整できました! 音質改善の最後に追記しています。



○視聴と音質の改善

1.改善前
聞きながらノイズが気になったので何度か改善を試みました。
まず、電源をUSBからリニア電源へ変更して再生した音楽を録音したものがこちらです。
使用曲はgoing_on (44.1kHz 16bit ステレオ)。

イメージ 2

電源のみ対策


2.電源ループの改善
ノイズがハッキリ聞こえますね。
色々試した結果、SDカードのGNDがSPIの信号線から離れている為に
ループが大きくなりノイズが発生している様子でした。
そこでループを小さくする為にC28に電源を直接配線しました。

イメージ 3


ノイズが小さくなったのが分かるでしょうか?

3.SPI周波数の変更
最後にSDカードのSPIの信号ノイズが小さくなるように必要最低限までSPIの周波数を下げました。

SPI2のBaudRatePrescalerを2→16へ

小さくなったとはいえ、まだ聞こえますね。

4.音量の調整
ホワイトノイズが主たるノイズですので、出力にシリアルに抵抗を繋げてS/N比を改善したいのですが、
CS43L22が出力できる最大音量が小さいので、抵抗で出力を抑えると音楽が小さくなってしまいます。


追記:音量が小さくなっていた原因が分かりました。
STのライブラリの初期設定と音量の設定関数は下記のような
ユーザーが設定したボリュームを変更するマクロが挿入されています。
イメージ 7
このVOLUME_CONVERTマクロによって100を超える設定値は全て100になっていたのです。
設定値100以下の場合は100分率で最大255に変換するマクロで、
このマクロの存在を知らなかった自分は255を設定してしまっていたという事でした。

設定値を100に変更したところ非常に大きな音が鳴りました。(耳が痛い!)
大体50程度が通常の音量だと思います。

改めて録音しました。非常にいい音になっています!


設定を調整し音量UP

5.抵抗の挿入(アッテネータ)
録音した音楽ではほとんど聞こえないのですが、実際にイヤホンを付けて聞いていると
ホワイトノイズがまだかすかに聞こえます。

対策としてDISCOVERYボードの出力に直列に抵抗を挿入する事にします。
ボリュームに関わらずホワイトノイズは一定ですので、抵抗でホワイトノイズを含む
全体の音量を下げた後ボリュームを上げればホワイトノイズを抑える事が出来ます。

DISCOVERYボードの改造はパターンの配線上難しかったので
ステレオジャックから自作のアッテネータを中継してイヤホンに接続するようにしました。
アッテネータといっても、各チャンネルの入出力間に47Ωを経由させるだけのものです。


録音しました。


ホワイトノイズは完全に消えています。
直列に抵抗を挿入すると若干周波数特性が変化しますが、自分は許容範囲内でした。


○まとめ

正直マイコンボードでここまでいい音が聞けるとは予想外でした。
心配していたホワイトノイズもほとんど聞こえません。

とんすけさんとAndreasさんのブログを設定の参考にさせて頂きました。

今回は凄く地味なテストでしたが、オーディオはとても繊細だという事が良く分かりました。
これが液晶の再生だと、些細なノイズがあっても信号のスレッショルドをまたがない限りは
画質にほぼ影響が無いのでとても楽ですねw

それでは!



STM32F4開発環境の構築方法を解説しました。


2018/05/19追記:
現在ソフトウェア類の配布停止など、開発環境の構築が不可能となったため記事を削除しました。
現在の無償開発環境はSystem Workbench for STM32を推奨します。

こんにちわ。
簡単に構築できるSTM32F4開発環境が見つかったので解説します。
一時間もあれば構築できると思います。


○TrueStudio→Eclipseへの乗り換えはもう出来ない。
STM32F4の環境を手軽に構築できないかと思い、色々調べてみた結果
花岡ちゃんさんのブログなどで説明されていたTrueStudio→Eclipseへの乗り換えが良さそうでした。
しかし、TrueStudioのバージョンが新しくなっておりデバッガが動作しませんでした。
さらに現在、古いバージョンのTrueStudioを入手する事ができない為、この方法は諦めました。


イメージ 1
○ CoIDE
さらに探し続けていると、STM32F4に対応した統合環境CoIDEが見つかり、
デバッグまで出来るようになったので構築方法をHPにて解説しました。


○機能
デバッグ機能が充実していてペリフェラルレジスタの確認もできます。
また複数のブレイクポイントを設定でき、デバッガからのリセットも安定しています。

操作性は組み込み向けにカスタマイズされたECLIPSEという感じです。
イメージ 2

フレームワーク
そのまますぐに開発できるように、ベースのファイルを用意しました。
ドラッグ・ドロップするだけで使えます。


環境の構築に関して質問がありましたらコメントに書いてもらえればと思います。
よろしくお願いします。

STM32F4xxのRCC_PLLCFGRを計算するソフトを作ってみました。

以前STM32F2で作ったPLLCFGR計算ソフトですが、
STM32F4バージョンも作ってみました。

ダウンロード
 使用は自己責任でお願いします。(結果を一度検算してみる事をお勧めします)

 

イメージ 1

 


○使い方
 ①ClockInput(入力周波数)を入力
     内部オシレータ使用する場合は下のチェックボタンを押すと自動的に16MHzに選択されます。 
  ②OutPLLCLK(希望のPLLCLOCK出力周波数)を入力
 ③Calc startボタンを押すと計算結果が下の表に出てきます。
 ④表のRCC_PLLCFGRが該当のレジスタの設定数値になります。

○細かい話
 ①リファレンスマニュアルの設定範囲の規制を計算に反映させています。
 

 

イメージ 2

 

   もしよろしければ正誤のご指摘を頂ければ大変助かります。
 
 ②出力周波数の計算結果は整数のみ有効な値として出力しています。
 

○使えない,使いたくないという人の為に。
 このプログラムは.netプログラムなので
 Windowsユーザー以外には使用できないと思われるので
 使えない人の為に計算しておいた代表的な値を以下に列挙します。
 
出力が168MHz、かつPLL48CLKを満たすRCC_PLLCFGR
  ClockInput       RCC_PLLCFGR
        4MHz            0x07403f03
       
        8MHz            0x07403485
 
       12MHz            0x07403107
 
       16MHz            0x0740348a
       16MHz(HSI)     0x0700348a
 
       20MHz            0x07403f0f
 

スマホのバッテリーを延命させるガジェットを作ってみました。

こんばんわ。お久しぶりです。
最近は英語の勉強がメインになっていて電子工作から少し離れていましたが
表題のとおりのガジェットを作る必要性に迫られたため作ってみました。

○前置き

スマートフォンのバッテリーはリチウムイオン電池です。
最近のスマートフォンの多くは薄型化の為にバッテリーを内臓していて交換が出来なくなっています。
また交換に掛かる費用を考えると、バッテリーの寿命=スマホの寿命となると考えている方も多いでしょう。

自分もこの度バッテリー内臓のスマートフォンに乗り換えたため、
出来るだけ長く使いたいと思いリチウムイオン電池の充電方法について調べました。

調べた結果の要点をまとめると

① 満充電状態と過放電状態での放置はリチウムバッテリーの劣化を招く。
② 一般的に言われる劣化の目安の充電回数500回というのは
0-100%のサイクル充電を指している。少ない充電量ならば1回の充電とは数えない。
③ 高温状態はバッテリーの劣化を招く。

という事でした。

②に関しては高温状態で放置しない、
スマホに高負荷を掛けないという使い方で対応するしかありません。

ただ、①と②に関して考えると改善の余地がありそうです。
自分は (皆さんもそうだと思いますが) 寝る前に充電器につないで起きるまで充電をしておくのですが
これは満充電状態にスマートフォンを長時間放置する事となりバッテリーの劣化を招きます。

気に
なっておちおち寝てもいられない!!


解決方法は簡単で、満充電を避けるために途中で充電を終えるように制御すれば良いのです。
結果充電回数は増えますがメモリー効果の無いリチウム電池ならば問題は無いはずです。

参考ページ
ベイサン - リチウムイオン電池を上手に使う方法

リチウムイオン電池の寿命と劣化。そして保存法。



○え!無いの?


上記から充電量制御の方法を探してみましたが・・・

1.スマートフォンの設定    ー>無い
2.スマートフォンアプリ    ー>無い
3.ならば自分でアプリを作る ->バッテリーを制御するAPIが無い。(充電量等の情報取得のみ)

さっぱり見つかりませんでした。
アプリで充電を制御する危険性からAPIが無いのは仕方無いとは思います。
android-OSのカーネル部分まで操作できれば可能だと思うのですが、
そこまでアクセスできるのはメーカーか、OSに対する深い知識がある方達ぐらいだと思います。


○じゃあガジェットを作ります。

作りました。
はい、どーん!

イメージ 1
全体

ガジェットには5V充電器とスマートフォンの間で出力を制御する機能があります。
ガジェットにはBluetoothモジュールが入っていてスマートフォンと通信できます。

イメージ 2
メス側
スマートフォンとの通信が確立されると青LEDがON,
スマートフォンへの給電時は赤LEDがONになります。

イメージ 3
オス側

スマートフォン側にも制御用のアプリを作りました。

イメージ 5

☆動作

○充電範囲をアプリに設定する。(最大充電量と充電後の放電量の範囲を設定できる)
○アプリ中央の丸いボタンを押してガジェットとの通信を確立する。
○アプリが電池の残量と設定値を比較して、ガジェットの出力のON/OFFを自動制御する。(30秒に一回)

Bluetooth通信は30秒に1回だけなのでスマートフォン側の消費電力も少なくてすみます。


イメージ 4
アプリはバックグラウンドに常駐するので、充電中も他の作業が可能です。
(電池の温度が上がるので給電中はあまりやらない方がいいですが)


○ガジェットの主な仕様
消費電力:        200mW = 5V  35mA(通信ソケット確立時)
(主な内訳:bluetoothモジュール20mA, LDOレギュレータ:9mA, LED点灯:5mA)
制御マイコン:       LPC1114 - システムクロック1MHz, 消費電流は1mA以下。
出力用N-MOS-FET:  on抵抗25mΩ(負荷1A)


以上です。

単純な仕組みですが、アンドロイド側のプログラミングは初めてで、
マイコンと勝手が違うところも多く苦労しました。
それでも計算のパワーとGUIの自由度の高さに大きな可能性を感じたので、
これからアンドロイドとマイコンが連携したガジェットを作っていくのも楽しそうだと思いました。

GravityLight(重力式ライト)のプロジェクトページページの和訳②


本文からの続きです。

寄付の金額によって特典が代わり、50ドルからは自分用の重力式ライトを受け取る事ができます。

寄付金の支払いはPaypalが利用できます。私が寄付したGIGAWATTは送料込みで115ドル(9920円)でした。

以下は寄付の種類の翻訳になります。

MILLWATT
10ドル

アフリカまたはインドの人々が受け取る最初のライトの為に力を貸して下さい。
私達は心からの感謝をホームページで貴方に捧げます。
貴方は、貴方の友人にこの刺激的なプロジェクトに協力したと教える事が出来ます。

DECIWATT
25ドル

発展途上国の村民の人たちに、重力式ライトを製造し送り届ける為の金銭的助力をお願いします。
貴方は『光の贈り物』の写真を受け取り、さらに私たちのホームページ上に記載されます。

配送予定:2013年3月

KILOWATT-EVERY BIRD SPECIAL
50ドル
(訳注:現時点で受付が終了しており、寄付できない)
村民の方へ重力式ライトを贈る為のスポンサー活動に加え、あなた自身も自宅用に1つ受け取れます。
さらに貴方はメールで『光の贈り物』の写真と最新情報を受け取り、私たちのホームページ上に記載されます。

KILOWATT'S NEXT?
50ドル

この新しい手当ては重力式ライトの周辺機器の研究開発の為のものです。
私達の開発目的は、2次電池の内蔵,LEDチェーンライト,ワイヤー型読書用ライト,トランジスタラジオです。
また貴方は自宅用の重力式ライトを受け取れます。
さらに私たちは貴方にメールにて『光の贈り物』の写真と、私達の挑戦の最新情報を届けます。
寄付金はアメリカ又はイギリスへの輸送費を含んでいます。(その他の国の場合は15ドルを追加して下さい)
(訳注:日本へ届ける場合は寄付金額に+15ドルで計65ドルとなる。寄付ページで設定できる。)

配送予定:2013年3月

MEGAWATT
60ドル

村民の方へ重力式ライトを贈るスポンサー活動に加え、あなた自身も自宅用に1つ受け取れます。
さらに貴方はメールで『光の贈り物』の写真と最新情報を受け取り、私たちのホームページ上に記載されます。
寄付金はアメリカ又はイギリスへの輸送費を含んでいます。(その他の国の場合は15ドルを追加して下さい)
(訳注:日本へ届ける場合は寄付金額に+15ドルで計75ドルとなる。寄付ページで設定できる。)

配送予定:2013年3月

GIGAWATT
100ドル

村民の方へ3つの重力式ライトを贈るスポンサー活動に加えて、あなた自身も自宅用に1つ受け取れます。
さらに貴方はメールで『光の贈り物』の写真と最新情報を受け取り、私たちのホームページ上で特別に記載されます。
その上私達は、研究の間に撮るA4写真を私達(ジムとマーティン)のサイン入りで送ります。
寄付金はアメリカ又はイギリスへの輸送費を含んでいます。(その他の国の場合は15ドルを追加して下さい)
(訳注:日本へ届ける場合は寄付金額に+15ドルで計115ドルとなる。寄付ページで設定できる。)

配送予定:2013年3月

PETAWATT
500ドル

多くの要望によって、私達はGIGAWATTとTERAWATTの間に新しい寄付を加えました。
PETAWATTスポンサーの助力は私達の挑戦への実現支援に加え、周辺機器の開発、
MK2バージョンの重力式ライトの研究開発への貢献となります。
貴方は自宅用の重力式ライトを受け取り、
さらに貴方はメールで『光の贈り物』の写真と私達の研究の最新情報を受け取ります。
また私達はホームページ上で貴方に感謝を述べます。
(その他の国の場合は15ドルを追加して下さい)
(訳注:日本へ届ける場合は寄付金額に+15ドルで計515ドルとなる。寄付ページで設定できる。)

配送予定:2013年3月

TERAWATT-CORPORATE SPONSOR
5000ドル

全てのプロジェクトにとって重要なこのスポンサー行動によって
私達のキャンペーンは大きく加速します。
アフリカ又はインドに送られる全ての重力式ライトの吊り下げバッグに貴方の名前、もしくはロゴを印刷します。
全ての村民の人々は毎晩、貴方が自分達の生活を変える為に貢献した事を知るでしょう。
さらに貴方は貴方だけの重力式ライトを得て、『光の贈り物』の写真と私達の研究の最新情報を受け取り、
また私達のホームページ上で特に重要な表彰を受けます。
寄付金は全てを含んでいます!

配送予定:2013年3月

以上で翻訳は終わりです。
最後まで見て頂いてありがとうございました

関連サイト

engadget-重力で光る照明 Gravity Light

Nobuyuki Kokai Blog - クラウドファンディング Gravity Light



技術の進歩で皆が暮らしやすくなると嬉しいですね。
それでは!