Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

AI-assistentrobot met Arduino en Python

Componenten en benodigdheden

Arduino Nano R3
× 1
SG90 Micro-servomotor
× 1
Ultrasone sensor - HC-SR04 (algemeen)
× 1
PCBWay Custom PCB
https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html
× 1

Apps en online services

Arduino IDE

Over dit project

Inleiding:

We kennen allemaal de 'Jarvis' AI-assistent-robot uit 'Iron Man'-films en Marvel-series. Het is altijd een droom geweest van programmeurs om zelf iets te maken. Ik zal vandaag een eenvoudige manier laten zien om zo'n assistent te maken met behulp van Python-programmering. Bovendien zal ik ook een fysieke avatar van die robot maken, zodat wanneer we met de robot praten, hij wat bewegingen kan maken. Dat zal verbazingwekkender zijn dan alleen een softwarerobot. Want als het een lichaam heeft, is het cool. Dus vandaag zullen we leren om zowel Arduino- als Python-programmering te gebruiken om een ​​AIrobot te maken die je computer kan besturen en een praatje met je kan maken. Laten we erin springen jongens!

Waarom heb ik de robot 'Geelzucht' genoemd? Omdat ik het geel heb geverfd, heel erg geel!

Onderdelen:

Elektronica -

  • Arduino Nano – 1x
  • Micro Servo Sg90 – 3x
  • Ultra-sonische sensor HCsr04– 1x

Lichaam –

  • PVC plaat (bij voorkeur wit, beter om in te kleuren, ik heb blauwe gebruikt)
  • Servowiel (voor de standaard)

Hulpprogramma's:

  • Snijmes
  • Schaar
  • Hete lijm
  • Spuitverf

Software -

  • Python3
  • Arduino.ide

Principe:

Voordat we aan de slag gaan met het daadwerkelijke gebouw, is het goed om een ​​idee te hebben van wat we gaan doen.

Dus de hoofdcode of het AI-gedeelte van de code wordt op de computer uitgevoerd, waarom? Omdat het python ondersteunt en meer verwerkingskracht heeft dan de kleine Arduino, ook omdat de AI-bot sommige taken van mijn pc zal besturen / automatiseren, moet hij op mijn pc draaien. Dus het Arduinoboard is via de USB-kabel op mijn computer aangesloten.

Het idee is om een ​​python-programma uit te voeren dat het gedeelte Spraak naar tekst zal doen, de tekst zal verwerken en ook Tekst naar spraak zal doen. Betekent dat de robot zal luisteren, begrijpen en terugpraten. Voor lichaamsbeweging heb ik enkele bewegingen (ingekapseld in functies) in Arduino-bord opgeslagen. De functie voor elke beweging wordt uitgevoerd door de python-code.

Als voorbeeld:als de robot 'Hallo' moet zeggen, stuurt de python-code een byte 'h', Arduino voert vervolgens de functie hi() uit. Zo simpel als dat.

Nu je een idee hebt, gaan we verder met het volgende proces.

Circuits en elektronica

Circuits zijn de dingen die de meeste makers irriteren. Als er iets misgaat, kan het zijn dat u dure onderdelen verbrandt. Daarvoor ontwierp ik een printplaat die gebruikt kan worden om tal van projecten te maken. Het heeft een micro SD-kaartsleuf, een Bluetooth-modulesleuf, een externe 5v-voedingsbron en het geheel wordt aangedreven door Arduino Nano.

Ik ontwierp een PCB met behulp van EasyEDA en afgedrukt met behulp van PCBWay online service. Hun service is geweldig. Ik bestelde met behulp van PCB instant quote en hun systeem deed automatisch alles voor mij. Binnen 3 dagen had ik het bord van helemaal uit China naar Bangladesh. De kwaliteit is fantastisch, soldeermaskering is perfect en de lijnen/sporen, afwerking is zo goed als het zou kunnen zijn.

