2016年6月24日 星期五

{ EP8266 WiFi 控制小車 } [ 2/3 ] - 電路佈線與馬達轉向測試

網頁最後修改時間:2016/06/22

兩輪小車的驅動與控制網路上應該有不少的資料可以參考 ? 既然如此,又寫一次有什麼不同之處 ?

WiFi 控制在網路上應該也有很多不少的資料可以參考 ? 既然如此,有什麼不同之處 ?

解釋如下:
  • ESP8266 + 直流馬達驅動板 + 兩輪小車 = WiFi控制小車
    ESP8266 做為主控制器,負責 WiFi 通訊以及馬達的驅動
  • 可以同時控制小車的行進速度與轉向
    不是停下來原地旋轉轉向,而是一邊前進/後退,一邊轉向,像是開車一樣。
  • 適用任何可以實現 TCP / UDP 協議的裝置進行小車的遠端控制
    不局限於手機,只有設備有 WiFi 且可以使用 TCP / UDP 協議,就可以與小車進行通訊並且控制小車。
    網頁說明使用 Andorid 手機 APP 自製 GUI 介面控制小車的所有動作。
這網頁是 ESP8266 WiFi 控制小車的電路佈線與馬達轉向測試的說明,初步確認佈線的電路與馬達轉向沒問題之後,再進入真正的 ESP8266 控制小車的程式碼撰寫。
*********************************************************************************
智能小車套件可至露天賣場訂購:
*********************************************************************************

進入這網頁之前,小車應該已經組裝好 ! 剩下的電路接線部分會在這個網頁中做說明。

ESP-07 最小系統板焊接:

焊接之前請先看完這一節的說明之後再動手去做 !
ESP-07 最小系統板電路圖
在 WiFi 小車的套件中,ESP-07 除了配有一塊焊接底板、排針之外,還有一顆降壓晶片 (貼片) 一顆陶瓷電容與一顆電解電容。

在小車的電路當中,最後測試成功的電路中沒有焊接上降壓晶片,原因是這顆晶片不足以提供在 WiFi 控制小車電路所使用的電流量 (即便這顆晶片是直接給 ESP-07 晶片用),也就是不適用 ! 但是在一般的應用情況下,可以焊上降壓晶片,使用大於 3V3 的電壓給做最小系統板用,只要 ESP-07 可以正常動作即可 !
降壓晶片焊接示範
排針有兩種:單頭與雙頭長排針,建議焊接雙頭長排針。焊接時,可以想一下要焊底部還是上部,因為最小系統板插到麵包板時剛好在最旁邊,佈線都是在系統板的下面,所以上面是看不到線的。程式除錯、燒錄或是測試的時候會需要在系統板的上方接線,最好自己先測試看看哪中方是比較方便再和接。焊接的時候,請使用麵包板先將排針插好再放上最小系統底板焊接。

最小系統底板的排針焊接好之後,再焊接 ESP8266, ESP-07板。焊接時可以先在最邊緣的接腳先點上錫,利用這個點焊上 ESP-07 板再對位,對位沒問題之後再焊上對角接腳固定 ESP-07 板和接其他接腳。

陶瓷電容與電解電容則是建議選項,可以避免突然的壓降重置 ESP-07,可以增加系統的穩定性 ! 使用的方法:
  • 陶瓷電容 (不分極性)
    盡其可能的將其焊接在 ESP-07 的最下面兩隻接腳 ( <3.3V> <GND> ),不是焊接底板喔 !
  • 電解電容 (有分極性)
    這個比較大顆,焊接可能有點困難 ! 因此只要將其插在麵包板上面最小系統板的 <VCC><GND> 兩隻接腳處即可。

陶瓷電容焊接處
焊接好的 ESP-07 最小系統板
我的焊接方式是焊在上部。但是這段時間的燒錄與測試上發現,其實焊接在底部會比較好,上面排針比較長,燒錄時與杜邦線可以接觸的比較好,下方雖然排針比較短,但是還是可以與麵包板固定而且也不會晃動,提供底板排針在焊接時的參考 !

最後提醒一點:排針焊接好之後,必須盡其可能的將接點的焊錫量減少,避免在插上杜邦針時擋住。

TB6612FNG 直流馬達驅動板焊接:

直流馬達驅動板的詳細說明,請參考 "TB6612FNG-智能小車, 自平衡小車(雙直流,單步進)馬達驅動板 - 微控制器、Arduino、樹莓派、...可用" 賣場網頁中的說明。

直流驅動板的焊接就不需要再多說了,就是排針的焊接。將排針插到麵包板上去,再將模組放上去焊接即可。


降壓模組排針焊接:

降壓模組的詳細說明,請參考 "超級迷你(航模)降壓可調電源模組-DC 4.75 - 23V降壓DC 1.0 - 17V(Max 3A,連續1.8A)" 賣場網頁中的說明。

模組的四個接點要焊上排針(單邊或是雙邊等長排針都可以),不過模組的空位與麵包板會有一些偏位,但是因為這個模組要插到麵包板上,所以還是要先將排針插到麵包板上再將模組擺上焊接;即使有一點偏位也不會影響太多 !
航模降壓模組焊接示意圖

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 輸出電壓調整:

