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

 

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

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

 パーツの配置を見直して1枚の基盤に無理なくまとめ、アルミケースに収めてみました。

 
 今回はポイント切替の機能を省略していますが、
別途ポイントユニットを作って、Bluetoothからの信号を分岐して操作することは可能です。

短絡警告灯が点灯した場合は、方向切替スイッチを中立位置にすると解除されます。
Bluetoorhモードで使用中の場合はアプリ側で中立位置にしてください。

また本体操作とBluetooth操作を切り替えた場合も、誤動作防止のために警告灯が点灯します。

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

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

 1−140 PWM出力(線路への出力値)
 201 前進
 202 中立(停止)
 203 後退
 

回路図・部品リスト

PDFが開きます

///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(3,OUTPUT);//PWM1
pinMode(9,OUTPUT);//整流1
pinMode(10,OUTPUT);//PWM2
pinMode(11,OUTPUT);//整流2
pinMode(13,OUTPUT);//非常灯
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[]={201,202,203};
int fw1;
int p1=1,p2=1,pt;
int ct=0;

void loop(){
//非常停止
int ar=analogRead(0);
Serial.println(ar);
if (fw!=0){
if (ar<750 ){
fw=0;
res=1;
v1=0;
digitalWrite(13,HIGH);
}
}
// モード切替
if (digitalRead(18)==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(13,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);
int a1=(analogRead(3)+256)/512;
if (a1!=a2){
v=afw[a1];
delay(100);
a2=a1;
}
}

////方向転換
if (res==0){
if (v==201){
fw=1;
ct=50;
digitalWrite(11,LOW);
digitalWrite(3,LOW);
delay(10);
}
if (v==203){
fw=-1;
ct=50;
digitalWrite(9,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(13,LOW);
digitalWrite(3,LOW);
digitalWrite(10,LOW);
}
////出力
if (fw==1){
digitalWrite(10,LOW); 
digitalWrite(11,LOW);
digitalWrite(9,HIGH); 
analogWrite3(v1);
}
if (fw==-1){
digitalWrite(3,LOW); 
digitalWrite(9,LOW);
digitalWrite(11,HIGH);
analogWrite10(v1);
}
delay(5);
}

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

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