Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Robot assistant IA avec Arduino et Python

Composants et fournitures

Arduino Nano R3
× 1
Micro-servomoteur SG90
× 1
Capteur à ultrasons - HC-SR04 (Générique)
× 1
PCBWay Custom PCB
https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Introduction :

Nous connaissons tous le robot assistant IA « Jarvis » des films « Iron Man » et de la série Marvel. Les programmeurs ont toujours rêvé de créer quelque chose par eux-mêmes. Je vais aujourd'hui montrer un moyen simple de créer un tel assistant en utilisant la programmation Python. De plus, je vais également faire un avatar physique de ce robot, de sorte que chaque fois que nous parlons au robot, il puisse effectuer certains mouvements. Ce sera plus étonnant qu'un simple robot logiciel. Parce que s'il a un corps, c'est cool. Alors aujourd'hui, nous allons apprendre à utiliser à la fois la programmation Arduino et Python pour créer un AIrobot qui peut contrôler votre ordinateur et discuter un peu avec vous. Allons-y les gars !

Pourquoi j'ai nommé le robot « Jaunisse » ? Parce que je l'ai peint en jaune, très très jaune !

Pièces :

Électronique -

  • Arduino Nano - 1x
  • Micro Servo Sg90 - 3x
  • Capteur à ultra-sons HCsr04– 1x

