산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

부품 및 소모품

부품 수량
아두이노 나노 R3 1
SG90 마이크로 서보 모터 3
초음파 센서 HC-SR04 1
PCBWay 커스텀 PCB 1

앱 및 온라인 서비스

프로젝트 소개

소개

우리 모두 '아이언맨' 영화와 마블 시리즈의 '자비스(JARVIS)' AI 어시스턴트 로봇에 익숙합니다. 프로그래머라면 누구나 자신만의 것을 만들고 싶어 했죠. 오늘 파이썬 프로그래밍으로 그런 어시스턴트를 만드는 간단한 방법을 보여드리겠습니다. 게다가 로봇의 물리적 아바타도 만들어, 우리가 로봇에게 말할 때 움직임도 하게 할 것입니다. 몸체가 있으면 훨씬 더 멋지니까요! 아두이노와 파이썬 프로그래밍을 모두 사용해 컴퓨터를 제어하고 간단한 잡담도 할 수 있는 AI 로봇을 만들어 봅시다.

왜 로봇 이름을 '황달(Jaundice)'로 지었을까요? 노란색으로 칠했는데, 아주아주 노란색이거든요!

부품

전자 부품

본체

도구

소프트웨어

원리

실제 제작에 앞서 무엇을 할지 개념을 잡는 것이 좋습니다.

메인 코드(AI 부분)는 컴퓨터에서 실행됩니다. 왜냐면 파이썬을 지원하고 작은 아두이노보다 처리 능력이 훨씬 뛰어나기 때문입니다. 또한 AI 봇이 내 PC의 일부 작업을 제어/자동화해야 하므로 PC에서 실행되어야 합니다. 아두이노 보드는 USB 케이블로 컴퓨터에 연결됩니다.

아이디어는 음성 인식(STT), 텍스트 처리, 음성 합성(TTS)을 수행하는 파이썬 프로그램을 실행하는 것입니다. 즉, 로봇이 듣고, 이해하고, 대답합니다. 신체 움직임은 아두이노 보드에 함수로 캡슐화해 저장하고, 파이썬 코드에서 각 움직임 함수를 실행합니다.

예를 들어 로봇이 '안녕'이라고 말해야 하면 파이썬 코드가 바이트 'h'를 보내고, 아두이노는 hi() 함수를 실행합니다. 아주 간단하죠.

이제 개념을 잡았으니 다음 단계로 넘어가겠습니다.

회로 및 전자 부품

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

회로는 메이커들을 가장 괴롭히는 부분입니다. 잘못되면 비싼 부품이 타버릴 수 있습니다. 그래서 수많은 프로젝트에 사용할 수 있는 PCB 보드를 설계했습니다. 마이크로 SD 카드 슬롯, 블루투스 모듈 슬롯, 5V 외부 전원, 모든 것이 아두이노 나노로 구동됩니다.

EasyEDA로 PCB를 설계하고 PCBWay 온라인 서비스로 제작했습니다. 서비스가 훌륭합니다. 인스턴트 견적으로 주문하면 시스템이 자동으로 처리해 줍니다. 3일 만에 중국에서 방글라데시까지 배송받았습니다. 품질이 환상적이고, 솔더 마스킹이 완벽하며, 라인/트레이스, 마감 모두 최고 수준입니다.

300mm 트레이스를 사용해 1암페어 전류를 감당할 수 있게 했습니다.

PCB 파일은 여기에서 다운로드하세요.

납땜 및 회로 테스트

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

이 단계에서 모든 것을 납땜했습니다. 흄을 흡입하지 않도록 매우 주의하세요. 암을 유발할 수 있습니다.

블루투스 모듈과 TF 모듈은 사용하지 않아 납땜하지 않았습니다. 좋은 점은 서보 모터 3개와 소나 센서 1개 모두 아두이노 프로그래밍용 USB 케이블로 전원 공급이 가능하다는 것입니다. 별도 전원 공급원을 고민할 필요가 없습니다.

그래도 외부 배터리를 쓰고 싶다면 리포 2S(7.4V) 배터리를 추천합니다. 그 이상이면 서보가 타버립니다.

본체 만들기

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기
아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

PVC 시트로 본체를 만들었습니다. 골판지도 사용 가능합니다. 먼저 메인 보드와 서보 모터가 들어갈 본체용 박스를 만들었습니다. 상자 만들기와 같습니다. 머리도 같은 방식으로 만들고, 센서(눈)용 구멍 두 개를 뚫었습니다. 필요한 모든 사진을 첨부했습니다. 한 손은 렌치 모양, 다른 한 손은 플러그 모양으로 만들었습니다. 실제 플러그를 핫글루로 한 팔에 붙였습니다.

치수? 정해진 건 없습니다. 여러분의 로봇이니까요. 간단한 도구로 만들 수 있으니 원하는 모양과 크기로 만드세요.

매우 중요: 본체를 닫기 전에 모든 전자 부품을 넣으세요. 센서와 전자 부품을 넣은 후 도색했습니다. 그러지 마세요. 이미 아두이노가 노랗게 물들었습니다.

본체 완성 후 도색하고, 그 다음 전자 부품을 넣으세요.

코딩 1 (파이썬)

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

여기서 파이썬을 다운로드하세요. 설치 시 'Add Python to PATH'를 꼭 체크하세요.

파이썬 설치 후 명령 프롬프트/터미널에서 다음 명령으로 음성 인식, 오디오 지원, TTS, 브라우저 자동화, 시리얼 통신 라이브러리를 설치하세요.

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

그 후 여기서 파이썬 코드를 다운로드하거나 아래에서 복사하세요. 코딩 2 단계로 넘어가세요.

