Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Robô Assistente AI com Arduino e Python

Componentes e suprimentos

Arduino Nano R3
× 1
Micro servo motor SG90
× 1
Sensor ultrassônico - HC-SR04 (genérico)
× 1
PCB personalizado PCBWay
https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





Introdução:


Todos nós estamos familiarizados com o robô assistente de IA de "Jarvis" dos filmes "Homem de Ferro" e da série Marvel. Sempre foi um sonho dos programadores fazer algo por conta própria. Hoje, mostrarei uma maneira simples de fazer esse assistente usando a programação Python. Além disso, também farei um avatar físico desse robô, para que sempre que falarmos com o robô, ele possa fazer alguns movimentos. Isso será mais incrível do que apenas um robô de software. Porque se ele tem um corpo, é legal. Então, hoje vamos aprender a usar a programação do Arduino e do Python para fazer um AIrobot que pode controlar seu computador e bater um papo com vocês. Vamos entrar, pessoal!

Por que chamei o robô de 'Jaundice'? Porque eu pintei de amarelo, muito, muito amarelo!





Peças:


Eletrônica -
  • Arduino Nano - 1x
  • Micro Servo Sg90 - 3x
  • Sensor Ultra Sonic HCsr04– 1x

Corpo -
  • Folha de PVC (de preferência branca, melhor para colorir, usei azul)
  • Servo roda (para o descanso)

Ferramentas:
  • Faca de corte
  • tesoura
  • cola quente
  • Tinta spray

Software -
  • Python3
  • Arduino.ide





Princípio:


Antes de entrar no prédio real, é ótimo ter uma ideia do que estaremos fazendo.

Portanto, o código principal ou parte do código será executado no computador, por quê? Pq ele suporta python e tem mais poder de processamento que o pequeno Arduino, também como o AI bot vai controlar / automatizar algumas tarefas do meu pc ele tem que rodar no meu pc. Então, o Arduinoboard ele se conectou ao meu computador usando o cabo USB.

A ideia é rodar um programa python que fará a parte do texto para fala, processe o texto e também faça texto para fala. Significa que o robô ouvirá, compreenderá e responderá. Para movimentação corporal salvei alguns movimentos (encapsulados em funções) na placa Arduino. A função para cada movimento é executada pelo código python.

Por exemplo - se o robô tiver que dizer ‘Olá / Olá’, o código Python enviará um byte ‘h’, o Arduino executará a função hi (). Tão simples como isso.

Agora que você tem uma ideia, vamos passar para o próximo processo.





Circuitos e eletrônicos


Os circuitos são o que incomoda a maioria dos fabricantes. Se algo der errado, você pode queimar algumas peças caras. Para isso, projetei uma placa PCB que pode ser usada para fazer vários projetos. Possui slot para cartão micro SD, slot para módulo Bluetooth, fonte de alimentação externa 5v e tudo é movido por Arduino Nano.

Eu projetei um PCB usando EasyEDA e imprimi usando o serviço online PCBWay. Seu serviço é incrível. Eu pedi usando o PCB instant quotea e seu sistema automaticamente fez tudo para mim. Em 3 dias, recebi o painel de todo o caminho, da China a Bangladesh. A qualidade é fantástica, a máscara de solda é perfeita e as linhas / traços, o acabamento é tão bom quanto poderia ser.

De qualquer forma, usei.300 mmtraces, pois pode suportar 1Amp de corrente.

Você pode simplesmente baixar os arquivos PCB daqui.





Coisas de solda e circuito de teste:


Nesta etapa eu soldei tudo. Tenha muito cuidado para não inalar a fumaça, pois pode causar câncer.

Não estou usando o módulo Bluetooth nem o módulo TF, então os deixei sem solda. O bom é que usei motores 3servo e um sensor de sonar, todas as coisas são facilmente alimentadas pelo cabo USB que conectamos para programar o Arduino. Isso é ótimo, pois não temos que pensar em outra fonte de energia.

Porém, se você ainda quiser usar baterias externas, escolha baterias lipo 2s (7,4V), mais do que isso e o servo queima.





Faça o corpo:


Usei folha de PVC para fazer o corpo, você pode usar papelão também. Primeiro fiz uma caixa para a parte principal, lá vai a placa principal e os servo motores. É como fazer caixas. Fiz a cabeça da mesma forma, fiz dois furos para o sensor (como olhos). Eu adicionei todas as fotos de que você precisa. Eu fiz uma mão como uma chave inglesa e a outra como um plugue. Na verdade, usei um plug e o adicionei a um braço usando cola quente.

Dimensão? Na verdade não há nenhum, porque é o seu robô, você pode fazer usando algumas ferramentas fáceis, então faça como quiser, faça de qualquer forma e tamanho.

