Arduino+DRV8835
モーターで動く車と書いたけど、こういうのの総称ってなんていうんだろう。モーターカーもなんか違うし、ラジコンも無線操縦してるわけじゃないから違う。スマートカーっていうほど高度な機能はついてないし、自動運転車っていうと人を乗せる感がある。ミニカーだと動かない感じがするし、難しいね。
お買い物
車体
車体を買おうと思いAmazonやeBayを探してみたけど、あの黄色いタイヤのついたやつしか見つからない。ちょっと大きいしなんか小さい感じのないかなーと思って探し続けていたらxt-xinteでいい感じのを見つけた。
これ。
届いた。めちゃめちゃ雑多に袋に放り込まれており、皺くちゃの説明書がペライチで入ってるだけという、簡素なパッケージですね。
説明書は全部中国語。でも写真いっぱいだし構造も簡単なのですぐ組み立てられた。
じゃーん。車体ができたよ。
DC-DC降圧USBモジュール
ちっこいArduino互換品を使おうと思っていて、USB給電なのでそこに給電できるようにしないといけない。電池を使おうと思っているのだけど電池は一本1.5V。4本で6Vなので定格超えちゃうから降圧もほしい。ということでそれに合いそうな部品を買う。これもちっちゃいのがいいなーと探してみたらeBayにそれっぽいのがあった。結構種類があって、機能的には大体一緒っぽいんだけど使えなかったらヤなので種類変えて何個か買った。結局動いたのは
だけかな?あ、順番に試していってこれ使って初めて動いたのでこれにしたんだ。ということで電源はこれでオッケー。
配線する
回路図を作ろうと思ったんだけどなんかめんどくさかったので作ってない。気が向いたら作ろう。
配線はー、電池ボックスからUSBモジュールかましてArduinoへと、DRV8835へ。で、ArduinoからDRV8835へ。そんでDRV8835から2つのモーターへ繋ぐ感じにした。言葉だと分かりづらい。
こんななった。配線って微妙にセンスいるのね。なんかうまいこと収まらなくて見てくれ悪くなっちゃった。車体とパーツはマジックテープでくっつけた。
スケッチを書く
int PIN_IN_A1 = 9;
int PIN_IN_A2 = 10;
int PIN_IN_B1 = 1;
int PIN_IN_B2 = 11;
void setup() {
pinMode(PIN_IN_A1, OUTPUT);
pinMode(PIN_IN_A2, OUTPUT);
pinMode(PIN_IN_B1, OUTPUT);
pinMode(PIN_IN_B2, OUTPUT);
}
void forward() {
digitalWrite(PIN_IN_A1, HIGH);
digitalWrite(PIN_IN_A2, LOW);
digitalWrite(PIN_IN_B1, HIGH);
digitalWrite(PIN_IN_B2, LOW);
}
void brake() {
digitalWrite(PIN_IN_A1, LOW);
digitalWrite(PIN_IN_A2, LOW);
digitalWrite(PIN_IN_B1, LOW);
digitalWrite(PIN_IN_B2, LOW);
}
void reverse() {
digitalWrite(PIN_IN_A1, LOW);
digitalWrite(PIN_IN_A2, HIGH);
digitalWrite(PIN_IN_B1, LOW);
digitalWrite(PIN_IN_B2, HIGH);
}
void coast() {
digitalWrite(PIN_IN_A1, HIGH);
digitalWrite(PIN_IN_A2, HIGH);
digitalWrite(PIN_IN_B1, HIGH);
digitalWrite(PIN_IN_B2, HIGH);
}
void turnLeft() {
digitalWrite(PIN_IN_A1, LOW);
digitalWrite(PIN_IN_A2, LOW);
digitalWrite(PIN_IN_B1, HIGH);
digitalWrite(PIN_IN_B2, LOW);
}
void turnRight() {
digitalWrite(PIN_IN_A1, HIGH);
digitalWrite(PIN_IN_A2, LOW);
digitalWrite(PIN_IN_B1, LOW);
digitalWrite(PIN_IN_B2, LOW);
}
void rotateLeft() {
digitalWrite(PIN_IN_A1, LOW);
digitalWrite(PIN_IN_A2, HIGH);
digitalWrite(PIN_IN_B1, HIGH);
digitalWrite(PIN_IN_B2, LOW);
}
void rotateRight() {
digitalWrite(PIN_IN_A1, HIGH);
digitalWrite(PIN_IN_A2, LOW);
digitalWrite(PIN_IN_B1, LOW);
digitalWrite(PIN_IN_B2, HIGH);
}
void loop() {
forward();
delay(3000);
brake();
delay(3000);
reverse();
delay(3000);
coast();
delay(3000);
turnLeft();
delay(3000);
brake();
delay(3000);
turnRight();
delay(3000);
brake();
delay(3000);
rotateLeft();
delay(3000);
brake();
delay(3000);
rotateRight();
delay(3000);
brake();
delay(3000);
}
どう書くのがいいかなーと考えて、動きごとに関数を作って、Loopでそれを呼び出す感じにした。前進・後退・停止・空転・右折・左折・右旋回・左旋回を作った。えらい長くなって、同じようなコードが並んでいるのでもっと短くできそうだなーって思った。後で考えてみようかな。
完成
できた!電池ボックスが意外と重いので動きがギクシャクしてんねw電圧と電流のどっちを高くすればいいんかな。それとも電池単4に変えようかな。それはまぁ後でやってみるとして、早くBluetoothモジュール届かないかなぁ~。
コメント