3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~後編:LED自動照明~
今回のテーマは、
- 3Dプリント中だけ自動的に照明が点灯する仕組みをつくる
単純にUSBのLEDライトをつけるのも全然ありだが、AstroBox は Raspberry Pi ベースで動作しているので、どうせなら、、ということで、今回のテーマをやってみることに。
使ったもの
LEDテープ
「結局USBのLEDライト使うんかーい」と突っ込まれそうだが、そうではなくて、USBコネクタは取り外して使う。
なお、LEDテープ を探すと 12V のものがほとんど。
BS01+ の電源が12Vなので、そこから引っ張ることもできるけど、初心者的には 2桁ボルト が怖いし、配線が増えるのはあまりうれしくない。
なので、5Vで動作するものを探すと、USB用のこれになった。
フレキシブルなタイプのやつと迷ったけど、今回は テープタイプにして、BS01+ に内蔵することを計画。
BS01+ の電源が12Vなので、そこから引っ張ることもできるけど、初心者的には 2桁ボルト が怖いし、配線が増えるのはあまりうれしくない。
なので、5Vで動作するものを探すと、USB用のこれになった。
フレキシブルなタイプのやつと迷ったけど、今回は テープタイプにして、BS01+ に内蔵することを計画。
MOSFET/他
簡単な回路が必要なので部品を購入。部品/リンク | 購入先 | 備考 |
---|---|---|
N-Ch MOSFET 2SK2541 | aitendo | GPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。 |
L型ピンヘッダー1列 | aitendo | |
ピンソケット1列 | aitendo | 2+5P分利用。 |
金属抵抗 | aitendo | 10kΩを利用。 |
超薄型 ユニバーサル基板 | Amazon | ハサミで切れる極薄0.4mm厚。 |
Amazon |
LEDライトの設計
Raspberry Pi から LED を ON/OFF 切り替えをする場合、リレー、トランジスタ、MOSFET のどれかになりそうだけど、リレーはモノが大きくなりすぎるし、トランジスタは電力浪費するみたいだったので、MOSFET を使ってみることにした。初めて使うので調べてみると、Raspberry Pi のGPIO(3.3V)で使うには駆動電圧が小さいものが必要みたいなので、 aitendoで、NチャネルMOSFET(4個入) [2SK2541] を購入。1.5V駆動。
回路
回路は単純。Raspberry Pi の2pin(5V)を主電源とし、GPIO17(Pin11)のHigh/LowでLEDをON/OFFするだけ。
ドレイン側の ( 抵抗220Ω+赤色LED ) を LEDテープ(抵抗付き) に読み替え。
ブレッドボード図のMOSFET の足の並びは、左から Gate-Drain-Source。
Gate⇔Source間の 抵抗10kΩ はオープン時にゲートを 0V にプルダウンするため。
ブレッドボード図のMOSFET の足の並びは、左から Gate-Drain-Source。
Gate⇔Source間の 抵抗10kΩ はオープン時にゲートを 0V にプルダウンするため。
コード
コードもとりあえず超単純。引数によって、on / off するだけ。/etc/astrobox/led.py
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import RPi.GPIO as GPIO GPIO.setwarnings(False) # GPIO番号指定 channel = 17 # GPIO準備 GPIO.setmode(GPIO.BCM) GPIO.setup(channel, GPIO.OUT) # 引数onでHIGH、offでLOW if sys.argv[1] == "on" : GPIO.output(channel, GPIO.HIGH) elif sys.argv[1] == "off" : #GPIO.output(channel, GPIO.LOW) GPIO.cleanup()
考え中
LEDを on にした後、次のトリガー(プリント終了)まで、LEDをつけっぱなしにするので、ON の最後には cleanup()を入れていない。
その場合、
無限ループ内にファイルの有無の判別を入れたのを動かし続けて、ON / OFF は判別用ファイルの生成/削除にするとか??
LEDを on にした後、次のトリガー(プリント終了)まで、LEDをつけっぱなしにするので、ON の最後には cleanup()を入れていない。
その場合、
RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.という警告が出てしまうので、GPIO.setwarnings(False)を入れているが、こういう「やりっぱなし」をしたいときって普通はどうやるんだろ?
無限ループ内にファイルの有無の判別を入れたのを動かし続けて、ON / OFF は判別用ファイルの生成/削除にするとか??
ブレッドボードでの仮組/スクリプト動作テスト
ブレッドボードで仮組してスクリプト実行して、LEDテープのON/OFFを確認 → OK。$ python /etc/astrobox/led.py on $ python /etc/astrobox/led.py offLEDテープの余った切れ端(LED2個分)を使ってテスト成功
基板
試作品1号
部品/リンク | 購入先 | 備考 |
---|---|---|
N-Ch MOSFET 2SK2541 | aitendo | GPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。 |
L型ピンヘッダー1列 | aitendo | 3P分使用。 |
L型ピンヘッダー2列 | aitendo | 1P分使用。 |
金属抵抗 | aitendo | 10kΩを使用。 |
超薄型 ユニバーサル基板 | Amazon | ハサミで切れる極薄0.4mm厚。4x4 を使用。 |
ジャンパケーブル(メス-メス)10cm | Amazon | 短め10cm。作ったやつとRaspberry Pi のGPIO接続用。LEDテープとの接続もこれ。 |
ピン配列はこんな感じ。
LED + | |||
GPIO (Gate) | LED - (Drain) | GND (Source) | 5V |
が、、ここからケーブルが5本も伸びるし、設置場所を考えてなかったので、、やり直し!
試作品2号
部品/リンク | 購入先 | 備考 |
---|---|---|
N-Ch MOSFET 2SK2541 | aitendo | GPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。 |
L型ピンヘッダー1列 | aitendo | 2P分使用 |
ピンソケット1列 | aitendo | 2+5P分使用。 |
金属抵抗 | aitendo | 10kΩを使用。 |
超薄型 ユニバーサル基板 | Amazon | ハサミで切れる極薄0.4mm厚。4x5 を使用。 |
赤黒のシリコンケーブル (AWG24) | - | 20cm弱 |
2.54mmピッチコネクタ 2P | マルツオンライン |
こっちを採用。
組み立てとか
LEDテープの準備
購入したLEDテープを LED11個分で切る。切ったテープの片側だけクリアの樹脂をカッターで落とし、予備はんだ。
キレイに樹脂を除去しないとはんだがかなり乗りづらいので注意。
赤・黒のケーブル(20cm) を準備し、片側をLEDテープとはんだ付け。なお、ケーブルの他方はコネクタを接続する予定(最後に長さを合わせてから)。
BS01+ 本体への組み込み
BS01+は「超小型」というだけあって、箱の中のスペースに余裕がなく、設置場所は限定される。試行錯誤した結果、前面の裏側(カメラの上)にLEDテープを貼って、右側面上部の穴から外にケーブルを引き出すようにした。
プリント開始でON/プリント終了でOFFを自動化
プリント開始/終了をトリガーにコマンドを実行する機能がOctoPrintにあるが、AstroBox v0.9でも使える。具体的には /etc/astrobox/config.yaml に下記を追加。
events: enabled: true subscriptions: LED auto On - event: PrintStarted command: "/usr/bin/python /etc/astrobox/led.py on" type: system enabled: True - event: PrintResumed command: "/usr/bin/python /etc/astrobox/led.py on" type: system - event: PrintCancelled command: "/usr/bin/python /etc/astrobox/led.py off" type: system - event: PrintPaused command: "/usr/bin/python /etc/astrobox/led.py off" type: system - event: PrintDone command: "/usr/bin/python /etc/astrobox/led.py off" type: systemこれで、
プリント開始/再開でLEDがON
プリント完了/一時停止/キャンセルでLEDがOFF
てのが実現。
あとがき
BS01+ がかなり使いやすくなりました。し、愛着も沸いてきました。最初は、液晶ディスプレイを取り付ける ことを検討してましたが、AstroBox のが断然便利(たぶん) 。
Raspberry Piを使うシーンがなくて、しばらく触ってなかったけど、明確な目的があると楽しい。やる気が出てきました。
なお、気が向いたら実装する候補としては下記。
- Multi Camera Adapter を入れて、カメラ切り替え
- プリント環境の温度監視( センサー / 推移表示 / サーモグラフィ )
- 自動制御と別に LED ON/OFF を手動切り替え( タッチセンサーとか )
- 緊急停止用の物理ボタンと、XYZ軸をマニュアル操作するためのジョイスティック
- PiTFT3.5 とかつけて「なんか」表示。ブラウザ全画面&ローカル用URL表示が本線。
また、AstroBoxとは別ですが、放置してるRapiroをホームセキュリティ系のデバイスに特化させるとか、VRカメラ付きラジコンカーとかもいいかもしれない。
関連記事
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~前編:基本~
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~中編:Webカメラ~
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~後編:LED自動照明~
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~前編:基本~
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~中編:Webカメラ~
3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~後編:LED自動照明~
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿
ご来訪者様の判別のため、
匿名希望の方もコメントの記入者欄に「名前/URL」 を選択し、
テキトーなペンネームを入れてくださいm(_ _)m
※ URLは不要。書いていただいてもOK。