対応ロボット:Qmcum(QX-001R3J)
クムクムにArduinoIDEから2つの数字を入力し、その二つの数字の掛け算の答えをしゃべるプログラムを作ります。
まずは数字をしゃべらせ、次に答えを桁付きでしゃべらせてみます。
変数の使い方と演算(掛け算)の処理をマスターしましょう。
シリアルモニタ
Arduino IDEには、プログラムから数値や文字列を表示させたり、キーボードから数値や英数文字などを入力する機能があります。
このシリアルモニタを使うには [ツール]-[シリアルモニタ] を選択します。新しくウインドウが開きます。プログラムへ値を入力するには赤線で囲ったテキストボックスに入力し、横の [送信] ボタンをクリックします。
広いエリアには、プログラムから出力した値などが表示される部分になります。
関数の説明のところも参照してください。
詳細はこちらで紹介されていますので、詳しく見たい方は参照してください。
http://blog-yama.a-quest.com/?eid=970151
ArduinoIDE用の音声合成ライブラリを追加するために
- ライブラリファイル Arduino_AquesTalk_Library.zip をダウンロードしてください。
- Arduino IDEのメニュー[スケッチ]-[ライブラリをインクルード]-[.ZIP形式のライブラリをインクルード]を選択します。ファイル選択ウインドウが表示されるので、先ほどダウンロードしたZIPフィルを選択して[開く]をクリックすれば完了です。

ライブラリ
音声合成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;
void setup(){
Serial.begin(115200);
while (!Serial) { ; } //Leonardoの場合にはこの部分が必要
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
int kazu1, kazu2; //入力値を覚えておく変数
Serial.print("ひとつめの値は?");
while(!Serial.available())
;
kazu1 = Serial.parseInt(); //数値として取得
while(Serial.available())
Serial.read();
Serial.println(kazu1);
Serial.print("ふたつめの値は?");
while(!Serial.available())
;
kazu2 = Serial.parseInt(); //数値として取得
while(Serial.available())
Serial.read();
Serial.println(kazu2);
String str1("<NUMK VAL=" + String(kazu1) + ">" + "kakeru" + "<NUMK VAL=" + String(kazu2) + ">" + "wa");
atp.Synthe(str1.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
Serial.print(kazu1); //シリアルモニタに掛け算式を表示する
Serial.print("*");
Serial.print(kazu2);
Serial.print("=");
Serial.println(kazu1*kazu2);
String str2("<NUMK VAL=" + String(kazu1*kazu2) + ">" + "desu");
atp.Synthe(str2.c_str()); //String型の変数として関数に渡す記述方法
delay(2000);
}
シリアルモニタを使うための関数
void Serial.print( すべての基本型 )
人間の読めるASCII文字の形でデータをシリアルポートに出力します。この関数は様々な形式を使用することができます。数字は,各桁ASCII文字を使用して出力されます。
他の多くの関数は、ここ https://cdn.arduino.cc/reference/jp/language/functions/communication/serial/print/ を参照してください。
関数
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)
クムクムにArduinoIDEから2つの数字を入力し、その二つの数字の掛け算の答えをしゃべるプログラムを作ります。
まずは数字をしゃべらせ、次に答えを桁付きでしゃべらせてみます。
変数の使い方と演算(掛け算)の処理をマスターしましょう。
シリアルモニタ
Arduino IDEには、プログラムから数値や文字列を表示させたり、キーボードから数値や英数文字などを入力する機能があります。
このシリアルモニタを使うには [ツール]-[シリアルモニタ] を選択します。新しくウインドウが開きます。プログラムへ値を入力するには赤線で囲ったテキストボックスに入力し、横の [送信] ボタンをクリックします。
広いエリアには、プログラムから出力した値などが表示される部分になります。
関数の説明のところも参照してください。
詳細はこちらで紹介されていますので、詳しく見たい方は参照してください。
http://blog-yama.a-quest.com/?eid=970151
ArduinoIDE用の音声合成ライブラリを追加するために
- ライブラリファイル Arduino_AquesTalk_Library.zip をダウンロードしてください。
- Arduino IDEのメニュー[スケッチ]-[ライブラリをインクルード]-[.ZIP形式のライブラリをインクルード]を選択します。ファイル選択ウインドウが表示されるので、先ほどダウンロードしたZIPフィルを選択して[開く]をクリックすれば完了です。

ライブラリ
音声合成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;
void setup(){
Serial.begin(115200);
while (!Serial) { ; } //Leonardoの場合にはこの部分が必要
Wire.begin();
atp.SetPitch(0);
atp.SetSpeed(100);
}
void loop(){
int kazu1, kazu2; //入力値を覚えておく変数
Serial.print("ひとつめの値は?");
while(!Serial.available())
;
kazu1 = Serial.parseInt(); //数値として取得
while(Serial.available())
Serial.read();
Serial.println(kazu1);
Serial.print("ふたつめの値は?");
while(!Serial.available())
;
kazu2 = Serial.parseInt(); //数値として取得
while(Serial.available())
Serial.read();
Serial.println(kazu2);
String str1("<NUMK VAL=" + String(kazu1) + ">" + "kakeru" + "<NUMK VAL=" + String(kazu2) + ">" + "wa");
atp.Synthe(str1.c_str()); //String型の変数として関数に渡す記述方法
delay(300);
Serial.print(kazu1); //シリアルモニタに掛け算式を表示する
Serial.print("*");
Serial.print(kazu2);
Serial.print("=");
Serial.println(kazu1*kazu2);
String str2("<NUMK VAL=" + String(kazu1*kazu2) + ">" + "desu");
atp.Synthe(str2.c_str()); //String型の変数として関数に渡す記述方法
delay(2000);
}
シリアルモニタを使うための関数
void Serial.print( すべての基本型 )
人間の読めるASCII文字の形でデータをシリアルポートに出力します。この関数は様々な形式を使用することができます。数字は,各桁ASCII文字を使用して出力されます。
他の多くの関数は、ここ https://cdn.arduino.cc/reference/jp/language/functions/communication/serial/print/ を参照してください。
関数
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/