最近あんまり工作してなかったので、なんか作りたいなーと思って前からやりたかったことをやってみました。前々からLEDテープやLEDマトリクスで何か作りたいなーと思ってまして、最近 Shizuhackで作例を見せてもらって再び火がついた感じです。
元々光るもので何かできないかと関心がありまして、だいぶ前にUSBミラーボールで遊んでたときもありました。
工作も、IoTデバイスを触るのも、何事も久々ですし、プロトタイプ的に勢いでやってみました。
完成品
後ろに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ライブラリを使っています。
- https://github.com/adafruit/Adafruit_CircuitPython_Bundle
- CircuitPython_RGBLED — Adafruit RGBLED Library 1.0 documentation
今回使ったLEDテープはRBG+5Vのもので、各RBGはアナログで制御できるのでそれを使っています。いわゆるPWM制御ですが、このライブラリだとカラーコードで指定できるので、便利です。
またLEDボタンを押した時の切り替え方法はadafruitのドキュメントが大変勉強になりました。
- https://learn.adafruit.com/multi-tasking-with-circuitpython/buttons
- https://learn.adafruit.com/debouncer-library-python-circuitpython-buttons-sensors/
CirfuitPythonの魅力はAdafruitが用意されている豊富なライブラリにあるのですが、ESP32だと微妙に扱いづらいので、RP2040を使って行った方がいいかもしれません。WiFi使えるものも出てきましたし。
終わりに
完成したものがこちら。ボタンを押すと白→青→赤→緑→白と色が変わります。
トレーみたいに使うこともできそう。防水対策は必要ですね。
こういった雑貨ものとIoTの組み合わせのレファレンスは、muiボードや、スマートミラーがありますが、日常に溶け込むデバイスプロダクト素晴らしいなあと思いつつ、もっといろんな素材と組み合わせても面白いと思って、まずはやってみました。
予算的にもお安く済んだので、小学生高学年〜中学生の工作としてはありかもしれません。検索したら実際に扱ってるところもありました。
- 【館山市】ガラスタイルを使ってオリジナルLEDランプを作ろう(県立館山野鳥の森) | 月刊ぐるっと千葉 千葉県のタウン情報誌 | 7月24日(土)開催! プラスチックのカップにガラスタイルやガラス玉などを貼り付け、中にLEDライトを置いて、 |
- 【夏休み企画】タイルクラフトで「イルカのガラスタイルLEDライト」を作ろう =伊東亜由= ※アーカイブ配信あり | Coubic
今回はきれいにガラスタイルを光らせることができなかったので、次回はもう少し丁寧にLED配置を考えたりですね。
今後は、もう少し動きがあるものが欲しくて、やりたいなーと思うことを挙げてみると
- IoTらしく、ネットの情報や各センサーを使って情報を光り方で表現する。天気情報とか、誰かがやってきたとか
- 面白系で、ビールのグラスを表現したガラスタイルの中にLEDを埋め込んで、ビールを注いでる雰囲気が出せたり
- ほかの素材とLEDを組み合わせてみたい
- ワイヤレス給電できると面白いかも
- 他の素材で透過した
特に当てはないのですが、できればお店とかに飾ってもいい感じのモノづくりを目指せたらいいなと思っています。例えば間接照明っぽいオブジェに見えて、お客さんが来たことを知らせてくれるような スパイアクションもので出てくるガジェット 便利デバイスになればなあと。そのためには全体的に工作のレベルを上げていかないといけないですねw