Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Robot asistente de IA con Arduino y Python

Componentes y suministros

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

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Introducción:

Todos estamos familiarizados con el robot asistente de IA "Jarvis" de las películas de "Iron Man" y la serie Marvel. Siempre ha sido un sueño de los programadores hacer algo por su cuenta. Hoy mostraré una forma sencilla de crear un asistente de este tipo utilizando la programación de Python. Además, también haré un avatar físico de ese robot, para que siempre que hablemos con el robot, pueda hacer algunos movimientos. Será más sorprendente que un simple robot de software. Porque si tiene un cuerpo, es genial. Así que hoy aprenderemos a usar la programación Arduino y Python para hacer un AIrobot que pueda controlar tu computadora y tener una pequeña charla contigo. ¡Entremos, chicos!

¿Por qué llamé al robot "ictericia"? ¡Porque lo pinté de amarillo, muy, muy amarillo!

Partes:

Electrónica:

  • Arduino Nano - 1x
  • Micro Servo Sg90 - 3x
  • Sensor ultrasónico HCsr04– 1x

Cuerpo -

  • Lámina de PVC (preferiblemente blanca, mejor para colorear, yo usé una azul)
  • Rueda servo (para el soporte)

Herramientas:

  • Cuchillo cortador
  • Tijera
  • pegamento caliente
  • Pintura en aerosol

Software -

  • Python3
  • Arduino.ide

Principio:

Antes de entrar en el edificio real, es genial tener una idea de lo que estaremos haciendo.

Entonces, el código principal o AIpart del código se ejecutará en la computadora, ¿por qué? Porque es compatible con Python y tiene más potencia de procesamiento que el pequeño Arduino, además, como el bot de IA controlará / automatizará algunas tareas de mi PC, tiene que ejecutarse en mi PC. Entonces, la placa Arduino se conectó a mi computadora usando el cable USB.

La idea es ejecutar un programa en Python que hará la parte Speech totext, procesará el texto y también hará Text to speech. Significa que el robot escuchará, comprenderá y responderá. Para el movimiento del cuerpo, guardé algunos movimientos (encapsulados en funciones) en la placa Arduino. Las funciones para cada movimiento son ejecutadas por el código Python.

Por ejemplo, si el robot tiene que decir "Hola / hola", el código Python enviará un byte "h", luego Arduino ejecutará la función hi (). Tan simple como eso.

Ahora que tiene una idea, pasemos al siguiente proceso.

Circuitos y electrónica

Los circuitos son lo que molesta a la mayoría de los fabricantes. Si algo sale mal, puede quemar algunas piezas caras. Para eso diseñé una placa PCB que se puede utilizar para realizar numerosos proyectos. Tiene ranura para tarjeta micro SD, ranura para módulo Bluetooth, fuente de alimentación externa de 5v y todo está alimentado por Arduino Nano.

Diseñé una PCB usando EasyEDA e imprimí usando el servicio en línea PCBWay. Su servicio es asombroso. Ordené usando la cotización instantánea de PCB y su sistema automáticamente hizo todo por mí. En 3 días obtuve el tablero desde China hasta Bangladesh. La calidad es fantástica, la máscara de soldadura es perfecta y las líneas / trazos, el acabado es tan bueno como podría ser.

De todos modos, utilicé trazas de 300 mm ya que puede soportar una corriente de 1 amperio.

Puede descargar los archivos PCB desde aquí.

Soldar cosas y circuito de prueba:

En este paso lo sueldo todo. Tenga mucho cuidado de no inhalar el humo, puede causar cáncer.

No estoy usando el módulo Bluetooth ni el módulo TF, así que los dejé sin soldar. Lo bueno es que utilicé 3 servomotores y un sensor de sonda, todas las cosas se alimentan fácilmente desde el cable USB que conectamos para programar el Arduino. Esto es genial, ya que no tenemos que pensar en otra fuente de energía.

Sin embargo, si aún desea usar baterías externas, elija baterías lipo 2s (7.4V), más que eso y el servo se quema.

Haz el cuerpo:

Usé láminas de PVC para hacer el cuerpo, también puedes usar cartón. Primero, hice una caja para la parte principal, ahí va la placa principal y los servomotores. Es como hacer cajas. Hice la cabeza de la misma manera, hice dos agujeros para el sensor (como ojos). He agregado todas las imágenes que necesita. Hice una mano como una llave y la otra como un tapón. De hecho, usé un tapón y lo agregué a un brazo con pegamento caliente.

¿Dimensión? En realidad, no hay ninguno, porque es tu robot, puedes hacerlo usando algunas herramientas fáciles, así que hazlo como quieras, hazlo de cualquier forma y tamaño.

