studuino の覚え書き

初版作成  2015.10
最終更新  2018.01.24


◆◆ arduino の覚え書き ◆◆

arduino の覚え書き

◆◆ インストール 2016.3.2 ◆◆

ドライバとプログラミング環境をアーテック社のサイトからダウンロードする。

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 プログラミング ◆◆

Scratch のプログラムの拡張子は bpd
授業時は、あらかじめ、ひな形ファイルを作っておき、それを変更させるという
形式にした方がよい。

「ドキュメント」フォルダの下に Scratch Projects という
フォルダが自動生成される。

デフォルトでは「新規作成」→「保存」すると、
ドキュメント\Scratch Project に保存する。

◆◆ 電源 ◆◆

USB から 5V が供給されている状態でも、DC モータとサーボモータの動作には
外付けバッテリーが必要。外付けバッテリーはニッケル水素電池でも OK。

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 は使えない。


◆◆ 各種センサの値(scratch) ◆◆

センサー名        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 程度にしかならない。
                        赤色のブロックに向けると一桁の値になる。

                        色をイマイチ正確に判別できないようだ。

◆◆ 各種センサの値(processing) ◆◆

センサー名        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 音まで 音程と音符とテンポを指定


◆◆ scratch でのプログラミング ◆◆

1. ポートの設定

「編集」→「入出力設定」

この設定はファイル毎に保存される。

2. センサーの値の読み取り

「実行」→「テストモード」

scratch が作るコードは非常に複雑なので、
それを arduino エディタで再編集するのはやめた方がよい。

3. プログラムの実行方法

「実行」→「プログラム作成・転送」

arduino の内部変数の状態を見ながら実行することができる。
USB を接続した状態で、
「実行」→「テストモード」→「緑旗アイコンをクリック」

とすると、変数の内容が表示され、今実行されているブロック全体が光る

4. 操作方法

- 適当にドラッグすればプログラムが組める
- 「要素を右クリック」→「複製」で複製
- 「何もない場所で右クリック」→「きれいにする」で整列
- 「既に Studuino が接続されています」というエラーが出る場合は、
   Studuino の USB ケーブルを一旦抜いて、再度差す。
- デフォルトのプログラム保存用フォルダは「ドキュメント\Scratch Projects」
- 変数の名前や設定を変えるときは、右端の ▼ マークを押すこと
  変数の名前の部分を押すと、ブロック全体が光って、ブロック組み替えモードに
  なる。そのときは、もう一度クリックする。

<古いバージョンでの問題点>

- 孤立したブロックがあると動かない ----> ダミー関数を作り、それにくっつける


◆◆ arduino IDE 事前実施作業 ◆◆

(1) Studuino 用の設定

boards.zip をダウンロードして展開すると boards.txt が生成される。
boards.txt を arduino-1.0.5/hardware/arduino にコピーする

(2) Studuino 専用ライブラリの配置

libraries.zip を展開してできるフォルダ MMA8653 と Studuino を
arduino-1.0.5/libraries 以下にコピーする。

(3) ライブラリを認識させる

「スケッチ」→「ライブラリを使用」→「Add Library」で
上記でコピーしたライブラリのフォルダを指定する。
フォルダが 2 つあるので、同じ操作を 2 回行う。

(4) ホームディレクトリの設定

ホームディレクトリを「ファイル」→「環境設定」で指定する。

デフォルトは C:\Users\yabu\Documents\Processing であるが、
変更してもよい。

(5) エディタの設定

processing の覚え書きのところに書いた。

arduino-1.0.5/lib/preferences.txt   は関係ない
arduino-1.0.5/lib/theme/theme.txt   を書き換える

(6) studuino の認識

以下のような経緯があった。

「ツール」→「シリアルポート」を見ると studuino は COM5 に
接続されているが、COM1 しか認識しない。

デバイスマネージャで studuino を COM1 に割り当てる。

ところが、翌日、studuino を認識しない。

デバイスマネージャを見るとビックリマークがついている。
COM2 に割り当てるとビックリマークが消えた。

arduino IDE で「ツール」→「シリアルポート」を見ると
COM2 が見えている。


◆◆ 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);
}

◆◆ エディタに関すること ◆◆

> エディタ起動時のサイズを変更する

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 を起動する。