ここではArduinoに必要な準備作業について記載します
体験的マイコン学習(Arduino編)
第9回 ダンボードで人工会話ロボットを作ってみた 目次
今回はダンボードというキャラクターのフィギュアを加工して、ロボットにしてみました
9-1-2 Arduinoの準備作業
スピーカーをハンダ付けする
(1) スピーカーと、オーディオアンプと、3.5mmミニプラグをハンダ付けして、スピーカー作成します
完成図
表面
裏面
サーボモーターライブラリ(VarSpeedServo)を追加する
VarSpeedServoは、サーボモーターの速度調整をする為に必要なライブラリになります
(1) サーボモーターライブラリ(VarSpeedServo)をGitHubからダウンロードします
https://github.com/netlabtoolkit/VarSpeedServo
(2) Arduino IDEを起動します
(3) スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストールの順に選択します
(4) ウィンドウが開くので、ZIPファイルを選択して開きます
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);
}
}
}
※ サーボモーターの初期値については調整してください