Tenga mucho cuidado de colocar todos los componentes electrónicos antes de cerrar la carrocería. Pinté la carrocería después de poner los sensores y toda la electrónica. No hagas eso, ya coloreé mi Arduino de amarillo.

Por lo tanto, pinte después de terminar la carrocería, luego coloque todos los componentes electrónicos.

Codificación1 (Python):

Descargue Python desde este sitio, asegúrese de agregar Python en su ruta durante la instalación.

Después de instalar Pythony, deberá ejecutar algunos comandos desde el símbolo del sistema / terminal para instalar bibliotecas para el reconocimiento de voz, soporte de audio, texto a voz, automatización del navegador, comunicación en serie. Ejecute estos comandos -

  pip installspeechrecognitionpip install pyaudiopip install pyttsx3pip install pywhatkitpip install pyserial  

Luego descargue el código python desde aquí o cópielo desde abajo. Dirígete al paso de codificación 2.

  "" "JAUNDICE:Robot AI Assistant con Arduino y Pythonaautor:ashraf minhajmail:[email protected] Última edición:noviembre de 2020 Licencia:Copyright (C) Ashraf Minhaj. Licencia pública general (GPL3 +)" "" import speech_recognition as sr # biblioteca de reconocimiento de voz importar aleatorio # para elegir palabras aleatorias de la lista importar pyttsx3 # sin conexión de texto a voz importar fecha y hora # para obtener la fecha y la hora importar el navegador web # para abrir y realizar tareas web importar el número de serie para la comunicación en serie importar pywhatkit # para obtener más automatización web # Declarar el nombre del robot (Palabra para despertar) robot_name ='ictericia' # palabras aleatorias listhi_words =['hola', 'hola', 'yo baby', 'salam'] bye_words =['bye', 'tata', 'hasta la vista' ] r_u_there =['¿estás ahí?', 'estás ahí'] # initilize thingsengine =pyttsx3.init () # init text to speech engine # voices =engine.getProperty ('voices') #check for voces # engine.setProperty ( 'voice', voices [1] .id) # female voicelistener =sr.Recognizer () # inicializar la API de reconocimiento de voz # conectar con NiNi mot o placa de controlador a través de comunicación serial intento:puerto =serial.Serial ("COM15", 9600) print ("Phycial body, connected.") excepto:print ("No puedo conectarme a mi cuerpo físico") def listen ():"" "escucha lo que dice el usuario" "" prueba:con sr.Microphone () como fuente:# obtén la entrada de mic print ("Hablar>>") voice =listener.listen (source) # escucha desde el micrófono command =listener.recognize_google (voice) .lower () # use google API # todas las palabras en minúsculas- para que podamos procesar fácilmente #command =command.lower () print (command) # busque la palabra de activación al principio if (command.split (' ') [0] ==robot_name):# si se encuentra la palabra de activación ... imprimir ("[palabra de activación encontrada]") proceso (comando) # llamar a la función del proceso para tomar acción excepto:proceso passdef (palabras) :"" "procesa lo que dice el usuario y toma acciones" "" imprimir (palabras) # comprobar si recibió algún comando # romper palabras en lista_palabras =palabras.split ('') [1:] # dividir por espacio e ignorar la activación -up word if (len (word_list) ==1):if (word_list [0] ==robot_name):talk ("¿Cómo puedo ¿Te ayudo? ") # .Write (b'l ') return if word_list [0] ==' play ':" "" if comando para reproducir cosas, reproducir desde youtube "" "talk (" Ok, jefe, jugando " ) extension ='' .join (word_list [1:]) # buscar sin la palabra de comando port.write (b'u ') pywhatkit.playonyt (extensión) port.write (b'l') return elif word_list [0] =='buscar':"" "si el comando para la búsqueda de Google" "" port.write (b'u ') hablar ("Está bien, jefe, buscando") port.write (b'l') extensión ='' .join (word_list [1:]) pywhatkit.search (extensión) return if (word_list [0] =='get') y (word_list [1] =='info'):"" "if comando para obtener información" "" port.write (b'u ') talk ("Está bien, tengo razón") port.write (b'u') extension ='' .join (word_list [2:]) # buscar sin las palabras de comando inf =pywhatkit.info (extensión) talk (inf) # leer del resultado return elif word_list [0] =='open':"" "if comando para abrir URLs" "" port.write (b'l ') talk (" Abriendo, señor ") url =f" http:// {'' .join (word_list [1:])} "# hacer que la 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 ') # ahora verifica para coincidencias de palabra en lista_palabras:si palabra en hi_words:"" "si el usuario dice hola / hola salúdelo en consecuencia" "" port.write (b'h ') # enviar comando para saludar con la mano (random.choice (hi_words) ) elif palabra en bye_words:"" "si el usuario dice adiós, etc." "" hablar (random.choice (bye_words)) def talk (oración):"" "hablar / responder al usuario" "" engine.say (oración) engine.runAndWait () # ejecuta la aplicación mientras True:listen () # ejecuta listen una vez  

