Arduino Uno で鉄道模型を動かす。

パワーユニットの代わりにArduino Unoで挑戦する。

私も初心者なので詳しいことが分からないまま、回路を作ってみました。
可変抵抗器を左に回して前進、中立で停止、右に回して行進するスケッチ(プログラム)を書きます。
可変抵抗の接続方法は電圧分圧方式で、可変抵抗の1番ピンと3番ピンに電圧をかけて、1番ピンと2番ピンから電圧を出力させる方法です。
モータードライバーはTA7291Pを使いました。
5Vからスライドスイッチに介して接続しているのは、arduinoの電源を入れた時に、約一秒間、モータードライバーへ電気が流れる現象を防ぐためのものです。モータードライバーL293Dではこの現象は起きません。
詳しくはページ下の動画で説明しています。

arduinoのアナログピン0番に可変抵抗器(5KΩ)の2番ピンを接続。
arduinoのデジタル5番ピンをモータードライバーの4番ピンに接続。
arduinoのデジタル1番ピンをモータードライバーの6番ピンに接続。
arduinoのデジタル2番ピンをモータードライバーの5番ピンに接続。
5Vからスライドスイッチに介してモータードライバーの7番ピンに接続
GNDをモータードライバーの1番ピンに接続

arduinoの電源はDCジャックから12V1AのACアダプターから供給しています。
arduino用に使っているACアダプターはanthin製の12V1Aタイプです。


IMG_20180401_215521.jpg

IMG_20180401_215525.jpg

IMG_20180401_215529.jpg

回路図です。(数回クリックすると拡大します。)

arduinoパワーユニット回路図.jpg
上記の図でモーターが接続されているモータードライバーの2番と10番にDCフィーダー線を接続します。

可変抵抗器から出力された電圧をarduinoのアナログ0番ピンを読み込んで「1024」を2で割って512で計算しています。
「1024」という数字は2進数の10桁で2の10乗の数字です。
なぜ、2で割って512にするかというと、arduinoでは8ビットの扱いしかできないので、最終的には2の8乗で「256」という数字を使って処理する事になります。
今回は可変抵抗器の左半分を0~255、右半分を260~512(右半分は、512から256を引いたプログラムなので最大256)の数字を使うので「512」にするために「1024」を2で割っています。

DC5Vを1024で割ると約4.8mVとなり、数字が1変わるごとにに約4.8mV電圧が変わることになります。

動画はページの一番下にあります。


以下スケッチ(プログラム)です。

void setup(){

pinMode(1,OUTPUT); //信号用ピン 6番ピン
pinMode(2,OUTPUT); //信号用ピン 5番ピン
pinMode(5,OUTPUT); //モーター速度制御信号4番ピン
}
void loop(){
//アナログ入力:0番ピンの値を2で割る
int val=analogRead(0)/2; //アナログ0番ピンをvalという変数にして、デジタル数字1024を2で割って0~512の値にする
const int motor4 = 5; //モータードライバー4番ピン制御をarduino5番ピンで行う(変数扱い)
//静止/前進/後退の状態に分けてプログラムする
if(val>=250 && val<=260){ //250から260の間は静止
digitalWrite(1,LOW);
digitalWrite(2,LOW);
}else if(val>260){
//260から512の場合は前進
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
//valが大きいほど出力値も大きくなる
analogWrite(motor4,val-256);
}else{
//0から249の場合は後退
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
//valが小さいほど出力値は大きくなる
analogWrite(motor4,255-val); //出力値:1~255
}
}

このスケッチ(プログラム)で実際に動かすとモーターがキーキ唸って走り出します。
原因がよくわからないのですが、インターネットで調べてみると、どうやらarduinoの信号周波数の関係だそうです。

動画です↓


今回使用した部品↓



にほんブログ村 その他趣味ブログ 電子工作へ

この記事へのコメント

↓先週の人気記事です↓