古人智慧

Just Do it!
上士聞道,勤而行之;中士聞道,若存若亡;下士聞道,大笑之。不笑,不足以爲道。
~ 道德經 41

「實現夢想不是追逐成功,而是在於賦予生命意義,人生中的每個決定與聲音都有其重要含義。」"The key to realizing a dream is to focus not on success but on significance — and then even the small steps and little victories along your path will take on greater meaning."
電視名人-歐普拉·溫芙蕾(OPRAH WINFREY)

搜尋此網誌

Translation

2018年4月22日 星期日

[NodeMCU] L293D Motor shield board 電機驅動擴展板 應用

NodeMCU來控制馬達電機做個履帶機器人是最近想要做的項目,雖然是很普通的項目,但是加上攝像顯示屏還有一些sensors應該是個很好的運動平台。

《把NodeMCU直接插上》

《插上後狀態》
看上這片L293D擴展板是因為可以直接用NodeMCU,而且把全部的I/O都外接與VccGround規劃在一起,是個不錯的多功能的擴展板。
但是~~收到這板子,要命了。。。。這擴展板的footprint尺寸與手上的NodeMCU不適配,手上的NodeMCU比較寬將近2mm。也因為這樣,這片擴展板就被擺在桌角。
今天剛好瞄到,拿到手上把玩了一下,突然靈光一現,用排針座!!!
是的,90°排針座的尺寸剛剛好,太棒了~~~
立馬用烙鐵焊上,大小通吃!!

《腳跑出床外。。。》

《90°排針座剛好》

《呵呵,大小通吃》
既然接上了,那就繼續把這擴展板徹底研究清楚。
找遍x寶都找不到這片擴展板的原理圖,只好用萬用電錶一條條量測,還好沒很多條。
下圖就是示意圖。
《L293D接腳與擴展版圖》

《正面解說圖》

《尺寸圖》

測試工具與設備

NodeMCU x1
L293D Motor Shield board 電機擴展板 x1
5-12v電機馬達
萬用電錶 x1
電源供應器 x1

測試code

/*
 * RegisHsu 2018-04-22
 * The L293D motor shield board for NodeMCU
 * Enable 1-2: nodemcu pin 1
 * Enable 3-4: pin 2
 * 1A: pin 3
 * 2A: internal control
 * 3A: pin 4
 * 4A: internal xontrol
 */

#define __NODEMCU__

#ifdef __NODEMCU__
// NodeMCU與ESP8266 pin對照表
// These are the pins for all ESP8266 boards
//      Name   GPIO    Function
#define PIN_D0  16  // WAKE
#define PIN_D1   5  // User purpose
#define PIN_D2   4  // User purpose
#define PIN_D3   0  // FLASH mode at boot time
#define PIN_D4   2  // TXD1 (Note: low on boot means go to FLASH mode)
#define PIN_D5  14  // HSCLK
#define PIN_D6  12  // HMISO
#define PIN_D7  13  // HMOSI  RXD2
#define PIN_D8  15  // HCS    TXD0
#define PIN_D9   3  // RXD0
#define PIN_D10  1  // TXD0

#define E1 PIN_D1  // Enable Pin for motor 1, every pin can be PWM in ESP8266
#define E2 PIN_D2  // Enable Pin for motor 2

#define I1 PIN_D3  // Control pin 1 for motor 1
#define I3 PIN_D4  // Control pin 1 for motor 2

#else
//      Name   GPIO    Function
#define PIN_D0   0
#define PIN_D1   1
#define PIN_D2   2
#define PIN_D3   3
#define PIN_D4   4
#define PIN_D5   5
#define PIN_D6   6
#define PIN_D7   7
#define PIN_D8   8
#define PIN_D9   9
#define PIN_D10  10

#define E1 PIN_D8  // Enable Pin for motor 1
#define E2 PIN_D9  // Enable Pin for motor 2

#define I1 PIN_D3  // Control pin 1 for motor 1
#define I3 PIN_D4  // Control pin 1 for motor 2

#endif

void setup()
{
  Serial.begin(115200);

  pinMode(E1, OUTPUT);
  pinMode(E2, OUTPUT);

  pinMode(I1, OUTPUT);
  pinMode(I3, OUTPUT);
  Serial.println("Setup already...");
}

void L_Wheel(int sp, bool s1, bool s2)
{
  analogWrite(E2, sp); // Enable as speed
  digitalWrite(I3, s1);
}

void R_Wheel(int sp, bool s1, bool s2)
{
  analogWrite(E1, sp); // Enable as speed
  digitalWrite(I1, s1);
}

int spd = 1020;
void loop()
{
  Serial.print("SPD=");
  Serial.println(spd);
  //FF
  Serial.println("FF...");
  L_Wheel(spd, HIGH, LOW);
  R_Wheel(spd, HIGH, LOW);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //RR
  Serial.println("RR...");
  L_Wheel(spd, LOW, HIGH);
  R_Wheel(spd, LOW, HIGH);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //FR
  Serial.println("FR...");
  L_Wheel(spd, HIGH, LOW);
  R_Wheel(spd, LOW, HIGH);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //RF
  Serial.println("RF...");
  L_Wheel(spd, LOW, HIGH);
  R_Wheel(spd, HIGH, LOW);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);
  spd = spd - 100;
  if (spd < 200)
    spd = 1020;
}

視頻分享

沒有留言:

張貼留言