2018年8月19日日曜日

【Arduino】Arduino, Bluetoothを使った簡単なラジコンの製作記


夏季休暇の間、ラジコンを製作していました。

以前からArduinoに興味があり、コントローラはできればスマホにしてアプリ製作もやってみたい、などと考えながら、こちらのサイトを参考にさせてもらいました↓

ソフトウェアの部分に関しては、初心者の自分では理解が難しかったので、Arduinoの基礎に近い方法で変更してみました。


ハードウェア

ハードウェアの方はほぼ同じ仕様ですが、参考サイトの方法から下記変更を加えました
 ・TA7291Pの4番ポートをArduinoの3番ポートに接続
  ⇒PWM信号をつかって、DCモーターの速度を調整できるようにするため

注意点

・サーボのPWM信号をArduinoのライブラリ(PWMServoライブラリやServoライブラリなど)経由で出力する場合、Arduinoの9番と10番は使用できないです。
よって、今回は3番ポートからの出力に変更しています。

・サーボとシャフトをつなぐ、針金の半田付けですが、あとでソフトウェア上で中立位置を調整できるので、多少まっすぐでなくてもOKです。

・モーター駆動用の単三乾電池4本は両面テープでベニヤに固定しています。

ソフトウェア

プログラミングに関して、私のスキルでは、参考サイトのやり方がよく理解できなかったので、もう少し簡単な方法にしてみました。以下が今回作成したArduinoのスケッチです。

#include <PWMServo.h>
#include <SoftwareSerial.h>
#define SERVO_PWM 9
#define MOTOR_IN1 11
#define MOTOR_IN2 5
#define RX
#define TX 7
#define MOTOR_PWM 3
PWMServo myservo;
SoftwareSerial btSerial(RX,TX);
int val = 85;//サーボの中立位置
int motor_speed = 0;
void setup() {
pinMode(MOTOR_IN1, OUTPUT); //DCモーターの出力
pinMode(MOTOR_IN2, OUTPUT); //↑
digitalWrite(MOTOR_IN1,LOW); //DCモーターは最初はストップ状態にする
digitalWrite(MOTOR_IN2,LOW); //↑
analogWrite(MOTOR_PWM,motor_speed); //DCモーターの速度は0にする
myservo.attach(SERVO_PWM); //サーボのPWM設定
myservo.write(val); //サーボの初期位置(85度)
btSerial.begin(9600); //bluetooth通信開始
}
void loop() {
char c;
//delay(100);
if(btSerial.available()){
c = btSerial.read();
}
switch(c){
case '1': //DCモーター正転
digitalWrite(MOTOR_IN1,HIGH);
digitalWrite(MOTOR_IN2,LOW);
break;
case '2': //DCモーター反転
digitalWrite(MOTOR_IN1,LOW);
digitalWrite(MOTOR_IN2,HIGH);
break;
case '3': //左(サーボ左回転)
if(val < 120){
val = val + 10;
myservo.write(val);
}
break;
case '4': //右(サーボ右回転)
if(val>50){
val = val - 10;
myservo.write(val);
}
break;
case '5': //×ボタン(ブレーキ)
digitalWrite(MOTOR_IN1,HIGH);
digitalWrite(MOTOR_IN2,HIGH);
break;
case '6': //○ボタン(加速)
motor_speed += 10;
analogWrite(MOTOR_PWM,motor_speed);
break;
case '7': //□ボタン(減速)
motor_speed -= 10;
analogWrite(MOTOR_PWM,motor_speed);
break;
}
}
 
スマホアプリの十字キーの左と右がサーボの左右回転、上と下がDCモーターの正転と反転指示で、○が速度UP、□が速度DOWN、×がブレーキです。

サーボの中立位置(変数val)は、正面から見てタイヤがまっすぐになるよう、値を調整しました。操舵角度は左右それぞれ35度ぐらいが限界かなと思います。

スマホアプリ

Androidのアプリは、とりあえず既製品を使うことにし、Arduino BluetoothController
というのもをチョイスしました。










Google Play StoreでArduino, Bluetoothで検索すると似たようなものがいくつか出てきます。基本的にどれを使ってもOKだとおもいます。Set Commands画面でキーアサインを1から順に、Arduinoのスケッチと整合が取れるように割り振ります。

ただし、Pushボタン形式だとやはり操縦がしずらいので、スライダー調整ができるよう、今後はアプリ開発に取り組んでいく予定です。

2 件のコメント:

  1. 生徒と一緒にこのラジコンカーを取り組んでいます。
    もともとのサイトの情報がよく理解できなくて迷走していました。
    おかげさまで、動くようになりました。
    ありがとうございました。

    返信削除
  2. こんばんは。お役に立てることができて良かったです。

    返信削除

【Grasshopper_110】縦長長方形の範囲内で大きさを変化させる

今回は、縦長の四角形にひし形を配置し、真ん中より少し上の位置を基準に大きさを変化させるサンプルを作ってみました。 四角形の枠に近いところを同じ大きさに揃えるところが今回のポイントです。