焊接好排針的降壓模組還不能用 ! 先接上之後要使用在 WiFi 控制小車的輸入裝置(鋰電池、鹼性電池 ... 等),使用模組上面的小旋鈕調整輸出電壓在 DC 3.4 ~ 3.5 之間,對 ! 就是這樣 !


馬達電源開關焊接與夾杜邦公針:

套件中有兩條多芯線,專門用來接外接電池正極與 TB6612FNG 直流馬達驅動模組 <VM> 接腳的。這兩條線必須先焊接到開關上面,並且用套件中的熱縮套管 (長度不要超過 1.5公分) 套再焊接處,並用熱風槍(或用打火機) 稍微烤一下讓它緊縮 (不可以一直維持在該處,要左右移動,不然會燒到其他地方)。

兩條線的另一頭,因為都是接到麵包板上,要做成杜邦公針的形式。

套件中附有多根杜邦公針與杜邦膠座。一般夾杜邦針需要專用工具 ! 但因為製作的數量不多,若手邊沒有這個專用工具,找個尖嘴鉗也可以 !

杜邦針不管是公或是母 (應該是夾 pin 都是一樣的),針後面都分為兩段。最後面一段,必須夾到電線;中間那一段必須夾到電線芯,如下圖所示。加好之後就可以將杜邦公針插入膠座。
杜邦針夾線示意圖
完成之後的開關如下圖所示。

"一" 表示兩根杜邦針導通;"O" 表示斷開。


小車馬達線夾杜邦公針:

如上一節最後夾杜邦針的描述,完成四根馬達的杜邦針夾持。

電路佈線:

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 電路圖:

小車整體的電路圖如下面所示。下圖中的 ESP-07 最小系統板有兩層虛線,兩層之間的文字相同於電路板上的文字,而最外層虛線之外就是代表使用在這電路上的連線代號。
ESP8266, ESP-07 WiFi 控制小車電路圖

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 麵包板佈線:

套件中有三種不同顏色的單芯線,可用在電路板佈線 !

整個電路沒有太多的外部元件,都是模組居多,接線很簡潔 ! 一對一對接就可以了 !

下面是麵包板上所有的佈線,佈線都是位置模組的下方居多,所以在擺放模組之前要先把現佈好。

麵包板上面畫了幾個黑線:3 ~ 10 是 ESP-07 最小系統板的擺放位置;12 ~ 19 是 TB6612FNG 直流馬達驅動板擺放的位置;25 ~ 29 是降壓模組擺放的位置。

其中,藍色代表 3.3V;紅線是外部輸入電源 (乾電池或鋰電池)。
麵包板佈線
電解電容分別插在 10 的位置,要注意正負極性。


電解電容放置的位置
最後將三個模組插到上面說的位置上去,就完成整個線路的佈線。綠線是輔助固定用的,避免線太長浮起來。
完成後的麵包板佈線與模組安裝
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 馬達線與開關線的安裝:

安裝方式看下圖的說明。馬達線兩兩成對,轉向可以先不用管,下面測試時轉向若不對再互相對換就可以改變轉向。
馬達線與開關線安裝

線路測試:

所有的線路都準備好了之後,現在就要開始進行測試 !

測試的目的:

  • 佈線是否正常 ?
  • 確定馬達轉向與動作是否正常 ?

請照著下面步驟照順序完成:

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 燒錄接線:

燒錄接線很簡單 !

先準備一條兩頭都是母頭的杜邦線,作為跳線用。在未供電的情況之下,將這條線分別插在 ESP-07 的 <GPIO0> 接腳,另一頭接到麵包板上的 GND (需要排針)

再準備一條 USB 轉 TTL 線 (先確定可以被電腦驅動),照著下面描述連接

  • USB2TTL, <TX>     --------------  <RXD>, EXP-07 最小系統板
  • USB2TTL, <RX>     --------------  <TXD>, EXP-07 最小系統板
  • USB2TTL, <GND>  --------------  麵包板上的 GND 都可以

接線大概就像下圖這樣
外接電源燒錄接線
燒錄之前,先插上 USB 轉 TTL 線,隨後再插上外接電源就會看到 ESP-07 亮紅燈,藍燈閃一下滅掉,就可以準備開始燒錄程式了 !

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 程式碼:

要燒錄程式碼之前,請先確認 Arduino IDE 已經預先安裝好支援 ESP8266 的相關套件 (ESP8266 入門學習套件支援 Arduino IDE 開發環境之安裝、使用說明與範例) 然後將下面程式載入到 Arduino IDE 中
#include <Streaming.h>

// pins
#define PWMA    12
#define PWMB    14
//----------------
#define LED      2  // ESP07 板載 LED, active low
//----------------
#define AIN1     4
#define AIN2     5
#define BIN1    13
#define BIN2    15

// Motor 1, left side
#define MOTOR_1_FORWARD     digitalWrite(AIN1, HIGH); \
                            digitalWrite(AIN2, LOW)