"""
JAUNDICE: 아두이노와 파이썬으로 만든 AI 어시스턴트 로봇
author: ashraf minhaj
mail: ashraf_minhaj@yahoo.com
Last Edit: Nov 2020
License: Copyright (C) Ashraf Minhaj. GPL3+
"""
import speech_recognition as sr
import random
import pyttsx3
import datetime
import webbrowser
import serial
import pywhatkit

robot_name = 'jaundice'
hi_words = ['hi', 'hello', 'yo baby', 'salam']
bye_words = ['bye', 'tata', 'hasta la vista']
r_u_there = ['are you there', 'you there']

engine = pyttsx3.init()
listener = sr.Recognizer()

try:
    port = serial.Serial("COM15", 9600)
    print("Physical body connected.")
except:
    print("Unable to connect to my physical body")

def listen():
    """사용자 음성 듣기"""
    try:
        with sr.Microphone() as source:
            print("Talk>>")
            voice = listener.listen(source)
            command = listener.recognize_google(voice).lower()
            print(command)
            if command.split(' ')[0] == robot_name:
                print("[Wake-up word found]")
                process(command)
    except:
        pass

def process(words):
    """사용자 명령 처리 및 액션 수행"""
    print(words)
    word_list = words.split(' ')[1:]
    
    if len(word_list) == 1 and word_list[0] == robot_name:
        talk("How Can I help you?")
        return
    
    if word_list[0] == 'play':
        talk("Okay boss, playing")
        extension = ' '.join(word_list[1:])
        port.write(b'u')
        pywhatkit.playonyt(extension)
        port.write(b'l')
        return
    elif word_list[0] == 'search':
        port.write(b'u')
        talk("Okay boss, searching")
        port.write(b'l')
        extension = ' '.join(word_list[1:])
        pywhatkit.search(extension)
        return
    elif word_list[0] == 'get' and word_list[1] == 'info':
        port.write(b'u')
        talk("Okay, I am right on it")
        port.write(b'u')
        extension = ' '.join(word_list[2:])
        inf = pywhatkit.info(extension)
        talk(inf)
        return
    elif word_list[0] == 'open':
        port.write(b'l')
        talk("Opening, sir")
        url = f"https://{''.join(word_list[1:])}"
        webbrowser.open(url)
        return
    elif word_list[0] == 'uppercut':
        port.write(b'U')
    elif word_list[0] == 'smash':
        port.write(b's')
    elif word_list[0] == 'punch':
        port.write(b'p')
    
    for word in word_list:
        if word in hi_words:
            port.write(b'h')
            talk(random.choice(hi_words))
        elif word in bye_words:
            talk(random.choice(bye_words))

def talk(sentence):
    """사용자에게 응답"""
    engine.say(sentence)
    engine.runAndWait()

while True:
    listen()

코딩 2 (아두이노)

이 부분은 간단합니다. 아두이노 IDE로 보드를 프로그래밍하세요. 처음 사용한다면 여기서 다운로드하세요.

앞서 언급했듯 아두이노 프로그램은 시리얼 데이터를 기다립니다. 데이터가 수신되면 바이트 데이터를 확인하고, 미리 정의된 명령과 일치하면 해당 문을 실행합니다. 'u'가 전송되면 양손을 올리는 식입니다.

여기서 코드 다운로드하거나 아래에서 복사하세요.

/**
 * JAUNDICE: 아두이노와 파이썬으로 만든 AI 어시스턴트 로봇
 * author: ashraf minhaj
 * mail: ashraf_minhaj@yahoo.com
 * Last Edit: Nov 2020
 * License: Copyright (C) Ashraf Minhaj. GPL3+
 */
#include <Servo.h>

Servo head, l_hand, r_hand;
int trig = 4, echo = 5;
byte val = "";

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;
    int 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;
    int l_pos = map(r_pos, 0, 180, 180, 0);
    l_hand.write(l_pos);
    r_hand.write(r_pos);
    delay(5);
  }
}

void weight_lift() { /* ... */ }
void excited() { return; }
void look_left() { head.write(180); }
void confused() { /* ... */ }
void double_punch() { /* ... */ }
void r_upper_cut() { /* ... */ }
void smash() { /* ... */ }
void eye_detect() { return; }

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); }
  }
}

코드를 업로드하세요.

모든 것을 합치고 완료

모든 단계를 완료한 후 USB 케이블로 아두이노를 PC에 연결하고 파이썬 프로그램을 실행했습니다. 파이썬 코드에 아두이노의 올바른 포트를 지정했는지 확인하세요. 모든 것을 설명한 대로 했다면 봇이 완벽하게 작동할 것입니다.

감사합니다!

코드

소스 코드

GitHub 저장소

회로도

아두이노와 파이썬으로 나만의 AI 어시스턴트 로봇 만들기

제조공정

  1. 라즈베리 파이와 파이썬으로 로봇 만들기: 완전 가이드
  2. 아두이노 & 라즈베리 파이로 인터넷 제어 영상 스트리밍 로봇 만들기
  3. 파이썬 type()과 isinstance() 이해하기: 실전 예제
  4. 파이썬 연동 아두이노 RFID 출석 관리 시스템 구축하기
  5. 서보 모터 구동 장애물 회피 로봇: 아두이노 & HC-SR04로 제작하기
  6. 아두이노와 안드로이드로 룸바 크리에이트 2 제어하기: 단계별 가이드
  7. 아두이노 & MPU6050: SG90 & MG996R 서보 모터 정밀 제어
  8. u-blox LEA-6H GPS 모듈: 아두이노 & 파이썬 연동 가이드
  9. 아두이노 Due에서 음성 인식 및 합성 마스터하기
  10. 자율 홈 어시스턴트 로봇 'O'nine' 제작 – ROS, Alexa, MoveIt, 내비게이션 완전 가이드