2016年10月29日土曜日

Marlin エクストルーダの設定

#defain DEFAULT_AXIS_STEPS_PER_UNITの設定の話。

#define DEFAULT_AXIS_STEPS_PER_UNIT {X軸,Y軸,Z軸,Ex(エクストルーダ)}

どっかから拾ってきた計算式
Steps per Unit (Extruder) = Motor Steps per Revolution * Extruder Gear Ratio / (Pinch Wheel Diameter * Pi)
ユニットあたりのステップ(押出機)=モーターステップ革命あたり*押出機のギヤ比/(ピンチ車輪径*π)

解りづらい・・・なんやモーターステップ革命て・・・・
なので、比の計算で算出する。(A:B =n:m は Am=Bn)

まず、上記Ex(エクストルーダ)部分を100にしてボードに書き込む。
コントローラからエクストルーダを100mm設定で移動させる。
フィラメントが実際に移動した距離を測る。
以下の式に当てはめる。

始めにMarlin側に書いた値:B(書き込みたい値) = 実際の移動量:コントローラからの射出距離

うちの場合の実際の移動量は33.55mmだったので
100:B = 33.55:100 は 10000 = B*33.55 となり
B = 10000 / 33.5 = 298.062593145 Exに代入する。

2016年10月11日火曜日

特に何も無いんですが

夏場はどうしても暑くて、だるくて3Dプリンタやら触るのすらしませんでした。
よって書く事も無いので、ここも放置状態・・・
そろそろ再始動するかな。

2016年2月12日金曜日

Raspberry pi2とIGZO 7インチパネルの不具合?について

立て続けにメモ。
raspi2をリスタートさせるとIGZOパネルを認識しなくなる。電源を完全に落としてから起動させるとちゃんと映る。

tvservice -o とやってディスプレイを一度落としてから shutdown -r now をすると問題なく映る。

