パソコンからの信号を受けて線路に流す電流をコントロールする回路を作ります。
部品の構成、配置は以下の通りです。
ブレッドボード EIC−701 |
FT232RL USBシリアル変換モジュール |
AVRマイコン ATMEGA328P |
クリスタル(水晶発振子) 16MHz |
タクトスイッチ |
フルブリッジドライバーTA8428K |
ダーリントン・トランジスタ 2SD1415A x2 |
積層セラミックコンデンサー0.1μF50V |
電解コンデンサー10μF50V |
ポリスイッチ500mA |
整流用ショットキーダイオード x2 |
ACアダプタ 15V0.8A または 12V1A |
ACアダプタジャック |
ブレッドボード用ジャンパーワイヤー |
AVRマイコンには先に「互換マイコンを作る」を参考にブートローダーを書き込んでおいてください。
マイコンに書き込むスケッチは以下になります。
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);
pinMode(10,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}
int v=0;
int v1=10;
int fw=1;
void loop(){
if (fw==1){
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
analogWrite3(v1);
digitalWrite(10,LOW);
}
else {
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
analogWrite10(v1);
digitalWrite(3,LOW);
}
v=Serial.read();
if (v>0){
if (v<150){
v1=v;
}
if (v==201){
fw=1;
digitalWrite(13,LOW);
digitalWrite(3,LOW);
}
if (v==203){
fw=0;
digitalWrite(12,LOW);
digitalWrite(10,LOW);
}
}
delay(5);
}
|
シリアル通信で0〜150を受け取ったときは、そのままPWMの出力とし、201・203を受け取った場合は、それぞれ進行方向を切り換えます。
マイコン側の準備ができたらProcessingにも以下のスケッチを書き込みます。
先ほどのスケッチにシリアル通信用の記述を追加しました。
import processing.serial.*;
Serial myPort;
void setup(){
size (400,200);
myPort=new Serial(this,"COM3",9600);
}
void draw(){
background(0);
ellipse (mouseX,100,20,20);
int mx=mouseX/3;
myPort.write(mx);
delay(50);
}
|
実行する前にcomポートの番号を、お使いのパソコンに合わせてください。
マウスを動かすと円の位置に応じて車両の速度が変化したと思います。
|