Hoe dan ook, ik heb sporen van 300 mm gebruikt omdat het een stroom van 1 Amp kan dragen.

U kunt de PCB-bestanden hier gewoon downloaden.

Soldeer dingen en test circuit:

In deze stap heb ik alles gesoldeerd. Pas op dat u de rook niet inademt, dit kan kanker veroorzaken.

Ik gebruik geen Bluetoothmodule of TF-module, dus die heb ik ongesoldeerd gelaten. Het goede ding is, ik heb 3 servomotoren en een sonarsensor gebruikt, alle dingen worden gemakkelijk gevoed via de USB-kabel die we aansluiten om de Arduino te programmeren. Dit is geweldig omdat we niet aan een andere stroombron hoeven te denken.

Als je echter nog steeds externe batterijen wilt gebruiken, ga dan voor lipo 2s (7,4V) batterijen, meer dan dat en de servo brandt.

Maak het lichaam:

Ik heb PVC-folie gebruikt om het lichaam te maken, je kunt ook karton gebruiken. Eerst heb ik een doos gemaakt voor het hoofdgedeelte, daar gaat het moederbord en servomotoren. Het is net als het maken van dozen. Ik maakte het hoofd op dezelfde manier, maakte twee gaten voor de sensor (als ogen). Ik heb alle foto's toegevoegd die je nodig hebt. Ik maakte een hand als een moersleutel en een andere als een plug. Ik heb eigenlijk een plug gebruikt en die aan één arm toegevoegd met hete lijm.

Dimensie? Eigenlijk is die er niet, want het is jouw robot, je kunt hem maken met een paar eenvoudige hulpmiddelen, dus maak hem zoals je wilt, maak hem van elke vorm en grootte.

Wees super voorzichtig om alle elektronica toe te voegen voordat u de behuizing sluit. Ik heb de carrosserie geverfd nadat ik sensoren en alle elektronica had geplaatst. Doe dat niet, ik heb mijn Arduino al geel gekleurd.

Verf dus na het afwerken van de carrosserie en plaats dan alle elektronica.

Codering1 (Python):

Download Python van deze site, zorg ervoor dat je python aan je pad toevoegt tijdens het installeren.

Na het installeren van Python moet u enkele opdrachten uitvoeren vanaf de opdrachtprompt/terminal naar installatiebibliotheken voor spraakherkenning, audio-ondersteuning, tekst naar spraak, browserautomatisering en seriële communicatie. Voer deze opdrachten uit -

pip installspeechrecognitionpip install pyaudiopip install pyttsx3pip install pywhatkitpip install pyserial 

