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

クムクムの右胸についているマイク(クムクムではアナログ式コンデンサーマイク、クムクムプロではデジタルマイク、3Dではシミュレーション)では、周囲の音を検知することができます。
今回はこのマイクでの音検知を使い音のレベルのピークだけで反応をするプログラムを作ります。
音のピークだけで反応させるには、目的の音の大きさを検知したら、次は音がしきい値より下がるまで待ち、その後次の音を検知する処理とします。

この処理にプログラムのswitch構文を使っています。

またここでは検知した音を4回平均して使うなどの工夫も入れてます。むずかしくてわからなくでもいいですよ。

※マイクの生データ値いろんな扱い方ができます。ここでは前後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);
} 

int getMicLevel(){  //MIC音検出4回の平均値を得る関数
  int buf1=analogRead(A4);
  int sum=0;
  for(int i=0;i<4;i++){
    int buf=analogRead(A4);
    sum += abs(buf-buf1); //前回の値との差の絶対値を加算
    buf1=buf;
  }
return sum/4;
}

#define STAT_ON 1
#define STAT_OFF 0
#define LEVEL_ON 50
#define LEVEL_OFF 20
int state = STAT_OFF;
void loop(){ 
  int val = getMicLevel();
  Serial.println(val);
  switch(state){
  case STAT_OFF:
    if(val>=LEVEL_ON){ //一度レベルを超えると次は規定レベルを下回るまで待つようになります
      state = STAT_ON;
      atp.Synthe("urusai");
    }
    break;
  case STAT_ON:
    if(val<LEVEL_OFF){ //一度レベルを下回ると次は規定レベルを上回るまで待つようになります
      state = STAT_OFF;
    }
    break;
  default:
    break;
  }
delay(100);
}

関数

analogRead();   指定したアナログポートの電圧(0~5V)を10bit(0~1023)の値に変換されます。2.5Vなら512辺りの値となります。

クムクムのマイク

クムクムロボット右胸には小さなコンデンサーマイクがついています。
このコンデンサーマイクは100倍増幅のアンプを通してアナログ信号として出力されるため、クムクムではこの信号をA4po-to で受けて処理をします。
このアナログ信号は0~1023までの数値で取得することができますが、マイクからの信号の時は、無音の場合512あたりの数値を返します。
実際には100倍増幅していますので、微妙な数値の揺れがあり、この信号を処理して音ありなしの制御を行います。

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

    クムクムの右胸についているマイク(クムクムではアナログ式コンデンサーマイク、クムクムプロではデジタルマイク、3Dではシミュレーション)では、周囲の音を検知することができます。
    今回はこのマイクでの音検知を使い音のレベルのピークだけで反応をするプログラムを作ります。
    音のピークだけで反応させるには、目的の音の大きさを検知したら、次は音がしきい値より下がるまで待ち、その後次の音を検知する処理とします。

    この処理にプログラムのswitch構文を使っています。

    またここでは検知した音を4回平均して使うなどの工夫も入れてます。むずかしくてわからなくでもいいですよ。

    ※マイクの生データ値いろんな扱い方ができます。ここでは前後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);
    } 
    
    int getMicLevel(){  //MIC音検出4回の平均値を得る関数
      int buf1=analogRead(A4);
      int sum=0;
      for(int i=0;i<4;i++){
        int buf=analogRead(A4);
        sum += abs(buf-buf1); //前回の値との差の絶対値を加算
        buf1=buf;
      }
    return sum/4;
    }
    
    #define STAT_ON 1
    #define STAT_OFF 0
    #define LEVEL_ON 50
    #define LEVEL_OFF 20
    int state = STAT_OFF;
    void loop(){ 
      int val = getMicLevel();
      Serial.println(val);
      switch(state){
      case STAT_OFF:
        if(val>=LEVEL_ON){ //一度レベルを超えると次は規定レベルを下回るまで待つようになります
          state = STAT_ON;
          atp.Synthe("urusai");
        }
        break;
      case STAT_ON:
        if(val<LEVEL_OFF){ //一度レベルを下回ると次は規定レベルを上回るまで待つようになります
          state = STAT_OFF;
        }
        break;
      default:
        break;
      }
    delay(100);
    }
    

    関数

    analogRead();   指定したアナログポートの電圧(0~5V)を10bit(0~1023)の値に変換されます。2.5Vなら512辺りの値となります。

    クムクムのマイク

    クムクムロボット右胸には小さなコンデンサーマイクがついています。
    このコンデンサーマイクは100倍増幅のアンプを通してアナログ信号として出力されるため、クムクムではこの信号をA4po-to で受けて処理をします。
    このアナログ信号は0~1023までの数値で取得することができますが、マイクからの信号の時は、無音の場合512あたりの数値を返します。
    実際には100倍増幅していますので、微妙な数値の揺れがあり、この信号を処理して音ありなしの制御を行います。

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