3Dプリンター「BS01+」にAstroBox v0.9 を導入 ~後編:LED自動照明~

0 件のコメント

今回のテーマは、
  • 3Dプリント中だけ自動的に照明が点灯する仕組みをつくる
3Dプリンター BS01+ をキャビネット内に置いているので、Webカメラをつけても通常は暗すぎてちゃんと撮影できないので照明が欲しい。

単純にUSBのLEDライトをつけるのも全然ありだが、AstroBox は Raspberry Pi ベースで動作しているので、どうせなら、、ということで、今回のテーマをやってみることに。

使ったもの

LEDテープ

「結局USBのLEDライト使うんかーい」と突っ込まれそうだが、そうではなくて、USBコネクタは取り外して使う。

なお、LEDテープ を探すと 12V のものがほとんど。
BS01+ の電源が12Vなので、そこから引っ張ることもできるけど、初心者的には 2桁ボルト が怖いし、配線が増えるのはあまりうれしくない。
なので、5Vで動作するものを探すと、USB用のこれになった。
フレキシブルなタイプのやつと迷ったけど、今回は テープタイプにして、BS01+ に内蔵することを計画。

MOSFET/他

簡単な回路が必要なので部品を購入。
部品/リンク購入先備考
N-Ch MOSFET 2SK2541aitendoGPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。
L型ピンヘッダー1列aitendo3P分利用。 → 2P分利用
L型ピンヘッダー2列aitendo1P分利用。 → 不採用
ピンソケット1列aitendo2+5P分利用。
金属抵抗aitendo10kΩを利用。
超薄型 ユニバーサル基板 Amazonハサミで切れる極薄0.4mm厚。
ジャンパケーブル(メス-メス)10cm Amazon短め10cm。

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 にプルダウンするため。

コード

コードもとりあえず超単純。引数によって、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()を入れていない。
その場合、
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 off
LEDテープの余った切れ端(LED2個分)を使ってテスト成功

ハマった。。
MOSFETの足の並びの認識を間違えててハマった。。
写真左から、Gate - Drain - Source が正解。データシートと逆にみえる気がしなくもなくもないけど。。

基板

試作品1号

部品/リンク購入先備考
N-Ch MOSFET 2SK2541aitendoGPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。
L型ピンヘッダー1列aitendo3P分使用。
L型ピンヘッダー2列aitendo1P分使用。
金属抵抗aitendo10kΩを使用。
超薄型 ユニバーサル基板 Amazonハサミで切れる極薄0.4mm厚。4x4 を使用。
ジャンパケーブル(メス-メス)10cm Amazon短め10cm。作ったやつとRaspberry Pi のGPIO接続用。LEDテープとの接続もこれ。
ユニバーサル基板4x4で結構コンパクトにまとまった。
ピン配列はこんな感じ。
LED +
GPIO
(Gate)
LED -
(Drain)
GND
(Source)
5V

が、、ここからケーブルが5本も伸びるし、設置場所を考えてなかったので、、やり直し!

試作品2号

部品/リンク購入先備考
N-Ch MOSFET 2SK2541aitendoGPIO(3.3V)で利用できる1.5Vの低電圧駆動なもの。
L型ピンヘッダー1列aitendo2P分使用
ピンソケット1列aitendo2+5P分使用。
金属抵抗aitendo10kΩを使用。
超薄型 ユニバーサル基板 Amazonハサミで切れる極薄0.4mm厚。4x5 を使用。
赤黒のシリコンケーブル (AWG24)-20cm弱
2.54mmピッチコネクタ 2Pマルツオンライン
Pi-Hat ふうにGPIOピンにかぶせる形式にし、接続するケーブルを2本に減少。RasPiと一体化して設置場所不要に。
こっちを採用


組み立てとか

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カメラ付きラジコンカーとかもいいかもしれない。


0 件のコメント :

コメントを投稿

ご来訪者様の判別のため、
匿名希望の方もコメントの記入者欄に「名前/URL」 を選択し、
テキトーなペンネームを入れてくださいm(_ _)m
※ URLは不要。書いていただいてもOK。