以下のスケッチをArduino IDEにコピペし、Studuino miniに転送してください。
Studuino mini上の光センサーを手で覆って暗くすると、ベゼリーが喋る言葉と動きが変わります。
・まずはスケッチを書き換えて、しゃべる言葉を変えてみましょう。
・次に動きを自分なりに変えてみましょう。
・うまくいったら、処理を切り替える明るさの値を変えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
//---------------------------------------------------------------------- // ベゼリーおしゃべりキット(BTK) Studuino用サンプルスケッチ // 最終更新:2016年8月20日 by Jun Toyoda (Team Bezelie) // 機能: // 1:電源を入れると、しゃべって動く。 // 2:暗くなるとセリフと動きが変わる。 // 3:デジタルI/Oピン5番にサーボをつなぐとセンタリングできる。 //---------------------------------------------------------------------- #include <Servo.h> // サーボのライブラリ #include <Wire.h> // I2C通信するためのライブラリ #include <AquesTalk.h> // AquesTalkのライブラリ AquesTalk atp; // AquesTalkのインスタンス定義 //サーボ初期設定 Pitch=首の縦振り, Roll=顔の回転, Yaw=体の回転 const int svPc = 90; // サーボの中心角度(Pitch) const int svRc = 90; // サーボの中心角度(Roll) const int svYc = 90; // サーボの中心角度(Yaw) int destP = svPc; // サーボの目標角度(Pitch)svPc-40<destP<svPc+20 int destR = svRc; // サーボの目標角度(Roll) svRc-40<destR<svRc+40 int destY = svYc; // サーボの目標角度(Yaw) svYc-40<destY<svYc+40 int spd = 10; // サーボの速度。0が最速。 //---------------------------------------------------------------------- void setup() // 初期設定 { initServo(); // サーボの初期センタリング atp.SetAccent(120); // AquesTalk声色指定 アクセント 0<64<255 atp.SetPitch(3); // AquesTalk声色指定 ピッチ 0<64<255 atp.SetSpeed(100); // AquesTalk声色指定 スピード 50<100<300 atp.Synthe("#J"); // AquesTalk発声「チャイム1」 while(atp.IsBusy()) ; // AquesTalk 鳴り止むまで待つ delay (1000); } //---------------------------------------------------------------------- void loop() // メインループ { if(analogRead(A6) > 200){ // 光センサの値が200以上なら以下を実行 atp.Synthe("akaruine'-."); // AquesTalk発声 spd = 10; // サーボの速度 destP = svPc - 40; // 首を上に向ける指定 servoMove(); // サーボを動かす delay (500); // 0.5秒待つ destP = svPc; // 首を水平に向ける指定 servoMove(); // サーボを動かす }else{ atp.Synthe("kuraiyo-."); // AquesTalk発声 spd = 15; // サーボの速度 destP = svPc + 20; // 首を上に向ける指定 servoMove(); // サーボを動かす delay (500); // 0.5秒待つ destP = svPc; // 首を水平に向ける指定 servoMove(); // サーボを動かす } delay (1000); // 1秒待つ } //---------------------------------------------------------------------- // サーボの設定 const int pinSvC = 5; // サーボ(センタリング用)をデジタルI/Oの5番に割り当てる const int pinSvP = 9; // サーボ(Pitch)をデジタルI/Oの9番に割り当てる const int pinSvR = 10; // サーボ(Roll)をデジタルI/Oの10番に割り当てる const int pinSvY = 11; // サーボ(Yaw)をデジタルI/Oの11番に割り当てる Servo svC; // サーボのインスタンスを作る(センタリング用) Servo svP; // サーボのインスタンスを作る(Pitch 首の縦振り用) Servo svR; // サーボのインスタンスを作る(Roll 顔の回転用) Servo svY; // サーボのインスタンスを作る(Yaw 体の回転用) int posP = svPc; // 変数:サーボの現在の角度(Pitch) int posR = svRc; // 変数:サーボの現在の角度(Roll) int posY = svYc; // 変数:サーボの現在の角度(Yaw) //---------------------------------------------------------------------- //関数 void servoMove (){ // サーボを動かす関数 while (posP != destP){ svP.attach(pinSvP); if (posP < destP){ posP++; }else{ posP--; } svP.write(posP); delay (spd+2); } while (posR != destR){ svR.attach(pinSvR); if (posR < destR){ posR++; }else{ posR--; } svR.write(posR); delay (spd+2); } while (posY != destY){ svY.attach(pinSvY); if (posY < destY){ posY++; }else{ posY--; } svY.write(posY); delay (spd+2); } svP.detach (); svR.detach (); svY.detach (); } void initServo (){ // サーボの初回センタリング svC.attach(pinSvC); svP.attach(pinSvP); svR.attach(pinSvR); svY.attach(pinSvY); svC.write(100); // 動作確認のため、わざとずらす svP.write(svPc); svR.write(svRc); svY.write(svYc); delay (500); svC.write(90); delay (500); svC.detach (); svP.detach (); svR.detach (); svY.detach (); } //---------------------------------------------------------------------- // AquesTalk pico LSIに関する情報 // 音声記号列生成サービス http://www.a-quest.com/demo/pico_kanji2roman.html // 記述ルール http://www.a-quest.com/download/manual/atp3011_datasheet.pdf // ライブラリ http://blog-yama.a-quest.com/?eid=970151 //---------------------------------------------------------------------- //end of file |