Pages

2012年6月28日

SPG20-332 + MP4401 その2


Arduinoでステッピングモータ SPG20-332を回すやつの続き。
葉山先生の華麗なるアルミ板とPOM板加工によって上の写真(左)のような状態に。
卓球のピンポン球に絵を描くということでピン球botと命名され、あとを任されました

ボールを回転させる軸とペンの向きを変える軸の2軸なので、少し接続を変更。


pin 4〜7に接続したステッピングモータをボールの軸、pin 8〜11に接続したステッピングモータをペンの軸とする。


ATmega168/328のI/OポートはB、C、Dの3つで、port Bがpin 8〜13、port Cがpin A0〜A5、port Dがpin 0〜7となっている。
ローレベルかつ高速に制御したい時は、これらのポートのコントロールレジスタを直接いじってあげれば良い。→Reference/PortManipulation
(というのも、前回の記事で載せた方式で制御しようとすると励磁する速度の問題で細かい振動が発生するっぽいので)
プログラムはこんな感じで。
#include <Servo.h>
const byte motorPen[]={0x03,0x06,0x0C,0x09}; //PortBの励磁パターン
const byte motorBall[]={0x90,0xC0,0x60,0x30}; //PortDの励磁パターン
Servo servoPen;

void setup(){
  DDRB |=B00001111; //PortB 8,9,10,11
  DDRD |=B11110000; //PortD 4,5,6,7
  servoPen.attach(3);
}

void loop(){
 for(int n=0;n<20;n++){
   servoPen.write(100);
   for(int i=0;i<4;i++){
     PORTB &=0xf0;
     PORTB |= motorPen[i];
     PORTD &=0x0f;
     PORTD |= motorBall[i];
     delay(8);
   }
 }
 for(int n=0;n<20;n++){
   servoPen.write(115);
   for(int i=3;i>=0;i--){
     PORTB &=0xf0;
     PORTB |= motorPen[i];
     PORTD &=0x0f;
     PORTD |= motorBall[i];
     delay(8);
   }
 }
}

DDRB |= B00001111でポートBの下位4ビット(pin 11,10,9,8)を出力に設定。
DDRD |= B11110000でポートDの上位4ビット(pin 7,6,5,4)を出力に設定。
PORTBとPORTDを初期化し、あらかじめ定義しておいたモータの励磁パターンを投げてあげるという仕組み。
サーボはペンの持ち上げに使用。

これで、以下の動画のように動作する。


行き(右から左)はペン先をボール表面に降ろし、帰り(左から右)はペン先を持ち上げています。

次は起動時のゼロ点補正機構と、座標指定で描いてくれるようなプログラムを作っていきます。

2012年6月24日

SPG20-332 + MP4401


Arduinoでステッピングモーター SPG20-332(≒SPG20-1332)を回す。
モータードライバーとしてMP4401を使う。
Fritzingの練習も兼ねて作ってみた接続図。
(同梱されてたステッピングモーターのSVGを弄ってSPG20-S332用にピン配置を変更しています)

Arduino     MP4401  
 pin 10 ----- pin 01
 pin 11 ----- pin 12
 pin 12 ----- pin 05
 pin 13 ----- pin 08

MP4401   SPG20-332
 pin 02 ----- pin 1
 pin 09 ----- pin 6
 pin 11 ----- pin 2
 pin 04 ----- pin 5

MP4401のpin3とpin10をVinに、pin6とpin7をGNDに接続、SPG20-332のpin3とpin4をVinに接続。
今回は2相励磁で回すのでArduinoには7.5VのACアダプタを接続しました。
(7〜9Vくらいの電源なら良いんじゃないかと)

プログラムはこんな感じでいいはず。
int pin[4] = {10,11,12,13};

void forward(int rot){
  for(int i=0;i<rot*120;i++){
    for(int i=0;i<4;i++){
       int prev = i-1;
       int next = i+1;
       if(prev < 0) prev = 3;
       if(next > 3) next = 0;
       digitalWrite(pin[prev], LOW);
       digitalWrite(pin[i], HIGH);
       digitalWrite(pin[next], HIGH);
       delay(2);
     }
   }
}
void reverse(int rot){
  for(int i=0;i<rot*120;i++){
     for(int i=3;i>=0;i--){
       int prev = i+1;
       int next = i-1;
       if(prev > 3) prev = 0;
       if(next < 0) next = 3;
       digitalWrite(pin[prev], LOW);
       digitalWrite(pin[i], HIGH);
       digitalWrite(pin[next], HIGH);
       delay(2);
     }
   }
}

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

void loop(){
  forward(1); // 1回正転
  reverse(1); // 1回逆転
  forward(3); // 3回正転
  reverse(3); // 3回逆転
  forward(5); // 5回正転
  reverse(5); // 5回逆転
}

2相励磁なのでトルクは十分。
ステッピングモーターを2個使ってプロッタとか作ってみたいなぁと思っているところです。

追記:ポートレジスタで制御する方法を書きました → SPG20-332 + MP4401 その2

2012年6月23日

セキュリティさくら#04

6月23日開催の熊本情報セキュリティ勉強会「セキュリティさくら」#04について、参加記録と今後の為のメモ。

本会
・場所は桜の馬場 城彩苑 2F 多目的交流室
→交通センターもしくは市電熊本城前電停から少し歩く必要があるが、県外参加者には熊本城が見えるところを歩いてもらえるので良いと思う。

・相戸さん「やってみよう緊急対策訓練」
→さくら開催史上初の彼女同伴講演。
→企業の情報セキュリティの裏側、実際に発生したとき動けるのか?という点、実話を軸にしたお話、凄く良かったです。聞いて良かった。

・新井さん「来ちゃった…リア充の王を追いかけてクマモンの国まで…(仮)」
→マルウェア解析界の聖書「アナライジング・マルウェア」の著者によるお話。
→各種マルウェア検体サイトの紹介は役立ちそう(contagio、KernelMode.info、OpenMalware.org)

・高倉先生「新しい攻撃手法について(追)」
→前回(#03)から4ヶ月、更に高度な標的型攻撃の現状と対策手法についてのお話。
→「入口も出口も内部も固める」「ルータ、スイッチの設定まで監視」というお話は非常に興味深かったです。

・まっちゃさん「IT勉強会カレンダーについて」
→自動かと思いきや全手動で運営中のIT勉強会カレンダーについての説明のお話。
→閲覧しやすいアプリの紹介や、カレンダーに登録する際の裏話など色々。運営お疲れ様です。

・松村君「セキュリティキャンプの紹介」
→つけ麺おんのじの紹介

・自分「ハードウェアセキュリティ(真)」
→今回は真面目すぎて面白くなかったです。反省中。
プレゼン資料は以下です。


懇親会
・上通を抜けて並木坂のローソンから右に曲がった先にあるGRILL de GYANというお店(前回と同じ)
→今回、60人近い人数にもかかわらず2Fに全員収容出来たのは凄い。
→持ち込みも可能だったので、色々と美味しく頂きました。

総評
勉強会として洗練されてきたイメージ。
ただ、気軽に参加出来る感とのトレードオフであるかもしれないと感じてしまう面もありました。
他県からの参加者にも非常に好評でした。
隣県の勉強会が「利益の出し方」を中心としているなら、さくらは「探求心」を中心としているので良いという意見も。