はじめに
『ピコプロジェクターを使った空間演出システムの紹介~ロボットアームによるグラス投写型』のシステム用に、重量センサ内蔵コースターを作ったので、使用パーツや開発内容について簡単にまとめてみた。
システム構成
使用したパーツは以下の通り。既に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 1 | NanoC6とMini OLEDユニットを接続 |
| Groveケーブル ディスプレイと重量センサ接続用 | M5Stack Groveケーブル20cm | M5Stack用計量ユニットに付属 x 1 | Mini 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 IDE | 2.3.2 |
| |- Boards: M5Stack | 2.1.3 |
| |- Library: M5NanoC6 | 1.0.0 |
| |- Library: UNIT_MINISCALE 以下ページからZipファイルをダウンロードし手動で追加 https://github.com/m5stack/M5Unit-Miniscale | 0.0.1 |
| |- Library: U8g2 | 2.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やロボットアームとの連携など色々と試して行きたい。



