使用 28BYJ-48步進電機 esp8266-12f(或nodemcu) mqtt 基於arduino IDE開發實現
通過mqtt發送指令給wifi模塊進而控制電機,電機拖動窗簾打開或閉合
效果演示地址:
鏈接
搭建模型
如何製作電動窗簾,牛人給你解釋它的原理
參考這個視頻 搭建窗簾模型
模型搭建很重要 就算電機能夠穩定控制但是模型搭建的不好 窗簾的打開和關閉都會受到影響
- 電機要粘牢固
- 繩子要選細的粗糙的(摩擦力大)
- 窗簾選軟紙 或者布
- 滑輪一定要認真做 很影響轉動
我第一次試驗論證是否能夠行得通的時候 製作了一個窗簾模型,犯了很多錯做的也很醜
但是試驗成功了!!!
第二次我們的窗簾模型是我和另外一個java大佬熬夜做出來的,兩個工科生做手工真的是太折磨人了…
步進電機原理
28BYJ-48步進電機
28BYJ-48的含義爲外徑28毫米四相八拍式永磁減速型步進電機
對於驅動28BYJ-48步進電機,最常用的方法是使用ULN2003驅動板。
用Arduino開發板的+5V電源直接爲ULN2003驅動板供電的方法短時間測試是可以的,但是不要在長時間使用Arduino爲ULN2003驅動板進行供電。
更詳細的原理分析 鏈接
控制步進電機
電路接線圖
使用Stepper庫
建立步進電機對象
定義電機控制引腳以及電機基本信息。
電機控制引腳爲 8,9,10,11
以上引腳依次連接在ULN2003 驅動板 In1, In2, In3, In4
創建電機 對象
示例代碼
參考 dianji.ino 學習stepper庫的使用方法
創建對象 Stepper steppermotor(STEPS_PER_ROTOR_REV, 8, 10, 9, 11);
其中的第一個參數爲 一次轉動的步數
在這裏可以設置爲2048
示例代碼
/*
Arduino控制28BYJ-48步進電機測試程序
本示例程序旨在演示如何通過Arduino控制28BYJ-48步進電機。
*/
//本示例程序使用Stepper庫
#include
// 定義電機控制用常量
// 電機內部輸出軸旋轉一週步數
const int STEPS_PER_ROTOR_REV = 32;
// 減速比
const int GEAR_REDUCTION = 64;
/*
* 轉子旋轉一週需要走32步。轉子每旋轉一週,電機輸出軸只旋轉1/64周。
* (電機內部配有多個減速齒輪,這些齒輪會的作用是讓轉子每旋轉一週,
* 輸出軸只旋轉1/64周。)
* 因此電機輸出軸旋轉一週則需要轉子走32X64=2048步,即以下常量定義。
*/
// 電機外部輸出軸旋轉一週步數 (2048)
const float STEPS_PER_OUT_REV = STEPS_PER_ROTOR_REV * GEAR_REDUCTION;
// 定義電機控制用變量
// 電機旋轉步數
int StepsRequired;
// 建立步進電機對象
// 定義電機控制引腳以及電機基本信息。
// 電機控制引腳爲 8,9,10,11
// 以上引腳依次連接在ULN2003 驅動板 In1, In2, In3, In4
Stepper steppermotor(STEPS_PER_ROTOR_REV, 8, 10, 9, 11);
void setup()
{
//setup函數內無內容
}
void loop()
{
// 極慢轉動4步用於觀察ULN2003電機驅動板LED變化
steppermotor.setSpeed(1);
StepsRequired = 4;
steppermotor.step(StepsRequired);
delay(1000);
// 慢速順時針旋轉一圈
StepsRequired = STEPS_PER_OUT_REV;
steppermotor.setSpeed(500);
steppermotor.step(StepsRequired);
delay(1000);
// 快速逆時針旋轉一圈
StepsRequired = - STEPS_PER_OUT_REV;
steppermotor.setSpeed(800);
steppermotor.step(StepsRequired);
delay(2000);
}
wifi模塊控制電機
依舊使用的stepper庫更改了GPIO引腳
創建對象
Stepper steppermotor(STEPS_PER_OUT_REV, D1, D2, D5, D6);
Stepper steppermotor(STEPS_PER_OUT_REV, 5, 4, 14, 12);
(兩個一樣)
看到國外一個使用nodemcu mqtt 以及 28BYJ-48步進電機的使用方法
更換了引腳 更改了部分參數 成功了
接線圖
(對應GPIO 分別是GPIO 5,GPIO 4, GPIO14, GPIO12)
創建的對象爲 Stepper steppermotor(STEPS_PER_OUT_REV, D1, D2, D5, D6);
其中第一個參數設置爲200 速度設置80 相比於arduino都比較小
將第一個參數提升到600時電機轉不動… 沒找到原因
項目參考代碼鏈接
更多學習教程
ESP開發學習基礎知識
基礎知識包括對esp模塊的認識與瞭解 mqtt協議的瞭解,arduino IDE運用代碼編寫等等。
- arduino基礎學習
- esp系列模塊的介紹
- mqtt協議的介紹與使用
- 利用mqtt esp模塊 基於arduino IDE開發方法
- esp模塊的AT指令 刷固件
- esp模塊睡眠模式使用
- esp8266-01s介紹與使用
- esp8266-12f介紹與使用
- NodeMcu介紹與使用
esp開發IOT應用
基於esp8266的模塊以及其他模塊根據實際的應用場景與需求製作的物聯網應用