対応ロボット:Qmcum(QX-001R3J)

クムクムのBEEP音を使って、100Hz~2000Hzまでの音を乱数でセレクトし、ずっと鳴り続けるプログラムを作ります。
乱数とは規則性のない数字のことでサイコロを振った時に出る目も規則性がないので乱数になります。

乱数はrandom関数を使うことで取得することができ、random関数で取得した値を格納する箱(変数といいます)をあらかじめ用意しておき、その箱(変数)を使って、tone関数でランダムな音を鳴らします。

また箱(変数)を2つ用意することで別の数値を取得することも可能です。今回はロボットらしく音に合わせてLEDをランダムに赤・緑・青に光らせてみましょう。
loop()の中にプログラムを書いているのでランダムな音とランダムな色のLEDの点滅がずっと繰り返し行われます。

LEDについてはこちらで詳しく紹介しています。

9.乱数で赤緑青をランダムに光らせる|LEDプログラミング – クムクムロボットプログラミング (qumcum.com)

ソースコード


int randHz;  // ランダム関数で取得した値を格納する変数(Hz)
int randLED;  // ランダム関数で取得した値を格納する変数(LED)

void setup() {
    // put your setup code here, to run once:
  
    // LED
    pinMode(A0, OUTPUT); // 赤
    pinMode(A1, OUTPUT); // 青
    pinMode(A2, OUTPUT); // 緑
    
    // ランダム関数の初期化
    randomSeed(analogRead(0));
}

void loop() {
    // put your main code here, to run repeatedly:

    // 100~2000までのランダムな値を取得する(Hz用)
    randHz = random(100, 2001);

    // 0~2までのランダムな値を取得する(LED用)
    randLED = random(0, 3);

    // ランダムに取得したHzの音を鳴らす
    tone(12, randHz, 300);

    // LED
    if(randLED == 0)
    {
      // 取得した値が0だったら赤を点灯
      digitalWrite(A0, HIGH);
    }
    else if(randLED == 1)
    {
      // 取得した値が1だったら青を点灯
      digitalWrite(A1, HIGH);
    }
    else
    {
      // 取得した値が2だったら緑を点灯
      digitalWrite(A2, HIGH);
    }
    delay(300);

    // LEDの消灯
    digitalWrite(A0, LOW);
    digitalWrite(A1, LOW);
    digitalWrite(A2, LOW);
    delay(300);
}

関数

tone        delay        random        randomSeed

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

    3.プログラミング

    各ボードの情報を参考にプログラミングを行います。
    具体的なプログラミングについては、随時サンプルプログラムと技術情報をクムクムライブラリー <3J> <321J/E> に掲載していきますので参考にプログラミングを進めてください。また、下記のボードマニュアルやネット情報を利用し独自にプログラミングをしていくことも可能です。

    Qumcum[QX-001R3J] のボードマニュアルは  <こちら>
    QumcumPRO/W[QX-001R321J/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音を使って、100Hz~2000Hzまでの音を乱数でセレクトし、ずっと鳴り続けるプログラムを作ります。
    乱数とは規則性のない数字のことでサイコロを振った時に出る目も規則性がないので乱数になります。

    乱数はrandom関数を使うことで取得することができ、random関数で取得した値を格納する箱(変数といいます)をあらかじめ用意しておき、その箱(変数)を使って、tone関数でランダムな音を鳴らします。

    また箱(変数)を2つ用意することで別の数値を取得することも可能です。今回はロボットらしく音に合わせてLEDをランダムに赤・緑・青に光らせてみましょう。
    loop()の中にプログラムを書いているのでランダムな音とランダムな色のLEDの点滅がずっと繰り返し行われます。

    LEDについてはこちらで詳しく紹介しています。

    9.乱数で赤緑青をランダムに光らせる|LEDプログラミング – クムクムロボットプログラミング (qumcum.com)

    ソースコード

    
    int randHz;  // ランダム関数で取得した値を格納する変数(Hz)
    int randLED;  // ランダム関数で取得した値を格納する変数(LED)
    
    void setup() {
        // put your setup code here, to run once:
      
        // LED
        pinMode(A0, OUTPUT); // 赤
        pinMode(A1, OUTPUT); // 青
        pinMode(A2, OUTPUT); // 緑
        
        // ランダム関数の初期化
        randomSeed(analogRead(0));
    }
    
    void loop() {
        // put your main code here, to run repeatedly:
    
        // 100~2000までのランダムな値を取得する(Hz用)
        randHz = random(100, 2001);
    
        // 0~2までのランダムな値を取得する(LED用)
        randLED = random(0, 3);
    
        // ランダムに取得したHzの音を鳴らす
        tone(12, randHz, 300);
    
        // LED
        if(randLED == 0)
        {
          // 取得した値が0だったら赤を点灯
          digitalWrite(A0, HIGH);
        }
        else if(randLED == 1)
        {
          // 取得した値が1だったら青を点灯
          digitalWrite(A1, HIGH);
        }
        else
        {
          // 取得した値が2だったら緑を点灯
          digitalWrite(A2, HIGH);
        }
        delay(300);
    
        // LEDの消灯
        digitalWrite(A0, LOW);
        digitalWrite(A1, LOW);
        digitalWrite(A2, LOW);
        delay(300);
    }
    

    関数

    tone        delay        random        randomSeed

    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

      3.プログラミング

      各ボードの情報を参考にプログラミングを行います。
      具体的なプログラミングについては、随時サンプルプログラムと技術情報をクムクムライブラリー <3J> <321J/E> に掲載していきますので参考にプログラミングを進めてください。また、下記のボードマニュアルやネット情報を利用し独自にプログラミングをしていくことも可能です。

      Qumcum[QX-001R3J] のボードマニュアルは  <こちら>
      QumcumPRO/W[QX-001R321J/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/