質問編集履歴
7
good
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,40 +8,21 @@
|
|
8
8
|
実現したいこと
|
9
9
|
arduino IDEのソースコードの変数[servoAngle]をMATLABから値を送って実行したいです。(まずは一つの変数で)
|
10
10
|
|
11
|
-
arduino IDEの
|
11
|
+
arduino IDEの通信用コードーーーーーーーーーーーーーーーーーーーー
|
12
12
|
```arduino
|
13
13
|
#include <VarSpeedServo.h> // ライブラリのインクルード
|
14
14
|
VarSpeedServo myservo; // サーボオブジェクトの作成
|
15
|
-
long servoAngle=170;
|
16
|
-
int servoSpeed=40;
|
17
15
|
|
18
|
-
void setup() {
|
19
|
-
myservo.attach(6); // サーボ接続ピンをD6に
|
20
|
-
}
|
21
|
-
|
22
|
-
void loop() {
|
23
|
-
myservo.write(100, 10, true);
|
24
|
-
delay(1000);
|
25
|
-
myservo.write(servoAngle, servoSpeed, true);
|
26
|
-
myservo.write(140, 50, true);
|
27
|
-
}
|
28
|
-
//myservo.write(180, 255, true); // 180°まで速度255で動かし完了をまつ
|
29
|
-
```
|
30
|
-
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
31
|
-
arduino IDEの通信用コード(実際に使いたいコード)ーーーーーーーーーーーーーーーーーーーー
|
32
|
-
```arduino
|
33
|
-
#include <VarSpeedServo.h> // ライブラリのインクルード
|
34
|
-
VarSpeedServo myservo; // サーボオブジェクトの作成
|
35
16
|
|
36
17
|
// グローバル変数の宣言
|
37
18
|
char input[4]; // 文字列格納用
|
38
19
|
int i = 0; // 文字数のカウンタ
|
39
20
|
int val = 0; // 受信した数値
|
40
|
-
int
|
21
|
+
int deg = 100; // サーボの角度
|
41
22
|
|
42
23
|
// 初期設定
|
43
24
|
void setup() {
|
44
|
-
|
25
|
+
Serial.begin(9600); // シリアルポートを9600 bps[ビット/秒]で初期化
|
45
26
|
myservo.attach(9); // 制御信号を送る出力ピンの設定
|
46
27
|
}
|
47
28
|
|
@@ -50,7 +31,7 @@
|
|
50
31
|
// データ受信した場合の処理
|
51
32
|
if (Serial.available()) {
|
52
33
|
input[i] = Serial.read();
|
53
|
-
|
34
|
+
// 文字数が3以上 or 末尾文字がある場合の処理
|
54
35
|
if (i > 2 || input[i] == '\0') {
|
55
36
|
val = atoi(input); // 文字列を数値に変換
|
56
37
|
Serial.write(input); // 文字列を送信
|
@@ -65,16 +46,36 @@
|
|
65
46
|
// メインループ
|
66
47
|
void loop() {
|
67
48
|
deg = serialNumVal();
|
68
|
-
myservo.write(
|
49
|
+
myservo.write(deg, 30, true); // deg度まで速度30で回転
|
69
|
-
|
50
|
+
//myservo.write(180, 255, true); // 180°まで速度255で動かし完了をまつ
|
70
51
|
}
|
71
52
|
|
53
|
+
```
|
54
|
+
```matlab
|
55
|
+
serialportlist("available")
|
56
|
+
arduinocom=serialport("COM9",9600);
|
57
|
+
configureTerminator(arduinocom,"CR/LF");
|
72
58
|
|
59
|
+
a=1;
|
60
|
+
while a==1
|
61
|
+
|
62
|
+
% 入力待機(回転させたい角度を入力)
|
63
|
+
deg = input("回転角度");
|
64
|
+
% eが入力されたら終了
|
65
|
+
if deg == 0
|
66
|
+
arduinocom.close()
|
67
|
+
break;
|
68
|
+
end
|
69
|
+
|
70
|
+
% 回転角と終端文字を送信
|
71
|
+
arduinocom.write(deg,"uint8")
|
72
|
+
|
73
|
+
end
|
73
74
|
```
|
74
|
-
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
75
|
-
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
76
75
|
|
76
|
+
エラーは出ていないのですがサーボが動いてくれません...どなたかアドバイスなど頂けると嬉しいです。
|
77
77
|
|
78
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-10/65f383b0-d74b-45e0-85b3-250a0a2e5c19.png)
|
78
79
|
|
79
80
|
参考URL
|
80
81
|
[シリアル通信](https://jp.mathworks.com/help//matlab/import_export/read-streaming-data-from-arduino.html)
|
6
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -75,7 +75,6 @@
|
|
75
75
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
76
76
|
|
77
77
|
|
78
|
-
どうすればうまく通信できるのでしょうか...アドバイスを頂けると嬉しいです!
|
79
78
|
|
80
79
|
参考URL
|
81
80
|
[シリアル通信](https://jp.mathworks.com/help//matlab/import_export/read-streaming-data-from-arduino.html)
|
5
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -74,26 +74,7 @@
|
|
74
74
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
75
75
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
76
76
|
|
77
|
-
arduino側は置いといてMATLAB側がエラーになります...
|
78
|
-
MATLABコードーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
79
|
-
```matlab
|
80
|
-
serialportlist("available") %Arduinoと競合しているから使えないのでしょうか..
|
81
|
-
arduinocom=serialport("COM9",9600);
|
82
|
-
```
|
83
|
-
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
84
|
-
エラーメッセージ
|
85
|
-
```txt
|
86
|
-
エラー: serialport (行 116)
|
87
|
-
ポート 'COM9' で serialport デバイスに接続できません。デバイスがポートに接続されていること、そのポートが使用中でないこと、すべての serialport 入力引数と
|
88
|
-
パラメーター値がデバイスでサポートされていることを確認してください。
|
89
|
-
トラブルシューティングの手順については、関連ドキュメンテーション を参照してください。
|
90
77
|
|
91
|
-
エラー: com (行 3)
|
92
|
-
arduinocom=serialport("COM9",9600);
|
93
|
-
```
|
94
|
-
|
95
|
-
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-10/8a36e1f3-6ae3-49c1-aaca-778b56442af8.png)
|
96
|
-
arduino IDEで「com9」を使っているのですがおそらく競合してしまっています。
|
97
78
|
どうすればうまく通信できるのでしょうか...アドバイスを頂けると嬉しいです!
|
98
79
|
|
99
80
|
参考URL
|
4
よくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -93,7 +93,7 @@
|
|
93
93
|
```
|
94
94
|
|
95
95
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-10/8a36e1f3-6ae3-49c1-aaca-778b56442af8.png)
|
96
|
-
|
96
|
+
arduino IDEで「com9」を使っているのですがおそらく競合してしまっています。
|
97
97
|
どうすればうまく通信できるのでしょうか...アドバイスを頂けると嬉しいです!
|
98
98
|
|
99
99
|
参考URL
|
3
みやすく
test
CHANGED
File without changes
|
test
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
arduino IDEのソースコードの変数[servoAngle]をMATLABから値を送って実行したいです。(まずは一つの変数で)
|
10
10
|
|
11
11
|
arduino IDEのライブラリを使たコードーーーーーーーーーーーー
|
12
|
+
```arduino
|
12
13
|
#include <VarSpeedServo.h> // ライブラリのインクルード
|
13
14
|
VarSpeedServo myservo; // サーボオブジェクトの作成
|
14
15
|
long servoAngle=170;
|
@@ -25,8 +26,10 @@
|
|
25
26
|
myservo.write(140, 50, true);
|
26
27
|
}
|
27
28
|
//myservo.write(180, 255, true); // 180°まで速度255で動かし完了をまつ
|
29
|
+
```
|
28
30
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
29
31
|
arduino IDEの通信用コード(実際に使いたいコード)ーーーーーーーーーーーーーーーーーーーー
|
32
|
+
```arduino
|
30
33
|
#include <VarSpeedServo.h> // ライブラリのインクルード
|
31
34
|
VarSpeedServo myservo; // サーボオブジェクトの作成
|
32
35
|
|
@@ -67,15 +70,19 @@
|
|
67
70
|
}
|
68
71
|
|
69
72
|
|
73
|
+
```
|
70
74
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
71
75
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
72
76
|
|
73
77
|
arduino側は置いといてMATLAB側がエラーになります...
|
74
78
|
MATLABコードーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
79
|
+
```matlab
|
75
80
|
serialportlist("available") %Arduinoと競合しているから使えないのでしょうか..
|
76
81
|
arduinocom=serialport("COM9",9600);
|
82
|
+
```
|
77
83
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
78
84
|
エラーメッセージ
|
85
|
+
```txt
|
79
86
|
エラー: serialport (行 116)
|
80
87
|
ポート 'COM9' で serialport デバイスに接続できません。デバイスがポートに接続されていること、そのポートが使用中でないこと、すべての serialport 入力引数と
|
81
88
|
パラメーター値がデバイスでサポートされていることを確認してください。
|
@@ -83,6 +90,7 @@
|
|
83
90
|
|
84
91
|
エラー: com (行 3)
|
85
92
|
arduinocom=serialport("COM9",9600);
|
93
|
+
```
|
86
94
|
|
87
95
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-10/8a36e1f3-6ae3-49c1-aaca-778b56442af8.png)
|
88
96
|
|
2
使用可能なポート
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
arduino側は置いといてMATLAB側がエラーになります...
|
74
74
|
MATLABコードーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
75
|
-
serialportlist("available") %
|
75
|
+
serialportlist("available") %Arduinoと競合しているから使えないのでしょうか..
|
76
76
|
arduinocom=serialport("COM9",9600);
|
77
77
|
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
78
78
|
エラーメッセージ
|
1
実現可能なことが分かったので実際に試してみました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,62 +6,93 @@
|
|
6
6
|
(MATLABだけでarduinoを制御することも可能ですがサーボの精度が落ちます..)
|
7
7
|
|
8
8
|
実現したいこと
|
9
|
-
arduino IDEのソースコードの変数[servoAngle]
|
9
|
+
arduino IDEのソースコードの変数[servoAngle]をMATLABから値を送って実行したいです。(まずは一つの変数で)
|
10
10
|
|
11
|
-
arduino IDEのコードーーーーーーーーーーーー
|
11
|
+
arduino IDEのライブラリを使たコードーーーーーーーーーーーー
|
12
12
|
#include <VarSpeedServo.h> // ライブラリのインクルード
|
13
13
|
VarSpeedServo myservo; // サーボオブジェクトの作成
|
14
14
|
long servoAngle=170;
|
15
15
|
int servoSpeed=40;
|
16
|
-
|
16
|
+
|
17
17
|
void setup() {
|
18
|
-
|
19
18
|
myservo.attach(6); // サーボ接続ピンをD6に
|
20
|
-
|
21
19
|
}
|
22
20
|
|
23
21
|
void loop() {
|
24
|
-
|
25
22
|
myservo.write(100, 10, true);
|
26
23
|
delay(1000);
|
27
24
|
myservo.write(servoAngle, servoSpeed, true);
|
28
25
|
myservo.write(140, 50, true);
|
29
|
-
|
26
|
+
}
|
30
|
-
|
27
|
+
//myservo.write(180, 255, true); // 180°まで速度255で動かし完了をまつ
|
28
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
29
|
+
arduino IDEの通信用コード(実際に使いたいコード)ーーーーーーーーーーーーーーーーーーーー
|
30
|
+
#include <VarSpeedServo.h> // ライブラリのインクルード
|
31
|
+
VarSpeedServo myservo; // サーボオブジェクトの作成
|
32
|
+
|
33
|
+
// グローバル変数の宣言
|
34
|
+
char input[4]; // 文字列格納用
|
35
|
+
int i = 0; // 文字数のカウンタ
|
36
|
+
int val = 0; // 受信した数値
|
37
|
+
int servoAngle = 0; // サーボの角度
|
38
|
+
|
39
|
+
// 初期設定
|
40
|
+
void setup() {
|
41
|
+
Serial.begin(9600); // シリアルポートを9600 bps[ビット/秒]で初期化
|
42
|
+
myservo.attach(9); // 制御信号を送る出力ピンの設定
|
31
43
|
}
|
32
44
|
|
45
|
+
// シリアル通信で受信したデータを数値に変換
|
46
|
+
int serialNumVal(){
|
47
|
+
// データ受信した場合の処理
|
48
|
+
if (Serial.available()) {
|
49
|
+
input[i] = Serial.read();
|
50
|
+
// 文字数が3以上 or 末尾文字がある場合の処理
|
51
|
+
if (i > 2 || input[i] == '\0') {
|
52
|
+
val = atoi(input); // 文字列を数値に変換
|
33
|
-
|
53
|
+
Serial.write(input); // 文字列を送信
|
34
|
-
|
54
|
+
Serial.write("\n");
|
55
|
+
i = 0; // カウンタの初期化
|
56
|
+
}
|
57
|
+
else { i++; }
|
58
|
+
}
|
59
|
+
return val;
|
60
|
+
}
|
35
61
|
|
62
|
+
// メインループ
|
63
|
+
void loop() {
|
36
|
-
|
64
|
+
deg = serialNumVal();
|
37
|
-
if exist('arduino_connection',"var")==0
|
38
|
-
arduino_connection = arduino('COM9', 'Uno', 'Libraries', 'Servo');% 約2.5秒
|
39
|
-
end
|
40
|
-
|
65
|
+
myservo.write(servoAngle, 30, true); // deg度まで速度30で回転
|
41
|
-
servo_attach = servo(arduino_connection, 'D6','MaxPulseDuration',25e-04,'MinPulseDuration',5e-04); %D6はピン番号、パルス幅はサーボの仕様書より
|
42
|
-
end
|
43
66
|
|
44
|
-
|
67
|
+
}
|
45
|
-
angle_end=160; %目標角度160
|
46
68
|
|
47
69
|
|
48
|
-
|
70
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
71
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
49
72
|
|
73
|
+
arduino側は置いといてMATLAB側がエラーになります...
|
50
|
-
|
74
|
+
MATLABコードーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
51
|
-
|
75
|
+
serialportlist("available") %ちゃんとcom9は使えると表示されてます。Arduinoと競合しているから使えないのでしょうか..
|
52
|
-
|
53
|
-
|
76
|
+
arduinocom=serialport("COM9",9600);
|
77
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
78
|
+
エラーメッセージ
|
79
|
+
エラー: serialport (行 116)
|
80
|
+
ポート 'COM9' で serialport デバイスに接続できません。デバイスがポートに接続されていること、そのポートが使用中でないこと、すべての serialport 入力引数と
|
81
|
+
パラメーター値がデバイスでサポートされていることを確認してください。
|
82
|
+
トラブルシューティングの手順については、関連ドキュメンテーション を参照してください。
|
54
83
|
|
55
|
-
|
84
|
+
エラー: com (行 3)
|
85
|
+
arduinocom=serialport("COM9",9600);
|
56
86
|
|
57
|
-
|
87
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-10/8a36e1f3-6ae3-49c1-aaca-778b56442af8.png)
|
58
88
|
|
89
|
+
どうすればうまく通信できるのでしょうか...アドバイスを頂けると嬉しいです!
|
90
|
+
|
59
|
-
|
91
|
+
参考URL
|
60
|
-
ーーーーーーーーーーーーーーーーーー
|
61
|
-
[シリアル通信]https://jp.mathworks.com/help//matlab/import_export/read-streaming-data-from-arduino.html
|
92
|
+
[シリアル通信](https://jp.mathworks.com/help//matlab/import_export/read-streaming-data-from-arduino.html)
|
62
93
|
|
63
94
|
[Pythonで似た例](https://algorithm.joho.info/arduino/python-serial-servo-motor/)
|
64
95
|
|
65
96
|
[MATLABとarduino通信](https://jp.mathworks.com/matlabcentral/answers/127373-arduino-serial-communication-with-matlab-daq-getting-maximum-sample-rate?s_tid=srchtitle)
|
66
97
|
|
67
|
-
|
98
|
+
|