Download dan hier de pythoncode of kopieer deze hieronder. Ga naar codering2 stap.

 """ JAUNDICE:AI Assistant-robot met Arduino en Pythonauteur:ashraf minhajmail:[email protected] bewerking:nov 2020Licentie:Copyright (C) Ashraf Minhaj.General Public License (GPL3+)"""import speech_recognition as sr # spraakherkenning bibliotheekimport willekeurig # om willekeurige woorden uit lijst te kiezen import pyttsx3 # offline tekst naar spraakimport datetime # om datum en tijd te krijgen import webbrowser # om webtaken te openen en uit te voeren import seriële # voor seriële communicatie import pywhatkit # voor meer webautomatisering # Declareer robotnaam (Wake-Up word)robot_name ='geelzucht'# willekeurige woorden listhi_words =['hi', 'hello', 'yo baby', 'salam']bye_words =['bye', 'tata', 'hasta la vista' ]r_u_there =['ben je daar', 'jij daar']# initilize thingsengine =pyttsx3.init() # init text to speech engine#voices =engine.getProperty('voices') #check for voices#engine.setProperty( 'stem', stemmen[1].id) # vrouwelijke voicelistener =sr.Recognizer() # initialiseer API voor spraakherkenning# verbind met NiNi mot of driver board via seriële communicatietry:port =serial.Serial("COM15", 9600) print("Phycial body, connected.") behalve:print("Kan geen verbinding maken met mijn fysieke lichaam")def listen():"" " luister naar wat de gebruiker zegt""" probeer:met sr.Microphone() als bron:# krijg invoer van mic print("Talk>>") voice =listener.listen(bron) # luister vanaf microfoon commando =listener.recognize_google (voice).lower() # gebruik google API # alle woorden in kleine letters- zodat we gemakkelijk kunnen verwerken #command =command.lower() print(command) # zoek naar het activeringswoord in het begin if (command.split(' ')[0] ==robot_name):# if wake-up word gevonden.... print("[wake-up word gevonden]") process(command) # call process function om actie te ondernemen behalve:passdef process(words) :""" verwerk wat de gebruiker zegt en onderneem acties """ print(words) # controleer of het een commando heeft ontvangen # break words in word_list =words.split(' ')[1:] # split by spatie en negeer de wake -up woord if (len(word_list)==1):if (word_list[0] ==robot_name):talk("Hoe kan Ik help je?") #.write(b'l') return if word_list[0] =='play':"""if commando om dingen af ​​te spelen, speel vanaf youtube""" talk("Oké baas, spelen" ) extension =' '.join(word_list[1:]) # zoek zonder het commando woord port.write(b'u') pywhatkit.playonyt(extension) port.write(b'l') return elif word_list[0] =='search':"""if commando voor google search""" port.write(b'u') talk("Oké baas, zoeken") port.write(b'l') extension =' '.join (word_list[1:]) pywhatkit.search(extensie) return if (word_list[0] =='get') and (word_list[1] =='info'):"""if commando voor het verkrijgen van info""" port.write(b'u') talk("Ok, ik heb gelijk") port.write(b'u') extension =' '.join(word_list[2:]) # zoek zonder de opdracht woorden inf =pywhatkit.info(extensie) talk(inf) # read from result return elif word_list[0] =='open':"""if commando voor het openen van URL's""" port.write(b'l') talk(" Opening, meneer") url =f"http://{''.join(word_list[1:])}" # maak de 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') # check nu voor overeenkomsten voor woord in woordlijst:als woord in hi_words:""" als de gebruiker hallo zegt, begroet hem dienovereenkomstig""" port.write(b'h') # stuur commando naar wave hand talk(random.choice(hi_words) ) elif woord in bye_words:""" als gebruiker gedag zegt etc""" talk(random.choice(bye_words))def talk(zin):""" talk / reply to the user """ engine.say(zin) engine.runAndWait()# voer de app uit terwijl True:listen() # voert listen één keer uit 

Codering2 (Arduino):

Dit onderdeel is eenvoudig, niets te installeren. Gebruik Arduino.ide om het bord te programmeren. Download vanaf hier als je nog nooit Arduino hebt gebruikt.

Zoals ik eerder heb vermeld, wacht het Arduino-programma op seriële gegevens, als het gegevens ontvangt, controleert het de bytegegevens. Als gegevens overeenkomen met een vooraf gedefinieerde opdracht, wordt een instructie uitgevoerd. Als 'u' wordt verzonden, gaat beide hand omhoog, op die manier.

