工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

必要な部品と材料

Arduino Nano R3 ×1
SG90 マイクロサーボモーター ×3
超音波距離センサー HC-SR04 ×1
PCBWay カスタムPCB ×1 共有プロジェクトページ

使用するアプリとオンラインサービス

プロジェクト概要

イントロダクション

映画「アイアンマン」シリーズのAIアシスタント「ジャービス」に憧れ、自分専用のAIアシスタントロボットを作成しました。PythonでAI部分を実装し、さらに物理的なアバターロボットを制作することで、会話だけでなく動作もできる「体を持ったAI」を実現します。ArduinoとPythonの連携で、PC制御と簡単な雑談が可能なAIロボットを作りましょう。

ロボット名を「ジャウndice(黄疸)」とした理由? 全身を黄色、それも鮮やかな黄色に塗装したからです!

パーツリスト

電子部品

ボディ材料

工具

ソフトウェア

動作原理

メインのAIコードはPC上で実行します。理由はPython対応かつ処理能力がArduinoより高く、PC操作自動化もPC上で行う必要があるためです。ArduinoはUSBケーブルでPCと接続します。

Pythonプログラムが音声認識(Speech-to-Text)、テキスト処理、音声合成(Text-to-Speech)を担当。ロボットが「聞き、理解し、話す」サイクルを実現します。ボディ動作はArduino側に関数として登録し、Pythonからシリアル通信でコマンドバイトを送信して実行させます。

例:「こんにちは」と言わせる場合、Pythonがバイト'h'を送信 → Arduinoがhi()関数を実行。これだけのシンプルな連携です。

回路と電子工作

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」
ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

配線ミスで高価なパーツを焼損するリスクを避けるため、マルチファンクションPCBをEasyEDAで設計し、PCBWayで製造しました。マイクロSDカードスロット、Bluetoothモジュールスロット、5V外部電源入力を備え、Arduino Nanoから給電可能です。300mmトレースで1A電流に対応。PCBファイルはこちらから入手可能。

はんだ付けと回路テスト

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

全部品をはんだ付け。フューム吸入は発がん性があるため注意してください。BluetoothとTFモジュールは未使用のため未実装。3サーボ+超音波センサーはUSB給電のみで動作し、別電源不要です。外部電池を使う場合は2S LiPo(7.4V)推奨。それ以上だとサーボ焼損の恐れがあります。

ボディ製作

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」
ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

PVCシートでボディを箱組み構造で製作(段ボールでも可)。メインボックスに基板とサーボを収納、ヘッドにも同様にセンサー用穴(目)を開けました。片腕はレンチ形状、もう片方はプラグ形状にし、実物プラグをホットグルーで接着。寸法は自由です。あなたのロボットなので好きな形・サイズで作れます。

重要: ボディを閉じる前に全電子部品を収納してください。私は組み立て後に塗装したためArduinoまで黄色くなってしまいました。先に塗装・乾燥させてから電子部品を入れるのが正解です。

コーディング1: Python側

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

Pythonを公式サイトからダウンロードし、インストール時に「Add Python to PATH」を有効化してください。

以下のライブラリをコマンドプロンプト/ターミナルでインストール:

pip install speechrecognition
pip install pyaudio
pip install pyttsx3
pip install pywhatkit
pip install pyserial

PythonコードはGitHubからダウンロード、または以下を参照。メインループで音声認識し、ウェイクワード「jaundice」検出後にコマンド処理。YouTube再生、Google検索、情報取得、URL開封、各種アクション(アッパーカット、スマッシュ、パンチ、挨拶、別れ)に対応。Arduinoへシリアルコマンド送信で動作連携。

コーディング2: Arduino側

Arduino IDEで書き込みのみ。シリアルデータ受信待機し、コマンドバイトに応じて動作関数を実行。'u'受信で両手上げ、'h'で挨拶、'p'でダブルパンチ、'U'で右アッパーカット、's'でスマッシュ、'l'で待機・左向きなど。

/** JAUNDICE: AI Assistant robot with Arduino and Python
 * author: ashraf minhaj, mail: ashraf_minhaj@yahoo.com
 * License: GPL3+
 */
#include <Servo.h>
Servo head, l_hand, r_hand;
int trig = 4, echo = 5;
byte val = 0;

void setup() {
  head.attach(2); l_hand.attach(3); r_hand.attach(4);
  Serial.begin(9600);
}

void standby() {  // 待機ポジション
  head.write(90);
  int r_pos = 30;
  int l_pos = map(r_pos, 0, 180, 180, 0);
  l_hand.write(l_pos); r_hand.write(r_pos);
}

void hi() {  // 挨拶:右手を振る
  head.write(90);
  for(int i=30; i<=170; i++){ r_hand.write(i); delay(5); }
  for(int i=170; i>=100; i--){ r_hand.write(i); delay(5); }
  for(int i=100; i<=170; i++){ r_hand.write(i); delay(5); }
  for(int i=170; i>=30; i--){ r_hand.write(i); delay(5); }
  standby();
}

void hands_up() {  // 両手上げ
  for(int i=30; i<=170; i++){
    int r_pos=i, l_pos=map(r_pos,0,180,180,0);
    l_hand.write(l_pos); r_hand.write(r_pos); delay(5);
  }
  delay(600);
  for(int i=170; i>=30; i--){
    int r_pos=i, l_pos=map(r_pos,0,180,180,0);
    l_hand.write(l_pos); r_hand.write(r_pos); delay(5);
  }
}

// 以下、weight_lift, confused, double_punch, r_upper_cut, smash等の動作関数が続く...
// (全文はGitHub参照)

void loop() {
  standby();
  while(Serial.available() > 0) {
    val = Serial.read();
    if(val == 'h') hi();
    if(val == 'p') double_punch();
    if(val == 'u') { hands_up(); delay(3000); }
    if(val == 'l') { standby(); look_left(); delay(2000); }
    if(val == 'U') { r_upper_cut(); delay(2000); }
    if(val == 's') { smash(); delay(2000); }
  }
}

完成と動作確認

ArduinoをUSBでPC接続し、Pythonプログラムを実行。Pythonコード内のArduinoポート(COM15等)を環境に合わせて修正してください。全手順正しければ、チャーミングなAIアシスタントロボットが動き出します。

コード

ソースコード

GitHubリポジトリ

回路図

ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」

製造プロセス

  1. Raspberry Pi と Python でロボットを構築:完全ガイド
  2. Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
  3. Python連携で信頼性向上: Arduino RFID勤怠管理システム
  4. ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
  5. ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
  6. Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
  7. u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
  8. Arduino Dueでマスターする音声認識と音声合成
  9. 自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド
  10. Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
  11. Python type()とisinstance()の理解:実例付き解説