DIY: Raspberry Pi を使用して、ユーモアのセンスのあるハッキング可能な体重追跡体重計を構築する

  • Oct 19, 2023

体重を量るのがこんなに楽しいことはありません。

01-スマートスケール.jpg

毎朝、あの愚かで魂のない、悪いニュースを伝える体重計を見つめるのにうんざりしていませんか? 良いニュース: の達人たち 初期状態モノのインターネット企業のデータ分析を行う同社は、ユーモアのセンスを組み込んだ、ハッキング可能で体重追跡機能があり、テキスト メッセージを送信できる体重計を開発しました。

これはバランスWiiボードと、 ラズベリーパイ、そしてオンライン データ分析プラットフォーム ハッキング可能な Python スクリプトによって制御される Web 接続の体重計を作成します。

プロジェクトレベル: 初心者 完了までのおおよその時間: 20 分

パート I: 装備

この段階的なチュートリアルでは、次のことを行います。

  • Bluetooth を介して Wii バランスボードを Raspberry Pi に接続する
  • バランスボードに乗ったときに体重を測定する Python スクリプトを実行します。
  • Raspberry Pi を使用して体重を Initial State のクラウド サービスにストリーミングします
  • 体重を測るたびにSMS通知を設定する
  • Web ブラウザでアクセスできる体重追跡ダッシュボードを構築する

このチュートリアルで使用するすべての機器のリストと、各アイテムを購入できる場所へのリンクを次に示します。

  • Raspberry Pi 3* (SD カードと電源付き)
  • バランスWiiボード
  • Wii Fit 充電池パック
  • "="">
  • 鉛筆 (鉛筆を購入できる場所へのリンクは示しません... それは宿題だと思ってください)

