Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

KI-Assistentenroboter mit Arduino und Python

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
SG90 Micro-Servomotor
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 1
PCBWay Custom PCB
https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Einführung:

Wir alle kennen den KI-Assistenzroboter „Jarvis“ aus „Iron Man“-Filmen und Marvel-Serien. Es war schon immer ein Traum von Programmierern, etwas selbst zu machen. Ich werde heute einen einfachen Weg zeigen, um einen solchen Assistenten mit Python-Programmierung zu erstellen. Darüber hinaus werde ich auch einen physischen Avatar dieses Roboters erstellen, damit er, wann immer wir mit ihm sprechen, einige Bewegungen ausführen kann. Das wird erstaunlicher sein als nur ein Software-Roboter. Denn wenn es einen Körper hat, ist es cool. Also werden wir heute lernen, sowohl Arduino- als auch Python-Programmierung zu verwenden, um einen AIrobot zu entwickeln, der deinen Computer steuern und mit dir ein wenig plaudern kann. Lass uns reinspringen!

Warum ich den Roboter „Gelbsucht“ genannt habe? Weil ich es gelb gemalt habe, sehr sehr gelb!

Teile:

Elektronik -

  • Arduino Nano – 1x
  • Micro Servo Sg90 – 3x
  • Ultraschallsensor HCsr04 – 1x

Körper –

  • PVC-Platte (vorzugsweise weiß, besser zum Färben, ich habe blaue verwendet)
  • Servorad (für den Ständer)

Tools:

  • Cuttermesser
  • Schere
  • Heißkleber
  • Farbe sprühen

Software -

  • Python3
  • Arduino.ide

Prinzip:

Bevor Sie in das eigentliche Gebäude einsteigen, ist es großartig, eine Vorstellung davon zu haben, was wir tun werden.

Der Hauptcode oder AIpart des Codes wird also auf dem Computer ausgeführt, warum? Weil es Python unterstützt und mehr Rechenleistung als das kleine Arduino hat, auch da der KI-Bot einige Aufgaben meines PCs steuern / automatisieren wird, muss er auf meinem PC ausgeführt werden. Also, das Arduinoboard ist über das USB-Kabel mit meinem Computer verbunden.

Die Idee ist, ein Python-Programm auszuführen, das den Speech-to-Text-Teil ausführt, den Text verarbeitet und auch Text-to-Speech macht. Bedeutet, dass der Roboter zuhört, versteht und zurückspricht. Für die Körperbewegung habe ich einige Bewegungen (in Funktionen gekapselt) im Arduino-Board gespeichert. Die Funktion für jede Bewegung wird vom Python-Code ausgeführt.

Als Beispiel – wenn der Roboter ‚Hi/Hallo‘ sagen muss, sendet der Python-Code ein Byte ‚h‘, Arduino führt dann die hi()-Funktion aus. So einfach ist das.

Da Sie nun eine Idee haben, fahren wir mit dem nächsten Prozess fort.

Schaltungen und Elektronik

Schaltungen sind die Dinge, die die meisten Hersteller ärgern. Wenn etwas schief geht, können Sie einige teure Teile verbrennen. Dafür habe ich eine Leiterplatte entworfen, die für zahlreiche Projekte verwendet werden kann. Es hat einen Micro-SD-Kartensteckplatz, einen Bluetooth-Modulsteckplatz, eine externe 5V-Stromquelle und das Ganze wird von Arduino Nano betrieben.

Ich habe eine Leiterplatte mit EasyEDA entworfen und mit dem Online-Service PCBWay gedruckt. Ihr Service ist unglaublich. Ich habe mit PCB Instant Quote bestellt und ihr System hat automatisch alles für mich erledigt. Innerhalb von 3 Tagen habe ich das Board von China nach Bangladesch bekommen. Die Qualität ist fantastisch, die Lötstopplackierung ist perfekt und die Linien / Spuren, das Finish ist so gut wie es nur sein könnte.

Wie auch immer, ich habe 300 mm Spuren verwendet, da sie 1 Ampere Strom aushalten können.

