零基礎玩轉樹莓派(五)—控制直流電機
前面教程學會如何使用樹莓派來控制LED燈,接下來主要講如何控制直流電機,這樣就可以做小車等可以運動的專案,可玩性更高。
一、硬體介紹
直流電機控制主要用到的硬體為:
1、燒寫好系統的樹莓派控制板·········1塊
2、L298N電機驅動板模組···············1個
3、直流電機·································2個
4、外接電源·································1個
5、杜邦線···································若干
注:由於樹莓派自身沒有電機驅動模組,因此控制電機時要配合L298N電機驅動板模組,一起來使用。
二、硬體連線
連線原理圖:
連線實物圖:
三、程式啟動電機轉
1、硬體按照上述連線好後,將樹莓派上電,使用SSH遠端連線樹莓派
2、輸入nano motor.py,建立一個名為motor的python檔案
nano motor.py
3、檔案編輯介面輸入以下內容:注意#後面為註釋(# – coding: utf-8 – 除外),不參與程式執行,可以省略
# -*- coding: utf-8 -*- #通過宣告可以在程式中書寫中文
import RPi.GPIO as GPIO #引入RPi.GPIO庫函式命名為GPIO
import time #引入計時time函式
# BOARD編號方式,基於插座引腳編號
GPIO.setmode(GPIO.BOARD) #將GPIO程式設計方式設定為BOARD模式
#介面定義
INT1 = 11 #將L298 INT1口連線到樹莓派Pin11
INT2 = 12 #將L298 INT2口連線到樹莓派Pin12
INT3 = 13 #將L298 INT3口連線到樹莓派Pin13
INT4 = 15 #將L298 INT4口連線到樹莓派Pin15
#輸出模式
GPIO.setup(INT1,GPIO.OUT)
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)
GPIO.output(INT1,GPIO.HIGH)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.HIGH)
GPIO.output(INT4,GPIO.LOW)
程式主要通過控制電機驅動模組INT1-4介面來實現電機的運動
4、儲存退出編輯介面,直行程式,會看到兩電機開始轉動
sudo python motor.py
四、控制電機轉速
樹莓派3B+的PWM控制可以參考一下文件:https://www.jianshu.com/p/775b4fb2c98d 。此處直接使用相關知識。
1、接線原理圖
將L298的ENA與ENB分別接到樹莓派的Pin16,Pin18介面。ENA與ENB分別為左右電機的使能介面,通過樹莓派PWM輸出,可以用來控制電機轉速。(注:連線時需要將ENA、ENB上的跳帽拔掉)
2、連線成功後,開啟motor.py檔案
nano motor.py
修改檔案如下
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
INT1 = 11
INT2 = 12
INT3 = 13
INT4 = 15
ENA = 16
ENB = 18
GPIO.setup(INT1,GPIO.OUT)
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)
GPIO.setup(ENA,GPIO.OUT)
GPIO.setup(ENB,GPIO.OUT)
pwma = GPIO.PWM(16,80)
pwmb = GPIO.PWM(18,80)
pwma.start(90)
pwmb.start(90)
GPIO.output(INT1,GPIO.HIGH)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.HIGH)
GPIO.output(INT4,GPIO.LOW)
while 1:
pwma.ChangeDutyCycle(90)
pwmb.ChangeDutyCycle(90)
time.sleep(3)
pwma.ChangeDutyCycle(10)
pwmb.ChangeDutyCycle(10)
time.sleep(3)
3、儲存退出檔案並且執行程式,會看到兩電機快轉3秒,慢轉3秒依次迴圈
sudo python motor.py