電源スイッチ・スタートスイッチ・LEDの取り付け
ユニバーサルプレート上にユニバーサル基板を利用して、電源スイッチとブレッドボードを取り付け。
さらに、ブレッドボードを使ってスタートボタンとLEDランプを取り付け配線をします。
電源スイッチ
電源スイッチはArduinoとモーター用電源をそれぞれ単独で入り切りできるように取り付けました。
Arduinoにプログラムをアップロードする時や、モーターを別電源で駆動する時に使います。
ブレッドボード
ブレッドボードは、今後回路等を仮り接続して実験や調整できるように小さいものを取り付けました。
スタートスイッチ
現状では電源が入ると即スタートする状態なので、スケッチ上でスイッチの ON/OFF を判断してスタートできるように回路の追加とスケッチの変更を行いました。
スイッチはブレッドボード上にタクトスイッチを取り付けて、デジタル7番ピンに接続します。
LEDランプ
プログラム動作状態でLEDランプが点滅するように、LED回路をデジタル6番ピンに追加します。
配線
スケッチ
各動作をサブルーチンから読み込むように大幅に変更となりました。
スタートスイッチが押されるとLEDランプが点灯し、約2秒経過後 Fedein forward fadeout backward の順に回転し stoppedで停止します。
最後にLEDランプを消灯してスタートスイッチの入力待ちになります。
void Loop内のサブルーチンを入れ替えると回転方向や回転モードを変えることができます。また、forward backward の引数の値を変えることにより回転速度と 回転時間が変わります。
//モーターピン設定
int pwm_a = 3;
int dir_a = 12;
int pwm_b = 11;
int dir_b = 13;
//スタートスイッチ LEDピン設定
int ST_SWITCH = 7;
int LED = 6;
//サブルーチン
void forw()
{
digitalWrite(dir_a,HIGH);
digitalWrite(dir_b,HIGH);
}
void back()
{
digitalWrite(dir_a,LOW);
digitalWrite(dir_b,LOW);
}
void forward(int mspeed,int mtime)
{
digitalWrite(dir_a,HIGH);
digitalWrite(dir_b,HIGH);
analogWrite(pwm_a,mspeed);
analogWrite(pwm_b,mspeed);
if(mtime > 0){
delay(mtime);
analogWrite(pwm_a,0);
analogWrite(pwm_b,0);
}
}
void backward(int mspeed,int mtime)
{
digitalWrite(dir_a,LOW);
digitalWrite(dir_b,LOW);
analogWrite(pwm_a,mspeed);
analogWrite(pwm_b,mspeed);
if(mtime > 0){
delay(mtime);
analogWrite(pwm_a,0);
analogWrite(pwm_b,0);
}
}
void stopped()
{
digitalWrite(dir_a,LOW);
digitalWrite(dir_b,LOW);
analogWrite(pwm_a,0);
analogWrite(pwm_b,0);
}
void fadein()
{
for(int i=0;i<=200;i+=1){
analogWrite(pwm_a,i);
analogWrite(pwm_b,i);
delay(30);
}
}
void fadeout()
{
for(int i=200;i>=0;i-=1){
analogWrite(pwm_a,i);
analogWrite(pwm_b,i);
delay(30);
}
}
void astop()
{
analogWrite(pwm_a,0);
}
void bstop()
{
analogWrite(pwm_b,0);
}
void setup()
{
//ピンモード設定
pinMode(pwm_a, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(pwm_b, OUTPUT);
pinMode(dir_b, OUTPUT);
pinMode(ST_SWITCH,INPUT);
pinMode(LED,OUTPUT);
}
void loop()
{
while(1){
if(digitalRead(ST_SWITCH)==LOW)break;
}
digitalWrite(LED,HIGH);
delay(2000);
forw();
fadein();
delay(1000);
forward(50,5000);
delay(1000);
fadeout();
backward(100,5000);
fadeout();
stopped();
digitalWrite(LED,LOW);
}