學習筆記 05|電池&充電器和馬達驅動板

18650 電池規格、充電器 LCD 電量對照、L293D 馬達驅動板供電架構與腳位對應

本筆記僅包含電池、充電器與馬達驅動板相關資訊。WiFi 控制請參閱 學習筆記06_wifi


18650 電池

規格

  • 額定電壓:3.7V DC
  • 額定容量:2200mAh

使用警告

  • 單顆 < 3.8V 或兩顆串聯 < 7.8V → 接近過度放電,立即充電
  • 過度放電會造成電池永久毀損
  • 請勿將電量耗盡(鋰電池無記憶效應)
  • 建議每 3~6 個月充電一次

18650 充電器

相容電池型號 14500 / 18650 / 21700 / 26650 / 18500 / 18350 / 17670 / 16340 / 10440

LCD 電量對照表

顯示對應電壓
閃爍(警告)< 3.7V
25%3.7V
50%3.9V
75%4.1V
100%4.2–4.3V

規格

  • 輸入:DC 5–8V / 1.2A(TYPE-C / USB,全球通用)
  • 每組輸出:4.2V ±1% / 400mA
  • 耗電:0.04W
  • 保存期限:10 年
  • 建議使用 1.5A 以上的 USB 充電器,避免供電不足

TYPE-C 接頭注意事項

  • 插入後避免搖晃,防止接觸不良
  • 不使用時只需拔除 USB 端,勿頻繁拔插充電器端

馬達驅動板(L293D)

為何需要馬達驅動板

NodeMCU 本身輸出電流太小,無法直接驅動馬達。架構如下:

1
NodeMCU(小電流)→ 控制馬達驅動板 → 驅動板(大電流)→ 驅動馬達

供電架構(搭配穩壓板)

電源端來源用途
VM兩顆 18650 串聯電壓(約 7.4V)馬達電源
VIN穩壓板穩壓後 5VNodeMCU 控制電源
開關控制 VIN

各排針功能

標示功能
G接地
V3.3V 電源排
D數位信號
AD類比輸入

規格

馬達擴展板

  • 馬達電源:VM 4.5V~36V
  • 控制電源:VIN 4.5V~9V(最大 10V)
  • 驅動工作電流:≤ 1.2A

TT 馬達

工作電壓空載電流
6V≤ 200mA
3V≤ 150mA

控制腳位對應

馬達轉速(類比輸出 0~1023)轉向(數位輸出 0/1)
A馬達D1D3
B馬達D2D4

智慧車實做注意事項

程式燒錄前檢查

  • 確認穩壓板安裝正確、電壓供應正確
  • 確認 NodeMCU V2 方向正確插入馬達擴展板(方向接反會毀損)
  • 馬達擴展板上的開關不使用,全程以電池盒開關控制電源
  • 燒錄程式時必須打開電池盒開關供電,避免電壓不穩導致燒錄或運作失敗

擴展板開關僅控制 VIN,穩定性不如電池盒直接供電,因此全程不動擴展板開關。

用三用電表量測注意

  • 注意檔位與探棒正負極接法
  • 電池盒開蓋送電狀態下,探棒移動時勿碰觸擴展板排針(G、V、D、AD 等),避免短路毀損。

前進一秒停一秒程式碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// ESP8266 馬達控制程式 - 前進 1 秒、停止 1 秒循環
// 適用 NodeMCU v2 (ESP-12E)

const int A_speed = D1;  // A 馬達速度 (PWM)
const int A_dir   = D3;  // A 馬達方向
const int B_speed = D2;  // B 馬達速度 (PWM)
const int B_dir   = D4;  // B 馬達方向

const int motorSpeed = 700;  // 全速 (0~1023)

void setup() {
  // 設定腳位模式
  pinMode(A_speed, OUTPUT);
  pinMode(A_dir,   OUTPUT);
  pinMode(B_speed, OUTPUT);
  pinMode(B_dir,   OUTPUT);

  // 初始狀態:停止(方向設為前進預設值)
  digitalWrite(A_dir, HIGH);
  digitalWrite(B_dir, HIGH);
  analogWrite(A_speed, 0);
  analogWrite(B_speed, 0);
}

void loop() {
  // 前進 1 秒
  analogWrite(A_speed, motorSpeed);
  analogWrite(B_speed, motorSpeed);
  delay(1000);

  // 停止 1 秒
  analogWrite(A_speed, 0);
  analogWrite(B_speed, 0);
  delay(1000);
}
comments powered by Disqus