モバイルデバイスのバッテリー消費を測定します。 ヤンデックス実験

最近では、電話は通話専用のデバイスではなくなっていると主張できます。 これにより、購入代金の支払い、適切な道路の検索、タクシーの呼び出しが可能になります。 バッテリーが不足する状況は、最もストレスの多い状況の1つになります。 電話のない不慣れな通りで夜を過ごすことは、かなり不快です。 同時に、機能の拡張の結果、バッテリーの消費量が大幅に増加しています。







ハードウェアとソフトウェアの両方のメーカーがこの問題を解決しようとしています。 Yandexにとっても重要です。なぜなら、私たちのサービスはいつでも手元にあるべきだからです。 これにはさまざまな方法で取り組み、実験の一環として、バッテリーから電話機が消費する電流を測定するデバイスを作成しました。 これで、電話機のバッテリー(Nexus、iPhoneなど)からの瞬間電流値を1秒あたり500回ミリアンペアで測定し、このメトリックをディスクに保存して、平均消費量を読み取ることができます。













カットの下で、私たちがそれをどのようにしたかを説明します 鉄片の写真はたくさんありますが、品質については事前に謝罪します。写真は戦闘状態で撮影されたものです。









最初から何かの戦術がありました



数ヶ月前、電話の負荷テストをYandex.Tank (これはパフォーマンスをテストするためのオープンソースツール)に固定し始めたとき、最も重要な指標の1つ-バッテリーからの電流消費-を確実に測定できないという事実に直面しました一部の電話はまったく測定できません。 たとえば、 標準の Apple ツールによって取得されたiPhoneの現在の消費グラフは次のようになります







計測器のメトリックの監視

テストの3つの開始すべてで、消費値はまったく変化せず、1/20に等しくなりました。 使用されている単位は驚くべきものです。1/ 20は、同じ電力消費で電話機が引き続き動作する場合、20時間で座ることを意味します。 つまり、メトリックは非常に不正確であり、あまり解釈できません。 さらに、スクリーンショットを撮ってチケットに添付しない限り、生の番号を取得することはできません。







Androidデバイスの場合、状況は良く見えますが、理想からはほど遠いです。 /proc/…



から数値を読み取ることで電流を測定できますが、あまり頻繁に行わない方が良いです。値をポーリングすることで、電話のパフォーマンスを浪費し、テストを台無しにすることができます。 異なるデバイスでは、数字はファイルシステムの異なる場所にあります。 Androidスマートフォンの場合、通常、電流を測定する鉄片はないため、ソフトウェアによる消費を除去することはできません。 参照として使用したNexusでは、 /proc



の値は20秒ごとに変更されます。









一般に、ハードウェアの消費量を測定して、1石ですべての鳥を殺すことを決定しました。これは、ラップトップや冷蔵庫を含むすべてのデバイスで一般的に測定できます。 私たちはPower Monitorの存在を知っていましたが、デバイスの価格(1個あたり約800ドル、各電話には独自のデバイスが必要です)、およびLinuxとの非互換性(したがって自動化の難しさ)から、自転車について考えさせられました。 市場に出回っているオシロスコープやその他の汎用測定デバイスでも同様の状況が見られます。高価なものを購入するためには、自動化が困難です。







BattOrプロジェクトもあります。これは説明により、私たちが望むものです。 私自身は著者に連絡を取ろうとしませんでしたが、私の同僚は、チームはGoogleに買収され、それ以来彼らから何も聞かれず、彼らはメールに応答していないと言います。 偶然? =)







まず、概念実証として、 この記事で紹介したものと同様のシャントを備えた回路を作成しました。 断線したUSBの電流を測定しました。 電流強度の値は最大500 mAであると予想されたため、計装アンプを使用して電圧を増幅する必要があり、Arduinoを使用してシャントから直接除去する必要はありませんでした。









