忍者ブログ

明日の設計図

たまにロボットを考えるブログ・・・。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

mbed備忘録4:SDカードとはこれいかにメモ

3Dプリンタがたのしかったもんで、長いことmbedを放置していました。
メカの方が性に合っているんでしょう。

さて、これまでにmbedではprintf、mpu-6050の出力値の確認をやってきました。

注しあたっての目的は:
・角度を得る
・角度の精度
・角度の遅れ

もっと先の話としては、ロボット内で姿勢角度フィードバックをすることにあります。

mpu-6050の出力値から算定します。

算定には出力値を時系列で得る必要があり、かつ遅れや、ロボットへの実装を考慮するには数分から数十分の値を得たいです。

その後表計算ソフトなりなんなりで、角度を算定してみるなり、フィルタを調整するなりということがしたいとおもってます。



なので


たくさんのデータを保存しなければなりません。

そこでSDカードに保存という流れです。

いくつかのサイト様を参考にしました。


・mbedで初めてのマイコン開発 メモリ・カードを使ったデータの読み書き<1/3>
http://www.eleki-jack.com/arm/2010/12/mbed-5.html
使うライブラリ、関数を簡単に網羅的に紹介してます。

・ARM SDカード操作
http://akikanlab.blog.fc2.com/blog-entry-54.html
SDカードスロットは秋月でこちらと同様のものを使用しました。

もっとも簡単にmbedでSDカードにR/WするにはSDFileSystem_HelloWorldのプログラムをDLです。


こういうfopenの記述って(fopenに限らず、boolの使い方とかも)、普通にサンプルに使われてますけどよく考えられていて、感銘を受けます。自分で思いつけません。
----
    // ファイルを操作する場合は、ファイル・ポインタの宣言をする。
    FILE *fp;
    if ( (fp = fopen("/sd/mpu6050.txt","a")) == NULL ) {
        printf("Open Failed. \n") ;
        return -1;
    }
----

ちなみに、参考がてら出力結果を以下に:
系列1から
加速度x,y,z、角速度x,y,z、角速度のニュートラル値のとの差を積分x,y,z
の9要素です。
スケールは大体何倍かしています。
また重ならないように足し算して上方向に平行移動しています。
横軸はなんだか忘れました・・・時間じゃなくて出力回数だったような・・・。
単純に積分するだけでも角度っぽいものになっていますね。


といってSDカードに入れることもできました。
しかし、これで積分が上手くてきているか確認できますか?
これは手で動かしただけです。
角度値がどんなふうになっていれば、確からしい値と言えますか?

というわけで、次回はサーボモータで決まった角度だけ動かしたときに測定してみます。

拍手[0回]

PR

3軸トライポッドの製作(atan2備忘録)

アパート住まいを始めての初の機体です。

テーマはパ○-ウォーカーのパクリの3軸です。(大学の研究室では同期が直動3軸で作っていました)
パラではないので名前とはつながりを感じられません。
でも、ツインフレームというアイデアの範疇ではあると思います。

昔のロボットおもちゃにはコの字型の足裏で歩くというものがありましたがアレの仲間かもしれません。



結構すっきりまとまったと思っていてですね。(そりゃサーボ3つしかないし)