Sie können die PCB-Dateien einfach hier herunterladen.

Lötsachen und Testschaltung:

In diesem Schritt habe ich alles gelötet. Achten Sie darauf, den Rauch nicht einzuatmen, da er Krebs verursachen kann.

Ich verwende weder Bluetooth-Modul noch TF-Modul, also habe ich diese ungelötet gelassen. Das Gute ist, ich habe 3 Servomotoren und einen Sonarsensor verwendet, alle Dinge werden einfach über das USB-Kabel mit Strom versorgt, das wir zum Programmieren des Arduino anschließen. Das ist großartig, da wir nicht an eine andere Stromquelle denken müssen.

Wenn Sie jedoch immer noch externe Batterien verwenden möchten, verwenden Sie Lipo 2s (7,4 V) Batterien, mehr als das und das Servo brennt.

Machen Sie den Körper:

Ich habe PVC-Folie verwendet, um den Körper zu machen, Sie können auch Pappe verwenden. Zuerst habe ich eine Box für den Hauptteil gemacht, da geht die Hauptplatine und die Servomotoren. Es ist wie das Herstellen von Kisten. Ich machte den Kopf auf die gleiche Weise, machte zwei Löcher für den Sensor (als Augen). Ich habe alle benötigten Bilder hinzugefügt. Ich machte eine Hand wie einen Schraubenschlüssel und eine andere wie einen Stecker. Ich habe tatsächlich einen Stecker verwendet und diesen mit Heißkleber an einem Arm befestigt.

Abmessungen? Eigentlich gibt es keinen, da es Ihr Roboter ist, können Sie ihn mit einigen einfachen Werkzeugen herstellen, also machen Sie ihn wie Sie möchten, machen Sie ihn in jeder Form und Größe.

Seien Sie sehr vorsichtig, wenn Sie die gesamte Elektronik hinzufügen, bevor Sie das Gehäuse schließen. Ich habe die Karosserie lackiert, nachdem ich Sensoren und die gesamte Elektronik angebracht hatte. Tun Sie das nicht, ich habe meinen Arduino bereits gelb gefärbt.

Also, lackieren Sie die Karosserie nach dem Finishen und setzen Sie dann die gesamte Elektronik ein.

Codierung1 (Python):

Laden Sie Python von dieser Seite herunter, stellen Sie sicher, dass Sie während der Installation Python in Ihren Pfad hinzufügen.

Nach der Installation von Python müssen Sie einige Befehle von der Eingabeaufforderung/dem Terminal ausführen, um Bibliotheken für Spracherkennung, Audiounterstützung, Text-to-Speech, BrowserAutomation und serielle Kommunikation zu installieren. Führen Sie diese Befehle aus -

pip installspeechrecognitionpip install pyaudiopip install pyttsx3pip install pywhatkitpip install pyserial 

