現在の動作は、起動したらまず原点(モータ側)に移動してリミットスイッチを押しに行きます。リミットスイッチ押したらそこから決められたステップ数、つまり決められた距離反対側に移動し、また戻ってきます。以下これを繰り返します。
基板上のボリュームでスライドのスピードを変更可能です。単純。
電池駆動するならモバイルバッテリーを使うのが最も簡単です。ということで、電源は5V、電流は1A以下あたりを狙って作っていくことにします。スライドのスピードはパルスレート変えるだけなのでボリューム位置をアナログ入力で読んでやれば簡単です。
全体制御はいつものArduinoで行きます。問題はどれを使うかですが、できるだけ小さくまとめたいのと、入出力が多くないのでCOB LEDライトでうまく使いこなせなかったDigispark(のぱちもん)に再挑戦することにしました。
使ったのはこちら。
AliExpress.com Product – 5pcs/bag Digispark kickstarter miniature usb development board
極限まで小型化されていながらUSBにダイレクトに接続できます。さらに一つ150円くらいと激安。小規模プロジェクトには打ってつけです。
使われているのは
ATtiny85というマイクロチップのAVRアーキテクチャという頭が混乱する仕様のマイコンです。なんでこれマイクロチップが作ってんですかね?私にはよくわからんです。
このDigisparkはあまりに小さくまとめたせいか、若干のクセがあります。スケッチ書き込みの時にUSBを接続し直す必要があるとか、USB通信用のポートとIOが兼用されているため回路によってはうまく動かないとか。これに嵌って
COBLEDライトの時は使うのをあきらめたのでした。後述しますが、今回の格闘でほぼこのDigisparkの使い方が分かったように思っています。
さて、まずは
この辺りを見ながらポートをこんな感じにアサインしました。例にって手抜きですがご容赦ください。そのうちKiCADで華麗な回路図を書くようにします(笑
ステッピングモータはDigisparkからダイレクトに駆動するのではなく、使い慣れたA4988のステッパードライバを使います。よって、Digisparkからは回転方向とステップだけを出すことになります。
こんな感じに構想をまとめてざっと予備実験をしておりましたところ、困ったことが見つかりました。今回使ったモータは5Vでは回ってくれないのです。最低でも6V無いと回ってくれません。もちろん9VくらいのACアダプタ持ってくれば何の問題も無いのですが、それでは今回の設計方針の一つである「電池駆動」が出来なくなります。
ということで、しばし考えた結果、以前より興味を持っていた昇圧モジュールを試してみることにしました。Aliexpressでサクッと注文して待つこと2週間ほど、やってきました。
これです。
機能はすばらしく、
1. The Maximum Output Current: 2A.
2. The Input Voltage: 2V ~ 24V.
3. The Maximum Output Voltage: 28V.
4. Efficiency: Max 93%.
それでいて一つ50円くらいと激安なんてもんじゃないです。すばらしすぎる。
ということで、これを使ってモータに9Vくらいを供給するようにします。
基板上のレイアウトを考えます。展示しますのでいつもよりまじめに配置します。
ピンヘッダとかピンソケットとか準備して、
基板の四隅に穴を開けて、
スペーサー立てておきます。
しっかりとレイアウトを決めます。モジュール基板の縦横をそろえることを意識。
基板用可変抵抗のフック用にちょいと穴加工します。
まずはこれらのモジュールやらスイッチやらコネクタやらをハンダ付けします。
なかなか美しいレイアウト。
では裏面の配線をしていきます。まずはグランドラインをスズメッキ線で。
モータドライバにパスコン入れるのを忘れてました。
背が低いコンデンサを見繕ってモジュールの下に隠します。
モータドライバと出力コネクタ、マイクロステップ設定ジャンパは接続が直線になるように配置しましたので、裸線使ってもいいでしょう。
さて、+電源ラインは赤の被覆線を使います。
Logicラインは黄色を使います。
出来るだけきれいにと思うんですけど、ユニバーサル基板はある程度スパゲッティになります。仕方ないかなと。
配線完了しました。
USBから給電する部分の2P XHコネクタをカシメます。
とりあえず動けばいいやレベルのスケッチですが、こんなもので動かしています。
スライドはゆっくりなので加減速無しでいきなり動かしています。
#define MAX 21000 //maximum distance from initial
int Speed = 50;
int Step = 0;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize the digital pin as an output.
pinMode(0, OUTPUT); //DIRECTION
pinMode(1, OUTPUT); //STEP
pinMode(2, INPUT); //Speed Analog
pinMode(3, INPUT); //reserved
pinMode(4, INPUT_PULLUP); //LimitSW
pinMode(5, INPUT); //Reset
}
void loop() {
//initialize
digitalWrite(0, HIGH); //Direct to initial position
while (1) {
move();
if (digitalRead(4) == HIGH) {
break; //Limit SW position
}
}
//Go
digitalWrite(0, LOW); //Direct to Go way
for (Step = 1; Step <= MAX; Step++) {
move();
}
digitalWrite(0, HIGH); //Direct to initial position
if (digitalRead(4) == HIGH) {
move();
}
}
void move() {
digitalWrite(1, HIGH);
delayMicroseconds(50);
digitalWrite(1, LOW); //CAUTION!! DigitalPIN 2 = analogPIN 1
Speed = analogRead(1)*2;
delayMicroseconds(Speed);
}
でですよ、今回Digisparkに再挑戦して、やっぱり嵌りました、が解決しました。
嵌ったポイントは二つ。
- P5は実質的にリセット以外には使えない
P5は汎用ポート&ADCとして使えそうに見えるんですが、実際はリセットスイッチにしか使えません。いや厳密には上半分くらいのADCには使えるかな。
このポートがLOWに落ちるとDigisparkはリセットされます。どの程度の電圧でLOW判定されてリセットされるかは個体差があると思いますが、ほぼ真ん中あたりです。5V掛けてたら2.5V付近。P5がこの電圧を下回らない範囲であればADCとして使えんこともないですが、極めて用途は限られるでしょう。
COB LEDライトの時は調光用のAD入力をP5にしたばっかりに嵌ったのでした。
- GPIOピンとADCチャンネルの番号が違う
ちゃんとここに書いてあるんですが、知らぬまま悩み続けました。
いや普通同じになるように設計すると思いません?
はいはい私が悪うござんしたというやつなんですがね。
でもですね、スケッチ書いたときにこうなるんですよ
digitalWrite(1, HIGH);
delayMicroseconds(50);
digitalWrite(1, LOW);
Speed = analogRead(1)*2;
delayMicroseconds(Speed);
ね、ポート1番にdigitalWriteした直後に同じポートにanalogReadしに行っている用に見えません?というかそれ以外に見えないですよね。
ですが、このanalogReadの方の(1)はP1ではなくADC1であって、実際にアサインされているのはP2です(笑 わけわからんです。
が、このことに気がつけば何の問題も無く動きました。
あと、これはあちこちに書いてあることですが、P3とP4はUSBのラインと共用され、P3はハード的にプルアップています。これを外部でプルダウンしてしまうとUSB通信がうまくいかない、つまりプログラムの書き込みができないことになります。これも注意すべきところです。今回の回路ではP4にリミットスイッチつけていて、これをノーマリークローズで使っています。キャリッジが原点に来てリミットスイッチを押した時だけオープンになる回路です。これをクローズにしたままだとP4はGNDに落ちたままになりますのでやはりUSB通信がうまくいきません。よって、スケッチの書き込みをするときにはこれをオープンにする、つまりリミットスイッチを押した状態にしないといけません。
ということで、すったもんだありましたが、ようやく動きました。
やってること自体はなんてことありませんので、Arduino UNOやあちゃんでいいのあたりを使っていればトラブルなく完成したのだと思いますが、Digisparkを使おうとしたばっかりに少々苦労しました。ですが、この苦労のおかげでDigisparkを使うときに注意すべきポイントがわかりました。結果オーライであります。だってDigispark 10枚買ってしまってますから(笑 何とか使いこなさんと。
ということでカメラスライダー完成です。基板ケースくらい作るかな。
つくると!5まであと二週間です。
コメント