Tenha muito cuidado ao adicionar todos os componentes eletrônicos antes de fechar o corpo. Pintei o corpo depois de colocar sensores e toda a parte eletrônica. Não faça isso, eu já pintei meu Arduino de amarelo.

Então, pinte depois de terminar a carroceria, depois coloque toda a parte eletrônica.





Codificação1 (Python):


Baixe Python deste site, certifique-se de adicionar python em seu caminho durante a instalação.

Depois de instalar o Pythonyou, você precisará executar alguns comandos do prompt de comando / terminal para instalar bibliotecas para reconhecimento de fala, suporte de áudio, texto para fala, automação do navegador e comunicação serial. Execute esses comandos -
  pip installspeechrecognitionpip install pyaudiopip install pyttsx3pip install pywhatkitpip install pyserial  

Em seguida, baixe o pythoncode aqui ou copie abaixo. Cabeça para a etapa de codificação2.
  "" "JAUNDICE:Robô AI Assistant com Arduino e Pythonauthor:ashraf minhajmail:[email protected] Edit:Nov 2020License:Copyright (C) Ashraf Minhaj.General Public License (GPL3 +)" "" import speech_recognition como sr # voice reconhecimento libraryimport random # para escolher palavras aleatórias em listimport pyttsx3 # offline Text to Speechimport datetime # para obter data e hora, importar webbrowser # para abrir e executar tarefas webimport serial # para comunicação serialimport pywhatkit # para mais automação web # Declare o nome do robô (Palavra de despertar) robot_name ='icterícia' # palavras aleatórias listhi_words =['oi', 'olá', 'seu bebê', 'salam'] bye_words =['tchau', 'tata', 'hasta la vista' ] r_u_there =['você está aí', 'você está aí'] # initilize thingsengine =pyttsx3.init () # init text to speech engine # voices =engine.getProperty ('voices') #check para vozes # engine.setProperty ( 'voice', voices [1] .id) # female voicelistener =sr.Recognizer () # inicializar a API de reconhecimento de voz # conectar com NiNi mot ou placa de driver sobre comunicação serialtry:port =serial.Serial ("COM15", 9600) print ("Corpo virtual, conectado.") exceto:print ("Incapaz de conectar ao meu corpo físico") def listen ():"" "ouvir o que o usuário diz" "" try:with sr.Microphone () como fonte:# get input from mic print ("Talk>>") voice =listener.listen (source) # listen from microphone command =listener.recognize_google (voz) .lower () # use google API # todas as palavras em minúsculas- para que possamos processar facilmente #command =command.lower () print (command) # procure a palavra de ativação no início if (command.split (' ') [0] ==robot_name):# if wake up word found .... print ("[wake-up word found]") process (command) # call process funtion para realizar uma ação exceto:passdef process (words) :"" "processa o que o usuário diz e executa as ações" "" print (words) # verifica se recebeu algum comando # break words in word_list =words.split ('') [1:] # divide por espaço e ignora o wake -up palavra if (len (word_list) ==1):if (word_list [0] ==robot_name):talk ("How Can Eu te ajudo? ") # .Write (b'l ') return if word_list [0] ==' play ':" "" se comando para tocar coisas, toque do youtube "" "talk (" Ok, chefe, jogando " ) extension ='' .join (word_list [1:]) # search sem a palavra de comando port.write (b'u ') pywhatkit.playonyt (extension) port.write (b'l') return elif word_list [0] =='search':"" "if command for google search" "" port.write (b'u ') talk ("Ok, chefe, pesquisando") port.write (b'l') extension ='' .join (word_list [1:]) pywhatkit.search (extension) return if (word_list [0] =='get') e (word_list [1] =='info'):"" "if command para obter informações" "" port.write (b'u ') talk ("Ok, estou certo") port.write (b'u') extension ='' .join (word_list [2:]) # search sem as palavras de comando inf =pywhatkit.info (extensão) talk (inf) # leitura do resultado return elif word_list [0] =='open':"" "if comando para abrir URLs" "" port.write (b'l ') talk (" Abrindo, senhor ") url =f" http:// {'' .join (word_list [1:])} "# faça o URL 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 ') # agora verifique para correspondências por palavra em word_list:if word em hi_words:"" "se o usuário disser oi / hello cumprimente-o de acordo" "" port.write (b'h ') # send command to wave hand talk (random.choice (hi_words) ) elif palavra em bye_words:"" "se o usuário disser tchau etc" "" talk (random.choice (bye_words)) def talk (frase):"" "falar / responder ao usuário" "" engine.say (frase) engine.runAndWait () # executa o appwhile True:listen () # executa a escuta uma vez  





Coding2 (Arduino):


