資料介紹
描述
介紹:
我們都熟悉《鋼鐵俠》電影和漫威系列中的“賈維斯”AI助手機器人。自己動手做東西一直是程序員的夢想。今天我將展示一種使用 Python 編程制作這樣一個助手的簡單方法。而且,我還會給那個機器人做一個物理化身,這樣每當我們和機器人說話的時候,它就可以做一些動作。這將比僅僅一個軟件機器人更令人驚奇。因為如果它有身體,那就很酷了。所以今天我們將學習使用Arduino和Python編程來制作一個可以控制您的計算機并與您閑聊的AIrobot。讓我們跳進去!
為什么我將機器人命名為“黃疸”?因為我把它涂成黃色,非常非常黃!
部分:
電子產品 -
Arduino Nano – 1x
微型伺服 Sg90 – 3x
身體 -
PVC片材(最好是白色的,上色更好,我用的是藍色的)
伺服輪(用于支架)
工具:
切刀
剪刀
熱膠
噴漆
軟件-
Arduino.ide
原則:
在進入實際建筑之前,很高興知道我們將要做什么。
那么,主要代碼或AI部分代碼會在電腦上運行,為什么呢?因為它支持 python 并且比小 Arduino 具有更多的處理能力,而且 AI bot 將控制/自動化我的電腦的一些任務,它必須在我的電腦上運行。因此,Arduinoboard 使用 USB 電纜連接到我的計算機。
這個想法是運行一個 python 程序,它將執(zhí)行 Speech totext 部分,處理文本并且還將執(zhí)行 Text to Speech。意味著機器人會傾聽、理解和回話。對于身體運動,我在 Arduino 板上保存了一些運動(封裝在函數(shù)中)。每個動作的功能由python代碼執(zhí)行。
例如——如果機器人必須說“Hi/hello”,python 代碼將發(fā)送一個字節(jié)“h”,Arduino 然后執(zhí)行 hi() 函數(shù)。就如此容易。
現(xiàn)在您有了一個想法,讓我們繼續(xù)下一個過程。
電路和電子
1 / 2
電路是讓大多數(shù)制造商煩惱的事情。如果出現(xiàn)問題,您可能會燒掉一些昂貴的零件。為此,我設計了一個可用于制作大量項目的 PCB 板。它有微型 SD 卡插槽、藍牙模塊插槽、5v 外部電源,整個設備由 Arduino Nano 供電。
我使用 EasyEDA 設計了一個 PCB ,并使用PCBWay在線服務進行了打印。他們的服務很棒。我訂購了PCB 即時報價,他們的系統(tǒng)自動為我完成了所有工作。三天之內,我從中國一路拿到了板子到孟加拉國。質量非常好,阻焊層完美,線條/痕跡,光潔度盡可能好。
無論如何,我使用了.300 mmtraces,因為它可以承受 1Amp 電流。
您可以從這里下載 PCB 文件。
焊接東西和測試電路:
在這一步中,我焊接了所有東西。小心不要吸入煙霧,它可能會致癌。
我沒有使用藍牙模塊或 TF 模塊,所以我沒有焊接那些。好消息是,我使用了 3 個伺服電機和一個聲納傳感器,所有東西都可以通過我們連接的 USB 電纜輕松供電,以對 Arduino 進行編程。這很棒,因為我們不必考慮其他電源。
但是,如果您仍然想使用外部電池,那么請使用 lipo 2s (7.4V) 電池,不僅如此,伺服器也會燒毀。
制作身體:
1 / 13
我用PVC板做身體,你也可以用紙板。首先,我為主要部分做了一個盒子,里面有主板和伺服電機。這就像制作盒子一樣。我以同樣的方式制作了頭部,為傳感器制作了兩個孔(作為眼睛)。我已經(jīng)添加了你需要的所有圖片。我把一只手做成扳手,另一只手做成插頭。我實際上使用了一個插頭并使用熱膠將其添加到一個手臂上。
方面?實際上沒有,因為它是你的機器人,你可以使用一些簡單的工具來制作它,讓它隨心所欲,讓它成為任何形狀和大小。
在關閉身體之前要非常小心地添加所有電子設備。在我放置傳感器和所有電子設備后,我畫了車身。不要那樣做,我已經(jīng)把我的 Arduino 染成了黃色。
所以,在車身上涂漆,然后放上所有的電子設備。
編碼1(Python):
從此站點下載Python,確保在安裝時將 python 添加到您的路徑中。
安裝 Python 后,您需要從命令提示符/終端運行一些命令來安裝用于語音識別、音頻支持、文本到語音、瀏覽器自動化、串行通信目的的庫。運行這些命令 -
?
pip installspeechrecognition pip install pyaudio pip install pyttsx3 pip install pywhatkit pip install pyserial
?
然后從下面下載 pythoncode或從下面復制。前往coding2步驟。
?
""" JAUNDICE: AI Assistant robot with Arduino and Python author: ashraf minhaj mail: ashraf_minhaj@yahoo.com Last Edit: Nov 2020 License: Copyright (C) Ashraf Minhaj. General Public License (GPL3+) """ import speech_recognition as sr # voice recognition library import random # to choose random words from list import pyttsx3 # offline Text to Speech import datetime # to get date and time import webbrowser # to open and perform web tasks import serial # for serial communication import pywhatkit # for more web automation # Declare robot name (Wake-Up word) robot_name = 'jaundice' # random words list hi_words = ['hi', 'hello', 'yo baby', 'salam'] bye_words = ['bye', 'tata', 'hasta la vista'] r_u_there = ['are you there', 'you there'] # initilize things engine = pyttsx3.init() # init text to speech engine #voices = engine.getProperty('voices') #check for voices #engine.setProperty('voice', voices[1].id) # female voice listener = sr.Recognizer() # initialize speech recognition API # connect with NiNi motor driver board over serial communication try: port = serial.Serial("COM15", 9600) print("Phycial body, connected.") except: print("Unable to connect to my physical body") def listen(): """ listen to what user says""" 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() # use google API # all words lowercase- so that we can process easily #command = command.lower() print(command) # look for wake up word in the beginning if (command.split(' ')[0] == robot_name): # if wake up word found.... print("[wake-up word found]") process(command) # call process funtion to take action except: pass def process(words): """ process what user says and take actions """ print(words) # check if it received any command # break words in word_list = words.split(' ')[1:] # split by space and ignore the wake-up word if (len(word_list)==1): if (word_list[0] == robot_name): talk("How Can I help you?") #.write(b'l') return if word_list[0] == 'play': """if command for playing things, play from youtube""" talk("Okay boss, playing") extension = ' '.join(word_list[1:]) # search without the command word 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("Okay boss, searching") port.write(b'l') extension = ' '.join(word_list[1:]) pywhatkit.search(extension) return if (word_list[0] == 'get') and (word_list[1] == 'info'): """if command for getting info""" port.write(b'u') talk("Okay, I am right on it") port.write(b'u') extension = ' '.join(word_list[2:]) # search without the command words inf = pywhatkit.info(extension) talk(inf) # read from result return elif word_list[0] == 'open': """if command for opening URLs""" port.write(b'l') talk("Opening, sir") url = f"http://{''.join(word_list[1:])}" # make the 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') # now check for matches for word in word_list: if word in hi_words: """ if user says hi/hello greet him accordingly""" port.write(b'h') # send command to wave hand talk(random.choice(hi_words)) elif word in bye_words: """ if user says bye etc""" talk(random.choice(bye_words)) def talk(sentence): """ talk / respond to the user """ engine.say(sentence) engine.runAndWait() # run the app while True: listen() # runs listen one time
?
編碼2(Arduino):
這部分很容易,無需安裝。使用Arduino.ide對開發(fā)板進行編程。如果您以前從未使用過 Arduino,請從此處下載。
正如我之前提到的,Arduino 程序等待串行數(shù)據(jù),如果它接收到任何數(shù)據(jù),它會檢查字節(jié)數(shù)據(jù)。如果數(shù)據(jù)與預定義的命令匹配,則它執(zhí)行一條語句。如果發(fā)送'u',它會使兩只手都向上,就像那樣。
從下面的副本下載代碼。
?
/** JAUNDICE: AI Assistant robot with Arduino and Python ** * * author: ashraf minhaj * mail: ashraf_minhaj@yahoo.com * Last Edit: Nov 2020 * * License: Copyright (C) Ashraf Minhaj. * General Public License (GPL3+) */ #includeServo head; Servo l_hand; Servo r_hand; // define sonar sensor's pins int trig = 4; int echo = 5; // received data byte val = ""; void setup() { // put your setup code here, to run once: head.attach(2); l_hand.attach(3); r_hand.attach(4); Serial.begin(9600); // for communicating via serial port with Python } void standby(){ // all motors to these 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(){ // all motors to these positions head.write(90); int i = 0; for(i=30; i<= 170; i++){ r_hand.write(i); delay(5); } for(i=170; i>= 100; i--){ r_hand.write(i); delay(5); } for(i=100; i<= 170; i++){ r_hand.write(i); delay(5); } for(i=170; i>= 30; i--){ r_hand.write(i); delay(5); } standby(); } void hands_up(){ // do this on every command (nothing much just move hands a bit) //head.write(150); //delay(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); delay(5); } delay(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); delay(5); } } void weight_lift(){ // lift weight using both hands 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); delay(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); delay(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); delay(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); delay(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); delay(700); r_hand.write(30); head.write(120); l_hand.write(30); delay(700); l_hand.write(160); } standby(); } void double_punch(){ // do a 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); delay(5); } delay(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); delay(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 = map(r_pos, 0, 180, 180, 0); l_hand.write(l_pos); r_hand.write(r_pos); delay(5); } for(int count=0; count<=4; count++){ int i = 0; for(i=170; i>= 60; i--){ r_hand.write(i); delay(1); } for(i=60; i<= 170; i++){ r_hand.write(i); delay(1); } } standby(); delay(100); } void smash(){ // smash things 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); delay(5); } delay(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); delay(1); } delay(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); delay(1000); standby(); } void eye_detect(){ // do something if eye sensor detect motion return; } void loop() { // put your main code here, to run repeatedly: standby(); while(Serial.available() > 0) //look for serial data available or not { val = Serial.read(); //read the serial value if(val == 'h'){ // do hi hi(); } if(val == 'p'){ // do hi double_punch(); } if(val == 'u'){ hands_up(); delay(3000); } if(val == 'l'){ standby(); look_left(); delay(2000); } if(val == 'U'){ // uppercut r_upper_cut(); delay(2000); } if(val == 's'){ smash(); delay(2000); } } }
?
上傳代碼。
將所有內容放在一起并完成:
完成所有這些步驟后,我使用 USB 電纜將我的 Arduino 連接到 pc,然后運行 ??python 程序。當您使用它時,請確保在 python 代碼中添加正確的 Arduino 端口。如果你按照我提到的那樣做所有事情,機器人應該像魅力一樣工作。
謝謝你!
- 基于Jetson NANO的助手機器人
- Arduino機器人開源
- Arduino機器人
- 帶有Arduino、樂高和3D打印部件的DIY雙足機器人
- 用Arduino和L298制作帶有避障機器人的巡線器
- 基于Python的AI助手機器人 1次下載
- GRIPP3R助手機器人開源分享
- 帶有BT Web控制的Arduino自平衡機器人
- Wifi控制的FPV Rover機器人(帶有Arduino和ESP8266)
- Humaniod AI會說話的機器人與Arduino
- Arduino機器人螞蟻
- ARLOK arduino機器人
- 魔方機器人(三)Arduino
- Arduino教學機器人的使用教程免費下載 37次下載
- Arduino開發(fā)機器人經(jīng)典書籍推薦Arduino開發(fā)實戰(zhàn)指南:機器人卷
- 如何使用Python和PinPong庫控制Arduino 718次閱讀
- 發(fā)現(xiàn)更多機器人開發(fā)技巧 AI與邊緣計算加持 638次閱讀
- 如何使用Arduino制造一個自動平衡機器人 4429次閱讀
- 面對疫情 醫(yī)療機器人能幫上什么忙? 2126次閱讀
- dfrobotSparki機器人套裝簡介 2064次閱讀
- dfrobotDevastator履帶機器人移動平臺簡介 1515次閱讀
- 協(xié)作機器人的起源_為什么需要協(xié)作機器人 8127次閱讀
- 手把手教你用Python創(chuàng)建微信機器人 3476次閱讀
- 盤點2018年機器人領域十大技術 3312次閱讀
- AI和VR在機器人控制的實在應用匯總 5506次閱讀
- 軟體機器人 前所未見的機器人 3692次閱讀
- Python+樹莓派實現(xiàn)的微信拍攝機器人 1w次閱讀
- 機器人如何識別顏色 2.5w次閱讀
- 手機如何連接小米掃地機器人_小米掃地機器人怎么連wifi 17.6w次閱讀
- 用Arduino和安卓舊手機,DIY遠程遙控機器人 2.9w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多