Arduinoで逃げるプラレール
Arduino nano 3.0互換ボードATMEGA 328 Pを介して、IR赤外線障害物回避センサLM393で物体を検知していなければモータを回し、検知するとモータを止める(モータードライバはTA7291Pを利用)。上記の他に準備したものは、電池ボックス(単三×2)とタミヤのギヤボックスセット。という前回の記事のものを利用して、衝突回避プラレールのプロトタイプをする
と思いきやほとんど同じことをより高いレベルで実現している方がいらしたので、普通は下記参照したほうが良いでしょう。
www.mita.nu今回作ったものは、床で走らせたら前方の物体から逃げてるように見えた
www.youtube.com
スケッチや接続は下記のとおり。
/*モータドライバ接続 *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を返す */ //for Infrared sensor int val = 0; 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(100); } else { //センサが検出した //ブレーキ // Serial.println(val); //シリアルモニタにセンサの状態を出す用 digitalWrite(4,HIGH); digitalWrite(2,HIGH); delay(100); // 逆回転 analogWrite(3,255); digitalWrite(4,LOW); digitalWrite(2,HIGH); delay(2000); //ブレーキとストップの違い //ブレーキはモータの軸を回すと抵抗力を感じます //ストップは軸をまわすと抵抗無く回ります とのこと } }
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は、