タッチセンサー代わりにしてみる

FDD をよく見てみたら、センサーっぽいのを発見。基盤をみるとなにやら配線があって。使えるかもと試してみました。

IMG_0148

裏面には基盤があって、なにやら3本線が出てます。

IMG_0149

ブルーをGNDに、黄色と赤のアナログ値を読んでセンサー代わりに使ってみます。

 

コードはこんなのをテストで書きました。

/*
 Junk FDD Stepper Motor Control Sample.
 Analog Censer?
 JunkHack 2015.04.19
 */
 
#include <Stepper.h>
int steps;
int movement = 1400;
int Delay = 200;
int dirPin = 2;
int stepPin = 3;
int a0; // sencer ?
int a1; // sencer ?

void setup() {                
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  digitalWrite(dirPin, LOW);
  digitalWrite(stepPin, LOW);
  steps = 1;
//  Serial.begin(9600);      // debug用
  a0 = analogRead(0);
  a1 = analogRead(1);
}

void loop() {
  if ( a0 > 200 ){ // センサーっぽいのを読み取り
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(Delay);
      digitalWrite(stepPin, LOW); 
      delayMicroseconds(Delay);
      steps += 1;
      
//      Serial.println("A0");
//      Serial.println(a0);

  }

  if ( steps < movement ) {        // 移動量を超えてなければ
      digitalWrite(dirPin, HIGH);
      a0 = analogRead(0);
      a1 = analogRead(1);
  } 
  if ( steps > movement  ) {    // 移動量を超えたら
      digitalWrite(dirPin, LOW);
      a0 = analogRead(0);
      a1 = analogRead(1);
  }

  if ( steps > movement * 2 ) {    // 往復したら
     steps = 1;
  }
}

 

すると、筐体に触るとスイッチ代わりに動作!

 

動画を載せたほうがわかりやすいんですが、普段編集しないので扱いが、、、、勉強しておきます。で、動画つくりました。

こんな感じで、タッチセンサーっぽくなっています。