回路とバッテリもこの度新たに製作&購入。
とりおんの受信機用バッテリです。小さい奴ようにはこれが好きです。
ムラタのDCDCの出力で回路もサーボも動かしてます。(サーボの定格4.8Vなので


なんか秋月で売ってたアナログスティックをワイヤードコントローラにした。


すべてのフレームをDMM3Dプリントサービスにお願い。
膝部は切削なら設計できない感じのものになってます。
足のリンクはアイスの棒をつなぐ板と一体で造形してます。

さて、
サーボはHS-45HB、ハイテックの小さい奴です。8gで1.0kgcmという代物。
ピッチ間40ありますがまーまー。

動きはこんなものです。

割といい感じです。
歩幅とか旋回角度とかはアナログ値を読み取って、逆運動学を計算させてます。
ひし形になる軌道の頂点しか計算してませんけども・・・
逆運動学後の角度を速度0で3次補間してます。(ぷるぷるしてますけど




拍手[0回]

mbed備忘録3:データ取得動作時のmbedのフリーズ?

引き続き、mbedとmpu-6050のコンビと戯れています。

今回は
連続してmpu6050からデータ取得およびターミナル出力を繰り返していると一定時間経過して止まってしまう問題に取り組みました。
一応の解決をしました。

■実験向けにマイコンとセンサを固定

とりあえず箱型にして、90度ずつの姿勢をとれるようにした図。

■問題の起きている状況
mpu-6050_testのプロジェクトを展開して実験を進めています。

whileループ内で
----
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
----

----
pc.printf("t %d,ax %.3f;ay %.3f;az %.3f;gx %.3f;gy %.3f;gz%.3f,\n\r"
        ,TimeMs,(float)(ax)/16384,(float)(ay)/16384,(float)(az)/16384
        ,(float)(gx)/131,(float)(gy)/131,(float)(gz)/131);
----
をただただ回すだけです。

これをやると、1130回出力すると止まります。
何が止まっているのか分かりません。PCとの通信が途切れているかもしれません。
しかし、getMotion6を2文重ねると565回で止まります。

つまり、mpu6050との通信の回数に限界があるような気がします。
よくあるパターンとして、何かのカウンタとかがオーバーフローしてしまうとかが考えられます。
ハードウェア的な問題であれば毎回同じ回数で止まるっていうのは考えにくいです。

■問題のあるところ
getMotion6を実行することに問題があるのでそれの中身を、mpu6050.cpp→i2cdev.cppという様に順を追って確認します。
そこでなにか回数を重ねたら変化しそうなものは無いかを探ります。

mpu6050.cpp内では
----
void MPU6050::getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz)
{
    i2Cdev.readBytesM6_2(devAddr, MPU6050_RA_ACCEL_XOUT_H, 14, buffer);
    *ax = (((int16_t)buffer[0]) << 8) | buffer[1];
    *ay = (((int16_t)buffer[2]) << 8) | buffer[3];
    *az = (((int16_t)buffer[4]) << 8) | buffer[5];
    *gx = (((int16_t)buffer[8]) << 8) | buffer[9];
    *gy = (((int16_t)buffer[10]) << 8) | buffer[11];
    *gz = (((int16_t)buffer[12]) << 8) | buffer[13];
}
----
としか書かれていません。
i2cdev.cppでは
----
int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout)
{
    char command[1];
    command[0] = regAddr;
    char *redData = (char*)malloc(length);
    i2c.write(devAddr<<1, command, 1, true);
    i2c.read(devAddr<<1, redData, length);
    for(int i =0; i < length; i++) {
        data[i] = redData[i];
    }
    return length;
}
----
と書かれています。

グローバル変数とかは利用されていません。

ここで一番臭いのはmallocです。
動的なメモリなんとかだったと思いますが(プログラムとかにわかだしわからん。)
あらかじめ決められた数の配列とかではなくて、状況におおじて使うメモリの大きさを変更するためにプログラム内でメモリを確保する関数です。

lengthの大きさを使ってますね。
mpu6050.cppでは14を入れています。

まーつまり、センサとかから帰ってくる値の大きさによって受け取る数を調整しているんだと思われます。

ちなみにmallocは確保したメモリをずっと確保しているので、毎回使うと次々にメモリを使っていきます。(大学3年の時にハマった経験があったので…しっている)
なので確保した奴を要らなくなったら開放してやる必要があります。
そこらへんはmallocでググればわかると思います。

■解決策
にわかな僕はいくつか解決策を考えました。

・getMotion6専用の関数としてredData[14]を書いちゃう
----
int8_t I2Cdev::readBytesM6(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout)
{
    char command[1];
    command[0] = regAddr;
    char redData[14];
    i2c.write(devAddr<<1, command, 1, true);
    i2c.read(devAddr<<1, redData, length);
    for(int i =0; i < length; i++) {
        data[i] = redData[i];
    }
    return length;
}
----

・mallocを使わない
----
int8_t I2Cdev::readBytesM6_(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout)
{
    char command[1];
    command[0] = regAddr;
    char redData[length];
    i2c.write(devAddr<<1, command, 1, true);
    i2c.read(devAddr<<1, redData, length);
    for(int i =0; i < length; i++) {
        data[i] = redData[i];
    }
    return length;
}
----

・freeをつかって開放する
----
int8_t I2Cdev::readBytesM6_2(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout)
{
    char command[1];
    command[0] = regAddr;
    char *redData = (char*)malloc(length);
    i2c.write(devAddr<<1, command, 1, true);
    i2c.read(devAddr<<1, redData, length);
    for(int i =0; i < length; i++) {
        data[i] = redData[i];
    }
    free(redData);
    return length;
}
----

どれもすべて上手くいきました。
ではなぜ、そもそもmallocだったのか・・・わかりません。
重要な何かを見逃しているかもしれませんし、
にわかにわからないようなスマートなやり方があるのかもしれません。
分かる人は教えてください。


