初版作成 2015.10
最終更新 2024.08.13
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 を起動する。