体験的マイコン学習(Arduino編)


第9回 ダンボードで人工会話ロボットを作ってみた  目次


今回はダンボードというキャラクターのフィギュアを加工して、ロボットにしてみました


9-1-2 Arduinoの準備作業

ここではArduinoに必要な準備作業について記載します


スピーカーをハンダ付けする

(1) スピーカーと、オーディオアンプと、3.5mmミニプラグをハンダ付けして、スピーカー作成します


完成図

スピーカーのはんだ付け完成図

表面

スピーカーのはんだ付け表面

裏面

スピーカーのはんだ付け裏面

ページトップ

サーボモーターライブラリ(VarSpeedServo)を追加する

VarSpeedServoは、サーボモーターの速度調整をする為に必要なライブラリになります

(1) サーボモーターライブラリ(VarSpeedServo)をGitHubからダウンロードします

    https://github.com/netlabtoolkit/VarSpeedServo

(2) Arduino IDEを起動します

Arduino起動画面

(3) スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストールの順に選択します

VarSpeedServoのインストール手順1

(4) ウィンドウが開くので、ZIPファイルを選択して開きます

VarSpeedServoのインストール手順2
ページトップ

Arduinoのソースコードをボードに書き込む

(1) Arduino IDEを起動して、下記のソースコードをボードに書き込みます

danboard_control.ino

// サーボモーターのライブラリ読込

#include <VarSpeedServo.h>

// フルカラーLED

# define LED_PIN_LED 9 // 赤LED
# define LED_PIN_BLUE 10 // 青LED
# define LED_PIN_GREEN 11 // 緑LED

// サーボモーター

# define H_SERVO 5 // 頭サーボ
# define L_SERVO 3 // 左腕サーボ
# define R_SERVO 6 // 右腕サーボ

VarSpeedServo head_servo;
VarSpeedServo left_arm_servo;
VarSpeedServo right_arm_servo;

// シリアル通信での値を受け取る変数

byte val;

void setup() {

    // シリアル設定

    Serial.begin(9600);

    // LEDのピン設定

    pinMode(LED_PIN_LED, OUTPUT);
    pinMode(LED_PIN_BLUE, OUTPUT);
    pinMode(LED_PIN_GREEN, OUTPUT);

    // LEDの初期状態設定

    digitalWrite(LED_PIN_LED, LOW);
    digitalWrite(LED_PIN_BLUE, HIGH);
    digitalWrite(LED_PIN_GREEN, LOW);

    // サーボモーターの設定

    head_servo.attach(H_SERVO);
    left_arm_servo.attach(L_SERVO);
    right_arm_servo.attach(R_SERVO);

    // サーボモーターの初期角度

    head_servo.write(7);
    left_arm_servo.write(80, 15, true);
    right_arm_servo.write(90, 15, true);

}

void loop() {

    if (Serial.available() > 0) {
        val = Serial.read();
        Serial.write(val);

        // エラー発生時
        if (val == 'R') {
            // 目を赤色
            digitalWrite(LED_PIN_LED, HIGH);
            digitalWrite(LED_PIN_BLUE, LOW);
            digitalWrite(LED_PIN_GREEN, LOW);
        }

        // 初期状態の目の色に戻す
        if (val == 'B') {
            // 目を青色
            digitalWrite(LED_PIN_LED, LOW);
            digitalWrite(LED_PIN_BLUE, HIGH);
            digitalWrite(LED_PIN_GREEN, LOW);
        }

        // 音声受付時
        if (val == 'G') {
            // 目を緑色
            digitalWrite(LED_PIN_LED, LOW);
            digitalWrite(LED_PIN_BLUE, LOW);
            digitalWrite(LED_PIN_GREEN, HIGH);
        }

        // 発話時の目の点滅
        if (val == 'A') {
            // 目を赤青緑に点滅
            digitalWrite(LED_PIN_LED, HIGH);
            digitalWrite(LED_PIN_BLUE, LOW);
            digitalWrite(LED_PIN_GREEN, LOW);
            delay(300);
            digitalWrite(LED_PIN_LED, LOW);
            digitalWrite(LED_PIN_BLUE, HIGH);
            digitalWrite(LED_PIN_GREEN, LOW);
            delay(300);
            digitalWrite(LED_PIN_LED, LOW);
            digitalWrite(LED_PIN_BLUE, LOW);
            digitalWrite(LED_PIN_GREEN, HIGH);
        }

        // 会話を始める時にマイクの位置を調整
        if (val == 'S') {
            // サーボの角度を180度、スピードを15に設定
            left_arm_servo.write(180, 15, true);
            delay(10);
        }

        // 会話終了時の処理
        if (val == 'E') {
            // サーボの角度を初期値に設定
            head_servo.write(7);
            left_arm_servo.write(80, 15, true);
            right_arm_servo.write(90, 15, true);
            delay(10);
        }
    }
}

※ サーボモーターの初期値については調整してください


ページトップ