対応ロボット:Qmcum(QX-001R3J)
BEEP-0009で作ったプログラムをベースに、演奏速度を簡単に変えられるように音符の再生時間を変数を使って動かすプログラムを作ってみましょう。
ここでは#define定義で SOKUDO を指定しています。変数にすることもできます。
※4分音符を0.6秒の長さを基準として音符の長さを最初に書いています。それをSOKUDOで割り算して速度を変えます。
ソースコード
#define TONEOUT 12 //12番ピンがBEEP出力
enum Takasa{ KYUFU=0,DO4=524,RE4=588,MI4=660,FA4=698,SO4=784,RA4=880,SI4=988,DO5=1046 }; //enum定義 数値は周波数
enum Nagasa{ _ZEN=2400,_2BU=1200,_4BU=600,_8BU=300,_16BU=150}; //数値はミリ秒 //一つの音を出す関数を定義
#define SOKUDO 1.0 //1.0を基準に±する
void oto(Takasa takasa, Nagasa nagasa){
if(takasa!=KYUFU){
tone(TONEOUT, takasa); //KYUFUでなければ音を出す
delay(nagasa/SOKUDO);
}
else{
delay(nagasa/SOKUDO); //KYUFUならその間休み
}
noTone(TONEOUT); //音を止める
}
void setup() {
for(int i=0;i<2;i++){ //ドレミの2かい繰り返し
oto(DO4, _4BU);
oto(RE4, _4BU);
oto(MI4, _2BU);
}
oto(SO4, _4BU);
oto(MI4, _4BU);
oto(RE4, _4BU);
oto(DO4, _4BU);
oto(RE4, _4BU);
oto(MI4, _4BU);
oto(RE4, _4BU);
}
void loop() { }
BEEPについて
クムクムのBEEP音はArduinoのtone関数によって出力します。
CPUのデジタル指定した出力のポートから矩形波を出力することでこれをtoneとして音に変えます。
音を再生するためのもっとも簡単な方法は、Arduinoの出力ポートに圧電ブザーなどを接続しますが、これでは音が小さいため、クムクムではオーディオアンプを通して小型のスピーカから音を鳴らしています。

tone関数
Arduino標準関数で、出力PINから、周波数(50%のデューティ・サイクル)の高さの音を、出力時間(msec)鳴らします。出力時間(msec)を省略した場合は、出力を止める noTone()関数をコールするまでBEEP音はなり続けます。
※tone関数によって指定できるPINは1つだけに限られます。
出力PIN | 出力PIN番号を指定します |
周波数 | 出力する周波数を設定します |
出力時間 | 何ミリ秒鳴らしたいかを設定します 型:unsigned long 0~4,294,967,295 |
戻り値 | なし |
周波数は使用するボード、アンプ・スピーカーの性能によって異なりますが、プログラム的には下記の値を指定することが可能です
ボード | 出力周波数 |
Uno,Mega,Leonardo,その他AVR系 | 31Hz~65535Hz |
Zero | 41Hz~275000Hz |
Gemma,Due | 実装なし |
noTone関数
tone関数で出力した音を停止します。
PIN番号 | toneを鳴らした出力PIN番号 |
戻り値 | なし |
音階と周波数


◆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)
BEEP-0009で作ったプログラムをベースに、演奏速度を簡単に変えられるように音符の再生時間を変数を使って動かすプログラムを作ってみましょう。
ここでは#define定義で SOKUDO を指定しています。変数にすることもできます。
※4分音符を0.6秒の長さを基準として音符の長さを最初に書いています。それをSOKUDOで割り算して速度を変えます。
ソースコード
#define TONEOUT 12 //12番ピンがBEEP出力
enum Takasa{ KYUFU=0,DO4=524,RE4=588,MI4=660,FA4=698,SO4=784,RA4=880,SI4=988,DO5=1046 }; //enum定義 数値は周波数
enum Nagasa{ _ZEN=2400,_2BU=1200,_4BU=600,_8BU=300,_16BU=150}; //数値はミリ秒 //一つの音を出す関数を定義
#define SOKUDO 1.0 //1.0を基準に±する
void oto(Takasa takasa, Nagasa nagasa){
if(takasa!=KYUFU){
tone(TONEOUT, takasa); //KYUFUでなければ音を出す
delay(nagasa/SOKUDO);
}
else{
delay(nagasa/SOKUDO); //KYUFUならその間休み
}
noTone(TONEOUT); //音を止める
}
void setup() {
for(int i=0;i<2;i++){ //ドレミの2かい繰り返し
oto(DO4, _4BU);
oto(RE4, _4BU);
oto(MI4, _2BU);
}
oto(SO4, _4BU);
oto(MI4, _4BU);
oto(RE4, _4BU);
oto(DO4, _4BU);
oto(RE4, _4BU);
oto(MI4, _4BU);
oto(RE4, _4BU);
}
void loop() { }
BEEPについて
クムクムのBEEP音はArduinoのtone関数によって出力します。
CPUのデジタル指定した出力のポートから矩形波を出力することでこれをtoneとして音に変えます。
音を再生するためのもっとも簡単な方法は、Arduinoの出力ポートに圧電ブザーなどを接続しますが、これでは音が小さいため、クムクムではオーディオアンプを通して小型のスピーカから音を鳴らしています。

tone関数
Arduino標準関数で、出力PINから、周波数(50%のデューティ・サイクル)の高さの音を、出力時間(msec)鳴らします。出力時間(msec)を省略した場合は、出力を止める noTone()関数をコールするまでBEEP音はなり続けます。
※tone関数によって指定できるPINは1つだけに限られます。
出力PIN | 出力PIN番号を指定します |
周波数 | 出力する周波数を設定します |
出力時間 | 何ミリ秒鳴らしたいかを設定します 型:unsigned long 0~4,294,967,295 |
戻り値 | なし |
周波数は使用するボード、アンプ・スピーカーの性能によって異なりますが、プログラム的には下記の値を指定することが可能です
ボード | 出力周波数 |
Uno,Mega,Leonardo,その他AVR系 | 31Hz~65535Hz |
Zero | 41Hz~275000Hz |
Gemma,Due | 実装なし |
noTone関数
tone関数で出力した音を停止します。
PIN番号 | toneを鳴らした出力PIN番号 |
戻り値 | なし |
音階と周波数


◆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/