ネットを巡回してみたところ誰もこの話題をしていないので、ウチだけの問題かもしれない・・・(´・ω・`)

仕方がないので、デスクトップにrestart.shちゅーのを作って、これを使って再起動させる。

restart.sh
#!/bin/sh
tvservice -o
shutdown -r now

確かずいぶん前のRaspbianにはシャットダウンのアイコンがデスクトップに置いてあったので、似たようなことしてたんかな?

RaspberryPi2 Bluetoothの設定

忘れないうちにメモ。
bluetoothの設定をしようとbluez-utilsをapt-getしたがインストールできなかった。
以下の方法でペアリングできた。

$ sudo apt-get install bluetooth blueman

でとりあえずbluetoothまわりをインストールしておく。
menu>Preferences>Bluetooth Managerを一応開いて。bluetoothの設定をしてみる。
認証コケる場合は以下。

https://wiki.archlinuxjp.org/index.php/Bluetooth#Bluetoothctlにある、「CLIによる設定」の項目通りにやったら接続できた。

リスタートしてデスクトップが開くと何やらダイアログが出るのでよく読んでYesの隣の「常に接続(意訳)」を押す。

これでOK。

2016年2月11日木曜日

raspberrypi2BとIGZO7インチパネルの一体型PCみたいなの作った

超久々ですが、わたしのMendelMaxちゃんは今日も元気です!

今話題?のIGZO7インチパネルを購入しました。
IGZOパネルはごっついきれいなのですが、フレキケーブルがごっつい華奢です。
ごちゃごちゃいぢりまわしてると、これすぐ壊れそうですね。

 ということで、さっさとパネルのフレームを作らないと悲しいことになりそうなので、raspi2と合体させて3Dprinterでミニ一体型PCを構築しました。 カメラの電池なくなっちゃったので背面だけうp
まぁただフレームだけ作って、VESAの75mmで背面を固定できるようにしただけですw

ラズパイのケース自体はこちらさまhttp://www.thingiverse.com/thing:922740のVESAマウントできるものを使わせていただきました。
このケース、ノズル径0.5mmで最適化されているようで余裕があってしっかりしています。おすすめです。 

パネルフレーム自体をすっかすかに作ってあるのは、なんかフレキケーブルの辺りが熱くなるので通気良くするためです。あとフィラメントの削減。エコだろ~?

今のところ、100均で買った吸盤付きスタンドを分解して組み立てていますが、追々全部3Dプリンタで射出する予定です。なんかかっちょわるいw

 後ろ側のビームつーんでしょうか?梁の部分が強すぎて液晶自体がたわんでしまったので、これはβ版ということでまた作り直しします。

 ということで、とりあえずこんなところで。

2015年2月18日水曜日

pi4j

raspberrypiのGPIOをJAVAでいぢくれる!!!
だがしかし、英語苦手なんですわ・・・
ということで、PI4J仕様の翻訳をグーグル先生にご依頼してみた。
http://pi4j.com/usage.html

インポートPi4Jパッケージ

Pi4Jを実装するには、プロジェクトのクラスにPi4Jパッケージの数を含める必要があります。 以下のリストは、あなたが必要があるだろうPi4J輸入の大半が含まれています。 おそらくあなたは、未使用のインポートを削除することができ、あなたのプロジェクトでこれらの輸入のすべてを必要としません。
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPin;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinDirection;
import com.pi4j.io.gpio.PinMode;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.trigger.GpioCallbackTrigger;
import com.pi4j.io.gpio.trigger.GpioPulseStateTrigger;
import com.pi4j.io.gpio.trigger.GpioSetStateTrigger;
import com.pi4j.io.gpio.trigger.GpioSyncStateTrigger;
import com.pi4j.io.gpio.event.GpioPinListener;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
import com.pi4j.io.gpio.event.PinEventType;

コントローラのインスタンスを作成します。

Pi4Jと対話する前に、まず新しいのGPIOコントローラのインスタンスを作成する必要があります。 GpioFactoryは GPIOコントローラを作成するためのcreateInstanceメソッドが含まれています。 あなたのプロジェクトは、単一のGPIOコントローラのインスタンスをインスタンス化する必要があり、そのインスタンスは、プロジェクト間で共有されるべきである。
// create gpio controller instance
final GpioController gpio = GpioFactory.getInstance();

ピン番号

プロビジョニングピン

GPIOピンにアクセスするには、まずプロビジョニングピンなければなりません。
プロビジョニングは、あなたがそれを使用する方法に基づいて、ピンを設定します。 自動的にピンをエクスポートすることができプロビジョニング、割り込みベースのイベントのための任意のエッジ検出をその方向を設定し、セットアップ。
次の例は、どのようにプロビジョニング入力端子に示しています。 入力端子は、プログラムが状態変化を監視または必要なときに状態を問い合わせますピンである。 入力ピンはスイッチ等、センサのために使用される
// provision gpio pin #02 as an input pin with its internal pull down resistor enabled
// (configure pin edge to both rising and falling to get notified for HIGH and LOW state changes)
//その内部プルダウン抵抗付きの入力端子として提供GPIOピン#02が有効
//(両方の立ち上がりとハイとローの状態の変化のために通知を受けるために落下する端子のエッジを設定)
GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02,             // PIN NUMBER
                                                             "MyButton",                   // PIN FRIENDLY NAME (optional)
                                                             PinPullResistance.PULL_DOWN); // PIN RESISTANCE (optional)

次の例は、プロビジョニング出力端子に示しています。
出力端子は、プログラムが状態の変化を制御する端子です。 出力ピンを制御するリレーなど、LEDは、トランジスタのために使用される
  //提供GPIOピンは、出力端子#04を確認して、起動時にLOWに設定されている
GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04,   // PIN NUMBER
                                                           "My LED",           // PIN FRIENDLY NAME (optional)
                                                           PinState.LOW);      // PIN STARTUP STATE (optional)
注:計算モジュールでは、使用するRCMPinの代わりにクラスRaspiPinをプロビジョニング方法にピンアドレスを提供するとき。

コントロール端子状態

P14JはGPIOピンに状態を制御または書き込むための便利なメソッドを多数提供しています。
以下の例では、GPIOピンで起動できる制御方法のいくつかを実証する。
        // explicitly set a state on the pin object
        //明示的にピンオブジェクトで状態を設定
       myLed.setState(PinState.HIGH);

        // use convenience wrapper method to set state on the pin object
        //ピンオブジェクトで状態を設定するために便利なラッパーメソッドを使用します
        myLed.low();
        myLed.high();

        // use toggle method to apply inverse state on the pin object
        //ピンオブジェクトを逆の状態を適用する方法トグルを使用
        myLed.toggle();

        // use pulse method to set the pin to the HIGH state for
        // an explicit length of time in milliseconds
        //ハイ状態にピンを設定するためにパルス法を使う
        //ミリ秒単位の時間の長さを明示的
        myLed.pulse(1000);
GPIOピンの制御を実証する完全なサンプルプロジェクトが提供されてここに 。

端子状態を読む

P14JはGPIOピンに現在の状態を問い合わせる/読み取るための便利なメソッドを多数提供しています。
以下の例では、GPIOピン上で呼び出すことができます読み取り方法のいくつかを実証する。
       // get explicit state enumeration for the GPIO pin associated with the button
       // ボタンに関連付けられたGPIOピンのための明示的な状態の列挙を取得
       PinState myButtonState = myButton.getState();

        // use convenience wrapper method to interrogate the button state
        //ボタンの状態を調べるための便利なラッパーメソッドを使用します
        boolean buttonPressed = myButton.isHigh();

ピン変更のリッスン

Pi4JはGPIOピンの割り込みを監視するための実装を提供します。 これは積極的に常にポーリング対端子の状態を監視し、端子状態を問い合わせるためのはるかに効率的な方法である。
あなたはGpioListenerインタフェースを実装するクラスを作成する必要があります。 このインタフェースは、単にピン変更イベントが発生したときにリスナクラスを通知するために使用される単一のメソッドpinStateChanged(GpioPinStateChangeEventイベント)を含む。
次のスニペットは、単純なリスナーの実装を示しています。
public static class GpioUsageExampleListener implements GpioPinListenerDigital {
    @Override
    public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
        // display pin state on console
        System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin() + " = "
                + event.getState());
    }
}
セットアップあなたのリスナーに、あなたがピンとリスナーを登録し、リスナーのimplをインスタンス化する必要があります。
  // GPIOピンリスナーを作成および登録
myButton.addListener(new GpioUsageExampleListener());
GPIOピンの状態の変化のためのリスニングを実証する完全なサンプルプロジェクトが提供されてここに 。

ピンのシャットダウン

Pi4Jは、アプリケーションが終了すると自動的にGPIOピンの状態を設定するための実装を提供します。 これはGPIOは状態がアクティブまたはプログラムがシャットダウンされる場合、一部の活動が従事して残していないピンことを確実にするのに便利です。
あなたは、単に適用されることが望まシャットダウン動作を設定するには、GpioPinインスタンスsetShutdownOptionsメソッドを使用することができます。 次のスニペットは、シンプルなGPIOピンシャットダウン設定の実装を示しています。
 //ピンのシャットダウンの動作を構成します。これらの設定は次のようになります 
 //アプリケーションが終了するときに自動的にピンに印加される
 //アプリケーションがシャットダウンされたときにLEDがOFFになっていることを確認してください
myLed.setShutdownOptions(true, PinState.LOW, PinPullResistance.OFF);
GPIOピンのシャットダウン設定を実証する完全なサンプルプロジェクトが提供されてここに 。

ピントリガー

Pi4Jは別のピンの状態変化に基づいて、GPIOピン上のアクションを実行することができGpioTriggersのシリーズを提供します。 独自のカスタム·トリガーを拡張し、作成できるようにする拡張可能なインターフェイスを提供することもトリガします。 次のスニペットは、単純な ''フォローミー」をトリガーの実装を示しています。
  //入力ピン上のGPIO同期トリガを作成
 //入力状態の変化は、また同じ状態にGPIOピンを制御するLED設定すると
myButton.addTrigger(new GpioSyncStateTrigger(myLed));
GPIOピンのトリガーを実証する完全なサンプルプロジェクトが提供されてここに 。
(この例では、利用可能なすべての提供のトリガーが含まれています。)

シリアル通信

Pi4Jはラズベリーのパイのシリアルポートを使用してデータを送受信する単純化されたAPIを提供します。
次のサンプルプロジェクトは、シリアル通信を実現示しています。
シリアル通信の例 。

システム情報

Pi4Jはラズベリーのパイからシステムとネットワークの情報にアクセスするためのAPIを提供します。
次のプロジェクト例では、システムとネットワークの情報にアクセスを示しています。
システム情報の例 。

2013年5月17日金曜日

MendelMAXほぼ完成

いろいろとぐちゃぐちゃですが・・・
何とか動いた。
フレームの剛性と台形ねじのおかげか、prusaより精度が高いっす。すばらしいっ。
YとZ軸はリニアベアリングではなく、予算の関係上ドライメットフランジブッシュという奴にしたのですが、なんかこれで充分なようです。追々問題が出てきたらリニアベアリングにしようかと。
X軸はクイックフィットキャリッジがリニアベアリング仕様なので、prusaのやつを引っこ抜いて使用しています。
海外ではブロンズブッシュが標準のようですが、日本国内ではソモソモそんなもん売ってないわけで、ここらへんが今回一番悩んだ部品でした。
数年前、木製CNCを組んだ時は安価であるという理由で、オイレス#80フランジブッシュっちゅーのを使用していました。こいつはシャフトとブッシュ間のクリアランスが大きくガタつくんです。
ド素人なのでよくわかりませんが、そもそも使い道が間違っていたのかな〜と。

てなことで、今回はドライメットブッシュというやつにしてみたわけです。こちらの方は比較的クリアランスが小さく、ガタツキが少ないように感じます。んがっ、その分、外郭の組立をしっかりしないとスムーズにシャフトを移動してくれません。
キャリッジだけリニアベアリングなのはそんなのも理由で、立て付けが悪くてドライメットブッシュを無理やりハメ込んでも動かなかったからという・・・orz 恐らくX軸の2つのシャフトが平行になっていないからなんだろうけど、削るのもうめんどくさいwwwそれなりに精度よく動いてるし良いよもうwww

とまあ、こんな感じで動作自体は問題なくクリアしたので、あとはRAMPSのケースとかフィラメントの台とか細かいものをちびちび作っていく段階へとシフトしてゆくのでした。