対応ロボット:Qmcum(QX-001R3J)
スクラッチのおしゃべりで配列に入っている目的地と時間をしゃべらせるプログラムを作ります。
配列は簡単な配列を2つ使う方法と、構造体でまとめる方法を使います。
構造体を使った例はいろんなArduino言語のテクニックが入っててちょっと難しいのでわからなくても大丈夫だよ。
ライブラリ
音声合成LSIを使うには[Arduino] AquesTalk ライブラリが必要です。
詳細はこちらで紹介されていますので、詳しく見たい方は参照してください。
http://blog-yama.a-quest.com/?eid=970151
ArduinoIDE用の音声合成ライブラリを追加するために
- ライブラリファイル Arduino_AquesTalk_Library.zip をダウンロードしてください。
- Arduino IDEのメニュー[スケッチ]-[ライブラリをインクルード]-[.ZIP形式のライブラリをインクルード]を選択します。ファイル選択ウインドウが表示されるので、先ほどダウンロードしたZIPフィルを選択して[開く]をクリックすれば完了です。

ソースコード
//配列を2つ使った例
#include "Wire.h"
#include "AquesTalk.h"
AquesTalk atp;
#define KOSUU 7 //配列の要素数
char *basho[]={"eki","ie","yama","umi","kawa","fujisann","gakko-"};//場所の配列
int jikan[]={10,15,100,50,60,180,5};//時間の配列
void setup(){
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
for(int i=0;i<KOSUU;i++){
atp.Synthe(basho[i] ); //basho配列から順に要素を取得して関数に渡す
delay(300);
atp.Synthe("madewa"); //basho配列から順に要素を取得して関数に渡す
delay(300);
String str("<NUMK VAL=" + String(jikan[i]) + " COUNTER=fun>");
atp.Synthe(str.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
atp.Synthe("desu");
delay(1000);
}
delay(2000);
}
ソースコード
//構造体を使った例
#include "Wire.h"
#include "AquesTalk.h"
AquesTalk atp;
typedef struct {const char* basho; int jikan;} BashoJikan ;
BashoJikan bj[]={
{"eki ",10}, {"ie",15}, {"yama ",100}, {"umi ",50}, {"kawa ",60}, {"fujisann ",180}, {"gakko- ",5}
};
int kosuu = sizeof(bj)/sizeof(bj[0] );
void setup(){
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
for(int i=0;i<kosuu ;i++){
String str1(String(bj[i].basho) + "madewa");
atp.Synthe(str1.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
String str2("<NUMK VAL=" + String(bj[i].jikan) + " COUNTER=fun>");
atp.Synthe(str2.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
atp.Synthe("desu");
delay(1000);
}
delay(2000);
}
関数
void Synthe(const char *msg)
音声合成を行います。msgには 発声する音声記号やコマンド文字列を指定します。
この関数は、前の発声の終了を待ってから、引数の文字列の最後にデリミタのCR(‘¥r’)を付与してLSIに送信しています。
void SetSpeed(uint16_t speed, uint8_t *pRet=0)
発話速度を設定します。
発話速度はLSIの不揮発メモリに設定しますので、これで設定した値は、電源を切っても継続されます。speed: 50-300 標準:100 50:最遅 300:最速
void SetPitch(uint8_t pitch, uint8_t *pRet=0)
声の高さを設定します。pitch: 声の高さ 0-254 標準:64 0:高い 254:低い
おしゃべりについて
クムクムのおしゃべりは、株式会社アクエスト社が販売をする「Aques Talk」のLSI版である「Aques Talk pico LSI」を使用しています。
このLSIをクムクムのメインCPU(ATMEGA32U4)とI2Cバスで接続し、Aques Talk pico LSIの出力からオーディオアンプを通してスピーカから音声を鳴らしています。
クムクムにおけるオーディオアンプは1つだけで、BEEP音と兼用しモノラルで再生しています。
Aques Talk pico LSIをArduinoのC言語プログラミングで使用する場合は、アクエスト様が公開されている <データシート> や <ブログ記事> を参考にします。

メインCPUとつなぐI2Cとは
I2Cとはいくつかの部品や装置を2本の線で接続し制御できるようにした低速シリアル通信の方式でフィリップス社によって開発されたものです。
主には基板上での部品や基板同士の通信で使われますが、I2Cバスコントロールを搭載した部品や基板は、基本的に通信コマンドによって複雑な機能をコントロールできるため、ハードウェアの複雑なプログラミングから解放され簡単にいろいろな制御ができるメリットがあります。
Arduinoシリーズでは、ほとんどの基板にI2Cが用意されており、I2Cをコントロールするためのコマンドもしっかり用意されていますので、とても扱いやすく便利です。
どんどん増やせるI2C
I2Cを搭載した温度制御やLCD表示器、モーターコントr-るボードや加速度センサーなど多くのモジュールが様々なメーカから販売されており、これらのボードをArduinoからは簡単にどんどん増やして使うことができます。
クムクムのボードのI2Cにはすでに日本語発話用のLSIが接続されていますが、ボードには、まだまだいろいろなセンサーが増やせるようにI2Cを拡張ポートとして用意していますので、ここにどんどんいろいろなモジュールを増やして機能を追加することができます。

メインボードとI2Cの接続


◆Arduinoプログラミングについて
Arduinoを利用して、C,C++言語でクムクムをコントロールするプログラムを作り、クムクムロボットのボード内に書き込んで直接動かすことができます。
スクラッチやPythonなどより、より早く・より自由に動かすことができます。
CPUから各パーツを直接コントロールするプログラムを作るため、電気的な知識をしっかりマスターすることができます。
1.開発環境
WindowsまたはMacなど、ArduinoIDEがインストールされたパソコンとクムクムをマイクロUSBのケーブルで結びます。
※ArduinoIDEは <こちら>から最新バージョンをダウンロードすることができます。
※USBケーブルは必ずデータ通信が可能なケーブルをご用意ください。(中にはスマホ用などで充電専用のケーブルもあります)

2.クムクムのCPUを選択する
ArduinoIDEを起動し、お使いのクムクムの機種にあったCPUを選択します。
Qumcum[QX-001R3J]の場合には【ArduinoLeonardo】を、QumcumPRO/W[QX-001R321J/321E]の場合にはBoards ManagerからESP32を選択します。
ESP32が選択項目に現れない場合は、ESP32用のライブラリーなどをインストールしてください。(インストール方法などはArduino関連サイトなどから検索します。※参考サイト <ここ> リンク等は予告なく切れる場合があります。)
●使用CPU
Qumcum[QX-001R3J] … ATMEGA32U4
QumcumPRO/W[QX-001R321J/E] … ESP32 WROOM32-D,E

4.書き込み
プログラムができたら、パソコンとクムクムの接続されているポートを合わせ、その後書き込みボタン(右スクリーンショット赤い〇矢印)をクリックします。
クリック後、C言語で書かれたプログラムは機械語にコンパイルされ、USBケーブルを経由してロボットのCPUに書き込まれます。
書き込みが完了すると、プログラムは自動で実行され、作られたプログラム通りにロボットは動きます。
もし思い通りに動かなかったら、プログラムのどこかに間違えがあるので、直してもう一度書き込みます。
※Arduinoでは文法ミス以外は動かないプログラムでもCPUに書き込んで動かそうとしますので、書き込んでみなければ正しく動くかどうかがわかりません。
※また、CPUの中にあらかじめ書き込まれているArduinoシステムを壊してしまうプログラムも書き込めてしまうので、プログラミングは慎重に行ってください。

◆クムクムロボット公式サイトのマニュアル
https://qumcum.com/wp-content/uploads/2022/08/start_scratch.pdf
◆Scratch(スクラッチ)で動く3Dロボット「3D-WEBクムクム」β版
https://personal.qumcum.com/home3d/robo-real/
◆クムクムロボット(アマゾンQumcumストア)
https://www.amazon.co.jp/stores/Qumcum/page/FFCFA57A-F592-49A0-9F23-3D90514E5E61?ref_=ast_bln
◆Youtubeにはたくさんの動画を載せています
https://www.youtube.com/@qumcum/
対応ロボット:Qmcum(QX-001R3J)
スクラッチのおしゃべりで配列に入っている目的地と時間をしゃべらせるプログラムを作ります。
配列は簡単な配列を2つ使う方法と、構造体でまとめる方法を使います。
構造体を使った例はいろんなArduino言語のテクニックが入っててちょっと難しいのでわからなくても大丈夫だよ。
ライブラリ
音声合成LSIを使うには[Arduino] AquesTalk ライブラリが必要です。
詳細はこちらで紹介されていますので、詳しく見たい方は参照してください。
http://blog-yama.a-quest.com/?eid=970151
ArduinoIDE用の音声合成ライブラリを追加するために
- ライブラリファイル Arduino_AquesTalk_Library.zip をダウンロードしてください。
- Arduino IDEのメニュー[スケッチ]-[ライブラリをインクルード]-[.ZIP形式のライブラリをインクルード]を選択します。ファイル選択ウインドウが表示されるので、先ほどダウンロードしたZIPフィルを選択して[開く]をクリックすれば完了です。

ソースコード
//配列を2つ使った例
#include "Wire.h"
#include "AquesTalk.h"
AquesTalk atp;
#define KOSUU 7 //配列の要素数
char *basho[]={"eki","ie","yama","umi","kawa","fujisann","gakko-"};//場所の配列
int jikan[]={10,15,100,50,60,180,5};//時間の配列
void setup(){
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
for(int i=0;i<KOSUU;i++){
atp.Synthe(basho[i] ); //basho配列から順に要素を取得して関数に渡す
delay(300);
atp.Synthe("madewa"); //basho配列から順に要素を取得して関数に渡す
delay(300);
String str("<NUMK VAL=" + String(jikan[i]) + " COUNTER=fun>");
atp.Synthe(str.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
atp.Synthe("desu");
delay(1000);
}
delay(2000);
}
ソースコード
//構造体を使った例
#include "Wire.h"
#include "AquesTalk.h"
AquesTalk atp;
typedef struct {const char* basho; int jikan;} BashoJikan ;
BashoJikan bj[]={
{"eki ",10}, {"ie",15}, {"yama ",100}, {"umi ",50}, {"kawa ",60}, {"fujisann ",180}, {"gakko- ",5}
};
int kosuu = sizeof(bj)/sizeof(bj[0] );
void setup(){
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
for(int i=0;i<kosuu ;i++){
String str1(String(bj[i].basho) + "madewa");
atp.Synthe(str1.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
String str2("<NUMK VAL=" + String(bj[i].jikan) + " COUNTER=fun>");
atp.Synthe(str2.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
atp.Synthe("desu");
delay(1000);
}
delay(2000);
}
関数
void Synthe(const char *msg)
音声合成を行います。msgには 発声する音声記号やコマンド文字列を指定します。
この関数は、前の発声の終了を待ってから、引数の文字列の最後にデリミタのCR(‘¥r’)を付与してLSIに送信しています。
void SetSpeed(uint16_t speed, uint8_t *pRet=0)
発話速度を設定します。
発話速度はLSIの不揮発メモリに設定しますので、これで設定した値は、電源を切っても継続されます。speed: 50-300 標準:100 50:最遅 300:最速
void SetPitch(uint8_t pitch, uint8_t *pRet=0)
声の高さを設定します。pitch: 声の高さ 0-254 標準:64 0:高い 254:低い
おしゃべりについて
クムクムのおしゃべりは、株式会社アクエスト社が販売をする「Aques Talk」のLSI版である「Aques Talk pico LSI」を使用しています。
このLSIをクムクムのメインCPU(ATMEGA32U4)とI2Cバスで接続し、Aques Talk pico LSIの出力からオーディオアンプを通してスピーカから音声を鳴らしています。
クムクムにおけるオーディオアンプは1つだけで、BEEP音と兼用しモノラルで再生しています。
Aques Talk pico LSIをArduinoのC言語プログラミングで使用する場合は、アクエスト様が公開されている <データシート> や <ブログ記事> を参考にします。

メインCPUとつなぐI2Cとは
I2Cとはいくつかの部品や装置を2本の線で接続し制御できるようにした低速シリアル通信の方式でフィリップス社によって開発されたものです。
主には基板上での部品や基板同士の通信で使われますが、I2Cバスコントロールを搭載した部品や基板は、基本的に通信コマンドによって複雑な機能をコントロールできるため、ハードウェアの複雑なプログラミングから解放され簡単にいろいろな制御ができるメリットがあります。
Arduinoシリーズでは、ほとんどの基板にI2Cが用意されており、I2Cをコントロールするためのコマンドもしっかり用意されていますので、とても扱いやすく便利です。
どんどん増やせるI2C
I2Cを搭載した温度制御やLCD表示器、モーターコントr-るボードや加速度センサーなど多くのモジュールが様々なメーカから販売されており、これらのボードをArduinoからは簡単にどんどん増やして使うことができます。
クムクムのボードのI2Cにはすでに日本語発話用のLSIが接続されていますが、ボードには、まだまだいろいろなセンサーが増やせるようにI2Cを拡張ポートとして用意していますので、ここにどんどんいろいろなモジュールを増やして機能を追加することができます。

メインボードとI2Cの接続


◆Arduinoプログラミングについて
Arduinoを利用して、C,C++言語でクムクムをコントロールするプログラムを作り、クムクムロボットのボード内に書き込んで直接動かすことができます。
スクラッチやPythonなどより、より早く・より自由に動かすことができます。
CPUから各パーツを直接コントロールするプログラムを作るため、電気的な知識をしっかりマスターすることができます。
1.開発環境
WindowsまたはMacなど、ArduinoIDEがインストールされたパソコンとクムクムをマイクロUSBのケーブルで結びます。
※ArduinoIDEは <こちら>から最新バージョンをダウンロードすることができます。
※USBケーブルは必ずデータ通信が可能なケーブルをご用意ください。(中にはスマホ用などで充電専用のケーブルもあります)

2.クムクムのCPUを選択する
ArduinoIDEを起動し、お使いのクムクムの機種にあったCPUを選択します。
Qumcum[QX-001R3J]の場合には【ArduinoLeonardo】を、QumcumPRO/W[QX-001R321J/321E]の場合にはBoards ManagerからESP32を選択します。
ESP32が選択項目に現れない場合は、ESP32用のライブラリーなどをインストールしてください。(インストール方法などはArduino関連サイトなどから検索します。※参考サイト <ここ> リンク等は予告なく切れる場合があります。)
●使用CPU
Qumcum[QX-001R3J] … ATMEGA32U4
QumcumPRO/W[QX-001R321J/E] … ESP32 WROOM32-D,E

4.書き込み
プログラムができたら、パソコンとクムクムの接続されているポートを合わせ、その後書き込みボタン(右スクリーンショット赤い〇矢印)をクリックします。
クリック後、C言語で書かれたプログラムは機械語にコンパイルされ、USBケーブルを経由してロボットのCPUに書き込まれます。
書き込みが完了すると、プログラムは自動で実行され、作られたプログラム通りにロボットは動きます。
もし思い通りに動かなかったら、プログラムのどこかに間違えがあるので、直してもう一度書き込みます。
※Arduinoでは文法ミス以外は動かないプログラムでもCPUに書き込んで動かそうとしますので、書き込んでみなければ正しく動くかどうかがわかりません。
※また、CPUの中にあらかじめ書き込まれているArduinoシステムを壊してしまうプログラムも書き込めてしまうので、プログラミングは慎重に行ってください。

◆クムクムロボット公式サイトのマニュアル
https://qumcum.com/wp-content/uploads/2022/08/start_scratch.pdf
◆Scratch(スクラッチ)で動く3Dロボット「3D-WEBクムクム」β版
https://personal.qumcum.com/home3d/robo-real/
◆クムクムロボット(アマゾンQumcumストア)
https://www.amazon.co.jp/stores/Qumcum/page/FFCFA57A-F592-49A0-9F23-3D90514E5E61?ref_=ast_bln
◆Youtubeにはたくさんの動画を載せています
https://www.youtube.com/@qumcum/