Arduino Nanoで音声制御ロボットを自作
必要な部品と用品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| L298Nモータードライバー | 1 | |
| HC-05 Bluetoothモジュール | 1 |
必要な工具と機械
- ホットグルーガン(汎用)
使用アプリとオンラインサービス
- Arduino IDE
このプロジェクトについて
ロボットはかっこいい。音声コマンドで動き回るロボットならもっとかっこいい。Arduinoでそんな音声制御ロボットを作るのは、もっともっとかっこいい。なぜならArduinoは安価でカスタマイズしやすいからです。
作り始めましょう。動画チュートリアルもご覧いただけます。
ステップ1:必要なパーツ



このロボットはPCBベースです。様々なロボットで使えるよう設計したPCBを使用しています。他に使用したコンポーネントは以下の通り:
電子部品:
- Arduino Nano - 1個
- L298Nモータードライバーモジュール - 1個
- HC-05 Bluetoothモジュール - 1個
- DCモーターと互換ホイール - 2個
- 多機能ロボットPCB - 1個(リンク)
- オス/メスヘッダー多数
ボディ製作用:
- PVCシート
- ホットグルーガン
ソフトウェア:
- Arduino IDE
- 自作アプリ
ステップ2:原理 - どう動くか
実際に手を動かす前に、何をするか明確に理解しておくのは常に良いことです。私がミスをするタイプだからかもしれませんが。
Arduinoはマイクロコントローラー(小型コンピュータ)です。現時点では音声認識を行うほどのパワーや能力はありません。しかし幸運なことに、私のPCBボードにはBluetoothモジュール接続用のポートがあります。つまり、Arduinoを他のデバイスと無線接続できます。これを活用します。AndroidアプリでGoogle APIを使って「音声→テキスト」変換を行い(インターネット接続必須)、変換されたテキストをBluetooth経由でArduinoに送信します。
つまり、「前進」と言えばロボットは'F'を受信して前進します。これがコンセプトです。早速作ってみましょう。
ステップ3:ボディを作る
ロボットのシャーシ/ボディは13cm×13.5cmのPVCシートで作りました。カッターナイフで簡単に切れ、接着も良好です。
動画の通り、2つのモーターとホイールをボードエリア内にマウントするためのピースを切り出し、接着しました。
皆さんが作る時は、これと全く同じ見た目にする必要はありません。あなたのボット、あなたのチョイスです。
ステップ4:回路を組むかPCBを使うか




ここでも完全にあなたの選択です。しかし、このような回路を組むには大量の配線が必要で、ブレッドボードで作ると一箇所の配線ミスでプロジェクト全体が台無しになります。だから私はプロジェクトでPCBを使うのが好きです。
このPCBはEasyEDAで設計し、PCBWay.comで発注しました。PCBWayは安価で高品質。10枚の多層PCBがたった5ドルで手に入ります。学生プロジェクトのスポンサーもしていて、素晴らしいです。
クイックオーダーでPCBをアップロードするだけで、システムが自動的に全パラメータを検出し、色を選ぶだけでした。黒が好きなので黒にしました。見てください、この輝きとクールさ!エンジニアリングチームがPCBを検査するまでお金は取られません。安心です。
PCB基板はこちらから入手できます。
ただし、PCBを発注・使用できない場合は、ブレッドボードやユニバーサル基板でも可能です。Fritzing回路図をアップロードしてあります。下記からダウンロードするか、こちらから入手してください。
ステップ5:電子部品を接続



