初版作成 2015.10
最終更新 2025.08.28
arduino の覚え書き
Windows11 のブロックプログラミング環境で 「実行」---「プログラムの作成・転送」を実行すると、 「シリアルポートを別のプログラムが使っています」と いうエラーメッセージが表示される。ドライバの更新が 必要である。 デバイスマネージャで COM ポートを見ると、 PL2303TA は Windows11 をサポートしていない と表示される。 artec のサイトからドライバをダウンロードし、 既に入っているドライバを一旦削除し、 ドライバをインストールする。 デバイスマネージャで該当するドライバを右クリック ---> ドライバの更新 ---> コンピュータを参照してドライバを検索 ---> このコンピュータ上の利用可能なドライバの一覧から選択します ---> Prolific USB to Serial ..3.6.78.350 を選択 ---> Prolific USB-to-Serial Comm Port (COMx) と表示される 詳しくは以下の url を見よ https://www.artec-kk.co.jp/studuino/docs/jp/Studuino_setup_device_driver.pdf
ドライバとプログラミング環境をアーテック社のサイトからダウンロードする。 1. ドライバのインストール studuino は接続しない。 PL2303_Prolific_DriverInstaller_v1.11.0.exe をクリックするとドライバのインストールが完了する。 Studuino を接続すると、特に表示は出ないが、認識している。 「コントロールパネル」→「システム」→「デバイスマネージャ」 →「ポート(COM と LPT)」で確認できる。 Prolific USB-to-Serial Comm Port (COMx) というデバイスが認識される。COMx の x の部分は COM3 となった。 何番でも構わない。 番号は「右クリック」→「プロパティ」→「ポートの設定」 →「詳細設定」で好きな番号に割り振ることができる。ただし、 COM1 はノートパソコン内蔵のシリアルポート (ないことが多いが) と 衝突する恐れがあるので、使わない方が無難。 2. プログラミング環境のインストール カラーセンサなど全ての部品を使えるバージョンと 基本部品のみ使えるバージョンがある。 2017.1 までは Studuino.zip, Studuino2.zip をダウンロードして展開し、その中の setup.exe をクリックするシステムだった 2017.1 以降は自己解凍形の setup.exe をダウンロードして 実行するようになった。 (a) zip ファイルを展開する方法 zip ファイルを展開する。 フォルダ Studuino2 の中の setup_jp.exe をクリックすると、 インストールが始まる。 c:\Users\user-name\AppData\Local\Apps 以下にインストールする。しかし、インストールしなくても、 Studuino2\Application Files\ArtecRobotStartUp_2_0_4_2\ArtecRobotStartUp.exe をクリックすると、プログラミング環境が起動する。 AppData の下にファイルを置きたくない場合は、setup_jp.exe は実行不要。 (b) setup.exe を実行する方法 デスクトップに作業用フォルダを作成し、 c:\Users\user-name\AppData\Local\Apps 以下にインストールする。デスクトップにできた作業用フォルダは 削除しても良い。 3. 起動方法 ストアアプリの画面で「↓」マークを押して、アプリ一覧を表示すると、 ArTec Studuino Software 2.0 というのがある。 「右クリック」→「ファイルの場所を開く」と操作し、 Studuino Software 2.0 を「右クリック」→「送る」→「デスクトップ」 ショートカットを作成する場合は ArtecRobotStartUp.exe のショートカット を作成すること。ここで COM ポートを認識するようだ。 そこから呼ばれる、block\Block.exe を直接起動した場合、 studuino が認識できない。
Scratch のプログラムの拡張子は bpd 授業時は、あらかじめ、ひな形ファイルを作っておき、それを変更させるという 形式にした方がよい。 「ドキュメント」フォルダの下に Scratch Projects という フォルダが自動生成される。 デフォルトでは「新規作成」→「保存」すると、 ドキュメント\Scratch Project に保存する。
DC モータとサーボモータの動作には外付けバッテリーが必要 外付けバッテリーはニッケル水素電池でも OK モータの電源とマイコンの電源は分離されているようだ。 USB からの 5V はマイコンの動作に使われ、マイコンが モータドライバ IC を制御していると思われる。 Arduino は 5V で動作するのに対して、Studuino は 3.3V である。 Raspberry Pi (3.3V) とのシリアル接続は、そのまま接続できる。
(1) arduino 環境 a) USB ケーブルから studuino を外し、再び接続しても studuino が見えない。 デバイスマネージャを見ると、 Prolific USB-to-Serial Comm Port にびっくりマークが 付いている。「ドライバが正常に動作していません」と表示される。 PL2303_Prolific_DriverInstaller_v1.8.19.exe をもう一度実行してドライバを入れてもダメ。 再起動してもダメ。 COM1 に割り当てられていたので、 「ポートの設定」→「詳細設定」で COM2 に割り当て直すと、なぜか動作するようになった。 謎の現象である。 COM ポートの割り当てを変更したときは Arduino IDE において「ツール」→「シリアルポート」で COM ポートの番号を再設定する。 b) 他のプログラムが COMx を使用しています と表示される Studuino を一旦接続を外し、もう一度接続する。 c) 以下の「書き込みできない」というエラーが出る stk500_getsync(): not in sync: resp=0x00 2 通りの原因がある。 1 つめは、シリアルポート (0, 1 番端子) に結線していると、 このエラーが出る。線を外す。 2 つめは COM ポートの番号が合っていないことである。 コントロールパネル --- システム --- デバイスマネージャ で studuino が接続されているポートを確認する。 Arduino IDE で ツール --- シリアルポート で、ポート番号を 合わせる。 あるいは、デバイスマネージャにおいて、 右クリック --- プロパティ --- ポートの設定 --- 詳細設定 で 「COM ポート番号」を Arduino IDE で設定されている値に設定する。 (2) scratch 環境 scratch プログラミング環境で、時々、プログラムを転送しようとすると 「他のアプリが使用しています」というエラーが出ることがある。 このときは一度プログラミング環境を終了し、再度、起動すると 接続できるようになる。 scratch 環境がハングアップしたときは、タスクマネージャで「タスクの終了」 を選択するしかないようだ。編集中のプログラムがパーになるので、 時々保存しておく必要がある。
端子は 16 個ある。 A0-A7 D0-D7 加速度センサー, カラーセンサー A4, A5 固定(I2C) 同時使用不可 タッチセンサー, LED, ブザー A0-A5 (A6, A7 は使えない) それ以外のセンサー A0-A7 3 本の端子は外側から GND Vcc(3.3V) I/O である。 灰色のコードが信号線 (I/O) 。信号線は一番内側にくる。 <DC モータ> DCモータは専用端子 M1, M2 を使う M1 使用時は D2, D4 は使用不可 M2 使用時は D7, D8 は使用不可 <サーボモータ> D9-D12 はサーボモータ用 <プッシュスイッチ> 基板上のプッシュスイッチを使用する場合は A0-A3 は使えない。
センサー名 type value
---------------------------------------------
光センサー A 0(暗) -- 100(明)
フォトリフレクタ A 0 -- 59(max) 5mm くらいで max
タッチセンサー D 0(on) 1(off)
音センサー A 0(無音) 50(騒)
加速度センサー A x (水平右) y(水平上) z(鉛直上)
0 ----- 50 ----- 100
min 加速なし max
矢印方向に力がかかるとき 50 より小さくなる
重力 (9.8m/s^2) はプラスマイナス 25
ジャイロセンサー A 加速度 x (水平右) y(水平上) z(鉛直上)
0 ----- 50 ---- 100
min 加速なし max
矢印方向に加速すると 50 より小さくなる
重力 (9.8m/s^2) はプラスマイナス 25
水平面に置くと ( 50, 50, 75 )
角速度 x y z は回転軸
0 -------- 50 ------- 100
時計回り 回転なし 反時計回り
カラーセンサー A R, G, B : 0 -- 100 レベル
X, Y : 0 -- 1 色度座標
C : 説明なし
色 : 黒, 白, 赤, 緑, 青, 茶, 不明 のいずれか
天井の蛍光燈に向けても RGB は 30 程度にしかならない。
赤色のブロックに向けると一桁の値になる。
色をイマイチ正確に判別できないようだ。
センサー名 type value
---------------------------------------------
光センサー A 0(暗) -- 1023(明)
机の上 どこを向けても 990 くらい
片手で握ると 50 両手で包むと 0
フォトリフレクタ A 0 -- 999(max) 何もなしで 70 くらい
タッチセンサー D 0(on) 1(off)
音センサー A 0(無音) 500? (騒) 上限不明
回路は半波整流して包絡線をとっている。
出力は最大で 2V 程度なので、0-3.3V が 0-1023 に
対応すると考えるなら、2V は 620 になる。
加速度センサー A x y 水平面 z 鉛直上向き
-128 ----- 0 ----- 127
min 加速なし max
重力 (9.8m/s^2) は 64
加速度センサの値を受け取る変数は int にすること
モーターは電池ユニットを接続して on にしないと、使えない。 USB の 5V だけでは動かない!!! - DC モータ モータの速度を設定 → モータを「正転・逆転・停止」 モータの速度を設定し忘れると動かない バッテリーを接続しないと動かない [正転] [逆転] のどちらかに設定しないと動かない - サーボモータ 中央 90 度 右に回しきった状態 0 度 左に回しきった状態 180 度 可動範囲は 0-180 度 例えば 190 度と指定すると 180 度とみなされる。 正面に油性マジックで印を付けておくとよい。
1. 最初に入出力の設定を行う。 「編集」→「入出力設定」 例: a0-a3 LED a4 超音波センサー a5 赤外線フォトリフレクタ a6 光センサー a7 音センサー a6 と a7 は光センサー, 音センサー, 赤外線フォトリフレクタしか接続できない。 アナログ入力専用なのか? 上記の入出力の設定はファイルに書き込まれる。 また、新規作成するとデフォルトの値が使われるので、 ひな形ファイルを 1 つ作成しておき、それを 「名前を付けて保存」して始めるのがよい。 2. センサーの入力の確認 「実行」→「センサー値確認モード」 でセンサーからの入力の確認ができる。 3. プログラムの作成 アイコンを並べる。ドラッグする。 挿入・削除は右クリック 繰り返しは最上段の小さいマスに repeat 用アイコンを並べる。 4. 実行 「実行」→「プログラム作成・転送」 プログラムをアップロードした後、自動的に実行される。 再実行するときは 「実行」→「プログラム実行」 a. if の組み方 タッチセンサーが on になったら LED が点灯するようプログラムしたところ、 1 回押すと on のままになってしまった。 次の列で LED off として、その条件としてタッチセンサー off とする。 何が起こっているのか訳が分からない。 「編集」→「Arduino 言語を表示」で Processing のソースファイルが見れる。 Else が設定できないので、プログラミング言語としての機能が不完全である。 b. テストモード テストモードは音符アイコンの確認用。 一つの音符アイコンに最大 8 個の音を登録可能 ブザーと音符は同一デバイスである。音の指定の方法が異なる。 ブザーは 1 音のみ 音程と秒数で指定 音符は 8 音まで 音程と音符とテンポを指定
1. ポートの設定 「編集」→「入出力設定」 この設定はファイル毎に保存される。 2. センサーの値の読み取り 「実行」→「テストモード」 scratch が作るコードは非常に複雑なので、 それを arduino エディタで再編集するのはやめた方がよい。 3. プログラムの実行方法 「実行」→「プログラム作成・転送」 arduino の内部変数の状態を見ながら実行することができる。 USB を接続した状態で、 「実行」→「テストモード」→「緑旗アイコンをクリック」 とすると、変数の内容が表示され、今実行されているブロック全体が光る 4. 操作方法 - 適当にドラッグすればプログラムが組める - 「要素を右クリック」→「複製」で複製 - 「何もない場所で右クリック」→「きれいにする」で整列 - 「既に Studuino が接続されています」というエラーが出る場合は、 Studuino の USB ケーブルを一旦抜いて、再度差す。 - デフォルトのプログラム保存用フォルダは「ドキュメント\Scratch Projects」 - 変数の名前や設定を変えるときは、右端の ▼ マークを押すこと 変数の名前の部分を押すと、ブロック全体が光って、ブロック組み替えモードに なる。そのときは、もう一度クリックする。 <古いバージョンでの問題点> - 孤立したブロックがあると動かない ----> ダミー関数を作り、それにくっつける
arduino IDE はインストール済であることを仮定する。
アーテックロボのトップサイトから
「ダウンロード」→「Arduino IDE を利用の方」
をたどるとインストールの説明書に行きつく。
(1) ダウンロード
・ライブラリのダウンロード
studuino_v1_lib.zip
・ハードウェア設定ファイルのダウンロード
arduino_ide_settings_ver16x_18x.zip
(2) 展開と配置
arduino_ide_settings_ver16x_18x.zip を展開してできる
フォルダを以下のフォルダにコピーする
hardware/studuino -----> arduino-1.8.x/hardware/studuino
hardware/tools/bootloadHID -----> arduino-1.8.x/hardware/tools/bootloadHID
studuino_v1_lib.zip を展開してできるフォルダを
以下のフォルダにコピーする
studuino_v1_lib/* ------> arduino-1.8.x/libraries/*
(3) ライブラリを認識させる
「スケッチ」→「ライブラリをインクルード」→「.zip 形式のライブラリを
インストール」で (2) で配置したライブラリのフォルダを 1 個ずつ指定する。
(4) 環境設定
「ファイル」→「環境設定」
以下の項目を設定すると便利
・スケッチブックの保存場所
・外部エディタを利用するにチェックを入れる
外部エディタについては arduino の覚え書き を参照すること。
変数の値などを見るには、以下のようにシリアルに出力する。
PC 側では TeraTerm などを起動しておく。
Arduino IDE の「ツール」→「シリアルモニタ」を使っても良い。
以下のプログラムを見れば、DC モータ以外の素子の使い方は分かる。
詳しくは Studuino ライブラリ 関数リファレンス編を見ること。
#include <Arduino.h>
#include <Servo.h>
#include <Wire.h>
#include <MMA8653.h>
#include "Studuino.h"
Studuino st;
void setup(){
st.InitDCMotorPort(PORT_M1);
st.InitDCMotorPort(PORT_M2);
st.InitServomotorPort(PORT_D9);
st.InitServomotorPort(PORT_D10);
st.InitServomotorPort(PORT_D11);
// st.InitSensorPort(PORT_A0,PIDLED);
st.InitSensorPort(PORT_A4,PIDACCELEROMETER);
st.InitSensorPort(PORT_A5,PIDACCELEROMETER);
st.InitSensorPort(PORT_A0,PIDPUSHSWITCH);
st.InitSensorPort(PORT_A1,PIDPUSHSWITCH);
st.InitSensorPort(PORT_A2,PIDSOUNDSENSOR);
st.InitSensorPort(PORT_A3,PIDIRPHOTOREFLECTOR);
st.InitSensorPort(PORT_A7,PIDLIGHTSENSOR);
Serial.begin(9600);
}
int ini = 0;
int kakudo, plus;
void loop(){
byte sw, sw2;
int x,y,z;
int sound, ir, light;
sw = st.GetPushSwitchValue(PORT_A0);
sw2 = st.GetPushSwitchValue(PORT_A1);
x = st.GetAccelerometerValue(X_AXIS);
y = st.GetAccelerometerValue(Y_AXIS);
z = st.GetAccelerometerValue(Z_AXIS);
sound = st.GetSoundSensorValue(PORT_A2);
ir = st.GetIRPhotoreflectorValue(PORT_A3);
light = st.GetLightSensorValue(PORT_A7);
if ( ini == 0 ){
kakudo = 90;
plus = 10;
st.Servomotor(PORT_D9, kakudo);
st.Timer(500);
ini = 1;
}
kakudo = kakudo + plus;
if ( kakudo > 180 ) {
kakudo = 170;
plus = -10;
} else if ( kakudo < 0 ){
kakudo = 10;
plus = 10;
}
Serial.print(kakudo); Serial.print(" ");
st.Servomotor(PORT_D9, kakudo);
st.Timer(500);
// st.LED(PORT_A0,ON);
// st.LED(PORT_A0,OFF);
st.DCMotorControl(PORT_M1, NORMAL);// NORMAL | REVERSE | BRAKE | COAST
st.DCMotorControl(PORT_M2, REVERSE);
st.DCMotorPower(PORT_M1, 100); // 0 -- 255
st.DCMotorPower(PORT_M2, 100);
}
stu arduino A0 A0 D14 A1 A1 D15 A2 A2 D16 A3 A3 D17 A4 A4 D18 A5 A5 D19 A6 A6 A7 A7 Dx の番号は同じ D9 D10 D11 D12: サーボモータ用 D2 D4: DC モータ1 と兼用(D3 も使用) D7 D8: DC モータ2 と兼用(D5 も使用)
> エディタ起動時のサイズを変更する Arduino 1.0.5 を使用しているとき、以下のファイルを 直接編集する。 C:\users\user-name\AppData\Roaming\Arduino\preferences.txt editor.window.height.default= editor.window.width.default= > 一度登録したライブラリを外す エディタのメニューの中にはないようだ。 C:\users\user-name\AppData\Roaming\Arduino\preferences.txt を削除して、arduino.exe を起動する。