Download de code hiervan, kopieer deze hieronder.

 /** JAUNDICE:AI Assistent-robot met Arduino en Python *** * auteur:ashraf minhaj* mail:[email protected]* Laatste bewerking:nov 2020* * Licentie:Copyright (C) Ashraf Minhaj .* General Public License (GPL3+)*/#includeServo head;Servo l_hand;Servo r_hand;// definieer de pinsint van de sonarsensor trig =4;int echo =5;// ontvangen databyte val =""; void setup() { // plaats hier je setup-code, om een ​​keer uit te voeren:head.attach(2); l_hand.bijvoegen (3); r_hand.attach(4); Serieel.begin(9600); // voor communicatie via seriële poort met Python}void standby(){ // alle motoren naar deze posities head.write(90); int r_pos =30; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos);}void hi(){ // alle motoren naar deze posities head.write(90); int ik =0; for(i=30; i<=170; i++){ r_hand.write(i); vertraging (5); } for(i=170; i>=100; i--){ r_hand.write(i); vertraging (5); } for(i=100; i<=170; i++){ r_hand.write(i); vertraging (5); } for(i=170; i>=30; i--){ r_hand.write(i); vertraging (5); } standby();}void hands_up(){ // doe dit bij elk commando (niets veel, beweeg de handen gewoon een beetje) //head.write(150); //vertraging (300); //head.write(90); int ik =0; for(i=30; i<=170; i++){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } vertraging (600); for(i=170; i>=30; i--){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); }}void weight_lift(){ // til gewicht op met beide handen int i =0; for(i=30; i<=170; i++){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } for(int count=0; count<=4; count++){ for(i=170; i>=60; i--){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } for(i=60; i<=170; i++){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } } for(i=170; i>=30; i--){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); }}void opgewonden(){ return;}void look_left(){ // draai hed naar links head.write(180);}void verward(){ for(int count=0; count<=1; count++){ head .schrijf(30); r_hand.write(170); vertraging (700); r_hand.write(30); hoofd.schrijven(120); l_hand.write(30); vertraging (700); l_hand.write(160); } standby();}void double_punch(){ // doe een punch int i =0; for(i=30; i>=0; i--){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } vertraging (2000); int r_pos =80; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (500); standby();}void r_upper_cut(){ // make right upper-cut int i =0; for(i=30; i<=170; i++){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } for(int count=0; count<=4; count++){ int i =0; for(i=170; i>=60; i--){ r_hand.write(i); vertraging(1); } for(i=60; i<=170; i++){ r_hand.write(i); vertraging(1); } } stand-by(); delay(100);}void smash(){ // smash things int i =0; for(i=30; i<=170; i++){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (5); } vertraging (2000); for(i=170; i>=0; i--){ int r_pos =i; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging(1); } vertraging (300); int r_pos =180; int l_pos =kaart (r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); vertraging (1000); standby();}void eye_detect(){ // doe iets als de oogsensor bewegingsterugkeer detecteert;}void loop() { // plaats hier je hoofdcode, om herhaaldelijk uit te voeren:standby(); while(Serial.available()> 0) // zoek naar seriële data die wel of niet beschikbaar zijn {val =Serial.read(); // lees de seriële waarde if (val =='h') { // doe hi hi (); } if(val =='p'){ // doe hallo double_punch(); } if(val =='u'){ hands_up(); vertraging (3000); } if(val =='l'){ standby(); kijk naar links(); vertraging (2000); } if(val =='U'){ // uppercut r_upper_cut(); vertraging (2000); } if(val =='s'){ smash(); vertraging (2000); } }} 

Upload de code.

Alles bij elkaar en klaar:

Nadat ik al die stappen had voltooid, heb ik mijn Arduino met de USB-kabel op de pc aangesloten en vervolgens het python-programma uitgevoerd. Terwijl u het gebruikt, moet u ervoor zorgen dat u de juiste poort van Arduino toevoegt aan de python-code. Als je alles hebt gedaan zoals ik heb genoemd, zou de bot als een zonnetje moeten werken.

Bedankt!

Code

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

Schema's


Productieproces

  1. Botten bouwen met Raspberry Pi en Python
  2. Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
  3. type() en isinstance() in Python met voorbeelden
  4. Aanwezigheidssysteem met Arduino en RFID met Python
  5. Obstakels vermijden robot met servomotor
  6. Een Roomba-robot besturen met Arduino en Android-apparaat
  7. Besturing van servomotor met Arduino en MPU6050
  8. u-blox LEA-6H 02 GPS-module met Arduino en Python
  9. Spraakherkenning en synthese met Arduino
  10. Autonome Home Assistant-robot
  11. Bedien de Arduino-robotarm met Android-app