Codificación2 (Arduino):

Esta pieza es fácil, no hay nada que instalar. Utilice Arduino.ide para programar la placa. Descárguelo desde aquí si nunca antes ha usado Arduino.

Como mencioné anteriormente, el programa Arduino espera datos en serie, si recibe algún dato, verifica los datos del byte. Si los datos coinciden con un comando predefinido, se ejecuta una declaración. Si se envía "u", ambas manos se elevan, así.

Descargue el código de aquí, copia de abajo.

  / ** JAUNDICE:Robot AI Assistant con Arduino y Python *** * autor:ashraf minhaj * mail:[email protected]* Última edición:noviembre de 2020 * * Licencia:Copyright (C) Ashraf Minhaj . * Licencia pública general (GPL3 +) * / # incluye  Cabezal del servo; Servo l_hand; Servo r_hand; // define el pinsint trig =4 del sensor de la sonda; int echo =5; // databyte recibido val =""; void setup () {// ponga su código de configuración aquí, para que se ejecute una vez:head.attach (2); l_hand.attach (3); r_hand.attach (4); Serial.begin (9600); // para comunicarse a través del puerto serie con Python} void standby () {// todos los motores en estas posiciones 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 los motores en estas posiciones head.write (90); int i =0; para (i =30; i <=170; i ++) {r_hand.write (i); retraso (5); } para (i =170; i> =100; i -) {r_hand.write (i); retraso (5); } para (i =100; i <=170; i ++) {r_hand.write (i); retraso (5); } para (i =170; i> =30; i -) {r_hand.write (i); retraso (5); } standby ();} void hands_up () {// haz esto en cada comando (nada más, solo mueve las manos un poco) //head.write(150); // retraso (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); retraso (5); } retraso (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); retraso (5); }} void weight_lift () {// levantar peso con ambas manos 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); retraso (5); } for (int count =0; count <=4; count ++) {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); retraso (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); retraso (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); retraso (5); }} void emocionado () {return;} void look_left () {// rotar hed a la izquierda head.write (180);} void confusion () {for (int count =0; count <=1; count ++) {head .escribir (30); r_hand.write (170); retraso (700); r_hand.write (30); head.write (120); l_hand.write (30); retraso (700); l_hand.write (160); } standby ();} void double_punch () {// haz un puñetazo 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); retraso (5); } retraso (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); retraso (500); standby ();} void r_upper_cut () {// hacer el corte superior derecho 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); retraso (5); } para (int cuenta =0; cuenta <=4; cuenta ++) {int i =0; para (i =170; i> =60; i -) {r_hand.write (i); retraso (1); } para (i =60; i <=170; i ++) {r_hand.write (i); retraso (1); } } apoyar(); delay (100);} void smash () {// destroza cosas 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); retraso (5); } retraso (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); retraso (1); } retraso (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); retraso (1000); standby ();} void eye_detect () {// haz algo si el sensor ocular detecta el retorno de movimiento;} void loop () {// coloca tu código principal aquí, para que se ejecute repetidamente:standby (); while (Serial.available ()> 0) // busca datos en serie disponibles o no {val =Serial.read (); // leer el valor de serie if (val =='h') {// do hi hi (); } if (val =='p') {// hola double_punch (); } if (val =='u') {manos_ arriba (); retraso (3000); } if (val =='l') {standby (); mira a la izquierda(); retraso (2000); } if (val =='U') {// uppercut r_upper_cut (); retraso (2000); } si (val =='s') {aplastar (); retraso (2000); }}}  

Sube el código.

Poniendo todo junto y listo:

Después de completar todos esos pasos, conecté mi Arduino a la PC usando el cable USB y luego ejecuté el programa Python. Mientras lo usa, asegúrese de agregar el puerto correcto de Arduino en el código de Python. Si hiciste todo lo que he mencionado, el bot debería funcionar como un encanto.

¡Gracias!

Código

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

Esquemas


Proceso de manufactura

  1. Creación de robots con Raspberry Pi y Python
  2. Cree su robot de transmisión de video controlado por Internet con Arduino y Raspberry Pi
  3. type() y isinstance() en Python con ejemplos
  4. Sistema de asistencia que usa Arduino y RFID con Python
  5. Obstáculos que evitan el robot con servomotor
  6. Controlar un robot Roomba con Arduino y un dispositivo Android
  7. Control del servomotor con Arduino y MPU6050
  8. Módulo GPS u-blox LEA-6H 02 con Arduino y Python
  9. Reconocimiento y síntesis de voz con Arduino
  10. Robot asistente doméstico autónomo
  11. Controla el brazo del robot Arduino con la aplicación de Android