Monday, May 9, 2011

ありあわせでガワ作成

部屋に転がってた板切れやメモ帳の表紙やネジやらで適当に
オンラインカメラのガワを作成。



もう少し旋廻速度は遅くていいかな。
回転角度をもう少し細かく調整する必要もありそう。


ともかくこれでカメラ側の準備は一応終了。
次はWebインタフェースを作れば試作品は完成。

将来的には無線と太陽電池でOpportunityみたいなのを作りたいな。

Sunday, May 8, 2011

コマンドラインでステッピングモータ制御

ここしばらくモータをいじっていたのは、遠隔のライブカメラを動かしたいという理由だったので、
ひとまずコンソールからモータを動かせるようなプログラムを作ってみた。


int pin[4] = {8,9,10,11};
int incomingByte = 0;
int STEPWAIT = 50;

void setup(){
  Serial.begin(9600);
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  //入力があったら対応
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    switch(incomingByte){
      case 'r':
        turnRight(10);
        break;
      case 'l':
        turnLeft(10);
        break;
    }
  }
  delay(100);
}
/**
  右回転
*/
void turnRight(int count){
  for(int i=0; i< count;i++){
    for(int j=0;j<4;j++){
      int pre = j-1;
      int next = j+1;
      if(pre < 0){
        pre = 3;
      }
      if(next > 3){
        next = 0;
      }
      digitalWrite(pin[pre], LOW);
      digitalWrite(pin[j], HIGH);
      digitalWrite(pin[next], HIGH);
      delay(STEPWAIT);
    }   
  }
  pinOff();
}
/**
  左回転
*/
void turnLeft(int count){
  for(int i=0; i < count;i++){
    for(int j=3;j>=0;j--){
      int pre = j+1;
      int next = j-1;
      if(pre > 3){
        pre = 0;
      }
      if(next < 0){
        next = 3;
      }
      digitalWrite(pin[pre], LOW);
      digitalWrite(pin[j], HIGH);
      digitalWrite(pin[next], HIGH);
      delay(STEPWAIT);
    }   
  }
  pinOff();
}
/**
  オフ
*/
void pinOff(){
  for(int i=0;i<4;i++){
    digitalWrite(pin[i], LOW);
  }
}
あとはrubyのruby-serialportあたりを利用してコマンドを送ってもいいし、もっと単純にコマンドラインから $ echo llrl > /dev/ttyUSB1 こんな感じのコマンドを送るだけでも動作する。

あとは電子の付かない純粋な工作と、Webから操作できるように適当なページとCGIの作成で、
まあそれはどうとでもできるでしょ。

Saturday, May 7, 2011

SICPよんでみる 3.2.4

計算機プログラムの構造と解釈
内部定義の評価について。



Thursday, May 5, 2011

Arduinoでステッピングモータ回してみる

モータは同じくSPG20-332。
以前買って放置していたArduinoで、ものすごく適当な回路を組んでみた。


で、コードはこんな感じ。

/* 適当ステッピングモータ */
int pin[4] = {10,11,12,13};

void setup(){
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  for(int i=0;i<4;i++){
    digitalWrite(pin[i], HIGH);
    delay(20);
    digitalWrite(pin[i], LOW);
    delay(20);
  }
}

…自分で作っといてなんだけど、まさかこれで動くとは思わなかった。


さすがにパワーが足りない気もするけど、ちょっと何かを動かす程度ならこれでいいかも。
あー、パワーを増すなら2層励磁という手もあるのか。
というわけでコードを書き換え。
/* 適当ステッピングモータ 2相励磁 */
int pin[4] = {10,11,12,13};

void setup(){
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  for(int i=0;i<4;i++){
    int pre = i-1;
    int next = i+1;
    if(pre < 0){
      pre = 3;
    }
    if(next > 3){
      next = 0;
    }
    digitalWrite(pin[pre], LOW);
    digitalWrite(pin[i], HIGH);
    digitalWrite(pin[next], HIGH);
    delay(20);
  }
}
この程度のパワーがあれば大体の用は足りるような気がする。
楽だからありがたいけど、何の苦労もないからいまいち達成感が無い。

Tuesday, May 3, 2011

ステッピングモータを回してみる

ちょっと電子工作の練習にステッピングモータを回すことにした。
使うのはユニポーラステッピングモータSPG20-332。
これを単3電池4本で駆動してみた。
練習なので手作業のスイッチ駆動。
シートによると1ステップで0.75°動くらしいけど、そんなの見てもよくわからないので目立つように付箋をくっつけた。
実際の動きはこんな感じ。
…あんまり面白くないけど、まあ動作確認だから。
マイコンでいじるなら四本のピンから順番に信号送ればいいのかな?
まだまだ知らなきゃいけないことが多いなぁ。

参考にしたのはこの辺

Sunday, April 24, 2011

SICPよんでみる 3.2.3

計算機プログラムの構造と解釈。
状態変数を持つオブジェクトの話。





Friday, April 15, 2011

ASUS EP121に野良ドライバ導入

(2011.05.14追記:公式のペンドライバが公開されています。これからペンドライバを導入する人はそちらを入れた方が安全です)


SICPまんがを描いている途中でいきなりtx2505のペン入力が壊れたので、慌ててEP121をセットアップ。
そのままでも一応コミスタは動くのだけど、ペンが微妙に振動する感じだったり、位置調整がうまくいかなかったりと全体的に今ひとつ使いにくい。

というわけでwacomの野良ドライバを導入する。
http://forum.tabletpcreview.com/ep121-slate/40666-wacom-enhanced-driver-penable-device.html

・上の途中にあるリンクからUnofficialEnhancedPen.zipをダウンロードして解凍。
・デバイスマネージャのヒューマンインターフェースデバイスにあるWacom Penのドライバを削除して再起動。
・再起動すると自動的にドライバがインストールされるけどそれは問題無し。
・もういちどデバイスマネージャのヒューマンインターフェースデバイスを見ると、一番下にUSBデバイスが増えているので、ドライバの更新を選んで先ほど解凍したフォルダの下のhidfilterを指定。
・解凍フォルダのISD_DualTouch_702-18_webを開いてsetup.exeを実行。
・コントロールパネルの「ハードウェアとサウンド」の下に「ペンタブレットのプロパティ」が増えているので、使いやすいように設定やキャリブレーション。

まだあまり使っていないけれど、ペンがかなり改善した気がする。
性能はtx2505よりかなり上だし、なんといってもはるかに静か!
しばらく使い込んでみないとね。

あまり関係ないけどEP121は割とスピーカがいい感じ。