OctoPi紹介編
OctoPi導入編
OctoPi使い方編
…とご紹介してきましたが、今回は我が家仕様のカスタマイズについて紹介します。
使っている機種
以前紹介したように、私は3台の3Dプリンタを所有しています。
このうち、ALUNARのM508という機種のみをOctoPiに接続して使っています。
カスタマイズ
①タイムラプス用カメラをベッドに固定
OctoPiを使うと簡単にプリントの様子のタイムラプス撮影ができます。
撮影用にRaspberryPi用のカメラを取り付けていますが、この機種はY軸方向にベッドが動きながら造形していきます。
普通にカメラを三脚で立てるみたいなことをすると、プリント物の位置が動きまくってみていられない動画になります。
Z軸を持ち上げたときに撮影するように設定もできますが、Z軸方向の高さの小さいものだと短い動画にしかできません。
そこで、移動するテーブル自体にカメラを取り付けることで、安定して撮影できるように改良しました。
カメラのフレキケーブルはだいぶ長いやつに交換しています。
もちろんこのアームもこの3Dプリンタで作製しました。
(色がちぐはぐなのはこの形に落ち着くまで形が転々としてきたからです…。)
②OctoPi起動スイッチ・シャットダウンスイッチなど追加
OctoPiはRaspberryPiを使用しているので、言うまでもなく「電源ブチ切り」は厳禁です。
ブラウザ上に電源を切る、再起動するといったメニューがあるので通常それを使用します。
…が、そこはせっかくIO端子が出ていてプログラムでいろいろできるRaspberryPi。
使いやすいかなと思って起動・シャットダウンなどの物理スイッチと状態表示用のLEDをつけてみました。
押しボタンスイッチの役割は、
- 赤:シャットダウン(約15秒長押し)
- 黄:再起動(約15秒長押し)
- 緑:起動
- 白:LEDランプON/OFF(2秒長押しでON/OFF切り替え)
(3DプリンタのフレームにテープLEDを貼っていますが、暗いので今は使ってません…)
LEDの役割は、
- 赤:正常に動作していれば0.5秒ON/0.5秒OFFで点滅する
(フリーズすると点滅が止まる) - 青:OctoPi動作中
- 黄:SDカードアクセス中
- 緑:電源5Vの供給表示
として割り振っています。
動作させるpythonプログラムはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #!usr/bin/env python # -*- coding: utf-8 -*- import threading import os import commands import RPi.GPIO as GPIO import time btnGpioRB = 19 btnGpioSD = 26 btnGpioLed = 6 ledGpioR = 5 ledGpioB = 11 ledGpioL = 10 motorGpio = 23 class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): while 1: GPIO.output(ledGpioR , True) time.sleep(0.5) GPIO.output(ledGpioR , False) time.sleep(0.5) GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(btnGpioRB,GPIO.IN) #set pin 27 to input : reboot sw GPIO.setup(btnGpioSD,GPIO.IN) #set pin 22 to input : shutdown sw GPIO.setup(btnGpioLed,GPIO.IN) GPIO.setup(ledGpioR,GPIO.OUT) GPIO.setup(ledGpioB,GPIO.OUT) GPIO.setup(ledGpioL,GPIO.OUT) GPIO.setup(motorGpio,GPIO.OUT) def main(): my_thread = MyThread() my_thread.setDaemon(True) my_thread.start() GPIO.output(ledGpioB , True) i2=0 i3=0 i4=0 LedLight=0 Duty=100 coreTemp = 0 #Fan 100% 1 sec. dcMotor = GPIO.PWM(motorGpio,50) dcMotor.start(Duty) time.sleep(1) while 1: #Reboot if GPIO.input(btnGpioRB): i2 = 0 else: i2 += 1 if i2 > 15: GPIO.output(ledGpioB ,False) print "OctoPi Reboot Now!" os.system("sudo reboot") i2 = 0 else: pass #Shutdown if GPIO.input(btnGpioSD): i3 = 0 else: i3 += 1 if i3 > 15: GPIO.output(ledGpioB , False) print "OctoPi ShutDown Now!" os.system("sudo shutdown -h now") i3 = 0 else: pass #LED Light if GPIO.input(btnGpioLed): i4 = 0 else: i4 += 1 if i4 > 2: LedLight = not(LedLight) GPIO.output(ledGpioL , LedLight) if LedLight: print "LED ON!" else: print "LED OFF!" i4 = 0 else: pass #Fan Control temp = 0 f = open("/sys/class/thermal/thermal_zone0/temp", "r") for t in f: temp=t[:2] + "." + t[2:5] f.close() coreTemp = float(temp) print coreTemp if coreTemp < 30.0: Duty = 0 elif coreTemp < 40.0: Duty = 50 elif coreTemp < 50.0: Duty = 75 else: Duty = 100 dcMotor.ChangeDutyCycle(Duty) print Duty time.sleep(0.5) main() |
OctoPiが起動した後にこのGpioControl.pyが自動で起動するように設定しておきました。
現在はまだ使用していませんが、CPU温度によって冷却ファンを制御するプログラムも折り込み済みです。
各スイッチはそれぞれ10kΩでVCCにプルアップして押しボタンスイッチでGNDに落とし、
各LEDは保護抵抗を入れてそれぞれのGPIOをLEDにつないでいるだけなので回路図は省略します。
あと、「緑スイッチで起動」という部分はこのpythonプログラムには入っていません。
「GPIO3ピンをGNDに落とすと起動する」というRaspberryPiの仕組みを活用して、単に押しボタンスイッチでGNDに落としているだけです。
また、OctoPiに限らず、通常のRaspberryPiで使用する際にもこうしたスイッチやLEDを実装しておくと便利かもしれませんね。
いかがだったでしょうか。
OctoPiのカスタマイズについて、解説してきました。
もちろん、これらができるカスタマイズのすべてではありません。
そもそもWiFiやネットワーク経由で使用できる3Dプリンタというのもありますが、RaspberryPiを使用しているからこそこうしたカスタマイズができ、自分が使いたい機能を実装できる、というのはOctoPiを使う強みかなと思います。
コメント