■オマケ
タイマー割り込みを使う。
こちらのサイト様をそのまま使わせていただきます(http://www.wsnak.com/wsnakblog/?p=3449)

1秒Lチカを腕時計で確認しました。細かい誤差とかは分かりません。

----
// インターバルタイマ 割込みハンドラ
void isrInterval(void) {
    mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    TimeMs++; 
}
----
TimeMsとかグローバルで宣言して時間をはかるのをいつもやります。
そんなものはそもそも用意されているのだと思いますが・・・。


といって割り込をつかったデータを取ってエクセルで表示してみてフィルタのちょうしとかためす予定だったんですが・・・
explore落ちたのでもうやる気ないです。(よくブログ更新した、おれえらい。)



拍手[2回]

mbed備忘録2:mpu-6050より、加速度、角速度を取得

mpu-6050が結構な話題になってるのに、全然遊べてなかったのです。
それのついででmbedを始めたといっても過言ではないのです。

Amazonでたたき売りのmpu-6050をかって、mbedとつなぎます。
今回必要だったハードは、つなぐ線4本です。
こちらのサイト様を参考(http://blog.goo.ne.jp/roboz80/e/593cf982f83fc241ffce380df78382c7)

同様に
プロジェクトをインポートします。(https://mbed.org/users/garfieldsg/code/mpu6050_test/)

既に6軸をprintfするプログラムがmain.cppになっているのでコンパイルしてDLするのみです。

----
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
----

↑の一文にすべてが入っていると思うと、恐ろしいやら、頼もしいやら。
引数の名前の通りの値が得られます。

各軸の向きはmpu-6050上に印刷されてますから確認します。

前回同様TeraTermをつかって見てみます。

----
ax 1272;ay -16384;az 652;gx -127;gy -29;gz65,
ax 1236;ay -16400;az 440;gx -183;gy 53;gz68,
ax 1200;ay -16372;az 684;gx -167;gy 5;gz78,
ax 1244;ay -16424;az 604;gx -230;gy 6;gz57,
ax 1244;ay -16492;az 424;gx -126;gy 63;gz62,
ax 1292;ay -16324;az 516;gx -207;gy -50;gz45,
ax 1220;ay -16372;az 328;gx -153;gy 66;gz60,
ax 1188;ay -16440;az 540;gx -229;gy -12;gz35,
ax 1236;ay -16352;az 516;gx -114;gy 13;gz105,
ax 1280;ay -16388;az 456;gx -267;gy 44;gz21,
ax 1204;ay -16456;az 480;gx -135;gy 54;gz66,
ax 1212;ay -16332;az 540;gx -233;gy -6;gz19,
ax 1140;ay -16364;az 580;gx -134;gy 64;gz75,
ax 1132;ay -16312;az 692;gx -219;gy 17;gz59,
ax 1120;ay -16364;az 616;gx -147;gy -29;gz69,
ax 1168;ay -16292;az 492;gx -194;gy -20;gz64,
ax 1296;ay -16428;az 584;gx -174;gy 80;gz77,
ax 1196;ay -16384;az 460;gx -188;gy -24;gz47,
ax 1208;ay -16340;az 680;gx -200;gy 80;gz70,
ax 1216;ay -16300;az 600;gx -187;gy 2;gz70,
ax 1216;ay -16312;az 536;gx -244;gy 46;gz33,
ax 1228;ay -16376;az 428;gx -158;gy -15;gz63,
ax 1204;ay -16420;az 532;gx -199;gy 43;gz53,
ax 1264;ay -16380;az 472;gx -208;gy 16;gz16,
ax 1268;ay -16428;az 500;gx -196;gy 0;gz65,
ax 1224;ay -16456;az 544;gx -182;gy 55;gz43,
ax 1276;ay -16304;az 696;gx -183;gy -57;gz70,
----
↑の様に出力が見られます。(ax、ayとかは前述にプログラムに書きくわえています。)

さてこれの単位換算が必要です。

mpu6050.cppなるファイルに各換算係数があります。
しかし、mpu-6050のリビジョンによって異なるようです。
私の場合は異なっていました。

また、スケールを4種類から設定できるのでその確認もした方がいいかもしれません。

私の場合(リビジョンとプログラムの組合せ)ではデフォルトで

加速度
+/- 2g →16384 LSB/mg

角速度
+/- 250 degrees/s →131 LSB/deg/s

になっていました。
加速度はmpu6050.cppにコメントされている者とことなり困惑しました。

以下のデータシートを確認してわかりました。(正しくはこれがあっているかどうかではなく、これの通りにしたら正しかったというだけです。)
(http://invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf)

加速度については合っているかどうか重力の向き大きさが明らかなので簡単ですが、角速度の方はというと、人間が素手で等速回転をさせることは不可能なので無理です。
なにか台形加速をさせるような円運動を出力してくれるようなサーボモータを用意して、後日実験しようと思います。

換算後は
----
fa 0,fg 0,ax 0.008;ay -0.990;az 0.198;gx -2.504;gy 0.084;gz0.191,
fa 0,fg 0,ax 0.014;ay -1.008;az 0.210;gx -0.931;gy 0.534;gz0.672,
fa 0,fg 0,ax 0.009;ay -0.989;az 0.192;gx -1.748;gy 0.885;gz0.305,
fa 0,fg 0,ax 0.009;ay -0.999;az 0.215;gx -1.466;gy 0.023;gz0.374,
fa 0,fg 0,ax 0.010;ay -0.994;az 0.198;gx -1.870;gy -0.168;gz0.267,
fa 0,fg 0,ax 0.008;ay -0.992;az 0.204;gx -1.252;gy 0.466;gz0.664,
fa 0,fg 0,ax 0.010;ay -1.002;az 0.213;gx -1.679;gy -0.481;gz0.000,
fa 0,fg 0,ax 0.011;ay -0.998;az 0.203;gx -1.160;gy 0.466;gz0.573,
fa 0,fg 0,ax 0.011;ay -0.999;az 0.204;gx -1.481;gy -0.023;gz0.191,
fa 0,fg 0,ax 0.006;ay -0.992;az 0.209;gx -1.580;gy -0.008;gz0.298,
fa 0,fg 0,ax 0.005;ay -0.998;az 0.206;gx -1.214;gy 0.198;gz0.359,
fa 0,fg 0,ax 0.005;ay -0.996;az 0.199;gx -1.504;gy 0.137;gz0.137,
fa 0,fg 0,ax 0.009;ay -0.998;az 0.206;gx -1.260;gy -0.145;gz0.313,
fa 0,fg 0,ax 0.008;ay -0.997;az 0.211;gx -1.344;gy 0.275;gz0.519,
fa 0,fg 0,ax 0.008;ay -0.991;az 0.205;gx -1.473;gy -0.221;gz0.382,
fa 0,fg 0,ax 0.007;ay -0.991;az 0.204;gx -1.725;gy -0.015;gz0.412,
fa 0,fg 0,ax 0.009;ay -0.996;az 0.207;gx -1.443;gy 0.145;gz0.427,
fa 0,fg 0,ax 0.012;ay -1.000;az 0.205;gx -1.420;gy 0.130;gz0.382,
----
上の様な出力がされます。
fa,fgは付け加えました。これは、加速度角速度のスケールの設定ビットを読みだしたものです。
↓の関数で得ることができます。またget→setとすれば変更できます。どのように変更するかはmpu6050.cppを見ます。

mpu.getFullScaleAccelRange();
mpu.getFullScaleGyroRange();

というわけで、データの読み出しに関しては容易にできました。
というかなんにもしてません。線を4本作っただけです。

今のところ加速度と角速度しか得られていませんので、今後角度を得る手法について攻めていきます。

拍手[2回]

mbed備忘録1:printfするPC画面で表示

社会人のゆとりある開発を始めるため・・・mbedを使っていこうと思います。
なんでmbed?
探すのもゆとりの邪魔になるので、聞いたことあるやつ・・・情報が多い奴・・・ってなるとarduino or mbedという感じだったのでクロックの速いほうを選んだだけです。

で、まずはPC側の準備
mbedつないで見つかったフォルダの中身を開いて、HPからアカウントsignupするだけです。
くわしく説明されているサイト様はたくさんありますから備忘する必要は無いですね。

エディタを開いてhelloWorldというLチカプログラムをコンパイル→.binをmbedに保存

mbedの真ん中にあるスイッチを推します。

チカチカします。

次に、今後の開発の中でデバッグの必要があります。
そのためにTeraTermなどでの表示は必須です。

で、シリアル通信したいので(PcとはUSB接続されている)仮想シリアルポートとして認識させないといけません。
そのソフトは
http://mbed.org/handbook/Windows-serial-configuration
にあります。DLしてインストールします。
mbedをPCにつないだままやります。
おわったらデバイスマネージャでcomポートを確認しておきます。

<ポート>
--COMxx
--COMxx


--mbed Serial Port(COMxx)
って感じでok!
参考サイト(http://www.wsnak.com/wsnakblog/?p=3502)
参考サイト(http://d.hatena.ne.jp/nakamura001/20101129/1291053275)

その後プログラムを書きます。
(このエディタは全角入力するとバグる、main以外のファイルを開いてみたりすると回復)
----ソース
#include "mbed.h"

DigitalOut myled0(LED1);
DigitalOut myled1(LED2);
DigitalOut myled2(LED3);
DigitalOut myled3(LED4);


int main() {
    int a=0;
    while(1) {
        myled0 = a&0x01;
        myled1 = (a&0x02)>>1;
        myled2 = (a&0x04)>>2;
        myled3 = (a&0x08)>>3;
        wait(0.2);
        if(++a==16)a=0;
        printf("a = %5d\n\r",a);
    }
}
----
LEDがmbedに4つついてますので、2進数っぽくちかちかするプログラムで
4bit=16まで数えます。
今何番目を数えているかを表示するプログラム。

結果:

なんかTV見えてるけどまー仕方ない。
画面上に表示されて、LEDもついてカンペキ。

拍手[0回]

ABSパイプとヒートガンとイレクターとスペーシア

やっはろー

棚を作りたいと思ったので、ホームセンターに行きました。
するとイレクターってのがうっててワクワクしてきました。
Φ27.7の鉄パイプをジョイントでつなげていろんなものをつくろって代物です。
http://www.diy-life.net/
意外とパイプは安いんです。
ジョイントがいろいろあってですね。
「プラスチック接着剤してね」と
「メタルジョイント同士でパイプをネジクランプしてね」
って言うのがあります。

それで、イレクターの兄弟にスペーシアってのがいます。
http://www.spacio.co.jp/
仲間です。
世間一般にはそれぞれ代替可能なものです。
↑確認してません。

しかし、鉄パイプこわいので樹脂パイプがいいなーと思います。
さてΦ27.7ぐらいでちょうどいい樹脂パイプあるかなー
ありました。
モノタロウです。http://www.monotaro.com/p/4035/7231/
うん?これだけ5日出荷?
売れてる・・・。

長さは1めーたしかありませんが、ABSパイプなら加工も容易です。
軽いし、そんなに高くもない。(そりゃ鉄にくらべりゃ高い)

でものたろうで買うべって思ったんです。
しかし、Φ27.7とΦ27です。
接着剤とかネジでぎゅーっとするって言ってるんですから、外径が意外と厳しいかもしれないです。

そんなわけでレッツトライ。

ABSパイプとメタルジョイントの組

ふむふむ。わりといける。
人間がひっぱっても抜けないくらいにはなりました。


それ以外のいろいろ
①白いフジツボ見たいなやつがユニプラジョイントと言って、スペーシアのHPみてください。
②グレーの回転継手の奴はイレクターの樹脂の奴です。
③写真中央の白い奴は棚板取り付け用らしいです。

①はゆるゆるです。
③もゆるゆるです。
②の軸上に対偶がある方はゆるゆるです。

すべてのパーツは基本的に外径によるので、なんかで径を増せばいいですね。

ところでABSなので熱で加工しやすいと思われますので、ヒートガンも用意しました。

5000円以下で手に入ります。(あやしいですね)

とりあえず、芸術作品はできました。

Φ27もあると無理難題です。一本しかパイプを買ってなかったのでいまいち練習できませんでした。
一か所をあっためようとせず、何度かに分けて曲げるべきだったと思っています。

棚を作るのはまだまだ先です。
とりあえず、軽くて小さい奴を作ってみましょう。
では。


拍手[0回]

動かすってなんだろう

今日は久しぶりに車移動じゃなくて
徒歩→電車→徒歩でお出かけしました。

ペリパトス学派ということばが思い出されるぐらいには倫理を勉強していましたので、道を歩いているだけで、風景では無くていろいろ面白いことを考えてしまいます。
今回考えていたのはものを動かす方法です。

この動かすのは人の心とかそういうよくわからないものじゃなくて、例えば机!
どんな家にもある机!いろいろと動かすタイミングあると思います。ぶつかっただけの時もあれば、掃除の時とか模様替えの時とかいろいろあると思います。その時皆さんはどうやって移動しますか?

最近一人暮らしを始めた私のアパートはクッションフロアと言われる非常にデリケートな床なんですけれども。すぐへこんでしまうんです。どのくらいデリケートかといいますと、例えば500mlのペットボトルを立てて置いておきます。そのまま1時間も置いておけばへこみができます。もちろんこのへこみは1時間もすれば元に戻るのですが、小心者の私にはあまり歓迎できるものではありません。

さて、ではそんな床の上に机を置いたらどうなるでしょう?当然へこみます。それに1時間で動かしたりするようなものではありません。対策として、足の下にかんじきの様なものを挟むわけです。圧力を分散させるわけです。これでオッケーです。
これはほとんど動かさないし、掃除の時も動かさなくてもいい場合が多いと思います。ですが引き出しとかそういった本棚ほど大きくないけど、収納する家具というものはありまして、そういったものは動かせた方が良いと考えたのでしょうキャスターというものが付いております。
前置きがだいぶ長くなりましたが、移動する方法に「キャスター」というものがあります。これは「転がり」という現象を使っておりまして、とても効率よくものを移動されます。効率が良いので引き出しが空っぽでも、中身がいっぱい詰まっていても動かすことができます。これはとても素晴らしいことです。もしキャスターがついていなくてそのまま引き出しの下の面が床についていたらどうでしょう?2つ考えられます。1つは滑らせるです。もう1つは持ち上げて下すです。しかし、この2通りの方法では引き出しが空っぽの時と中身がいっぱい詰まっている時でぜんぜんちがうことになります。
もうおわかりだと思いますが、移動する方法は「転がす」「滑らす」「持ち上げて下す」の3種類に大別できるはずです。そして後ろの2つは重さによって大変な度合いが増すということも分かりました。これは重さに掛け算で摩擦力というものが増えて、私が頑張った分のほとんどが移動することではなく床をあっためたり、変形させることになっているからです。ちなみにこの頑張りというのが物理で言う「仕事」そして、頑張った分というのは「仕事量」のことです。
難しい話はこのくらいにして、話を少し戻します。転がす方法は重い引き出しでもできてとても良いわけですが、私のアパートはデリケートなんです。つまりキャスターは動かすのにとても良いことは間違いありませんが床と接触してるところは何処でしょう?タイヤのほんのちょっとの1部分です。実際キャスターのものを置いて、移動すると、キャスターの場所にへこみができます。大抵の引き出しは4つのへこみをこさえてくれます。けれども、このキャスターを取ってみて引き出しの下の平の面をそのままで置いておいて移動するとどうでしょう?さてへこんでいません。

おやおやどうしたことでしょう。変わったのは何か床についている部分が「キャスター」と「平の面」です。おわかりかと思いますが、世界には「圧力」という決まりごとがありまして、これは重さを床に接している面積で割ったものです。同じ重さの引き出し出あった場合「平の面」の方がへこみません。これは面積が大きくなったことで圧力が小さくなったからにほかなりません。

引き出しというものは収納するものなのですから、重くなることは必至。しかも移動する可能性があります。



ここで究極のジレンマ「キャスターがいいけど、へこんでしまう!」という命題ができてしまいました。これはいったいどのように解決したらいいのでしょう?

そろそろラジオの時間なのでこのあたりで…。

拍手[0回]

会社にお勤めしてます。

二十余年暮らした地元を離れ、只今わさびとそばの避暑地にて就職しております。

院生の終わりから、社会人の始まりにかけて慌ただしいものでした。

さて、無限に自由時間だった大学院生が終わりまして定時などという言葉がまかり通る”会社”なるものに籍をおいています。

これまで、親・親戚…を含め、深く生活にかかわる方々は公務員、あるいは公務員崩れだったので会社員という職業がどんな人間のどんな生活を指し示すのかさっぱり知らなかったのです。

そんな第3者視点から会社を見られるのもそう長くは無いと思うので、今のうちから思ったことをまとめておきます。

まず、漠然とイメージしていた"会社"は規格化されたシステムで管理、統制される組織であり一つの観念にまとまるものだと思っていました。仕事の工程は管理され、ドキュメント化され社外の機関に担保されていたり…とか、階級や序列が部門ごとに組み立てられ、InputからOutputまで安定して動作することが補償されていると感じていました。一人の不和があれば自然と誰も心を痛めず、淘汰される。あるいはシステム的な自浄作用が働く、そんな感じだと。社員のモチベーション程度では不安定にならないロバストなシステムだと思ってました。

しかし、実際のところ”個人の頑張り詰め合わせ”みたいなところだということが第1印象です。もちろんドキュメント化もされてましたし、社外の機関の保証されてます。ISOとかですね。ですがそのドキュメントが最適か?と言われればそんなことは無く、常に最適らしいことを選んで"たぶん"みたいな見切りの集合のようです。会社の憲法見たいな文書はあるわけですけども、それを作ったのも会社員、それに従うのも会社員なわけでISOが担保しているのは"憲法を作っている暇があるくらいこの会社は安定している"というぐらいです。
そんなわけで社員のモチベーションが下がれば、著しく生産性は下がるし、すぐに傾いてつぶれるように思えます。本気でやっているのか、そうでないのか…そんなものは強く表に出てしまいます。

改めて、私自身まだまだ子供であると思いました。なぜなら、大人は安定した生活をしている訳です。それが家庭というものです。そしてそれを支えているのが仕事。安定を生みだしている者は当然安定なのだと思っていました。それは大間違いで、大人は安定になるために日々努力し、時には忍耐し安定して見せているんだってことです。

会社人になり、世間の暗いところを新たに見て面食らったガキンチョです。

はてさて、今日はこの位でお休みなさい。







拍手[1回]

モータドライバに向けて7.0歩

こんばんわ

いま0時8分

pnpトランジスタをはじめて使って3ヶ月たちましたか・・・そのくらいです。

さて、何のためにこの年で突然pnpのトランジスタに手を出したかって、モータドライバ作るからですわ。

☆要求仕様
24V単電源
2ch×連続5Aぐらい
pwmは20,30kHzくらい
sh-7125
なるたけ秋月電子で買える部品でつくる

前にもモータドライバつくってて、(前記事参照)なにが今回変わったかと言うと、24Vというところ。

24VだとそのままゲートをたたかせるとVgs±20を超えちゃうので、ナントカする。

☆戦いの結果(エンコーダのつなぐマイコンのピン間違えてるあとプルアップ)


基本的には
マイコン→pwm,cwccw
ロジック→ppnnの4FETへの信号
ゲートドライバ→レベルシフト5-24,レベルシフト24-12or0-12,プッシュプル
モータドライバ→まくそん

をやります。

★ちなみに秋月のスーパーレギュレータ使ってみました。
24V-5Vで1Aです。ほのかに暖かくなります。
シリーズレギュレータにくらべれば、これはよろしい。
高いけども。

★ちなみに、トランジスタは秋月の800mA流せる奴にしてます。
FETをon/offしたときにゲートはものすごい電流を食うので、なるべく流せるものをチョイスしました。


だいたい付けてみて・・・(CNCで削ったデス)

20kHzでモータを回してみたりしてますが、回りはします。
でもFETは結構熱くなります。
原因はよくわかりません。電源器の表示が60mAぐらいのときは大丈夫ですが、200mAぐらいになる程度の負荷でJ334とK2232が熱くなります。どちらかといえばPの方がアッチッチ。

ほんの数ヶ月でしたけど、モータドライバをつくるなんて今年で最後かとおもうので・・・。
もうすこしチャレンジを続けます。

拍手[2回]

ガタガタとCut3DとMeshCAM

CAMを用いてSTLデータからNCコードを生成しCNCフライスで加工するときに思ったことをつらつらと書きます。
CADCAMについて、何か専門的に勉強したことがあったり、何らかの科目で説明を受けたりということは一切ないので、ネーットサーフィンと実際にやってみた!事実をもとに考えてみたことなので、ある意味常識てきなこと、あるいは非常識なことを多分に含んでいるし、内容が他大多数の人と共有できる物なのかどうかということには

全く興味が無い

ですが、自分の備忘録としてまとめたものです。


機材:
miniCNC-HAKU MACH3
エンドミルはミスミの10DロングエンドミルΦ2
切り込み量0,2mm
x-y送り600mm/min
z送り100mm/min
主軸(設定上8000rpm)

CAMソフト:
Cut3D(http://www.originalmind.co.jp/goods/03518)
MeshCAM(http://www.originalmind.co.jp/goods/03516)

アジェンダ
■Cut3Dで部品がガタガタに削れた!
■STLの解像度って何だ?
■解像度を変えて加工してみる!
■MeshCAMってなに?
■切削時間とNCコード生成とやる気

◇そもそも

こんな感じの部品
材質ABS
高さ10mm
150x150ぐらいのサイズ。

与えられている材料
厚み10.8mmの板

やりたい加工
0.8mm表面を削る
2次元パスを削る

◇結論
Cut3Dは微妙。MeshCAMはまーゆるせる。


◇ガタガタ
今回削ったものを右から順に並べます。
右から①②③④⑤の加工とします。

まず①を加工しました。
斜めのところ、Rのところがガタガタです。
は?と思います。
軸がぶれぶれとか、メカ的なバックラッシュとか・・・かな?
と思いました。
ですが、②の時は加工の一部始終を見ていましたがそんな感じはしないし、
実際にメカをオラオラってゆすってみてもバックラッシュはないかな?
少なくともこんなにガタガタは感じないし。
そもそも斜めの面に出てる時点でx-y軸いずれもバックラッシュがあると仮定すると、
他のまっすぐパスのx移動からy移動に変わった時に後ができるハズだし・・・
(これって円が削れないよね…)

ソフトてきな?

はいはい、では加工の流れでソフトが絡む部分を考えます。

3DCAD作る⇒STLで保存⇒CAMソフトで読み込み⇒切削パラメータ入れて⇒NCコード生成
少しネットサーフィンして、STLが有限要素法みたいに3角形にするものだと知った。
つまり?細かい直線がいっぱいで曲線を表すっぽい。

へ?曲線

斜めって直線だし…。
は?は?

じゃあ、NCパスを眺めてみるか
NCviewerなるものをグーグル先生に教えてもらい
つかう。


横の平行ラインは0.8mmの削りです。←まーどーでもいい。
問題は横線とRと斜め線の部分。
よーく見るとガタガタである。

つまりNCコードはガタガタ、メカは正常に動いている!!


敵は何処や?
Cut3Dのパラメータとか?
STLデータの解像度とか?

Cut3Dの設定をなめまわす。
それっぽい設定はなんにもない。

じゃあSTLの解像度的な?

STLの保存の際の設定を見る。

おっと割といろんな設定があった←しらなかった…。

これかも!!

(ぬかよろ。)

で、設定をいろいろ変えてみた。
で上の②③④の加工順に解像度を上げたわけです。

写真をみるとおり、みんなガタガタ、ガタガタの様子が少し筒違いますが・・・
まー、振幅の大きさは変わらないというか・・・

STLの解像度ではなかった!

CADの寸法精度的な

そんなバナナ。(Cut3D以前に2DのCAMでは何べんもやってみて問題なかった経験大アリ)

ではCut3Dの設定or仕様

そこで来たのが、別の3DCAMを使ってみる。
辛辣な後輩から提案されたのはMeshCAM...
説明を読むと製作元が違う

・安い
・仕上げパスの種類が多い
・フリーフォー15日

ふむふむやってみる。

試行錯誤の後同じような部品が作れると思われるパスを生成。
Cut3Dとはチト趣が違う。簡単に言えば
◇Cut3D⇒2種一括パス(0.8までジオメトリの形状オフセット刃径含む、に表面を削る)+(ジオメトリの形状に合わせ一番下まで、0.2ずつ等高パス)

◇MeshCAM⇒2種別パス・・・設定を変えて2度パスを生成する。
1、表面を削る…これが難しい。ジオメトリ形状まではできる、問題は刃径オフセット付けると10.8まで削ろうとする。表面だけじゃなくて溝に手を出し始める。
2、等高パス…これはちょっと難しい。材料設定を10.8にしても、部品が10mmだと野郎は(仕上げパスだし…)と思っているのか10mmから削り始める。

気付いたかもしれないが、オフセット無しの表面削りと、10mmからの等高パスを連続でやると…等高パスはジオメトリ形状の外側をエンドミルが通るわけで・・・一回めの切り込みが10.8ある部品に0.8以上一気に切り込むことになります。
まー樹脂ならいいかもですが、アルミとかはとても無理かと思います。
実際は刃径の7割ぐらいオフセットして表面削りパスを作ることで緩和できますが…緩和しかできません。

俺は気付いた!!

表面削りの時の材料の厚みを0.8しかないことにすればよくね!!
10mmからしかジオメトリが無いので、ジオメトリ形状が選べません…
なので0.8+一回分の切り込み量ぐらいの材料サイズにするのが正解か?

というわけで

写真一番左の綺麗な面の加工が完了しました。
一個目の加工が終わってから、もう一回データ入力して2個目の加工ってなるので手間ですね。


◇この手間を持ってすれば、削れます。一発でやりたい人はガタガタに成るでしょう…。
俺は1発でやりたかったんですが…
今のところムリです。

おわり



拍手[5回]

プロフィール

HN:
Adel
年齢:
34
性別:
男性
誕生日:
1989/09/17
職業:
会社員
趣味:
モチベーション探し
自己紹介:
ロボットつくるのが夢

ブログ内検索

アクセス解析