ガラスタイルと木箱を使って(まだIoTじゃない)光ものを作る


最近あんまり工作してなかったので、なんか作りたいなーと思って前からやりたかったことをやってみました。前々からLEDテープやLEDマトリクスで何か作りたいなーと思ってまして、最近 Shizuhackで作例を見せてもらって再び火がついた感じです。

元々光るもので何かできないかと関心がありまして、だいぶ前にUSBミラーボールで遊んでたときもありました。

工作も、IoTデバイスを触るのも、何事も久々ですし、プロトタイプ的に勢いでやってみました。

完成品

この投稿をInstagramで見る

Hiroshi Sano(@hrs_sano645)がシェアした投稿

後ろにM5Atom Liteを仕込んでまして、ボタン操作でLEDの色を変えていきます。

LEDテープの仕様上全てのLEDを同時に操作することになるので、複雑な表現はできませんが、色を変化させたり、変化の時間を変えたりできます。(もちろんちゃんとコードが必要ですが今回はやってないw)

工作の様子

使った材料を載せておきます。

材料 お店/メーカー 参考価格(税込) 備考
ガラスタイル ダイソー 110円
木箱 100円ショップ 110円 ダイソーやセリアなどでインテリア向けで扱ってるウォールボックスなど
透明/半透明両面テープ 100円ショップなど 110円~
アクリル板(3mmぐらい) 100円ショップ、ホムセンなど 110円~
板材 100円ショップ、ホムセンなど 110円~
タイル目地材 ホムセンなど 500円程度 今回は使わなかったのですがきれいに仕上げる時にはあった方が良さそう
LEDテープ 電子部品屋/LED電装扱いのお店 (価格忘れました)
M5Atom Lite M5Stack 約1500円 小型かつ5V供給できるものにしました。USB-Cで電源供給可能
M5Atom用ピッチ基板 スイッチサイエンス 220円 ブレットボード基板加工でも良かったですが、見つけたのでこちらを買いました
ピンヘッダ スイッチサイエンスなど 約400円 ピッチ基板とM5Atom Liteを繋ぐために
ホットボンド ホムセン 1500円程度 細かい部品の接着、絶縁向け。100円ショップでも取り扱ってそう

ダイソーにあるガラスタイルと、これも100円ショップにありそうな木の箱です。

ガラスタイルを載せるためにアクリル板を使いました。今ちょっとした大きさなら100円ショップで買えるそうです。なんかもうすごい時代になった。

LEDのテストは、どんな感じで光るかをLEDの上に半透明なビニールを被せてから確認して、ガラスタイルでも確認してみてました。

LEDテープの配置。ちゃんと整列させた方がきれいですが、とりあえずなので

木箱の加工は底面はM5Atom Liteを収めるぐらいの穴を開けて、側面はUSB端子が刺せるように切り欠きを入れてます

ガラスタイルは、木箱に収まるように切り出したアクリルの上に配置して、前面をテープで仮止めしてから、裏に両面テープをつけました。両面テープは半透明ぐらいじゃないと光が透過しないので、そこは注意。

コード

M5Atom LiteはMicroPythonが利用できますが、今回はCircuitPythonをインストールしました。

M5シリーズで使われているESP32はUSBドライブとして扱うことができない事情があります。pythonコードの保存方法は、CircuitPythonが用意しているWeb Workflowを使っています。使い方は英語ですが、開発元のAdafriutのサイトに詳しく書いてあります。

https://learn.adafruit.com/circuitpython-with-esp32-quick-start/overview

参考コードは以下の通りです。

import board
from digitalio import DigitalInOut, Direction, Pull

import adafruit_rgbled

btn = DigitalInOut(board.BTN)
btn.direction = Direction.INPUT
btn.pull = Pull.UP

RED_LED = board.D22
GREEN_LED = board.D19
BLUE_LED = board.D23

oneled = adafruit_rgbled.RGBLED(RED_LED, BLUE_LED, GREEN_LED, invert_pwm = True)

# LEDの明るさ
LED_POWER = 255

# LEDパターン設定
led_patterns = [
    (LED_POWER,LED_POWER,LED_POWER),
    (0,0,LED_POWER),
    (LED_POWER,0,0),
    (0,LED_POWER,0),
]

def set_led_color(rgbled, color_pattern):
    """LEDの色を設定する"""
    print(f"LED On: {color_pattern}")
    rgbled.color = color_pattern

# 実際に動かす関数
def main():
    # LED初期化
    set_led_color(oneled, led_patterns[0])
    # 現在のbtnの値を確認
    prev_state = btn.value

    led_change_counter = 1

    while True:
        cur_state = btn.value
        if cur_state != prev_state:
            if not cur_state:
                print("BTN is down")
                # ledのカウンタがパターン数を超えたら0に戻す
                # print(f"counter: {led_change_counter}")
                if led_change_counter > (len(led_patterns) - 1):
                    led_change_counter = 0

                set_led_color(oneled, led_patterns[led_change_counter])
                led_change_counter = led_change_counter + 1
            else:
                print("BTN is up")
        prev_state = cur_state

コードで使ったライブラリは、CircuitPython Library Bundleの RBGLEDライブラリを使っています。

今回使ったLEDテープはRBG+5Vのもので、各RBGはアナログで制御できるのでそれを使っています。いわゆるPWM制御ですが、このライブラリだとカラーコードで指定できるので、便利です。

またLEDボタンを押した時の切り替え方法はadafruitのドキュメントが大変勉強になりました。

CirfuitPythonの魅力はAdafruitが用意されている豊富なライブラリにあるのですが、ESP32だと微妙に扱いづらいので、RP2040を使って行った方がいいかもしれません。WiFi使えるものも出てきましたし。

終わりに

完成したものがこちら。ボタンを押すと白→青→赤→緑→白と色が変わります。

トレーみたいに使うこともできそう。防水対策は必要ですね。

こういった雑貨ものとIoTの組み合わせのレファレンスは、muiボードや、スマートミラーがありますが、日常に溶け込むデバイスプロダクト素晴らしいなあと思いつつ、もっといろんな素材と組み合わせても面白いと思って、まずはやってみました。

予算的にもお安く済んだので、小学生高学年〜中学生の工作としてはありかもしれません。検索したら実際に扱ってるところもありました。

今回はきれいにガラスタイルを光らせることができなかったので、次回はもう少し丁寧にLED配置を考えたりですね。

今後は、もう少し動きがあるものが欲しくて、やりたいなーと思うことを挙げてみると

  • IoTらしく、ネットの情報や各センサーを使って情報を光り方で表現する。天気情報とか、誰かがやってきたとか
  • 面白系で、ビールのグラスを表現したガラスタイルの中にLEDを埋め込んで、ビールを注いでる雰囲気が出せたり
  • ほかの素材とLEDを組み合わせてみたい
  • ワイヤレス給電できると面白いかも
  • 他の素材で透過した

特に当てはないのですが、できればお店とかに飾ってもいい感じのモノづくりを目指せたらいいなと思っています。例えば間接照明っぽいオブジェに見えて、お客さんが来たことを知らせてくれるような スパイアクションもので出てくるガジェット 便利デバイスになればなあと。そのためには全体的に工作のレベルを上げていかないといけないですねw