Laden Sie dann den Pythoncode von hier herunter oder kopieren Sie ihn von unten. Gehen Sie zum Codierungsschritt 2.

 """ JAUNDICE:AI Assistant robot with Arduino and Pythonauthor:ashraf minhajmail:[email protected] Änderung:Nov 2020Lizenz:Copyright (C) Ashraf Minhaj.General Public License (GPL3+)"""import language_recognition as sr # Spracherkennungsbibliothekimport random # um zufällige Wörter aus listimport pyttsx3 zu wählen # offline Text to Speechimport datetime # um Datum und Uhrzeit zu erhaltenimport Webbrowser # zum Öffnen und Ausführen von Webaufgabenimport serial # für serielle Kommunikationimport pywhatkit # für mehr Webautomatisierung# Roboternamen angeben (Wake-Up-Wort)robot_name ='Gelbsucht'# zufällige Wörter listhi_words =['hi', 'hallo', 'yo baby', 'salam']bye_words =['bye', 'tata', 'hasta la vista' ]r_u_there =['bist du da', 'du da']# 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() # Spracherkennung initialisieren API# Verbindung mit NiNi mot oder Treiberplatine über serielle Kommunikationtry:port =serial.Serial("COM15", 9600) print("Phycial body, connected.")außer:print("Keine Verbindung zu meinem physischen Körper möglich")def listen():"" " Hör dir an, was der Benutzer sagt""" try:with sr.Microphone() as source:# Get input from mic print("Talk>>") voice =listener.listen(source) # listen from microphone command =listener.recognize_google (voice).lower() # Google API verwenden # alle Wörter in Kleinbuchstaben- damit wir sie leicht verarbeiten können #command =command.lower() print(command) # nach Aufweckwort am Anfang suchen if (command.split(' ')[0] ==robot_name):# if Wake-Up-Wort gefunden.... print("[Wake-Up-Wort gefunden]") process(command) # Aufruf der Prozessfunktion, um Maßnahmen zu ergreifen, außer:passdef process(words) :""" Verarbeite was der Benutzer sagt und ergreife Aktionen """ print(words) # check ob es einen Befehl erhalten hat # break words in word_list =words.split(' ')[1:] # durch Leerzeichen aufteilen und den Wake ignorieren -up word if (len(word_list)==1):if (word_list[0] ==robot_name):talk("How can Ich helfe dir?") #.write(b'l') return if word_list[0] =='play':"""if Befehl zum Spielen von Dingen, spiele von YouTube ab""" talk("Okay, Boss, spiele" ) extension =' '.join(word_list[1:]) # Suche ohne den Befehl word.write(b'u') pywhatkit.playonyt(extension) port.write(b'l') return elif word_list[0] =='search':"""if Befehl für die Google-Suche""" port.write(b'u') talk("Okay, Chef, suche") port.write(b'l') extension =' '.join (word_list[1:]) pywhatkit.search(extension) return if (word_list[0] =='get') und (word_list[1] =='info'):"""if Befehl zum Abrufen von Informationen""" port.write(b'u') talk("Okay, ich habe Recht") port.write(b'u') extension =' '.join(word_list[2:]) # Suche ohne die Befehlswörter inf =pywhatkit.info(Erweiterung) talk(inf) # Aus Ergebnis lesen Rückgabe elif word_list[0] =='open':"""if Befehl zum Öffnen von URLs""" port.write(b'l') talk(" Opening, Sir") url =f"http://{''.join(word_list[1:])}" # lasse die URL webbrowser.open(url) elif word_list[0] =='uppercut' zurückgeben:port.write(b'U') elif word_list[0] =='smash':port.write(b's') elif word_list[0] =='punch':port.write(b'p') # jetzt check for match for word in word_list:if word in hi_words:""" wenn der Benutzer Hallo/Hallo sagt, grüße ihn entsprechend""" port.write(b'h') # sende den Befehl an winken Hand talk(random.choice(hi_words) ) elif-Wort in bye_words:""" wenn der Benutzer Tschüss sagt usw.""" talk(random.choice(bye_words))def talk(satz):""" spreche / antworte dem Benutzer """ engine.say(satz) engine.runAndWait()# Führe die App aus, während True:listen() # Führt einmal listen aus 

Codierung2 (Arduino):

Dieser Teil ist einfach, nichts zu installieren. Verwenden Sie Arduino.ide, um das Board zu programmieren. Laden Sie von hier herunter, wenn Sie noch nie Arduino verwendet haben.

Wie ich bereits erwähnt habe, wartet das Arduino-Programm auf serielle Daten. Wenn es Daten empfängt, überprüft es die Bytedaten. Wenn Daten mit einem vordefinierten Befehl übereinstimmen, wird eine Anweisung ausgeführt. Wenn „u“ gesendet wird, gehen beide Hände nach oben, so.

