3Dプリント

Arduinoシミュレータ UnoArdusim サーボ編 No.3

昨日の続きで Aruduinoによるサーボモータ駆動です。
最初に昨日の
「0度→から180度まで10度刻みで動かして、180度まで行ったら0度に戻す」プログラムの別バージョンです。
昨日のプログラムではMAXの180度を調べて0に戻していましたが
今回のプログラムは判定処理を入れずに実現しています。
昨日のプログラムとは全然違っていますが、制御の内容としては同じになります。
このように、ある動作をさせるプログラムは1つではないことを頭に入れておいてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//***********************************************************
// サーボモーターを動かすプログラム No.3
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
}
void loop()
{
	myservo.write(val); //サーボを動かす
	delay(1000);		//1秒停止
	val = (val+10)%190 ;
}

次に昨日の宿題プログラムの例です。

例その1
このプログラムでは角度の変数が190以上であれば-10ずつ角度の指定値を減らすようにしています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//***********************************************************
// サーボモーターを動かすプログラム No.4
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
}
void loop()
{
	if(val >= 190){
		myservo.write(360 - val); //サーボを動かす
	} else {
		myservo.write(val); //サーボを動かす
	}	
 
	delay(1000);		//1秒停止
	val = (val+10)%360 ;
}

例その2
このプログラムでは角度の変数と方向の変数を使っています。
例その1に比べるとプログラムが長くなっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//***********************************************************
// サーボモーターを動かすプログラム No.5
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
int dir;			//サーボの回転方向を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
	dir = 0;
}
void loop()
{
	myservo.write(val); //サーボを動かす
	delay(1000);		//1秒停止
	if(dir == 0){
		if(val >= 180){		//サーボの位置が180度なら回転方向を反転して位置を10度戻す
			val -= 10;
			dir = 1;
		} else {			//それ以外であれ10度進める
			val += 10;
		}
	} else {
		if(val <= 0){		//サーボの位置が0度なら回転方向を反転して位置を10度進める
			val += 10;
			dir = 0;
		} else {			//それ以外であれ10度戻す
			val -= 10;
		}
	}
}

今回の3本のプログラム、ご理解いただけましたでしょうか。
次回は、スライド式ボリュームの値によってサーボモーターの位置を決めるプログラムの説明を行います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です