*Raspberry Pi 1 または 2 をお持ちの場合は、Bluetooth アダプターが必要になります (例: http://www.amazon.com/gp/product/B00JN5Y5E0).

パート II: Wii バランス ボード スケール

なぜバランスWiiボードなのか? Bluetooth 接続を備えた、非常に優れた耐久性のある体重計であることがわかりました。 これにより、シングルボード コンピューター (Raspberry Pi) に接続して、Python スクリプトで体重を読み取り、その測定値をオンライン データ サービスに送信して、素晴らしいことを実行できるようになります。 さらに、あなたまたはあなたが知っている誰かが、単に埃をかぶっているだけのものをすでに持っている可能性が十分にあります。

このプロジェクトを実際に実用的で便利なものにするために、バランス Wii ボードにいくつかの簡単な変更を加える必要があります。

Bluetooth セットアップ:

Raspberry Pi 3 には Bluetooth が内蔵されており、バランス Wii ボードとの通信に必要なものはすべて揃っています。 Raspberry Pi 1 または 2 をお持ちの場合は、USB ポートの 1 つを使用して、このような安価なアダプターを接続する必要があります。 iAnder USB Bluetooth 4.0 低エネルギーアダプター。

Pi の電源を入れて (Raspbian がすでにインストールされており、起動していると仮定します)、Raspberry Pi ターミナル ウィンドウに移動します。 Bluetooth ドングルのアドレスは、

「hcitool dev」コマンド: $ hcitool dev

デバイス:

hci0 00:1A: 7D: DA: 71:13

Python スクリプトで使用する Bluetooth モジュールをインストールします。

$ sudo apt-get install python-bluetooth

スケールの読み方:

バランス Wii ボードを Raspberry Pi に接続します。 これを行うには、Stavros Korokithakis の Gr8W8Upd8M8.py のバージョンを変更します。 脚本. このステップで使用する Python スクリプトは次の場所にあります。 ここ. このファイルの内容を Raspberry Pi で作成したファイルにコピーすることも、このプロジェクト全体で使用するすべての Python ファイルのクローンを作成することもできます。 後者にしましょう。 Raspberry Pi のターミナルに次のコマンドを入力します。

$cd~

$ git クローン https://github.com/InitialState/smart-scale.git

「スマートスケール」にクローンを作成しています...

リモート: オブジェクトの数: 14、完了。

リモート: オブジェクトの圧縮: 100% (12/12)、完了しました。

リモート: 合計 14 (デルタ 1)、再利用 8 (デルタ 0)、パック再利用 0

オブジェクトの開梱: 100% (14/14)、完了。

接続をチェックしています... 終わり。

新しいスマート スケール ディレクトリに 2 つの Python ファイル、smartscale.py と wiiboard_test.py が表示されるはずです。

$ cd スマートスケール

$ls

README.md スマートスケール.py wiiboard_test.py

wiiboard_test.py スクリプトを実行して通信をテストし、バランス Wii ボードから重量を読み取ります。

$ sudo python wiiboard_test.py

次の応答が表示されます。

ボードを発見中...

今すぐボード上の赤い同期ボタンを押してください

ボードの下にあるバッテリー カバーを取り外して、赤い同期ボタンを見つけます。 スクリプトを実行してから数秒以内にボタンを押すようにしてください。そうしないとタイムアウトが発生します。 成功すると、次のような内容が表示されます。

アドレス 00:23:CC: 2E: E1:44 で Wiiboard が見つかりました

接続しようとしています...

アドレス 00:23:CC: 2E: E1:44 で Wiiboard に接続されました

Wiiボードが接続されました

データ書き込みに対するACKを受信しました

84.9185297ポンド

84.8826412ポンド

84.9275927ポンド

wiiboard_test.py スクリプトは、10 行目で指定された重量測定値の数を取得し、平均を出力します。

# ユーザー設定

WEIGHT_SAMPLES = 500 #

値を変更してスクリプトを再実行し、測定された重量の変化と各測定に必要な時間を確認することで、この数値を試すことができます。 自分の体重、犬の体重、その他あらゆるものを量って、測定値が意味があるかどうかを確認してください。 スクリプトを停止するには、CTRL+C を押します。

ハードウェアの調整

任天堂はバランス Wii ボードに常に 4 本の単三電池を使用して電力を供給すると想定しており、AC 電源アダプターは付属していませんでした。 Bluetooth を介して Wii ボードと Pi を永続的にペアリングできないため、バッテリー電源しかないと不便です。 同期する必要があります。その後、バッテリーを消耗せずに同期を維持できるようにして、体重計に乗って重量を量るだけで済みます。 幸いなことに、バランス Wii ボード用に作られたサードパーティのアダプターがいくつかあり、壁のコンセントから常時電力を供給するために使用できます。 の Wii Fit 充電池パック 電力問題に対する完璧な解決策です。 電池をこの電池パックに交換し、AC アダプターをコンセントに差し込みます。

Python スクリプトを実行するたびにバランス Wii ボードと Raspberry Pi をペアリングする必要があるため、同期ボタンの位置が原因​​で別の不便が生じます。 同期ボタンは Wii ボードの下部にあるため、同期するたびに裏返す必要があります。 この問題は、上に示したように、鉛筆と 3/8 インチのフェルト パッド 3 枚を使って、小さなレバーを作成することで修正できます。 充電式バッテリー パックにより、同期ボタンがボードの下面に露出します。 同期ボタンからボードの外側前面まで鉛筆 (または同様のもの) をテープで貼り付けます。 3/8 インチのフェルト パッド (または類似のもの) を鉛筆の中心 (っぽい) に 3 つ重ねて、固定軸を作成します。 誰かが誤って鉛筆を蹴り出さないように、ボードから鉛筆をあまり露出させないように注意してください。 ボードを裏返すと、レバーを押し下げるだけで同期ボタンを押すことができます。 ハッキーだけど効果的。

Wii ボードの保管方法によっては、ボードの脚からゴム製グリップ パッドを剥がした方がよい場合があります (パッドは単に剥がせるステッカーです)。 3/8 インチのフェルトパッドをボードの足に置くと、簡単にスライドできます。

パート 3: 初期状態

私たちは体重やデータをクラウド サービスにストリーミングし、そのサービスでデータをラップトップやモバイル デバイスからアクセスできる素敵なダッシュボードに変換したいと考えています。 データには宛先が必要です。 その宛先として初期状態を使用します。

ステップ 1: 初期状態のアカウントに登録する

に行く https://app.initialstate.com/#/register/ 新しいアカウントを作成します。

ステップ 2: ISStreamer をインストールする

Initial State Python モジュールを Pi にインストールします。

コマンド プロンプトで (最初に Pi に SSH 接続することを忘れないでください)、次のコマンドを実行します。

$ cd /ホーム/pi/
$ \curl -sSL
https://get.initialstate.com/python -o- | sudo bash

セキュリティに関する注意事項注: 上記のコマンドには、ユーザーが知っておくべき重要な構造がいくつかあります。 1) カールの前に \ があります。 これは、curl のエイリアスが作成された場合に実行されないようにするために重要です。 これは、コマンドが意図した以上のことを行うリスクを軽減するのに役立ちます。 2) このコマンドはパイプされたコマンドであるため、実行時に、から取得されるスクリプトの出力をパイプすることになります。 https://get.initialstate.com/python sudo bash コマンドに入力します。 これはインストールを簡素化するために行われますが、ここでは https が重要であることに注意してください。 インストール スクリプトの中間者操作 (特に、スクリプトが管理者特権で実行されている場合) 特権。 これはインストールとセットアップを簡素化する一般的な方法ですが、もう少し面倒な場合は、少し便利ではない代替手段があります。 コマンドを 2 つのステップに分割し、curl コマンドからダウンロードされている bash スクリプトを自分で調べて忠実性を確認するか、自分で調べます。 できる pip の指示に従ってくださいの場合、自動生成されたサンプル スクリプトは取得できません。