接続はシンプルです。回路図の通りに全て接続します。モーターからモータードライバーへの接続から始めましょう:
モーター → モータードライバー
- モーター1のワイヤー → ドライバーの一方の端子
- モーター2のワイヤー → ドライバーのもう一方の端子
モーター制御用
- L298Nのモーター1ピン → Arduinoピン2と3(デジタル)
- モーター2 → ピン4と5
Bluetoothモジュール
- Tx → Arduino Rx
- Rx → Arduino Tx
- VCC → 5V/VCC
- GND → GND
バッテリー
モーター用に7.4Vバッテリーを使用。モータードライバーの入力とArduinoのVINおよびGNDピンに接続。共通グラウンド接続が必要です。
バッテリーを接続したら全て点灯。つまり、ミスなし!
ステップ6:Arduinoプログラミング
シンプルなプログラムです。文字を受信したら、それに応じて左・右などに動きます。コマンド一覧:
- 'F' - 前進
- 'B' - 後退
- 'L' - 左旋回
- 'R' - 右旋回
Bluetoothモジュールはシリアルポートに接続されているため、Arduinoは9600bpsでシリアル通信します。
setupセクションでピンとボーレートを定義:
void setup() {
pinMode(lm1, OUTPUT);
pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT);
pinMode(rm2, OUTPUT);
Serial.begin(9600);
}
メインループでシリアル受信をチェック:
while(Serial.available() == 0);
val = Serial.read();
Serial.print(val);
メインコードはこちらからダウンロード、または以下に全文掲載:
/**** Arduino Speech/voice Controlled robot ***
* by Ashraf Minhaj
* mail: ashraf_minhaj@yahoo.com
* tutorial: ashrafminhajfb.blogspot.com
*/
int lm1 = 4;
int lm2 = 5;
int rm1 = 2;
int rm2 = 3;
char val;
void setup() {
pinMode(lm1, OUTPUT);
pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT);
pinMode(rm2, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available() == 0);
val = Serial.read();
if (val == 'F') { // 前進
digitalWrite(lm1, HIGH);
digitalWrite(rm1, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm2, LOW);
}
else if(val == 'B') { // 後退
digitalWrite(lm2, HIGH);
digitalWrite(rm2, HIGH);
digitalWrite(lm1, LOW);
digitalWrite(rm1, LOW);
}
else if(val == 'R') { // 右
digitalWrite(lm1, HIGH);
digitalWrite(rm2, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW);
}
else if(val == 'L') { // 左
digitalWrite(lm2, HIGH);
digitalWrite(rm1, HIGH);
digitalWrite(lm1, LOW);
digitalWrite(rm2, LOW);
}
else { // 停止
digitalWrite(lm1, LOW);
digitalWrite(rm1, LOW);
digitalWrite(lm2, LOW);
digitalWrite(rm2, LOW);
}
delay(10);
}
コードをアップロードしたら、アプリを作ります。
ステップ7:音声→テキスト変換アプリ




MIT App Inventorでアプリを作成しました。要件に合わせて編集・カスタマイズ可能です。aiaファイルはこちらから入手できます。
このアプリはBluetoothでロボットを制御します。HC-05 Bluetoothモジュールをスマホとペアリングする必要があります。デフォルトパスワードは1234か0000です。
アプリはGoogle音声認識APIを使って発話をテキストに変換。小文字に変換して処理しやすくし、if-else文でマッチングします。ユーザーが「forward」と言えばArduinoに'F'を送信し、前進します。それだけです。
APKファイルとしてビルド・保存、または私のものをインストールしてください。
ステップ8:ボットに電源を入れ、アプリを実行、出発!
バッテリーを接続し、Androidアプリであなたの新しいロボットを動かしましょう!
お読みいただきありがとうございます。私の最新プロジェクトもチェックしてください。
コード
コードスニペット #1
void setup() {
pinMode(lm1, OUTPUT);
pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT);
pinMode(rm2, OUTPUT);
Serial.begin(9600);
}
コードスニペット #3 (完全版)
/**** Arduino Speech/voice Controlled robot ***
* by Ashraf Minhaj
* mail me at ashraf_minhaj@yahoo.com
* tutorial- ashrafminhajfb.blogspot.com
*/
int lm1 = 4;
int lm2 = 5;
int rm1 = 2;
int rm2 = 3;
char val;
void setup() {
pinMode(lm1, OUTPUT);
pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT);
pinMode(rm2, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available() == 0);
val = Serial.read();
if (val == 'F') {
digitalWrite(lm1, HIGH);
digitalWrite(rm1, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm2, LOW);
}
else if(val == 'B') {
digitalWrite(lm2, HIGH);
digitalWrite(rm2, HIGH);
digitalWrite(lm1, LOW);
digitalWrite(rm1, LOW);
}
else if(val == 'R') {
digitalWrite(lm1, HIGH);
digitalWrite(rm2, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW);
}
else if(val == 'L') {
digitalWrite(lm2, HIGH);
digitalWrite(rm1, HIGH);
digitalWrite(lm1, LOW);
digitalWrite(rm2, LOW);
}
else {
digitalWrite(lm1, LOW);
digitalWrite(rm1, LOW);
digitalWrite(lm2, LOW);
digitalWrite(rm2, LOW);
}
delay(10);
}
GitHub
https://github.com/ashraf-minhaj/speech-controlled-robot
回路図

製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Windows 10 IoT Coreで音声制御ロボットを構築 - Raspberry Pi 2編
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Ethernet制御ロボットアーム - WIZ750SRとAndroidアプリでリモート操作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- PiBot:Arduino駆動の精密ピアノ演奏ロボット
- 自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド