重量センサ内蔵コースターを作ってみた

はじめに

ピコプロジェクターを使った空間演出システムの紹介~ロボットアームによるグラス投写型』のシステム用に、重量センサ内蔵コースターを作ったので、使用パーツや開発内容について簡単にまとめてみた。

システム構成

使用したパーツは以下の通り。既に3Dプリンターを持っている場合であれば、トータルで5,500円ほど。
今回、PC側で重量が分かれば良いため、コースター単体としては最低限の重量確認とグラスなどの重さを除く風袋引きが出来れば良く、マイコン・表示デバイスは可能な限り小型のものを選定したため、ほぼケーブルのように取り扱えるのが特徴。

分類
用途
メーカー名
製品名(型番)
販売先
価格(2025/3/16時点) x 数量
仕様・説明
重量センサ
計量用
M5Stack
M5Stack用計量ユニット 5kgレンジ(HX711)
スイッチサイエンス
1,287円 x 1
計測範囲: 5kg
ストレインゲージモジュール: CZL928MC
ADコンバータ: HX711
マイコン: STM32F030
通信プロトコル: I2C
サイズ: 40 x 24 x 18mm
マイコン
PCへの重量データ送信
M5Stack
M5Stack NanoC6
スイッチサイエンス
1,331円 x 1
SoC: ESP32-C6FH4@RISC-V 160MHz
入出力: RGB LED、Button、IR、Grove Port、USB Type-C
サイズ: 23.5 x 12 x 9.5 mm
ディスプレイ
単体での重量確認用
M5Stack
M5Stack用 0.42インチ Mini OLEDユニット
スイッチサイエンス
748円 x 1
超小型のモノクロOLEDディスプレイ
表示サイズ: 0.42インチ
解像度: 72 x 40
入出力: Grove Port x 2
通信プロトコル: I2C
サイズ: 25.8 x 11 x 6.75 mm
重量センサ内蔵コースター
自作
3Dプリントパーツ トップとボトムの2パーツ
PLAフィラメント
2パーツで、100g程度、200円程度
ボトムパーツにM5Stack用計量ユニットを両面テープで固定、トップパーツ上面から計量ユニットにM3ネジで固定
コースター
ドリンクや結露から重量センサ側の保護用
山崎実業(Yamazaki)
立体 コースター 丸型 ホワイト
Amazon
422円 x 1
サイズ: 直径100mm、高さ9mm
素材: シリコン
3Dプロントパーツ トップ上面に両面テープで貼り付け
ゴム足
滑り止め用
オーディオファン
ゴム足シール クリア 小 透明 8mm×2mm 16粒
Amazon
630円 x 1
コースター ボトムの裏に4粒貼り付け
Groveケーブル
マイコンとディスプレイ接続用
M5Stack
Groveケーブル 5cm
Mini OLEDユニットに付属 x 1NanoC6とMini OLEDユニットを接続
Groveケーブル
ディスプレイと重量センサ接続用
M5Stack
Groveケーブル20cm
M5Stack用計量ユニットに付属 x 1Mini OLEDユニットとM5Stack用計量ユニットを接続
USB Type A-Cケーブル
マイコンとPC接続用
バッファロー BUFFALO TypeCケーブル A-C 0.1m ブラック (BSMPCAC101BK)Amazon
687円
NanoC6とミニPCを接続
※利用シーンに応じて適切な長さを選定してください
ネジ
コースターへの重量センサ固定用
ホームセンター等
M3 8mm x 4
150円ほど (12本入り) x 1
ナット
コースターへの重量センサ固定用
M5Stack用計量ユニットに付属 x 4

開発内容

開発内容は以下の通り。以下3Dプリントパーツのデータとマイコン用プログラムは以下よりダウンロード可能としています。なお、本投稿の内容や参考に作成したシステムや、その使用の際に発生した不具合やそれによる損害などについては、一切の責任を負うことができませんので、ご了承ください。不明点については『About』よりお問い合わせください。

