言語切り替え

音声認識でDCモーターをうごかす

音声認識によってDCモーターを回したり止めたりします。

用意するもの

  • DCモーター (ここではAI Robot Kitについているギアモーターを使用しました)
  • obniz Board
  • モバイルバッテリーなど
  • PC or Androidスマートフォン
  • Chrome
  • (タイヤや旗などがあると回転がわかりやすいです)

注意

この記事のプログラムで用いているWeb Speech APIの音声認識は、Chrome以外のブラウザではほぼ対応していないのでご注意ください。 また、iOS版のChromeアプリも対応していないため、スマートフォンを用いる場合はAndroidをご使用ください。

接続方法

obniz DCモーター
0 OUT1 (どちらか片方)
1 OUT2 (どちらか片方)

プログラム

22行目 let obniz = new Obniz('OBNIZ_ID_HERE'); の OBNIZ_ID_HERE の部分を、お手持ちのobniz IDに書き換えてください。

<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://unpkg.com/obniz@3.0.0/obniz.js" crossorigin="anonymous"></script>
  <script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
  <title>Speech for Motor</title>
</head>
<body>
  <h2 class="text-center" style="margin:40px">Speech for Motor</h2>
  <div id="startstop-button" class="text-center">
    <button id="start" type="button" class="btn-lg btn-primary">record</button>
    <button id="stop" type="button" class="btn-lg btn-outline-secondary" disabled>stop</button>
  </div>
  <br>
  <div id="speech-script" class="text-center">「回して」or「止めて」の言葉に反応します</div>
<script>
  $( () => {
    let obniz = new Obniz('OBNIZ_ID_HERE');
    SpeechRecognition = webkitSpeechRecognition || SpeechRecognition;
    if(!'SpeechRecognition' in window){
      alert('お使いのブラウザは音声認識に対応していません');
      console.log('お使いのブラウザは音声認識に対応していません');
      return;
    }
    const recognition = new SpeechRecognition();
    recognition.interimResults = true;
  	recognition.continuous = true;
    
    obniz.onconnect = async () => {
      let motor = obniz.wired('DCMotor', {forward:0, back:1});
    
      recognition.onresult = (event) => {		
        let speechScript = '';
        
        for(let i=event.resultIndex; i<event.results.length; i++){
          if(event.results[0].isFinal){
            speechScript = event.results[0][0].transcript;
          }
        }
        if(speechScript.indexOf('回して') > -1){
          motor.forward();
        }else if(speechScript.indexOf('止めて') > -1){
          motor.stop();
        }	
      }
      
      $('#start').click(async (e) => {
        await recognition.start();
        $('#start').prop('disabled', true);
        $('#start').removeClass('btn-primary');
        $('#start').addClass('btn-outline-secondary');
        $('#stop').prop('disabled', false);
        $('#stop').removeClass('btn-outline-secondary');
        $('#stop').addClass('btn-danger');
      });
      
      $('#stop').click(async (e) => {
        await recognition.stop();
        $('#start').prop('disabled', false);
        $('#start').removeClass('btn-outline-secondary');
        $('#start').addClass('btn-primary');
        $('#stop').prop('disabled', true);
        $('#stop').removeClass('btn-danger');
        $('#stop').addClass('btn-outline-secondary');
      });
    }
    
  });
</script>
</body>
</html>

うごかす

recode を押すと stop を押すまでの間録音します。その間に話しかけてください。

対応するフレーズは以下の通りです。

  • 「回して」 → DCモーターが回転する
  • 「止めて」 → DCモーターの回転が止まる

※ マイクの使用許可を求めるポップアップが表示された場合は、「許可」を押してください。

関連記事