一、準備工作
üTurnipBit 開發板 一塊
ü下載數據線 一條
ü微型步進電機(28BYJ-48) 一個
ü步進電機驅動板(ULN2003APG) 一塊
ü光敏傳感器 一個
üTurnipBit 擴展板 一塊
ü接入網絡的電腦 一臺
ü在線可視化編程器
<http://turnipbit.com/PythonEditor/editor.html>
二、步進電機的介紹
本次實驗采用的是28BYJ-48 四相八拍電機,電壓DC5V~12V。
24BYJ48名稱的含義:
24:電機外徑24mm
B:步進電機中步字的拼音首字母
Y:永磁中永字的拼音首字母
J:減速的減字拼音首字母
48:四相8步
實物圖
工作原理
步進電機是將電脈沖信號轉變為角位移或線位移的開環控制電機,是現代數字程序控制系統中的主要執行元件,應用極為廣泛。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,稱為“步距角”,它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
28BYJ-48 步進電機參數表
上表中啟動頻率≥550 P.P.S(每秒脈沖數),意思是要想正常啟動,需要單片機每秒至少給出550個步進脈沖。那么每一節拍需要持續的時間就是1S/550≈1.8ms,所以控制節拍刷新的速率應大約1.8ms。
驅動原理
當連續不斷的給電機發送控制脈沖時,電機就會不斷的轉動。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態改變一次,對應轉子就會轉過一定的角度(步距角)。當通電狀態的改變完成一個循環時,轉子轉過一個齒距。
四相步進電機可以在不同的通電方式下運行,常見的通電方式:
四拍(單相繞組通電):A-B-C-D-A…
雙四拍(雙相繞組通電):AB-BC-CD-DA-AB-...
八拍: A-AB-B-BC-C-CD-D-DA-A…
三、器件的連接
1、將步進電機白色接頭插到驅動板對應的座子上。
2、TurnipBit對應插入擴展板,記住帶有LED燈和按鍵的一面朝向擴展板帶有針腳的一側。
3、將驅動板與TurnipBit擴展板連接起來。接線圖如下:
4、將光敏傳感器與TurnipBit擴展板連接起來。接線圖如下:
四、開始編程
1、之前的教程一直都是使用拖拽可視化編程,這種方式可以快速讓零基礎小伙伴入門,但是在實際項目或工作中,還是要直接敲代碼的。今天就給大家介紹一下TurnipBit的可視化編程器的另一項功能--代碼編程。
之前看過編程的小伙伴,不難發現,一打開編輯器首先進入的就是代碼編程器界面。如下圖:
2、接下來用代碼實現對步進電機的控制和光照數據的采集。
ü當光照變弱時,步進電機順時針旋轉一周,模擬關閉窗簾的操作;
ü當光照變強時,步進電機逆時針旋轉一周,模擬打開窗簾的操作;
完成源代碼:
- # 在這里添加Python代碼
- from microbit import *
- Pin_All=[pin5,pin8,pin11,pin12]
- #轉速(ms) 數值越大轉速越慢 最小值1.8ms
- speed=5
- STEPER_ROUND=512 #轉動一圈(360度)的周期
- ANGLE_PER_ROUND=STEPER_ROUND/360 #轉動1度的周期
- isOpen=False#表示窗簾的狀態 True:打開 False:關閉
- def SteperWriteData(data):
- count=0
- for i in data:
- Pin_All[count].write_digital(i)
- count+=1
- def SteperFrontTurn():
- global speed
-
- SteperWriteData([1,1,0,0])
- sleep(speed)
- SteperWriteData([0,1,1,0])
- sleep(speed)
- SteperWriteData([0,0,1,1])
- sleep(speed)
-
- SteperWriteData([1,0,0,1])
- sleep(speed)
-
- def SteperBackTurn():
- global speed
-
- SteperWriteData([1,1,0,0])
- sleep(speed)
-
- SteperWriteData([1,0,0,1])
- sleep(speed)
-
- SteperWriteData([0,0,1,1])
- sleep(speed)
- SteperWriteData([0,1,1,0])
- sleep(speed)
- def SteperStop():
- SteperWriteData([0,0,0,0])
-
- def SteperRun(angle):
- global ANGLE_PER_ROUND
- val=ANGLE_PER_ROUND*abs(angle)
- if(angle>0):
- for i in range(0,val):
- SteperFrontTurn()
- else:
- for i in range(0,val):
- SteperBackTurn()
- SteperStop()
-
- while True:
- light=pin0.read_analog()#讀取光敏傳感器傳遞過來的模擬量數據
- #數值越大說明光照度越小
- if light>400:
- if isOpen:
- isOpen=False
- SteperRun(-360)#光照小于設定的值,關閉窗簾
- else:
- if isOpen==False:
- isOpen=True
- SteperRun(360)#光照大于設定的值,打開窗簾
復制代碼
|