ハードウェア

  • コースター用3Dプリントパーツのモデリング
    以下2つのパーツを設計
    • トップ: 上面からM5Stack用計量ユニットへの固定用M3ネジの穴が4か所
    • ボトム: M5Stack用計量ユニットは両面テープで固定、背面にケーブルを通すための隙間と、透過スクリーンを挟めるような溝を作成
  • Anycubic Kobra 2 Proと+Anycubic 高速PLAフィラメント(ホワイト)を使用

3DプリントパーツのコースターのSTLデータは以下よりダウンロード可能です。

ソフトウェア

開発内容は以下の通り。

  • 重量センサデータ取得とUART出力、重量情報の表示、ボタン押下による風袋引き:M5Stack NanoC6

M5Stack NanoC6のプログラムは以下の通り。以下ツール・ライブラリのバージョンでの動作を確認していますので、バージョンが異なる場合は動かない場合もあります。

ツール・ライブラリバージョン
Arduino IDE2.3.2
|- Boards: M5Stack2.1.3
|- Library: M5NanoC61.0.0
|- Library: UNIT_MINISCALE
以下ページからZipファイルをダウンロードし手動で追加
https://github.com/m5stack/M5Unit-Miniscale
0.0.1
|- Library: U8g22.35.30
▼使用したプログラムのソースコードは以下の通り。
 ※ここをクリックで表示/非表示を切替
#include "M5NanoC6.h"
#include "UNIT_SCALES.h"
#include <U8g2lib.h>

UNIT_SCALES scales;

U8G2_SSD1306_72X40_ER_F_HW_I2C  u8g2(
    U8G2_R0, /* reset=*/U8X8_PIN_NONE);  // EastRising 0.42" OLED

void setup() {
    NanoC6.begin();
    while (!scales.begin(&Wire, 2, 1, DEVICE_DEFAULT_ADDR)) {
        Serial.println("scales connect error");
        delay(1000);
    }
    scales.setLEDColor(0x001000);
    u8g2.begin();
}

void loop() {
    float weight = scales.getWeight();
    float gap    = scales.getGapValue();
    int adc      = scales.getRawADC();
    char weightstr[8];
    char dispstr[8];
    char serialstr[16];

    dtostrf(weight,4,1,weightstr);
    sprintf(dispstr,"%sg",weightstr);
    Serial.println(weightstr);

    NanoC6.update();
    if (NanoC6.BtnA.wasPressed()) {
        scales.setOffset();
    }

    u8g2.clearBuffer();                  // clear the internal memory
    u8g2.setFont(u8g2_font_helvR10_tf);  // choose a suitable font
    u8g2.drawStr(0, 12, "Mini Scales");  // write something to the internal memory
    u8g2.setFont(u8g2_font_helvR14_tf);  // choose a suitable font
    u8g2.drawStr(u8g2.getWidth()-u8g2.getStrWidth(dispstr), 36, dispstr);  // write something to the internal memory
    u8g2.sendBuffer();  // transfer internal memory to the display

    delay(200);
}

まとめ

今回はPC側で重量が分かれば良いということで、コースター単体としては最低限の機能での開発でしたが、例えば以下のような機能などアイデア次第で面白いものが作れそう。

  • リング型のLEDを埋め込み光で演出(重量に応じて色を変えたり、置いたタイミングで虹色に光らせるなど)
  • より大きいディスプレイへの表示
  • ログの記録・表示(毎日いつどのくらい飲んだかなど)
  • 一日の水分摂取量の目標に合わせて飲むタイミングをお知らせ(LED、ディスプレイなど)
  • アルコール・VOCセンサなどでアルコール量を推定、飲むペースをアドバイス、飲み過ぎ注意のお知らせなど(どこにセンサを配置し、どのように検出するかが難しいところ)

今後は、上記アイデアを試してみたり、PCやロボットアームとの連携など色々と試して行きたい。

コメントを残す