Essa parte é fácil, nada para instalar. Use Arduino.ide para programar a placa. Baixe aqui se você nunca usou o Arduino antes.

Como mencionei anteriormente, o programa Arduino espera por dados seriais; se receber algum dado, ele verifica os dados de byte. Se os dados corresponderem ao comando predefinido, ele executará uma instrução. Se 'u' é enviado, faz ambas as mãos subirem, assim.

Baixe o código aqui; copie abaixo.
  / ** JAUNDICE:AI Assistant robot com Arduino e Python *** * autor:ashraf minhaj * mail:[email protected]* Última edição:Nov 2020 * * Licença:Copyright (C) Ashraf Minhaj . * Licença Pública Geral (GPL3 +) * / # include  Cabeça do servo; Servo l_hand; Servo r_hand; // define o pinsint trig =4; int echo =5; // recebido databyte val =""; void setup () {// coloque seu código de configuração aqui, para executar uma vez:head.attach (2); l_hand.attach (3); r_hand.attach (4); Serial.begin (9600); // para comunicação via porta serial com Python} void standby () {// todos os motores para essas posições 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 () {// todos os motores para essas posições head.write (90); int i =0; para (i =30; i <=170; i ++) {r_hand.write (i); atraso (5); } para (i =170; i> =100; i -) {r_hand.write (i); atraso (5); } para (i =100; i <=170; i ++) {r_hand.write (i); atraso (5); } para (i =170; i> =30; i -) {r_hand.write (i); atraso (5); } standby ();} void hands_up () {// fazer isso em todos os comandos (nada além de mover um pouco as mãos) //head.write(150); // atraso (300); //head.write(90); int i =0; para (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); atraso (5); } atraso (600); para (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); atraso (5); }} void weight_lift () {// levantar peso usando ambas as mãos int i =0; para (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); atraso (5); } for (contagem interna =0; contagem <=4; contagem ++) {for (i =170; i> =60; 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); atraso (5); } para (i =60; 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); atraso (5); }} para (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); atraso (5); }} void excited () {return;} void look_left () {// rotate hed to left head.write (180);} void confused () {for (int count =0; count <=1; count ++) {head .write (30); r_hand.write (170); atraso (700); r_hand.write (30); head.write (120); l_hand.write (30); atraso (700); l_hand.write (160); } standby ();} void double_punch () {// faz um soco int i =0; para (i =30; i> =0; 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); atraso (5); } atraso (2000); int r_pos =80; int l_pos =map (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); atraso (500); standby ();} void r_upper_cut () {// faz o corte superior direito int i =0; para (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); atraso (5); } para (contagem interna =0; contagem <=4; contagem ++) {int i =0; para (i =170; i> =60; i -) {r_hand.write (i); atraso (1); } para (i =60; i <=170; i ++) {r_hand.write (i); atraso (1); } } espera(); delay (100);} void smash () {// esmaga coisas int i =0; para (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); atraso (5); } atraso (2000); para (i =170; i> =0; 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); atraso (1); } atraso (300); int r_pos =180; int l_pos =map (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); atraso (1000); standby ();} void eye_detect () {// faça algo se o sensor ocular detectar movimento retornar;} void loop () {// coloque seu código principal aqui, para executar repetidamente:standby (); while (Serial.available ()> 0) // procura por dados seriais disponíveis ou não {val =Serial.read (); // lê o valor serial if (val =='h') {// do hi hi (); } if (val =='p') {// fazer hi double_punch (); } if (val =='u') {hands_up (); atraso (3000); } if (val =='l') {standby (); olhe para a esquerda(); atraso (2000); } if (val =='U') {// uppercut r_upper_cut (); atraso (2000); } if (val =='s') {smash (); atraso (2000); }}}  

Faça upload do código.





Juntando tudo e pronto:


Depois de concluir todas essas etapas, conectei meu Arduino ao pc usando o cabo USB e executei o programapython. Enquanto estiver usando, certifique-se de adicionar a porta correta do Arduino no código python. Se você fez tudo como mencionei, o bot deve funcionar perfeitamente.

Obrigada!

Código

Código-fonte
https://github.com/ashraf-minhaj/JAUNDICE-AI-Assistant-Robot

Esquemas


Processo de manufatura

  1. Construindo robôs com Raspberry Pi e Python
  2. Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
  3. type() e isinstance() em Python com exemplos
  4. Sistema de atendimento usando Arduino e RFID com Python
  5. Obstáculos para evitar o robô com servo motor
  6. Controle de um robô Roomba com Arduino e dispositivo Android
  7. Controle do Servo Motor com Arduino e MPU6050
  8. u-blox LEA-6H 02 Módulo GPS com Arduino e Python
  9. Reconhecimento de fala e síntese com Arduino
  10. Robô assistente autônomo da casa