タンバリンとさらにダンスをした後、ラップトップ画面にUSBからの電話の現在の消費量のグラフを表示することができました。 ここでは、そのような測定が十分ではないことがわかりました-バッテリーからの電流ではなく、USBからの電流を測定し、電話はバッテリーにエネルギーを保存し、現在の消費スケジュールを電話で起こっていることと比較することはできません。 電話からバッテリーを取り外し、代わりに外部電源を使用する必要があると判断しました。テスト中はUSBを接続しないでください。









電子機器は白い煙で動く



ご存知のように、物理学と電気工学のレッスンで教えられたことはすべて嘘であり、電子は存在せず、デバイスは白煙で動作します。 そして、この白い煙が出たら、デバイスは動作を停止します。 別の実験では、Arduinoから白い煙が出て、それを失いました。 電源の入力が「0」で、出力が「-」であることがわかりました。88ボルトの交流電圧です。 さまざまなPSUでさらにいくつかの実験を行った結果、すべてのPSUが同等に優れているわけではないことに気付きましたが、私たちに合ったものもあります。 そして、これらの適切なものを使い始めました。 また、シャントと計装アンプを備えた回路を使用せず、代わりに、マイクロ回路の形でのみ本質的に同じであるMAX471に基づいたArduino用の既製の電流測定モジュールを使用することも決定しました。 また、ホールセンサー(ACS712)に基づいたオプションも検討しましたが、このチップのドキュメントを調べたところ、非常にうるさいので、試さないことも決めました。









内蔵バッテリーからではなく、外部電源から現代の電話に電力を供給するためには、それを分解してバッテリーを取り外すだけでは不十分です-現代のバッテリーはあまりにもスマートです。 そのため、コントローラーをバッテリーから引き出して接続します。









このように変更されたiPhone(または他のデバイス)を組み立てられた状態に戻すために、ケースに穴を開けて2本のワイヤを表示します。









これが結果として得られたボックスです。 確かに、地下鉄、電話、ケーブルなどに入れないでください。それだけです...彼らは理解できないかもしれません=)









それは私たちに何を与えますか



すでに消費電力のアプリケーションのテストを実施し始めているので、この分野での改善を待ちます。 私たちのボックスを使用している同僚を引用します。







このデバイスでバッテリーを直接測定するための関連するテスト結果を取得するには、5分で十分です。 「従来どおり」を測定する場合、つまり、バッテリー充電の%の減少率を調べる場合、6〜8時間かかりますが、人的要因も忘れないでください。 つまり、テスト時間は8時間から5分に短縮され、ほぼ100倍になりました。


測定結果の電流の広がりは、±15%です。 これは理想的ではなく、エラーを減らす必要があります。 ただし、人的要因が排除され、1回の測定に要する時間が大幅に短縮されたため、結果の信頼性が向上しました。 半日で多くの多くの測定を実行し、電話での不可解なアクティビティの突然のバーストの影響を受けた結果をカットするだけで十分です。


プラットフォーム間およびデバイス間の値の比較が可能になりました。 測定単位はmAであり、「パーセント削減率」ではなく、プラットフォーム、バッテリーサイズ、バッテリーの「鮮度」に依存します。実行中のプロセスは言うまでもありません...実行中の同じYaとのmAのみを比較します。 iOS-ありません。 J.Serviceを使用せずに、各プラットフォームが消費する量である補正係数を追加する必要があります。 しかし、これは半日の測定のための質問です(これはコーヒーとのチャットです)。


ソフトウェアについての一言



Arduinoからデータを収集するために(そして、1秒間に500回USB経由で送信するだけです)、簡単なリーダーを作成しました。 Pythonは、デバイスを読み取り用に再度開く際に問題が発生しました-2度目はデータが読み取れなくなりました。 Golangで同じことを理解せず、書き直しただけです。その後、すべてが機能しました。







ここでは、まだ小さなレーキを待っていました。古いデータは前回の起動からデバイスバッファに残っています。 そのため、最初の500個の測定値(1秒)をドロップします。 その後、.csvで収集されたデータはPythonスクリプト(PandasとSeabornを使用)によって処理され、記事の冒頭で見たグラフを取得します。







リーダーのソースコード、ファームウェア、およびデータ処理用のコードに興味があるなら、私はそれを共有することができます、個人で書いてください。








All Articles