Laden Sie den Code hiervon herunter, kopieren Sie ihn unten.

 /** JAUNDICE:AI Assistant robot with Arduino and Python *** * Autor:Ashraf Minhaj* Mail:[email protected]* Letzte Änderung:Nov. 2020* * Lizenz:Copyright (C) Ashraf Minhaj .* General Public License (GPL3+)*/#includeServo head;Servo l_hand;Servo r_hand;// Definiere die Pins des Sonarsensorsint trig =4;int echo =5;// Received databyte val =""; void setup() {// füge deinen Setup-Code hier ein, um ihn einmal auszuführen:head.attach(2); l_hand.attach(3); r_hand.attach(4); Serial.begin (9600); // für die Kommunikation über die serielle Schnittstelle mit Python}void standby(){ // alle Motoren auf diese Positionen 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(){// alle Motoren auf diese Positionen head.write(90); int i =0; for(i=30; i<=170; i++){r_hand.write(i); Verzögerung(5); } for(i=170; i>=100; i--){r_hand.write(i); Verzögerung(5); } for(i=100; i<=170; i++){r_hand.write(i); Verzögerung(5); } for(i=170; i>=30; i--){r_hand.write(i); Verzögerung(5); } standby();}void hands_up(){ // mach dies bei jedem Befehl (nicht viel, nur die Hände ein bisschen bewegen) //head.write(150); // Verzögerung (300); //head.write (90); 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); Verzögerung(5); } Verzögerung (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); Verzögerung(5); }}void weight_lift () {// Gewicht mit beiden Händen heben 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); Verzögerung(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); Verzögerung(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); Verzögerung(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); Verzögerung(5); }}void aufgeregt(){ return;}void look_left(){ // hed nach links drehen head.write(180);}void verwirrt(){ for(int count=0; count<=1; count++){ head .write(30); r_hand.write(170); Verzögerung (700); r_hand.write (30); head.write(120); l_hand.write (30); Verzögerung (700); l_hand.write(160); } Standby();}void double_punch(){// mach einen Schlag 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); Verzögerung(5); } Verzögerung (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); Verzögerung (500); Standby();}void r_upper_cut(){// mach den rechten oberen Schnitt 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); Verzögerung(5); } for(int count=0; count<=4; count++){int i =0; for(i=170; i>=60; i--){r_hand.write(i); Verzögerung (1); } for(i=60; i<=170; i++){r_hand.write(i); Verzögerung (1); } } bereithalten(); delay (100);}void smash () { // Dinge zerschlagen 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); Verzögerung(5); } Verzögerung (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); Verzögerung (1); } Verzögerung (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); Verzögerung (1000); Standby ();}void eye_detect () { // etwas tun, wenn der Augensensor eine Bewegung erkennt Return;}void loop () { // deinen Hauptcode hier einfügen, um ihn wiederholt auszuführen:standby (); Während (Serial.available ()> 0) // nach verfügbaren seriellen Daten suchen oder nicht {val =Serial.read (); // den seriellen Wert lesen if (val =='h') {// tun hi hi (); } if(val =='p'){// tun hallo double_punch(); } if(val =='u'){hands_up(); Verzögerung (3000); } if(val =='l'){ Standby(); Guck nach links(); Verzögerung (2000); } if(val =='U'){//Aufwärtsschnitt r_upper_cut(); Verzögerung (2000); } if(val =='s'){ smash(); Verzögerung (2000); } }} 

Lade den Code hoch.

Alles zusammenfügen und fertig:

Nachdem ich all diese Schritte abgeschlossen hatte, schloss ich mein Arduino mit dem USB-Kabel an den PC an und führte dann das Python-Programm aus. Stellen Sie während der Verwendung sicher, dass Sie den richtigen Port von Arduino im Python-Code hinzufügen. Wenn Sie alles so gemacht haben, wie ich es erwähnt habe, sollte der Bot wie ein Zauber funktionieren.

Danke!

Code

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

Schaltpläne


Herstellungsprozess

  1. Roboter bauen mit Raspberry Pi und Python
  2. Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi
  3. type() und isinstance() in Python mit Beispielen
  4. Anwesenheitssystem mit Arduino und RFID mit Python
  5. Hindernisse vermeiden Roboter mit Servomotor
  6. Steuerung eines Roomba-Roboters mit Arduino und Android-Gerät
  7. Steuerung des Servomotors mit Arduino und MPU6050
  8. u-blox LEA-6H 02 GPS-Modul mit Arduino und Python
  9. Spracherkennung und -synthese mit Arduino
  10. Autonomer Heimassistent-Roboter