はじめに
- 作成したクラシックマウスの各パーツの解説。
- 今回は「ステッピングモーター」と「Arduino Uno」。
ステッピングモーター
-
KH39EM2-801: ユニポーラ、ステップ角1.8°、電圧 5.6V、39mm角、厚さ20.8mm
- 過去の大会で使用実績があるのと、厚みが薄いので選んでみた。トルク等は正直よくわからないまま選んでます。
- Arduinoではユニポーラ用のライブラリが使えるので、ユニポーラを選んでいます。
- たまたまオークションで安く入手できましたが、品薄なのかも。代替としてはなるべく小さい(薄い)ものが良い気がします。作例の多い28BYJ-48でも動きますが、スピードはかなり遅いです。
- 2個のステッピングモーターを、モーター軸を合わせて両面テープやガムテープで固定しています。間に薄い板(プリント基板)をはさんで、距離センサーの土台にしていますが、ここら辺はお好みで。
-
ドライバ: ULN2803AN、8chトランジスタアレイ
- ArduinoではULN2003の作例が多いのですが、ULN2003は7CH。モーター1個に4CH必要なので、2個必要になります。2803は8CHなので、1個で済みます。
-
接続
Arduino 2803 2803 KH39 D2 1 18 左橙11 D3 2 17 左茶5 D4 3 16 左黄7 D5 4 15 左黒1 D6 5 14 右黒1 D7 6 13 右黄7 D8 7 12 右茶5 D9 8 11 右橙11 GND 9 10 7.4V+左右赤3青9 - ULN2803の10番ピンにはモーター駆動用の電源を接続し、モーターの赤・青も接続します。
- 電圧はリチウムイオン電池(直列)を降圧せずそのまま接続しています。特に問題は起きていません。
-
ライブラリ
- Unistep2を使っています。左右両輪を同時に動かすライブラリはこれしか見つからなかったので。本来は自分でPWMで操作すべきですが…
- 上記の接続に合わせた設定は以下の通り。右と左では逆の回転になるようにしている。
- 直進する場合の関数runxy()をこんな感じで書いています。
- 本モーターはステップ角1.8°なので、200Stepで1回転のようだが、本ライブラリはハーフStepを用いているようで、400Stepで1回転と設定している。
- Step Delay は2500で1回転/秒となる(400*2500μs = 1s)。本モーターは1000ぐらいまでは動きますが、加減速を考慮して使用しています。
#include "Unistep2.h"
// Define some steppers and the pins they will use
const int st_l=2500; //StepDelay
Unistep2 stepperX(2, 3, 4, 5, 400, st_l); // 左 pins for IN1, IN2, IN3, IN4, steps per rev, step delay(in micros)
Unistep2 stepperY(6, 7, 8, 9, 400, st_l); //右 cross connection
void runxy(int steps, int st_delay){
Unistep2 stepperX(2, 3, 4, 5, 400, st_delay);
Unistep2 stepperY(6, 7, 8, 9, 400, st_delay);
stepperX.move(steps);
stepperY.move(steps);
while(stepperX.stepsToGo()!=0){
stepperY.run();
stepperX.run();
}
}
マイコン Arduino Uno
- マイコンはArduino Unoの互換品を利用。プロトタイプシールドを挿して、その上にミニブレッドボードを乗せて利用しています。
- スケッチが大きく(93%)、メモリが少ない旨の警告がでます。特に問題は起きていませんが、もう少し余裕のあるマイコンの方が良いかもしれません。
- 給電は、リチウムイオン電池(直列)からV-in端子に給電しています。
以上