步驟1:組件
在繼續(xù)本教程之前,請(qǐng)確保您具有以下組件:
?Raspberry Pi Model B(http://www.adafruit.com/products/998)
?MicroSD卡(http://www.adafruit.com/products/102)
?Pi補(bǔ)鞋匠的分線和電纜(http://www.adafruit.com/products/914)
?任意尺寸的面包板(http://www.adafruit.com/products/239)
?M/M電線(http://www.adafruit.com/products/153) Wires(http://www.adafruit.com/products/266)
?原型Pi板(http://www.adafruit.com/produ cts/801)
?L293D芯片(http://www.adafruit.com/products/807)
?帶直流電動(dòng)機(jī)的中型RC汽車
?藍(lán)牙鍵盤
?烙鐵和電線
步驟2:先決條件
在繼續(xù)本教程之前,請(qǐng)確保滿足以下先決條件:
?帶有GPIO電纜和面包板的組裝式補(bǔ)鞋匠
?烙鐵體驗(yàn)
?升級(jí)的操作系統(tǒng)。您可以通過進(jìn)入終端來實(shí)現(xiàn)此目的:
sudo apt-get upgrade
?最新的GPIO庫。您可以通過進(jìn)入終端來實(shí)現(xiàn)此目的:
sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
步驟3:L293D芯片
硬件設(shè)置中最重要的部分是L293D芯片。使用適當(dāng)?shù)拇a,該芯片可讓您控制兩個(gè)獨(dú)立的直流電動(dòng)機(jī)的速度和方向。了解該芯片的工作方式及其每個(gè)引腳的功能對(duì)您至關(guān)重要。 “ + V”引腳(8)為電動(dòng)機(jī)供電,而“ + V”引腳(16)為芯片邏輯供電。每個(gè)“ IN”引腳(2、7、10、15)都需要連接到GPIO引腳,而“ OUT”引腳(3、6、11、14)則為兩個(gè)直流電動(dòng)機(jī)提供輸出。
第4步:硬件
了解了L293D芯片的原理之后,就該將其與其他組件一起組裝了,放在面包板上。已為您提供了原理圖。請(qǐng)注意L293D芯片的方向。
您可能會(huì)注意到圖中的LED。這些代表遙控車上的前燈或霓虹燈底燈。如果您的汽車缺少這些功能,請(qǐng)忽略原理圖的這一部分。
第5步:軟件
下面是您需要的python代碼這個(gè)程序工作。完成后將程序另存為rc_car.py。
將RPi.GPIO導(dǎo)入為io
io.setmode(io.BCM)
#這兩個(gè)代碼塊為RC車上的兩個(gè)直流電動(dòng)機(jī)配置PWM設(shè)置。它定義用于輸入的兩個(gè)GPIO
#引腳,啟動(dòng)PWM并將
#電動(dòng)機(jī)的速度設(shè)置為0
motor1_in1_pin = 4
motor1_in2_pin = 17 setup(motor1_in1_pin ,io.OUT)
io.setup(motor1_in2_pin,io.OUT)
motor1 = io.PWM(4,100)
motor1.start(0)
motor1.ChangeDutyCycle(0)
motor2_in1_pin = 24
motor2_in2_pin = 25
io.setup(motor2_in1_pin,io.OUT)
io.setup(motor2_in2_pin,io.OUT)
motor2 = io.PWM(4,100)
motor2 .start(0)
motor2.ChangeDutyCycle(0)
#定義將用于RC車上LED的GPIO引腳,并將輸出設(shè)置為false .setup( 18,io.OUT)
io.output(18,F(xiàn)alse)
io.setup(23,io.OUT)
io.output(23,F(xiàn)alse)
#getch方法可以確定用戶通過訪問系統(tǒng)文件在鍵盤上按下了哪個(gè)鍵
#然后它將作為變量返回按下的鍵
def getch():
fd = sys.stdin .fileno()
old_settings = termios.tcgetattr(fd)
試試:
tty.setraw(sys.stdin.filen o())
ch = sys.stdin.read(1)
最后:
termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)
return ch
#此部分代碼定義用于確定電動(dòng)機(jī)是否需要正轉(zhuǎn)或反轉(zhuǎn)的方法。通過將
#GPIO引腳之一設(shè)置為true,將另一個(gè)設(shè)置為false,可以實(shí)現(xiàn)不同的方向。如果
#兩個(gè)引腳的狀態(tài)都匹配,則電動(dòng)機(jī)將不會(huì)旋轉(zhuǎn)。
def motor1_forward():
io.output(電動(dòng)機(jī)1_in1_pin,True)
io.output(電動(dòng)機(jī)1_in2_pin,F(xiàn)alse)
def motor1_reverse():
io.output(motor1_in1_pin,F(xiàn)alse)
io.output(motor1_in2_pin,True)
def motor2_forward():
io.output(motor2_in1_pin,True)
io.output(motor2_in2_pin,F(xiàn)alse)
def io.output(motor2_in1_pin,F(xiàn)alse)
io.output(motor2_in2_pin,True)
#此方法將打開/關(guān)閉燈用戶
#按下特定鍵時(shí)關(guān)閉。然后它將更改燈的狀態(tài)
#,以便在下次調(diào)用時(shí)知道是打開還是關(guān)閉燈。
def toggleLights():
全局lightStatus
if(lightStatus == False):
io.output(18,True)
io.output(23,True)
lightStatus = True
else:
io.output(18, False)
io.output(23,F(xiàn)alse)
lightStatus = False
#此方法將切換轉(zhuǎn)向
#電機(jī)的方向。該方法將根據(jù)用戶按下的鍵確定用戶是否要
#向左或向右轉(zhuǎn),然后
#然后進(jìn)行適當(dāng)?shù)恼{(diào)整。它可以用作toggle
#,因?yàn)槌绦驘o法同時(shí)讀取
#上的多個(gè)按鍵。車輪的可能位置是?!坝摇保?a target="_blank">中心”和“左”。然后它將更新輪子的
#狀態(tài)以在下次調(diào)用它時(shí)進(jìn)行訪問。
def toggleSteering(direction):
global wheelStatus
if(direction ==“ right”):
if(wheelStatus ==“ centre”):
motor1_forward()
motor1.ChangeDutyCycle(99)
wheelStatus =“ right”
elif(wheelStatus ==“ left”):
motor1.ChangeDutyCycle(0)
wheelStatus =“中心”
if(方向==“左”):
if(wheelStatus ==“中心”):
motor1_reverse()
motor1 .ChangeDutyCycle(99)
wheelStatus =“左”
elif(wheelStatus ==“右”):
motor1.ChangeDutyCycle(0)
wheelStatus =“ centre”
#設(shè)置PWM固定為false,以便電動(dòng)機(jī)在用戶按下第一個(gè)鍵之前不會(huì)移動(dòng)
#。io.output(電動(dòng)機(jī)1_in1_pin,F(xiàn)alse)
io.output(電動(dòng)機(jī)1_in2_pin,F(xiàn)alse)
io.output(電動(dòng)機(jī)2_in1_pin ,F(xiàn)alse)
io.output(motor2_in2_pin,F(xiàn)alse)
#燈光和轉(zhuǎn)向狀態(tài)的全局變量
lightStatus = False
wheelStatus =“ centre” 《#》用戶h作為界面
print(“ w/s:加速”)
print(“ a/d:轉(zhuǎn)向”)
print(“ l:燈”)
print(“ x:退出” )
#無限循環(huán)直到用戶按下
#退出鍵
而True時(shí)才結(jié)束:
#調(diào)用鍵盤字符檢索方法并將其保存
#放入變量
= getch()
#按下“ w”鍵時(shí)汽車將向前行駛
if(char ==“ w”):
motor2_forward()
motor2.ChangeDutyCycle(99)
#按下“ s”鍵時(shí)汽車將倒車
if(char ==“ s”):
motor2_reverse()
motor2.ChangeDutyCycle(99)
?!?a “鍵將向左轉(zhuǎn)向
if(char ==” a“):
toggleSteering(”左“)
#” d“鍵將向右轉(zhuǎn)向
if(char = =“ d”):
toggleSteering(“ right”)
#?!?l”鍵將打開/關(guān)閉LED燈
if(char ==“ l”):
toggleLights()
?!?x”鍵將中斷循環(huán)并退出程序
if(char ==“ x”):
print(“ Program Ended”)
break
#在每個(gè)循環(huán)的結(jié)尾加速電機(jī)將停止
#等待其下一個(gè)命令
motor2.ChangeDutyCycle(0)
#鍵盤字符變量將設(shè)置為空白,準(zhǔn)備好
#保存下一個(gè)按下的鍵
char =“”
#程序?qū)⒃诮K止
io.cleanup()
之前停止所有GPIO活動(dòng),步驟6:測(cè)試和配置
要測(cè)試代碼,您必須以超級(jí)用戶身份運(yùn)行它才能訪問引腳。鍵入以下內(nèi)容:
sudo python rc_car.py
按W和S鍵向前和向后移動(dòng)汽車
按A和D鍵向左和向右切換轉(zhuǎn)向
按L
在準(zhǔn)備退出程序時(shí)按X鍵。
步驟7:焊接
現(xiàn)在是時(shí)候?qū)⒘慵附拥皆桶迳弦栽黾悠淠陀眯裕缓笤谶^程中將板焊接到連接電池組和電機(jī)的汽車上。切記不要將任何引腳與焊料連接在一起,因?yàn)闀?huì)交叉信號(hào)。最好對(duì)電線進(jìn)行顏色編碼以方便參考。
最終產(chǎn)品應(yīng)與以下內(nèi)容相似:
第8步:盡情享受您的新駭客RC汽車
責(zé)任編輯:wv
-
鍵盤
+關(guān)注
關(guān)注
4文章
859瀏覽量
39773 -
遙控車
+關(guān)注
關(guān)注
9文章
81瀏覽量
23778 -
樹莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105751
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論