arduinoめも
今さらだけど、arduinoってなんだっけとか、タイマとか割り込みってどうなってるんだっけ、とか気になるのでめも。
arduinoは、AVRに基板とIDEをセットにしたものみたい。
AVRのことではなかった。ハードはなんとオープンソース。
だからびんぼうでいいのとかできるんだね。
タイマーは、AVR自体はtimer0,1,2あるんだけど、arduinoでは、
MsTimer2 → ms
TimerOne → us
でアクセスするらしい。あれ?timer0は??
タイマの関数の引数に呼び出す関数を入れるみたい。
ちなみに割り込みベクタは固定。優先度高い順に、timer2,1,0。
タイマとピンの対応はこちらを参考にさせていただく。
そうそう、◯◯といえば : Arduino の PWM と タイマーと tone() 関数
IOアクセスが遅そうというのはその通りで、ここで調べてる方がいた。
digitalWriteおそい。でも144kHzでるなら、往復7usくらいなので普通は問題ないかも。
どうしたら良いかというと、digitalWrite使わずに、レジスタ直接書き換えたらいい。
というか、こちらの方がわかりやすいと思うのは自分だけではないはず。。
ならタイマもレジスタ書けばいろいろできるんでは。
と思ったら、ものすごくわかりやすくまとめてるところがあった。感謝。
こちらも参考に。
タイマ割り込みのこと忘れてた。ここを参照させてもらお。
makers-with-myson.blog.so-net.ne.jp
割り込み要因はこちらで。
OLEDモジュール128x64, SSD1306, びんぼうでいいので動かす
アームクローラーにツインモーターギヤーボックスつけてみた。
アームクローラー工作セットの説明書に、ツインモーターギヤーボックスと2チャンネルリモコンボックスつけて、リモコン操縦に変えてみようってあったのでやってみた。
これは表。標準なのでスイッチがついてる。
これは裏。標準のギヤボックスなのでモーターと電池は1つずつ。
これをツインモーターギヤボックスに取り替え。
単純に2倍の速さになるのかと思ったら、前と変わらない。。ん。。
落ち着いて考えればわかるけど、別にモーター2個になっても速くなるわけない。トルクは2倍だろうけど。
ちなみにリモコンボックスは、ブルドーザーから拝借した。
そしてこのブルドーザーよりアームクローラーはめっちゃ遅い。
それもそのはず、ギア比が全然違った!!
ブルドーザーはBタイプなので、58:1。
アームクローラーはCタイプなので、203:1。
3倍以上違う!!
なので、アームクローラーはAタイプにしたら普通に速くなりそう。
(AとBはギヤ比同じでシャフトの高さが違う。)
ネジ穴がないからちょっと考えないと。。
あー、ギヤボックスがシャフト支えてくれるから大丈夫か。
→Aタイプにしたら速くなったものの、履帯を伸ばさないといけなくなって、10を外して8を2個つけたら長すぎででろんでろんになった。
ベース車をブルドーザーにしたアームクローラーにした方がいいかも。
あと、アームクローラーがうるさいのは、ギアがカタカタとM4シャフトに当たってるからかな。。取っちゃうか。
→取っても変わらなかった。。
モータシールドめも
モータドライブシールド。adafruit互換。
シールドは基板化されてるので配線気にしなくて良いのが楽だよね。
電源周りの回路図。推奨はジャンパーを外して、モータは別電源で。
本家ボード(adafruit)の写真。DCモータなら4つまでつなげられるよ。
DCモータの動かし方は、ここから。すごい簡単。
Using DC Motors | Adafruit Motor Shield | Adafruit Learning System
ライブラリはここから。でも普通にarduino IDEからダウンロードできたような。
v2じゃないことに注意。
Overview | Adafruit Motor Shield | Adafruit Learning System
この後、DCモータをいろんなチャンネルにつないでみたら、ch1だけ動かない。。
arduinoからモータシールドまでは問題ない。
L293Dからモータまでも大丈夫。
んー、と、L293Dを交換してみたら動いた。
どうやら初期不良だったっぽい。aitendoさん、交換してくれた。
ちなみに使っているポートは下記の通り。(adafruitのFAQより。)
Digital pin 2, and 13 are not used.
The following pins are in use only if the DC/Stepper noted is in use:
Digital pin 11: DC Motor #1 / Stepper #1 (activation/speed control)
Digital pin 3: DC Motor #2 / Stepper #1 (activation/speed control)
Digital pin 5: DC Motor #3 / Stepper #2 (activation/speed control)
Digital pin 6: DC Motor #4 / Stepper #2 (activation/speed control)
The following pins are in use if any DC/steppers are used
Digital pin 4, 7, 8 and 12 are used to drive the DC/Stepper motors via the 74HC595 serial-to-parallel latch
The following pins are used only if that particular servo is in use:
Digitals pin 9: Servo #1 control
Digital pin 10: Servo #2 control
そしてやっぱりモータシールド経由だとパワーも速度も出ない。
L293Dの出力が最大600mAなのに、モータがたぶん2Aくらい欲しがってる。
dutyをMAXにした瞬間、電圧がだだ下がってる。モータを外部電源にしたのに。
そもそも部品選定間違ってるな。。