#define MOTOR_1_BACKWARD    digitalWrite(AIN1, LOW); \
                            digitalWrite(AIN2, HIGH)
#define MOTOR_1_STOP        digitalWrite(AIN1, HIGH); \
                            digitalWrite(AIN2, HIGH)
// Motor 2, right side
#define MOTOR_2_FORWARD     digitalWrite(BIN1, HIGH); \
                            digitalWrite(BIN2, LOW)
#define MOTOR_2_BACKWARD    digitalWrite(BIN1, LOW); \
                            digitalWrite(BIN2, HIGH)
#define MOTOR_2_STOP        digitalWrite(BIN1, HIGH); \
                            digitalWrite(BIN2, HIGH)

void Motor_init() {
    // pins 初始化
    pinMode( AIN1, OUTPUT );
    pinMode( AIN2, OUTPUT );
    pinMode( BIN1, OUTPUT );
    pinMode( BIN2, OUTPUT );
    pinMode( PWMA, OUTPUT );
    pinMode( PWMB, OUTPUT );
    pinMode( LED, OUTPUT );
    digitalWrite( LED, HIGH );

    MOTOR_1_STOP;
    MOTOR_2_STOP;
}

void setup() {
    delay(1000);

    Serial.begin( 115200);
    Motor_init();
    Serial << "Start Motor Testing";
    delay(1000);
    Serial << "\n3\n";
    delay(1000);
    Serial << "2\n";
    delay(1000);
    Serial << "1\n";
    delay(1000);
    Serial << "Go\n\n";
}

const int runTime = 1500;
const int stopTime = 1000;

void loop() {

    Serial << "Motor 1: Forward" << endl;
    MOTOR_1_FORWARD;
    digitalWrite( LED, LOW);
    digitalWrite( PWMA, HIGH );
    delay(runTime);
    digitalWrite( PWMA, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_1_STOP;
    delay(stopTime);

    Serial << "Motor 1: Backward" << endl;
    MOTOR_1_BACKWARD;
    digitalWrite( LED, LOW );
    digitalWrite( PWMA, HIGH );
    delay(runTime);
    digitalWrite( PWMA, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_1_STOP;
    delay(stopTime);

    Serial << "Motor 2: Forward" << endl;
    MOTOR_2_FORWARD;
    digitalWrite( LED, LOW );
    digitalWrite( PWMB, HIGH );
    delay(runTime);
    digitalWrite( PWMB, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_2_STOP;
    delay(stopTime);

    Serial << "Motor 2: Backward" << endl;
    MOTOR_2_BACKWARD;
    digitalWrite( LED, LOW );
    digitalWrite( PWMB, HIGH );
    delay(runTime);
    digitalWrite( PWMB, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_2_STOP;
    delay(stopTime);

    Serial << "Motor: Moving Forward" << endl;
    MOTOR_1_FORWARD;
    MOTOR_2_FORWARD;
    digitalWrite( LED, LOW );
    digitalWrite( PWMA, HIGH );
    digitalWrite( PWMB, HIGH );
    delay(runTime);
    digitalWrite( PWMA, LOW );
    digitalWrite( PWMB, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_1_STOP;
    MOTOR_2_STOP;
    delay(stopTime);

    Serial << "Motor: Moving Backward" << endl;
    MOTOR_1_BACKWARD;
    MOTOR_2_BACKWARD;
    digitalWrite( LED, LOW );
    digitalWrite( PWMA, HIGH );
    digitalWrite( PWMB, HIGH );
    delay(runTime);
    digitalWrite( PWMA, LOW );
    digitalWrite( PWMB, LOW );
    digitalWrite( LED, HIGH );
    MOTOR_1_STOP;
    MOTOR_2_STOP;
    delay(stopTime);
}

在上傳韌體之前,有一個地方必須在 Arduino 修改一下 ! 因為 ESP-07 所使用的 FLASH ROM 大小是 1MBytes,所以 Tools/Flash Size: 要改成 1M (512K SPIFFS) 其他的跟上面提供的連結網頁中的設定一樣。

按下編譯上傳按鈕。完成上傳之後,拔掉外接電源電線和 <GPIO0> 的接線。打開 Serial Monitor,然後再次插上外接電源線,就會看到下面的輸出訊息。

壓克力圓弧形向前:左手邊是 Motor 1,右手邊是 Motor 2。馬達旋轉會先單顆進行網前轉動再往後轉動;最後是兩顆馬達同時向前轉與向後轉。這些動作對應於小車是前進還是後退,所有的動作都必須與 Serial Monitor 輸出一致,如果動作有所不同就是馬達線接反了,自己再更換一下 !

結論:

到現在為止,程式碼跟一般撰寫 Arduino 板子一樣沒什麼不同,只不過板子換成 ESP8266, ESP07,但是結果是一樣的 ! 如果有疑問的話,可以使用相同的程式碼換成其他 Arduino 板子試試,輸出和動作也是一樣的 !

接下來的一篇,將加入 WiFi 功能,分別使用 TCP 與 UDP 通訊協議,通過外部具有無線裝置的設備,控制小車的行進動作。

< 部落格相關網頁 >

沒有留言:

張貼留言