Corps –

  • Feuille de PVC (de préférence blanche, mieux pour la coloration, j'ai utilisé une bleue)
  • Roue d'asservissement (pour le support)

Outils :

  • Couteau cutter
  • Ciseaux
  • Colle chaude
  • Peinture en aérosol

Logiciel -

  • Python3
  • Arduino.ide

Principe :

Avant d'entrer dans le bâtiment proprement dit, il est bon d'avoir une idée de ce que nous allons faire.

Alors, le code principal ou AIpartie du code s'exécutera sur l'ordinateur, pourquoi ? Parce qu'il prend en charge python et a plus de puissance de traitement que le petit Arduino, de même que le bot AI contrôlera/automatisera certaines tâches de mon PC, il doit s'exécuter sur mon PC. Donc, l'Arduinoboard s'est connecté à mon ordinateur à l'aide du câble USB.

L'idée est d'exécuter un programme python qui fera la partie Speech totext, traitera le texte et fera également Text to Speech. Signifie que le robot écoutera, comprendra et répondra. Pour le mouvement du corps, j'ai enregistré certains mouvements (encapsulés dans des fonctions) dans la carte Arduino. La fonction pour chaque mouvement est exécutée par le code python.

Par exemple, si le robot doit dire « Salut/bonjour », le code python enverra un octet « h », Arduino exécute ensuite la fonction hi(). Aussi simple que cela.

Maintenant que vous avez une idée, passons au processus suivant.

Circuits et électronique

Les circuits sont les choses qui agacent la plupart des fabricants. Si quelque chose ne va pas, vous risquez de brûler des pièces coûteuses. Pour cela j'ai conçu une carte PCB qui peut être utilisée pour faire de nombreux projets. Il a un emplacement pour carte micro SD, un emplacement pour module Bluetooth, une source d'alimentation externe 5v et le tout est alimenté par Arduino Nano.

J'ai conçu un PCB à l'aide d'EasyEDA et imprimé à l'aide du service en ligne PCBWay. Leur service est incroyable. J'ai commandé en utilisant le devis instantané de PCB et leur système a automatiquement tout fait pour moi. En 3 jours, j'ai reçu la planche de la Chine au Bangladesh. La qualité est fantastique, le masquage de soudure est parfait et les lignes/traces, la finition est aussi bonne qu'elle pourrait l'être.

Quoi qu'il en soit, j'ai utilisé des traces de 300 mm car il peut supporter un courant de 1 A.

Vous pouvez simplement télécharger les fichiers PCB à partir d'ici.

Éléments à souder et circuit de test :

Dans cette étape, j'ai tout soudé. Faites très attention à ne pas inhaler les fumées, cela peut provoquer le cancer.

Je n'utilise pas de module Bluetooth ni de module TF, j'ai donc laissé ceux-ci dessoudés. La bonne chose est que j'ai utilisé 3 servomoteurs et un capteur sonar, tout s'alimente facilement à partir du câble USB que nous connectons pour programmer l'Arduino. C'est génial car nous n'avons pas à penser à une autre source d'alimentation.

Cependant, si vous souhaitez toujours utiliser des batteries externes, optez pour des batteries lipo 2s (7,4 V), plus que cela et le servo brûle.

Faire le corps :

J'ai utilisé une feuille de PVC pour fabriquer le corps, vous pouvez également utiliser du carton. Tout d'abord, j'ai fait une boîte pour la partie principale, il y a la carte principale et les servomoteurs. C'est comme faire des boîtes. J'ai fait la tête de la même manière, fait deux trous pour le capteur (comme les yeux). J'ai ajouté toutes les photos dont vous avez besoin. J'ai fait une main comme une clé et une autre comme un bouchon. En fait, j'ai utilisé un bouchon et l'ai ajouté à un bras à l'aide de colle chaude.

Dimension? En fait, il n'y en a pas, car c'est votre robot, vous pouvez le faire à l'aide d'outils simples, alors faites-le comme vous le souhaitez, faites-le de n'importe quelle forme et taille.

Soyez super prudent d'ajouter toute l'électronique avant de fermer le corps. J'ai peint la carrosserie après avoir mis les capteurs et toute l'électronique. Ne fais pas ça, j'ai déjà coloré mon Arduino en jaune.

Alors, faites de la peinture après avoir fini la carrosserie, puis mettez toute l'électronique.

Codage1 (Python) :

Téléchargez Python à partir de ce site, assurez-vous d'ajouter python dans votre chemin lors de l'installation.

Après avoir installé Python, vous devrez exécuter certaines commandes depuis l'invite de commande/le terminal vers les bibliothèques d'installation pour la reconnaissance vocale, la prise en charge audio, la synthèse vocale, l'automatisation du navigateur et la communication série. Exécutez ces commandes -

pip installspeechrecognitionpip installer pyaudiopip installer pyttsx3pip installer pywhatkitpip installer pyserial 

Ensuite, téléchargez le code python d'ici ou copiez ci-dessous. Dirigez-vous vers l'étape de codage2.

 """ JAUNDICE :robot assistant IA avec Arduino et PythonAuteur :ashraf minhajmail :[email protected]ère modification :nov. 2020Licence :Copyright (C) Ashraf Minhaj.Licence publique générale (GPL3+)"""import speech_recognition as sr # reconnaissance vocale libraryimport random # pour choisir des mots aléatoires dans listimport pyttsx3 # hors ligne Text to Speechimport datetime # pour obtenir la date et l'heureimport webbrowser # pour ouvrir et exécuter des tâches Webimport serial # pour la communication sérieimport pywhatkit # pour plus d'automatisation Web# Déclarer le nom du robot (Wake-Up word)robot_name ='jaunisse'# mots aléatoires listhi_words =['hi', 'hello', 'yo baby', 'salam']bye_words =['bye', 'tata', 'hasta la vista' ]r_u_there =['êtes-vous là', 'vous êtes là']# initilize thingsengine =pyttsx3.init() # init text to speech engine#voices =engine.getProperty('voices') #check for voices#engine.setProperty( 'voice', voices[1].id) # female voicelistener =sr.Recognizer() # initialiser l'API de reconnaissance vocale # se connecter avec NiNi mot ou carte pilote sur communication série :port =serial.Serial("COM15", 9600) print("Corps physique, connecté.")except:print("Impossible de se connecter à mon corps physique")def listen():"" " écoutez ce que l'utilisateur dit""" essayez :avec sr.Microphone() comme source :# obtenez l'entrée du micro print("Talk>>") voice =listener.listen(source) # écoutez du microphone command =listener.recognize_google (voice).lower() # utiliser l'API google # tous les mots en minuscules- afin que nous puissions traiter facilement #command =command.lower() print(command) # rechercher le mot de réveil au début if (command.split(' ')[0] ==nom_robot):# si le mot de réveil est trouvé.... print("[mot de réveil trouvé]") process(commande) # appelez la fonction du processus pour agir sauf :passdef process(words) :""" traite ce que l'utilisateur dit et prend des mesures """ print(words) # vérifie s'il a reçu une commande # casser les mots dans la liste_mots =mots.split(' ')[1:] # diviser par espace et ignorer le réveil -up word if (len(word_list)==1):if (word_list[0] ==robot_name):talk("Comment peut Je t'aide ?") #.write(b'l') return if word_list[0] =='play':"""if commande pour jouer, joue depuis youtube""" talk("D'accord patron, je joue" ) extension =' '.join(word_list[1:]) # recherche sans le mot de commande port.write(b'u') pywhatkit.playonyt(extension) port.write(b'l') return elif word_list[0] =='search':"""if commande pour la recherche google""" port.write(b'u') talk("OK patron, recherche") port.write(b'l') extension =' '.join (word_list[1:]) pywhatkit.search(extension) return if (word_list[0] =='get') et (word_list[1] =='info'):"""if commande pour obtenir des informations""" port.write(b'u') talk("D'accord, j'ai raison") port.write(b'u') extension =' '.join(word_list[2:]) # recherche sans les mots de commande inf =pywhatkit.info(extension) talk(inf) # read from result return elif word_list[0] =='open':"""if commande pour ouvrir les URL""" port.write(b'l') talk(" Ouverture, monsieur") url =f"http://{''.join(word_list[1:])}" # rendre l'URL webbrowser.open(url) retourner 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') # maintenant vérifier pour les correspondances pour le mot dans word_list :si le mot dans hi_words :""" si l'utilisateur dit bonjour/salut le saluer en conséquence""" port.write(b'h') # envoie la commande pour faire signe à la main talk(random.choice(hi_words) ) mot elif dans bye_words :""" si l'utilisateur dit au revoir etc. engine.runAndWait()# exécute l'application pendant que True :listen() # exécute l'écoute une fois 

Codage2 (Arduino) :

Cette partie est facile, rien à installer. Utilisez Arduino.ide pour programmer la carte. Téléchargez à partir d'ici si vous n'avez jamais utilisé Arduino auparavant.

Comme je l'ai mentionné précédemment, le programme Arduino attend les données série, s'il reçoit des données, il vérifie les données d'octet. Si les données correspondent à une commande prédéfinie, il exécute une instruction. Si « u » est envoyé, cela fait monter les deux mains, comme ça.

Téléchargez le code de la copie ci-dessous.

 /** JAUNDICE :robot assistant IA avec Arduino et Python *** * auteur :ashraf minhaj* courrier :[email protected]* Dernière modification :novembre 2020* * Licence :Copyright (C) Ashraf Minhaj .* Licence publique générale (GPL3+)*/#includeTête de servo;Servo l_hand;Servo r_hand;// définit le pinsint trig du capteur sonar =4;int echo =5;// databyte reçu val =""; void setup() { // mettez votre code de configuration ici, à exécuter une fois :head.attach(2); l_hand.attach(3); r_hand.attach(4); Serial.begin(9600); // pour communiquer via le port série avec Python}void standby(){ // tous les moteurs à ces positions 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(){ // tous les moteurs à ces positions head.write(90); entier je =0 ; for(i=30; i<=170; i++){ r_hand.write(i); retard (5) ; } for(i=170; i>=100; i--){ r_hand.write(i); retard (5) ; } for(i=100; i<=170; i++){ r_hand.write(i); retard (5) ; } for(i=170; i>=30; i--){ r_hand.write(i); retard (5) ; } standby();}void hands_up(){ // le faire à chaque commande (rien de bien bouge juste un peu les mains) //head.write(150); //délai (300); //head.write(90); entier je =0 ; for(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); retard (5) ; } délai (600); for(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); retard (5) ; }}void weight_lift(){ // soulever du poids en utilisant les deux mains int i =0; for(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); retard (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); retard (5) ; } for(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); retard (5) ; } } for(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); retard (5) ; }}void excité(){ return;}void look_left(){ // faire pivoter hed vers la gauche head.write(180);}void confus(){ for(int count=0; count<=1; count++){ head .write(30); r_hand.write(170); retard (700); r_hand.write(30); head.write(120); l_hand.write(30); retard (700); l_hand.write(160); } standby();}void double_punch(){ // faire un punch int i =0; for(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); retard (5) ; } retard (2000); int pos_r =80 ; int l_pos =map(r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); retard (500); standby();}void r_upper_cut(){ // faire la coupe supérieure droite int i =0; for(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); retard (5) ; } for(int count=0; count<=4; count++){ int i =0; for(i=170; i>=60; i--){ r_hand.write(i); retard(1) ; } for(i=60; i<=170; i++){ r_hand.write(i); retard(1) ; } } Etre prêt(); delay(100);}void smash(){ // écraser les choses int i =0; for(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); retard (5) ; } retard (2000); for(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); retard(1) ; } délai (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); retard(1000); standby();}void eye_detect(){ // faire quelque chose si le capteur oculaire détecte un mouvement return;}void loop() { // mettre votre code principal ici, pour l'exécuter à plusieurs reprises :standby(); while(Serial.available()> 0) //recherche des données série disponibles ou non { val =Serial.read(); //lire la valeur en série if(val =='h'){ // faire hi hi(); } if(val =='p'){ // bonjour double_punch(); } if(val =='u'){ hands_up(); retard (3000); } if(val =='l'){ standby(); regarde à gauche(); retard (2000); } if(val =='U'){ // uppercut r_upper_cut(); retard (2000); } if(val =='s'){ smash(); retard (2000); } }} 

Téléchargez le code.

Rassembler le tout et c'est fait :

Après avoir terminé toutes ces étapes, j'ai connecté mon Arduino au PC à l'aide du câble USB, puis j'ai exécuté le programme Python. Pendant que vous l'utilisez, assurez-vous d'ajouter le bon port d'Arduino dans le code python. Si vous avez tout fait comme je l'ai mentionné, le bot devrait fonctionner comme un charme.

Merci !

Code

Code source
https://github.com/ashraf-minhaj/JAUNDICE-AI-Assistant-Robot

Schémas


Processus de fabrication

  1. Créer des robots avec Raspberry Pi et Python
  2. Créez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
  3. type() et isinstance() en Python avec des exemples
  4. Système de présence utilisant Arduino et RFID avec Python
  5. Obstacles pour éviter le robot avec servomoteur
  6. Contrôler un robot Roomba avec Arduino et un appareil Android
  7. Contrôle du servomoteur avec Arduino et MPU6050
  8. module GPS u-blox LEA-6H 02 avec Arduino et Python
  9. Reconnaissance et synthèse vocales avec Arduino