pusuke0418’s diary

すごく暇なSEのぶろぐ

Arduino nanoとモータドライバTA7291PとIR赤外線障害物回避センサLM393

Arduino nano 3.0互換ボードATMEGA 328 Pを介して、IR赤外線障害物回避センサLM393で物体を検知していなければモータを回し、検知するとモータを止める。上記の他に準備したものは、電池ボックス(単三×2)とタミヤのギヤボックスセット

今回つかっているこのIRセンサは、検知距離の調節までは厳しかった。本体のメータを調節しても、数センチの距離で検知しているか、していないか程度が測定可能(ただし安い。Amazonでも5個550円だった)

物理的な接続とスケッチは下記のとおり。参考サイトも下記の中に記載。検出状態をシリアルモニタに出力させながら実施しているので、コンソール(USBケーブル)はPCにつないだままで実行している。

/*モータドライバ接続
 *https://fabkura.gitbooks.io/arduino-docs/content/chapter17.html 
 * モータドライバ#10 OUT2      --- モータ(+)
 * モータドライバ#9  使用無し   --- 無し
 * モータドライバ#8  出力側電源 --- 電池ボックス(+)
 * モータドライバ#7  電源+    --- 電源5V=PIN5V
 * モータドライバ#6  IN2(信号2) --- digital#2=PIN2
 * モータドライバ#5  IN1(信号1) --- digital#4=PIN4
 * モータドライバ#4  制御電源(速度) --- digital#3(PWM)=PIN3
 * モータドライバ#3  使用無し   --- 無し
 * モータドライバ#2  OUT1       --- モータ(-)
 * モータドライバ#1  GND        --- GND
 * 
 * *電池ボックス(-)                   --- GND
 */

/*モータの動作参考
 * https://www.petitmonte.com/robot/motor_driver_ta7291p.html
 */

/*赤外線センサ接続
 * OUT --- digital#12=PIN12
 * GND --- GND
 * VCC --- 電源5V=PIN5V
 * センサはデジタルで通常"1"を返し、検知時に0を返す
 */

int val = 0;                                      //for Infrared sensor

void setup() {
  pinMode(2,OUTPUT); //IN2
  pinMode(4,OUTPUT); //IN1
  pinMode(12,INPUT); //infrared sensor 
  Serial.begin(9600);
}

void loop() {
  analogWrite(3,255);                    //モーターの回転速度を設定。最大にしている
  
  val = digitalRead(12);                 //赤外線センサの読み取り用
  if (val==1) {                               //センサが何も検出していない
     //モータを回転
  Serial.println(val);                      //シリアルモニタにセンサの状態を出す用  
  digitalWrite(4,HIGH);
  digitalWrite(2,LOW);
  delay(1000);
  } else {                                        //センサが検出した条件
  //ブレーキ
  Serial.println(val);                      //シリアルモニタにセンサの状態を出す用
  digitalWrite(4,HIGH);
  digitalWrite(2,HIGH);
  delay(1000);
  }
}

Cisco機器のOSの選び方

Cisco機器のOSの選び方は、少しぐぐれば簡単にいくつも参考になるものが出てくる。バージョンの見方の説明や、機能セットの選択の仕方とか。ただし、これらは機能要件である。カルト的な知識が必要であることがわかる。シンプルで判断コストが少なく済むものの方が選択においては良いはずなのに、ネットワークの世界ではややこしくて不要な判断コストが多いものが重宝される。
Cisco機器はOS選定にかかるコストが大きい。「最新のstableリリースが最良、それの代理店チェック済みのやつ使えば良い」みたいな、そういう考えではないと思う。機能を選択して、候補OSバージョンを見つけたら、ひたすら既知のバグチェックを実施する。おかねのあるユーザはciscoのコンサルみたいな部隊と契約していたりする。メーカの作りこんだバグを回避するためにメーカーと契約しているのだ。
これはどういうことかというと、新しい機能(例えばルーティングプロトコルでもなんでも良いが)を追加実装したいときは、その分のチェックもひたすらやるということ。Cisco機器はそういうコストもある。
決してCiscoをディスってるわけじゃない。そこまでやらなくてもたいていは大丈夫だし、各種機能を併用して制限なくふつうに動く、特にスイッチは他にあまり無かったりするし、レイヤ3の機能はとても強力だ。でも最近のCiscoは、

ネットワーク認証のMACアドレス認証

ネットワーク認証で用いられるMACアドレス認証について概説です。ここでは、スイッチや無線AP/コントローラのようなネットワーク機器で行う認証についてです。

ただし、「MACアドレス認証」というプロトコルのような何かが存在するのではなく、あくまでMACアドレスを使った認証、ということで、クレデンシャルの確認には通常RADIUSを利用してPAP/CHAPが、ネットワークスイッチによっては802.1Xに変換したりするような方法も利用されます。メーカーにより、実装の呼び方は様々だったりします(MAB、とか)。

MACアドレス認証の特徴は、そのとおり、端末のMACアドレスが正規のものかどうかを判別してネットワークへの接続を許可するというものとなります。

MACアドレス認証はセキュリティが弱い?
MACアドレスは偽装や入手が容易であることから、セキュリティが弱い、と表現されることはよくあります。確かにMACアドレスの性質から考えればそのとおりです。しかし、比較して802.1Xの証明書であっても端末へのインポート方法によって再利用が容易であったりしますし、導入効果と運用内容をよく考える必要があります。実際には、目的とコスト等のビジネス要件から決められるものとなります。

端末認証であること。
まさに端末のMACアドレスで認証するため。「正当な端末のみネットワークを利用できる」ためのものとなります。そのためには、予めMACアドレスが台帳化されていないのであれば、MACアドレスの収集が必要であったりします。収集無理だよ、という環境では、ベンダコードで許可するような設定をRADIUSシステムに入れているケースもよく見られます。

レイヤ2の通信で行われる認証。
ネットワーク機器に未認証の端末が接続され通信が発生すると、ネットワーク機器はRADIUSサーバ(等認証サーバ)にそのMACアドレスの正当性を問い合わせます。そもそも端末やユーザ自体は認証動作が起きていることは感知しないです。

認証時のパスワードって?
はじめのほうで、PAP/CHAPが使われるというような話を書きました。
また、上記、ネットワーク機器がMACアドレスの問い合わせをRADIUSサーバにするという話を書きました。では、そこではユーザ名とパスワードはどのようになっているのかという部分です。
MACアドレスの正当性を確認するので、ユーザ名はMACアドレスが利用されます。では、パスワードはというと、共通パスワードが利用される場合と、MACアドレスがパスワード情報としても利用される場合があります。共通パスワードというのは、どのMACアドレスに対しても同じパスワードを使うというものです。もう一方、MACアドレスがパスワード情報として利用されるというのは、ユーザ名もパスワードも同じとなるということです。このMACアドレスがパスワード情報として利用される場合では、パスワードは弱い( 0~9、A~Fの文字のみしか使われない)ものとなるので、RADIUSサーバ等認証サーバ側で「複雑なパスワードの要件」がある場合、それにひっかからないか注意する必要があります。