サンプル スクリプトを自動的に取得するように求められたら、「y」と入力します。 これにより、Pi から初期状態にデータをストリーミングできることを確認するために実行できるテスト スクリプトが作成されます。 次のプロンプトが表示されます:

例をどこに保存しますか? [デフォルト: ./is_example.py]:

カスタム ローカル パスを入力するか、Enter キーを押してデフォルトを受け入れることができます。

初期状態のアカウントを登録したときに作成したユーザー名とパスワードの入力を求められます。 両方を入力するとインストールが完了します。

作成したサンプルスクリプトを見てみましょう。

$ nano is_example.py

15 行目に、streamer = Streamer (bucket_... で始まる行が表示されます) この行により、「Python Stream Example」という名前の新しいデータ バケットが作成され、アカウントに関連付けられます。 この関連付けは、同じ行の access_key="..." パラメータにより発生します。 この長い文字と数字の連続が初期状態のアカウント アクセス キーです。 Web ブラウザで初期状態のアカウントにアクセスした場合は、右上にあるユーザー名をクリックし、 「マイアカウント」に移動すると、同じアクセスキーがページ下部の「ストリーミングアクセス」の下にあります。 キー」。

データ ストリームを作成するたびに、そのアクセス キーによってそのデータ ストリームがアカウントに送信されます (そのため、キーを誰とも共有しないでください)。

テスト スクリプトを実行して、初期状態のアカウントへのデータ ストリームを作成できることを確認します。 以下を実行します。

$ python is_example.py ステップ

Web ブラウザで初期状態のアカウントに戻ります。 「Python Stream Example」という新しいデータ バケットがログ シェルフの左側に表示されているはずです (ページを更新する必要がある場合があります)。 このバケットをクリックし、Waves アイコンをクリックしてテスト データを表示します。

Waves チュートリアルを段階的に進めて、このデータ視覚化ツールの使用方法を理解してください。 次に、タイルでデータを表示して、同じデータをダッシュ​​ボード フォームで確認します。

これで、体重計から実際のデータのストリーミングを開始する準備が整いました。

パート 3: 最終スクリプト

「git clone」を実行したと仮定します。 https://github.com/InitialState/smart-scale.git パート 2 の「」コマンドを使用して、すべてをまとめた最終スクリプトは、~/smart-scale ディレクトリーにある Smartscale.py という名前です。 (https://github.com/InitialState/smart-scale/blob/master/smartscale.py)

スクリプトを実行する前に、スクリプトでいくつかの設定を行う必要があります。 nanoなどのお気に入りのテキストエディタでsmartscale.pyを開きます。

$cd~

$ cd スマートスケール

$ nano スマートスケール.py

このファイルの先頭近くに、「ユーザー設定」セクションがあります。

# ユーザー設定

BUCKET_NAME = ":apple: 私の体重履歴"

BUCKET_KEY = "体重11"

ACCESS_KEY = "初期状態のアクセス キーをここに配置します"

METRIC_UNITS = False

WEIGHT_SAMPLES = 500

THROWAWAY_SAMPLES = 100

WEIGHT_HISTORY = 7

#

  • BUCKET_NAME は、重み/データがストリーミングされる初期状態データ バケットの名前を設定します。 これはここで設定し、後で UI で変更できます。
  • BUCKET_KEY は、データのストリーミング先を指定する一意のバケット識別子です。 別のバケット/ダッシュボードを作成する場合は、ここで別の識別子を使用します (*注: バケットをアーカイブする場合、そのキーを新しいバケットで再利用することはできません)。
  • ACCESS_KEY は、初期状態のアカウント キーです。 このフィールドに ACCESS_KEY を入力しないと、データはアカウントに表示されません。
  • METRIC_UNITS を使用すると、True に設定した場合は体重を kg で指定でき、False に設定した場合はポンドで体重を指定できます。
  • WEIGHT_SAMPLES は、実際の体重を取得するために実行される測定値の数を指定します。 500 回の測定には約 4 ~ 5 秒かかり、かなり正確な結果が得られます。
  • THROWAWAY_SAMPLES は、最初にボードに足を踏み入れたときに捨てられるサンプルの数を指定します。 これにより、最初のステップやシフトによって最終的な測定が狂うことを防ぎます。 これは常に WEIGHT_SAMPLES よりもはるかに小さい必要があります。
  • WEIGHT_HISTORY は、追加の更新が送信される前に取得される測定値の数を設定します。 2 時間以上離れて行われた測定のみが履歴にカウントされます。

