Androidスマートフォンで模型をコントロール

 

〜Bluetooth遠隔操作対応PWMコントローラー〜

コントローラー単体での操作とスマートフォンからの遠隔操作の両方に対応したコントローラーです。

 「☆改良版☆ ショート検知機能付き仕様回路」をベースに、本体での操作用のボリュームとスイッチを足して、
「ポイントを切り替える」の機能を組み合わせました。

 スマートフォンからも操作できますが、スマホの電池を気にせずに本体だけでも遊べます。

 材料費はおおよそ¥4,000、基本的な部品は秋月電子、Bluetoothモジュールはaitendoで購入しました。
 回路図と主なパーツリストは下の方にある画像をクリックしてPDFでご覧ください。
 初心者の方はいきなり組み立てに入らずに、先に「Arduino/Arduino互換マイコンで模型を走らせよう」の1〜7を
試してみることをお勧めします。

 本体での操作は一般的なPWMコントローラーと同じで、メインボリュームと調整用のボリュームが付きます。
 方向転換はトグルスイッチ、ポイントは押しボタン式で押すたびに進路が切り替わります。

 線路上でショートすると赤LEDが点灯して非常停止状態になり、線路への出力が止まります。
 解除するには方向切替を停止位置に切り替えてください。
 また、本体操作とスマートフォン操作を切り替えた場合も同様です。

 
 マイコンに書き込むスケッチは以下のとおりです。
 ArduinoIDEにコピペして書き込んで使ってください。

  

Bluetoothから1byteの数値を受信して表のように対応します。

 1−140 PWM出力(線路への出力値)
 201 前進
 202 中立(停止)
 203 後退
 210 ポイント1切替
 212 ポイント1切替
 214 ポイント2切替
 216 ポイント2切替

 

回路図・部品リスト

///PWM周波数設定
void analogWrite3(int op1){
 TCCR2A=0b00100011;
 TCCR2B=0b00001010;
 OCR2A=150;
 OCR2B=op1;
}
void analogWrite10(int op2){
 TCCR1A=0b00100011;
 TCCR1B=0b00011010;
 OCR1A=150;
 OCR1B=op2;

void setup() {
 Serial.begin(9600);
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,INPUT);
 pinMode(10,OUTPUT);
 pinMode(11,OUTPUT);
 pinMode(12,OUTPUT);
 pinMode(13,OUTPUT);
 pinMode(17,INPUT);
 pinMode(18,INPUT);
}
int v=0;
int v0=10;
int v1=0;
int v2=0,v3=0;
int fw=0;
int res=0;
int cmd=0,ocmd=0;
int a1=0,a2=0;
int afw[]={202,201,203};
int fw1;
int p1=1,p2=1,pt;

void loop(){
 //非常停止
 int ar=analogRead(0);
 if (fw!=0){
  if (ar<800){
   fw=0;
   res=1;
   v1=0;
   digitalWrite(11,HIGH);
  }
 }
 // モード切替
 if (digitalRead(9)==HIGH){cmd=1;}
 else {cmd=0;}
 if (cmd!=ocmd){
  ocmd=cmd;
  for (int i=v1;i>10;i--){
   if (fw==1){
    analogWrite3(i);
   }
   if (fw==-1){
    analogWrite10(i);
   }
   delay(20);
  }
  res=1;
  digitalWrite(11,HIGH);
  delay(500);
 }
 ///
 ///Bluetooth
 if (cmd==1){
  v=Serial.read();
  if (0<v && v<150){
   v1=v;
  } 
 }
 ////本体操作
 if (cmd==0){
  v=0;
  v0=int(analogRead(2)/12);
  v2=int(analogRead(1)/10.2);
  v3=130-v0; 
  v1=10+v0+(v3*v2/100);
  a1=0;
  if (digitalRead(17)==HIGH){a1=1;}
  if (digitalRead(18)==HIGH){a1=2;}
  if (a1!=a2){
   v=afw[a1];
   delay(100);
   a2=a1;
  }
  if (digitalRead(2)==HIGH){
   v=211+p1;
   p1=p1*-1;
  }
  if (digitalRead(4)==HIGH){
   v=215+p2;
   p2=p2*-1;
  }
 }
 ////方向転換
 if (res==0){
  if (v==201){
   fw=1;
   digitalWrite(13,LOW);
   digitalWrite(3,LOW);
   delay(10);
  }
  if (v==203){
   fw=-1;
   digitalWrite(12,LOW);
   digitalWrite(10,LOW);
   delay(10);
  }
 }
 else {
  fw=0;
  v1=0;
  digitalWrite(3,LOW);
  digitalWrite(10,LOW);
 }
 if (v==202){
  res=0;
  fw=0;
  digitalWrite(11,LOW);
  digitalWrite(3,LOW);
  digitalWrite(10,LOW);
 }
 /////ポイント
 if (209<v && v<217){
  pt=(v-200)/2;
  digitalWrite(pt,HIGH);
  delay(100);
  digitalWrite(pt,LOW); 
  if (cmd==0){
   delay(500);
  } 
 }
 ////出力
 if (fw==1){ 
  digitalWrite(13,LOW);
  digitalWrite(12,HIGH); 
  analogWrite3(v1);
  digitalWrite(10,LOW);
 }
 if (fw==-1){
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
  analogWrite10(v1);
  digitalWrite(3,LOW);
 }
 delay(5);
}

【送料無料】電脳Arduinoでちょっと未来を作る

【送料無料】電脳Arduinoでちょっと未来を作る
価格:1,890円(税込、送料込)

inserted by FC2 system