[youtube https://www.youtube.com/watch?v=CoXw4ywPP0g]

 

このセンサーはなんていうやつなんでしょうかね。ぐぐっても出てこないので、なんという名称のセンサーなのかは不明ですが、スイッチらしきなのは確かで、原理的に静電容量とか見ているんでしょうかね? 手を接近させると、値があがります。タッチセンサーのような原理なんですかね?どなたかご存知の方、通りがかりましたらコメントをよろしくです。

 

とにかく、このモーターと稼動部分はプロッターのどこかに使えそうです。あと2つFDDをばらして3軸作れば、FDDプロッターができそうですね。

 

そう、これをarduino で作りたいんですよ。

[youtube https://www.youtube.com/watch?v=Z0vQIaUZGu4]

FDD2

2つめのFDDをばらしました。

[youtube https://www.youtube.com/watch?v=_BkwbEgs42Y]

今度のは、前のよりばらしにくく、ステップモーターは小さい感じ。

移動幅などは同じで、裏にはやはりセンサーみたいなのがありました。Delayは最大で43くらいじゃないと脱調する感じ。

 

FDDも音階を出せるようで、こんなこともがんばればできるようです。

[youtube https://www.youtube.com/watch?v=c52JQHVVqFM]

ある意味すごいよね。裏に見えるのは、arduino でしょうかね。

 

世界は広いようで、こんなアプローチも。最初の見せ方が期待させます。

[youtube https://www.youtube.com/watch?v=dmoDLyiQYKw]

ということで、3つ目もばらしますかね。当初の目的、プロッターは本当にできるでしょうかね。

FDD3

3つめのFDDもばらして、筐体の余分な部分をカットしました。

IMG_0166

IMG_0167

IMG_0171

IMG_0172

 

NEC製のFDDの鉄板が厚くて苦労しましたが、なんとか3つを切断。カットした歯は、ダイソーで売っているダイヤモンドカッターです。これしか手元になかったんですが、なかなか切れますね。

[youtube https://www.youtube.com/watch?v=5yeAIhoyprQ]

あとは、XYテーブルを作って、Z軸にペンを持たせてやる感じです。

 

XYテーブルは、稼動部分の上に乗せるんですが、フラットな面を作らないとなので、どうしようかなと考え中です。

現場あわせ的な感じで、やってみます。次回に報告!

FDD4

現場合わせで、XYテーブルを作成しましたyo。

IMG_0179

IMG_0180

フラットな面は、5インチベイの目隠し部分が手元にあったのでそれを流用しました。接着は、グルーガンです。それなりの強度もあるようだし、とりあえずこれでいいか的な感じですが。もともとFDDのピックアップ部分なので、乗せるにはそれなりの工夫が必要ですね。

 

次は、Z軸のペンを移動させる縦軸をどうするかです。ここは、ペンを交換したりしたいので、なにか一工夫が必要です。3Dプリンターがあれば、ジョイントの部分を作るのですが、残念ながら無いのでジョイント部分をどうするかをあれこれ思案中。

 

また重要なポイントで、「ボロさをどう演出するか?」です。

 

動画も作りましたので、よかったらどうぞ。

[youtube https://www.youtube.com/watch?v=lAH7oG_1HfU]

だんだんと、プロッターに近づきつつありますね。

 

コードは、こんな感じです。AccelStepper のライブラリを使っています。関数はまだ全部わかっていませんが、おいおい調べてみます。

/*
 Junk FDD Stepper Motor Control Sample.
 xy table moving sample.
 AccelStepper ver 1.47
 JunkHack 2015.04.26
 */

#include <AccelStepper.h>

AccelStepper y_stepper(1, 3, 2); // 1 > two wires. 3 > STEP pin , 2 > DIR pin.
AccelStepper x_stepper(1, 5, 4); // 1 > two wires. 5 > STEP pin , 4 > DIR pin.
int halfRev = 700; // 片道移動幅 ( Step )
int halfdelay = 10;

void setup() {
    y_stepper.setMaxSpeed(3000); // 最大許容速度
    y_stepper.setAcceleration(6000); // 加速
    x_stepper.setMaxSpeed(6000);
    x_stepper.setAcceleration(12000);
}
void loop() {
    if (y_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        y_stepper.moveTo(halfRev);
    }
    if (x_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        x_stepper.moveTo(halfRev);
    }
    y_stepper.run();
    x_stepper.run();
}

FDD5

Z軸用のEasyDriver を半田付け。

退屈な映像ですが、よかったらどうぞ。

[youtube https://www.youtube.com/watch?v=kW4_Ny8mHvA]

この小手、もう30年くらいつかっているやつです。

 

で、Z軸のペンをつける部分を100円均一で探してきました。

IMG_0184

こんなのを探していたんですが、ぴったりです。付け根の金具をはずして、ほっとボンドでくっつけました。

IMG_0182

筐体は、FDDをはずしたPCのジャンク筐体に使用されていたプラスティック製の物です。ほどよくカットして、台を調整すればちょうどいい感じかなと。

台は面積を広げれば、CD-ROMやDVDなんかのレーベル面にも書けるかもです。まぁ、2cm四方なので微妙ですが。

ブリキとかを使わないとボロさが出ないかなぁと思いますが、まぁ装飾はあとで考えることにします。

 

さて、QKしたらカットしてきますかね。

で、カットしました。

IMG_0185

位置関係などはよさそうです。

IMG_0189

CD-ROM も収まるくらいの奥行きが取れそうです。

 

まだ仮なので、横にして動作を確認しました。こんな感じです。

[youtube https://www.youtube.com/watch?v=Sh5Dr_-QU-A]

うーん、ぼろい!

FDD6

さぁ、お休みに突入しましたのでJunkなFDDでプロッターを作る続きの作業をやりましたよ。

まず、筐体を仮組みしていたのを本格的に組み付け作業です。2つ穴をあけてボルト締めした後、いらないプラスティック部分を切り落とし、古いパソコンの筐体の裏側に貼り付けてあった金属板を切り出しました。

IMG_0216

これは、手曲げ加工して筐体に貼り付けて、ボロイ雰囲気を出そうという魂胆です。素材を見るとスリット加工してあり、ほどよく腐食している部分がかっこいいなと、ここを使うことにしました。

昔のPCには、電磁波防止だったのでしょうか? こんなパーツと筐体加工があったとはね。

IMG_0215

で、程よく加工して両面テープで貼り付けました。どうでしょうかボロイ雰囲気でていますかね? えっ?そんな加工しなくても十分ボロイですって? 確かに。

 

あと、ガレージのジャンクを物色していたら、バイクのバッテリーがありました。12Vのやつでもう使えないんだけども、モーターくらい回るかもと思い充電してみることに。

IMG_0222

容量が2.3Aくらいなので1/10くらいのの0.3Aで10時間くらい充電してみまいた。充電前は、4Vくらいあったのでもしかしたら使えるかもと思いましたが、充電後10.34Vくらい。うーん、13Vは超えていないようでだめっぽいかも。

 

いちおう、モーターは回りましたが電圧降下が激しくすぐに6V以下になってしまいます。鉛蓄電池の原理は知りませんが、電気を溜め込む要素が不足しているんでしょうね。これは寿命です。

筐体の一番下に置いて、重しにはなりそうなのでとりあえず作業を続行。最終的には、ソーラーパネルのちっこいのを上に乗せていつでも使えるCD-ROMレーベルプロッターにしようかなという魂胆だったのですが、、、まぁ、おいおい考えるとして。

 

で、ちょっと配線を変えて、コードはこんな感じにしました。AccelStepper でZ軸を追加した形です。Step と DIR のピン配線は前回と若干変えてあります。

 

/*
 Junk FDD Stepper Motor Control Sample.
 xy table moving sample.
 AccelStepper ver 1.47
 JunkHack 2015.04.26
          2015.05.04 Z-axies add
 */

#include <AccelStepper.h>

AccelStepper y_stepper(1, 2, 5); // 1 > two wires. 2 > STEP pin , 5 > DIR pin.
AccelStepper x_stepper(1, 3, 6); // 1 > two wires. 3 > STEP pin , 6 > DIR pin.
AccelStepper z_stepper(1, 4, 7); // 1 > two wires. 4 > STEP pin , 7 > DIR pin.
int halfRev = 700; // 片道移動幅 ( Step )
int halfdelay = 10;

void setup() {
    y_stepper.setMaxSpeed(6000); // 最大許容速度
    y_stepper.setAcceleration(12000); // 加速
    x_stepper.setMaxSpeed(3000);
    x_stepper.setAcceleration(6000);
    z_stepper.setMaxSpeed(3000);
    z_stepper.setAcceleration(12000);
}
void loop() {
    if (y_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        y_stepper.moveTo(halfRev);
    }
    if (x_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        x_stepper.moveTo(halfRev);
    }
    if (z_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        z_stepper.moveTo(halfRev);
    }
    y_stepper.run();
    x_stepper.run();
    z_stepper.run();
}

 

とりあえず、これで3軸が動きました。動画もよかったらどうぞ。

[youtube https://www.youtube.com/watch?v=eTOpfWcYASM]

次なる課題は、G-CODEという座標軸を操作するものを送り込むようにしたいのですが、どうやるのかよくわかりません。ちょっと調べることにします。

※現在、ものすごくはまり中。次号にて報告します。