Construa Seu Próprio Robô Assistente de IA com Arduino e Python
Componentes e Materiais
- Arduino Nano R3 × 1
- Micro Servo SG90 × 3
- Sensor Ultrassônico HC-SR04 × 1
- PCB Personalizado PCBWay × 1 — projeto compartilhado
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Introdução
Todos conhecem o 'Jarvis', robô assistente de IA dos filmes "Homem de Ferro" e séries Marvel. Sempre foi sonho de programadores criar o seu. Mostrarei uma forma simples usando Python. Além disso, farei um avatar físico: quando falamos com o robô, ele faz movimentos. Isso é mais legal que apenas software. Vamos aprender a usar Arduino e Python para criar um robô IA que controla seu computador e conversa.
Por que 'Jaundice'? Porque pintei de amarelo, muito amarelo!
Peças
Eletrônica:
- Arduino Nano – 1x
- Micro Servo SG90 – 3x
- Sensor Ultrassônico HC-SR04 – 1x
Corpo:
- Chapa PVC (branca preferencial, usei azul)
- Roda de servo (para base)
Ferramentas:
- Estilete
- Tesoura
- Cola quente
- Tinta spray
Software:
- Python 3
- Arduino IDE
Princípio
O código principal (IA) roda no computador: suporta Python, tem mais poder de processamento que o Arduino, e como o bot controla/automatiza tarefas do PC, deve rodar nele. O Arduino conecta via USB.
Ideia: programa Python faz Speech-to-Text, processa texto e Text-to-Speech. O robô ouve, entende e responde. Movimentos corporais são funções salvas no Arduino. Python envia bytes para executar funções. Ex.: para dizer "Oi", Python envia byte 'h', Arduino executa hi().
Circuitos e Eletrônica
Circuitos assustam makers. Projetei uma PCB versátil (slot microSD, Bluetooth, fonte 5V externa, alimentada pelo Nano). Usei EasyEDA e fabriquei na PCBWay. Serviço incrível: cotação instantânea, tudo automático, recebi em 3 dias da China para Bangladesh. Qualidade fantástica.
Trilhas de 300mm suportam 1A. Baixe arquivos da PCB aqui.
Soldagem e Teste do Circuito
Soldagem completa. Cuidado: não inale fumos (risco de câncer). Não usei módulo Bluetooth nem cartão TF, deixei sem soldar. 3 servos + 1 sonar alimentados via USB — ótimo, sem fonte extra. Se quiser baterias externas, use LiPo 2S (7.4V); mais que isso queima servos.
Faça o Corpo
Usei chapa PVC (pode ser papelão). Caixa principal para placa e servos; cabeça com dois furos para sensor (olhos). Braços: um como chave inglesa, outro como plugue (usei plugue real colado com cola quente).
Dimensões? Não há medidas fixas — é seu robô, faça do tamanho e forma que quiser com ferramentas simples.
Importante: Instale toda eletrônica antes de fechar o corpo. Pintei depois de colocar sensores e eletrônica — não faça isso, meu Arduino ficou amarelo. Pinte o corpo pronto, depois instale eletrônica.
Codificação 1 (Python)
Baixe Python aqui, marque "Add to PATH" na instalação.
Instale bibliotecas via terminal:
pip install speechrecognition
pip install pyaudio
pip install pyttsx3
pip install pywhatkit
pip install pyserial
Baixe o código Python aqui ou copie abaixo.
""" JAUNDICE: AI Assistant robot with Arduino and Python
author: ashraf minhaj
mail: ashraf_minhaj@yahoo.com
Last Edit: Nov 2020
License: 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:
if 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
if 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()
Codificação 2 (Arduino)
Fácil: Arduino aguarda dados seriais; se recebe byte correspondente a comando pré-definido, executa movimento. Ex.: 'u' levanta ambas as mãos.
Baixe o código aqui ou copie abaixo.
/** JAUNDICE: AI Assistant robot with Arduino and Python **/
#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, 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);
}
}
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); }
}
}
Juntando Tudo e Conclusão
Conectei Arduino ao PC via USB e rodei o programa Python. Certifique-se de usar a porta COM correta no código Python. Se seguiu todos os passos, o bot funcionará perfeitamente.
Obrigado!
Código
Código Fonte
Esquemáticos
Processo de manufatura
- Construa um Robô com Raspberry Pi e Python: Guia Completo
- Construa um Robô de Streaming de Vídeo Controlado por Internet com Arduino e Raspberry Pi
- Entendendo type() e isinstance() em Python: Exemplos Práticos
- Sistema de Presença RFID Confiável com Arduino e Python
- Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04
- Controlar Roomba Create 2 com Arduino e Android: Guia Passo a Passo
- Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
- Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
- Dominando Reconhecimento e Síntese de Fala no Arduino Due
- Robô Assistente Doméstico Autônomo: Lista Completa de Peças e Guia de Configuração