麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python3實現raspberry pi(樹莓派)4驅小車控制程序

2020-02-15 21:15:02
字體:
來源:轉載
供稿:網友

 0. 寫在前面:

一兩個月前偶然得到一個樹莓派一代,發現還是挺強大的,然后就考慮著自己實現一個四驅小車。因為本身是學軟件的,所以利用軟件來控制實實在在可見的硬件一直是自己的一個夢想。所以當時也是花了很多時間來琢磨、實驗小車控制方面的東西。因為時間過去比較久了,這里也就只是記錄一下當時踩過的坑、實現的一些思路以及絕大部分源代碼。截止當前,我的樹莓派小車實現的主要功能是:

控制小車前進、后退、左轉、右轉、后退左轉、后退右轉 攝像頭兩路舵機控制(實現攝像頭上下左右旋轉) 網頁版小車控制程序(小車控制程序、實時監控、攝像頭旋轉控制) 微信小程序版小車控制程序(功能基本同上)

(本文只是介紹上述的第一個功能,其他功能的實現在后續的博文中介紹)

1. 準備:

給樹莓派安裝系統(這個網上資料太多,一搜一大把,我裝的是raspbian) 安裝python3 準備四個步進電機,電機驅動,并組裝連接好(我都是在某寶上買的,電機及其組件是在“亞博智能科技”買的,驅動是在“深圳市艾爾賽科技”上買的L298N四路電機驅動)

一些可能遇到的坑:

首先要注意電機驅動的輸入電壓,電壓過低很可能無法帶動電機(當然也不可過高) 電機驅動輸入有一個GND,這個一定要連接樹莓派的一個GND輸出,否則可能出現電機驅動異常(我當時遇到的情況是:手接觸驅動電路中的金屬電機就可以正常轉動,手一松開電機就不能正常運轉了)

2. 基本思路:

將連接端口作為一個配置文件,該配置文件定義小車需要使用的端口 控制程序讀取配置文件,并實現小車的方向控制 小車控制程序定義了私有的向各個方向移動的方法,然后定義一個方法接受方向參數,該方法內部再調用具體的移動方法

需要說明的是:由于使用引腳的不同,以及電機安裝位置的差異,所以不能保證以下程序能夠直接使用。

3. 配置文件內容如下(文件名為:config.ini):

[car]# This is the parmaters that will control the car's wheels# The number is the interface number of GPIO (GPIO.BOARD)LEFT_FRONT_1 = 7LEFT_FRONT_2 = 11 RIGHT_FRONT_1 = 13RIGHT_FRONT_2 = 15 LEFT_BEHIND_1 = 31LEFT_BEHIND_2 = 33 RIGHT_BEHIND_1 = 35RIGHT_BEHIND_2 = 37

4. 小車控制程序(文件名為:car_controler.py):

# coding=utf-8import RPi.GPIO as GPIOimport timeimport configparser  class FourWheelDriveCar(): # Define the number of all the GPIO that will used for the 4wd car  def __init__(self):  '''  1. Read pin number from configure file  2. Init all GPIO configureation  '''  config = configparser.ConfigParser()  config.read("config.ini")  self.LEFT_FRONT_1 = config.getint("car", "LEFT_FRONT_1")  self.LEFT_FRONT_2 = config.getint("car", "LEFT_FRONT_2")   self.RIGHT_FRONT_1 = config.getint("car", "RIGHT_FRONT_1")  self.RIGHT_FRONT_2 = config.getint("car", "RIGHT_FRONT_2")   self.LEFT_BEHIND_1 = config.getint("car", "LEFT_BEHIND_1")  self.LEFT_BEHIND_2 = config.getint("car", "LEFT_BEHIND_2")   self.RIGHT_BEHIND_1 = config.getint("car", "RIGHT_BEHIND_1")  self.RIGHT_BEHIND_2 = config.getint("car", "RIGHT_BEHIND_2")   GPIO.setmode(GPIO.BOARD)  GPIO.setwarnings(False)  GPIO.setup(self.LEFT_FRONT_1, GPIO.OUT)  GPIO.setup(self.LEFT_FRONT_2, GPIO.OUT)  GPIO.setup(self.RIGHT_FRONT_1, GPIO.OUT)  GPIO.setup(self.RIGHT_FRONT_2, GPIO.OUT)  GPIO.setup(self.LEFT_BEHIND_1, GPIO.OUT)  GPIO.setup(self.LEFT_BEHIND_2, GPIO.OUT)  GPIO.setup(self.RIGHT_BEHIND_1, GPIO.OUT)  GPIO.setup(self.RIGHT_BEHIND_2, GPIO.OUT)  def reset(self):  # Rest all the GPIO as LOW  GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)  GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)  def __forword(self):  self.reset()  GPIO.output(self.LEFT_FRONT_1, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_1, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)  def __backword(self):  self.reset()  GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_2, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)  def __turnLeft(self):  '''  To turn left, the LEFT_FRONT wheel will move backword  All other wheels move forword  '''  self.reset()  GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_1, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)  def __turnRight(self):  '''  To turn right, the RIGHT_FRONT wheel move backword  All other wheels move forword  '''  self.reset()  GPIO.output(self.LEFT_FRONT_1, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)  def __backLeft(self):  '''  To go backword and turn left, the LEFT_BEHIND wheel move forword  All other wheels move backword  '''  self.reset()  GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)  def __backRight(self):  '''  To go backword and turn right, the RIGHT_BEHIND wheel move forword  All other wheels move backword  '''  self.reset()  GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)  GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)  GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)  GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)  GPIO.output(self.LEFT_BEHIND_2, GPIO.HIGH)  GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)  GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)  GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)  def __stop(self):  self.reset()  def carMove(self, direction):  '''  Car move according to the input paramter - direction  '''  if direction == 'F':   self.__forword()  elif direction == 'B':   self.__backword()  elif direction == 'L':   self.__turnLeft()  elif direction == 'R':   self.__turnRight()  elif direction == 'BL':   self.__backLeft()  elif direction == 'BR':   self.__backRight()  elif direction == 'S':   self.__stop()  else:   print("The input direction is wrong! You can just input: F, B, L, R, BL,BR or S")  if __name__ == "__main__": raspCar = FourWheelDriveCar() while(True):  direction = input("Please input direction: ")  raspCar.carMove(direction)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一区国产二区 | 激情久久一区二区 | 亚洲精品久久久久久 | 久久美女免费视频 | 欧美性生活久久 | 成年人小视频在线观看 | 国产88久久久国产精品免费二区 | 欧美一级色片 | 久久综合久久美利坚合众国 | 免费黄色小视频网站 | 成人在线网站 | 黄色av网站免费看 | 亚洲国产精品高潮呻吟久久 | 久久成人福利 | 欧美精品久久久久久久久久 | 黄色免费在线网址 | 国产一区二区久久精品 | 日本在线播放一区二区三区 | 91福利社在线 | 久久草在线观看视频 | 夜夜夜精品视频 | 一级黄片毛片免费看 | 视频一区 日韩 | 久草热久| 久久中文免费 | 欧美一区二区黄 | 色综合网在线观看 | 国产毛片毛片毛片 | 午夜视频久久 | 久久精品一区二区三区四区五区 | 美女啪网站 | 中文字幕观看 | 中文有码一区二区 | 免费久久精品 | 韩国一大片a毛片 | 中文字幕一区二区三区久久 | 国产成年人网站 | 成人午夜视频免费在线观看 | 天天色综合6 | 精品国产乱码久久久久久丨区2区 | 日本aaaa片毛片免费观蜜桃 |