このセクションで各パラメータを指定し、変更を保存したら、最終スクリプトを実行する準備が整います。 スクリプトを実行する前に、スクリプトが何を行うのかを見てみましょう。

  • スクリプトの開始時に、バランス Wii ボードと Raspberry Pi をペアリングするように求められます。 ハードウェア調整セクションで一緒にハッキングしたレバーを使用して、同期ボタンを押します。 と促されました。
  • スクリプトが実行されたら、Wii ボードに乗って体重の測定を開始します。 4 ~ 5 秒後、体重が初期状態のアカウントに自動的に送信されます。
  • SMS 通知を (いくつかの手順で) 設定すると、測定直後にテキスト メッセージが届きます。

スクリプトを実行してマジックを開始します。

$ sudo python スマートスケール.py

ダッシュボード

初期状態アカウントに移動し、BUCKET_NAME パラメータに対応する名前を持つ新しいデータ バケット (つまり、My Weight History) をクリックします。 [タイル] をクリックして、体重履歴ダッシュボードを表示します。 初めてタイルでデータを表示すると、更新、体重日付、体重 (ポンド) の 3 つのタイルが表示されます。 ダッシュボードをカスタマイズするには、 タイルのサイズ変更と移動 として ビュータイプの変更も可能 そしてさらに タイルの追加. このダッシュボードでは、体重履歴を一目で確認できます。 それは モバイル対応 そしてあなたもできます 他の人と共有する.

SMS

体重計が重量を測定するたびに SMS アラートを作成しましょう。

以下で概説されているトリガー通知設定プロセスに従います。 http://support.initialstate.com/knowledgebase/articles/834354-triggers-adding-a-trigger.

  1. ビールデータバケットがロードされていることを確認してください。
  2. データ シェルフ (名前の下) でバケットの設定をクリックします。
  3. 「トリガー」タブをクリックします。
  4. トリガーするデータ ストリームを選択します (データ バケットが読み込まれた後にドロップダウン リストを使用して既存のストリームから選択することも、ストリーム名/キーを手動で入力することもできます)。 *注意: Safari は HTML5 ドロップダウン リストをサポートしていません)。 上のスクリーンショットの例では、「更新」を選択しました。
  5. 条件演算子、この場合は「一致」を選択します。
  6. アクションをトリガーするトリガー値を選択します (希望の値を手動で入力します)。 メートル単位を使用していない場合は「lb」と入力し、メートル単位を使用している場合は「kg」を入力します。 ストリーム Update に「lb」(または「kg」)が含まれるたびに、テキスト メッセージ通知が届きます。
  7. 「+」ボタンをクリックしてトリガー条件を追加します。
  8. アクションを選択します (SMS で通知を選択)。
  9. 「+」ボタンをクリックしてアクションを追加します。
  10. 新しい電話番号を追加する場合は、認証コードを入力してセットアップを完了します。

これでトリガーが有効になり、条件が満たされたときにトリガーが起動されます。 「完了」をクリックしてメイン画面に戻ります。

セットアップが完了すると、体重を測るたびに、体重、前回の測定からの体重の変化、ランダムなジョーク/侮辱/褒め言葉が含まれたSMSが届きます。

結論

このプロジェクトに基づいて構築できる可能性:

  • 他のソースから同じ体重履歴ダッシュボードにデータをストリーミングできます (情報) を使用して、独自の個人健康ダッシュボードを作成します。
  • messageWeighFirst、messageWeighLess、messageWeighMore、および messageWeighSame 関数内のジョークを、お好みの奇抜なユーモアに変更できます。
  • ジョークを実用的なメッセージに変更したり、ジョークを削除したりして、体重計コードを使用して自分の体重以外の重要なものの重量を追跡することもできます。
  • 同じアプローチを使用して、独自のスマート ビール/ワイン冷蔵庫を作成できます。 そのために作られた素晴らしいチュートリアルがすでにあります ここ.

ハッキングして!