步驟1:工具和材料
此項目使用了以下工具:
焊鐵和焊絲直流電機已經將電線焊接到其端子上。..。..但它最終會斷裂,您可能需要重新焊接它。所以考慮一下好的烙鐵和電線neaby。
EVA泡沫板(或其他非導電材料)。本項目中使用的機器人底盤由鋁制成,電路板安裝在此金屬部件上。我在電路板和金屬板之間使用了一層泡沫板,以避免可能的短路。
雙面膠帶。它用于將泡沫板粘合到電路板上,以及用于安裝H橋模塊。
剪刀,用于剪切一些泡沫板矩形。
我在項目中使用了以下硬件部件:
Wemos D1 ESP8266開發板(鏈接/鏈接)。 Wemos D1板非常易于使用,并且可以使用Arduino IDE進行編程。它與普通的Arduino Uno具有相同的足跡!這樣,大多數Arduino防護罩也可以與這塊板一起使用。它有內置的Wi-Fi模塊,因此您可以在各種項目中使用它。您還可以使用其他基于ESP8266的板(鏈接/鏈接)。
L298N雙通道H橋模塊(鏈接/鏈接)。該模塊允許來自Wemos(或Arduino)的3.3V信號被放大到電機所需的12V。
DIY機器人底盤坦克(鏈接)。這個真棒套件具有制造水箱所需的一切:兩個直流電機,齒輪,軌道,螺栓,螺母等。它已經配備了組裝機箱所需的工具,這對初學者來說非常棒!
18650 3.7V電池(x3)(鏈接)。我曾經給整個電路供電。這個油箱使用12V電機。我使用了三節串聯的3.7V電池給它們供電。
3S 18650電池座(鏈接)。它可以容納三個18650電池系列,并且可以很容易地安裝在水箱后部。
18650電池充電器(鏈接)。你的電池最終會耗盡電量。當發生這種情況時,電池充電器將為您解救。
跳線(鏈接)。我用了6個男女跳線來測量h-bridge和Wemos之間的信號,以及2個用于5V和Gnd的男性 - 男性跳線。如果您計劃添加一些傳感器,則可能需要更多。
Micro USB線。您需要這個來上傳您的代碼。大多數電路板已經有自己的電纜。
上面的鏈接只是建議您可以在哪里找到本教程中使用的項目(也許可以支持我以后的教程)。您可以隨意在其他地方搜索,并在您最喜歡的本地或網上商店購買。
第2步:組裝機器人
該項目的第一部分是機器人結構的組裝。
在以前的項目中,我使用易于獲取的材料(不需要復雜的工具,3D打印機或激光切割機)開發了我自己的機器人結構。您可以在以下鏈接中找到該項目:
https://www.instructables.com/id/WiDC-Wi-Fi-Controlled-FPV-Robot-with-Arduino-ESP82/
這一次,我決定給一個從網上商店獲得的機器人工具包。您可以通過以下鏈接找到機器人機箱的鏈接:http://bit.ly/2ycI8fP。如果你正在尋找一個套件,我認為這是一個不錯的選擇!。
起初看起來裝配會很復雜,或者我會遇到缺少部件等問題(考慮到數量)組成套件的部件。但是這個套件讓我很驚訝!在我看來,所有的部件質量都很好,并配有幾個備件。因此,在工作臺下方丟失的螺絲將不會使您的項目無法實現,我發現這是非常好的(特別是在丟失幾個螺釘后)。
另一個積極的一點是,所有的安裝機器人所需的工具包含在套件中(一對艾倫扳手和螺絲刀)。我相信這使得該套件非常適合沒有大量工具的初學者!
作為一個消極的方面,我會強調缺乏文檔。機器人的裝配手冊(中文電子表格文件)不是非常用戶友好,并且沒有很多在線教程。所以我決定在上面的視頻中記錄組裝機器人的過程!另一個關注點涉及機器人結構的材料。底座完全由鋁制成,如果印刷電路板的插針接觸框架,可能會導致短路。
您可以使用其他在線套件。你甚至可以制作自己的結構,如下所述。
第3步:接線電路(Wemos D1)
在上面的視頻中,我將向您展示如何在機器人結構中組裝電子設備。
電源由三個18650電池組成的包安裝在機器人的背面。它為機器人提供11.1V(3 x 3.7V)。這足以為12V直流電機供電。
L298N雙通道H橋用于控制電機。它接收Wemos板的一些3.3V信號,并為電機提供更高的電壓。它還允許電機在兩個方向上運行,取決于這些輸入信號的組合。
每個設備都是根據原理圖連接的。
按照您的引腳列表需要連接:
Wemos D1輸入/輸出:
數字引腳D3(GPIO5)=》 H橋ENB引腳
數字引腳D4(GPIO4)=》 H橋IN4引腳
數字引腳D5(GPIO14)=》 H橋IN3引腳
數字引腳D6( GPIO12)=》 H橋IN2引腳
數字引腳D7(GPIO13)=》 H橋IN1引腳
數字引腳D8(GPIO0)=》 H橋ENA引腳
5V引腳=》 H橋5V引腳
Gnd引腳=》 H橋Gnd引腳
H橋輸入/輸出:
ENB引腳=》 Wemos D3引腳
IN4引腳=》 Wemos D4引腳
IN3引腳=》 Wemos D5引腳
IN2引腳=》 Wemos D6引腳
IN1引腳=》 Wemos D7引腳
ENA引腳=》 Wemos D8引腳
5V引腳=》 Wemos 5V引腳
Gnd引腳=》 Wemos Gnd引腳
Gnd引腳=》電池組負極線
12V引腳=》電池組正極線
OUT1 =》右電機負極線
OUT2 =》右電機正極線
OUT3 =》左電機正極線
OUT4 =》左電機負極線
步驟4:在Arduino IDE上設置ESP8266板
對于這個項目,我使用Arduino IDE編程我的Wemos。如果您之前已經使用過Arduino,那么這是更簡單的方法,您不需要學習新的編程語言,例如Python或Lua。
如果您以前從未這樣做過,首先您必須為Arduino軟件添加ESP8266板支持。
您可以在Arduino的網站上找到適用于Windows,Linux或MAC OSX的最新版本:https://www.arduino.cc/en/main/software
免費下載,將其安裝到您的計算機上并啟動它。
2。添加ESP8266主板
Arduino IDE已經支持很多不同的主板:Arduino Nano,Mine,Uno,Mega,Yún等。不幸的是ESP8266默認不是那些被支持的人開發板。因此,為了將代碼上傳到ESP8266基板,您必須首先將其屬性添加到Arduino的軟件中。
導航到文件》首選項(Ctrl +,在Windows操作系統上);
將以下URL添加到Additional Boards Manager文本框(Preferences窗口底部的文本框):
http://arduino.esp8266.com/stable/package_esp8266com_index.json
如果文本框不是空白,則表示之前已經在Arduino IDE上添加了其他板。在上一個URL和上面的URL末尾添加一個逗號。
點擊“確定”按鈕并關閉“首選項”窗口。
導航工具》 Board》 Boards Manager 以添加ESP8266板。
在搜索文本框中鍵入“ESP8266”,選擇“ESP8266社區的esp8266”并安裝它。
現在您的Arduino IDE已準備好使用許多基于ESP8266的開發板,如通用ESP8266,NodeMcu(我在本教程中使用),Adafruit Huzzah,Sparkfun Thing,WeMos等。
第3。添加庫
在這個項目中,我使用了Blynk庫。
應手動安裝Blynk庫。從https://github.com/blynkkk/blynk-library/releases/tag/v0.5.0下載Blynk庫。解壓縮文件,并將文件夾復制到Arduino IDE庫/工具文件夾。
your_sketchbook_folder的結構現在應如下所示:
your_sketchbook_folder/libraries/Blynk
your_sketchbook_folder/庫/BlynkESP8266_Lib
your_sketchbook_folder/工具/BlynkUpdater
your_sketchbook_folder/工具/BlynkUsbScript
。..。..。.. 。..
現在您的開發環境已準備就緒,讓我們繼續下一步!
步驟5:設置Blynk
Blynk是一項旨在通過互聯網連接遠程控制硬件的服務。它使您可以輕松創建物聯網小工具,并支持多種硬件,如Arduinos,ESP8266,Raspberry Pi等。
您可以使用它從Android或iOS智能手機發送數據(或平板電腦)到遠程設備。例如,您還可以讀取,存儲和顯示由harware傳感器獲取的數據。
Blynk App 用于創建用戶界面。它有各種各樣的小部件:按鈕,滑塊,操縱桿,顯示器等。用戶可以將小部件拖放到儀表板并為多個項目創建自定義圖形界面。
它有一個‘能源的概念。用戶從2000個自由能點開始。使用的每個小部件(在任何項目中)都會消耗一些能量,從而限制了項目中使用的最大小部件數量。例如,按鈕消耗200個能量點。這樣,人們可以創建一個最多包含10個按鈕的界面。用戶可以購買額外的能量點,并創建更復雜的界面和/或幾個不同的項目。
Blynk App的命令通過互聯網上傳到 Blynk服務器。另一個硬件(例如NodeMCU)使用 Blynk Libraries 從服務器讀取這些命令并執行操作。硬件還可以向服務器提供一些數據,這些數據可能會顯示在應用程序上。
從以下鏈接下載適用于Android或iOS的Blynk應用程序:
https://play。 google.com/store/apps/details?id=cc.blynk
https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt= 8
安裝應用并創建一個新帳戶。之后,您將準備好創建第一個項目。
您還需要安裝Blynk庫并獲取身份驗證代碼。上一步描述了安裝庫的過程。我將向您展示如何在下一步獲取身份驗證令牌。
第6步:Blynk應用程序 - 創建新項目
現在,我將向您展示如何使用Blynk設計我的遙控器應用程序。您可以將它作為自己創作的基礎。
創建新項目
創建新項目;
添加項目名稱( Wifi robot ),選擇開發板( Wemos D1 )和連接類型( WiFi )并單擊創建按鈕;
身份驗證令牌將發送到您的電子郵件;
使用身份驗證令牌,使用Arduino代碼。它允許ESP8266板到達Blynk服務器以發送和接收數據。
為了創建儀表板,您可以拖放多個對象。按鈕,滑塊和操縱桿可用于創建不同的控制界面。您可以根據需要調整大小(大部分)并配置其設置。
在接下來的步驟中,我將展示使用不同小部件控制機器人的四種不同選擇。
第7步:Blynk App#1 - 四個按鈕
這第一個應用程序我使用四個簡單的按鈕進行簡單的控制,向前,向右,向左或向后移動機器人。為此,我在Blynk App上使用了“樣式按鈕”小部件。在小部件框上選擇此選項,拖放,并根據需要調整按鈕大小。
在按鈕設置下,您必須為每個按鈕命名(向前,向右,向左移動)并為每個引腳分配一個虛擬引腳作為輸出。我使用了以下虛擬引腳:
正向:V0引腳
右:V1引腳
左:V2引腳
向后:V3 pin
您還必須配置開/關標簽。默認情況下,它們被命名為On和Off,但我更改了以便更好地理解每個按鈕的含義。您可以在上面的圖片上看到最終應用的屏幕截圖。
如您所見,每個按鈕都是二進制的。一旦點擊它們,電機就會全速運轉。
如果按照我的原理圖連接所有電機,你將得到以下輸出:
Arduino代碼:
下載代碼并在Arduino IDE上打開它。在上傳代碼之前,您必須更新Blynk身份驗證密鑰和WiFi憑據(ssid和密碼)。
要上傳代碼,請選擇“Wemos D1 R2&mini”(如果您使用的是NodeMCU)上傳速度為921600 kbps。在計算機的USB端口上插入電路板并上傳代碼。
這需要一段時間(遠遠超過為Arduino編寫和上傳草圖。..。..請耐心等待。..。..)。現在是你在等待的時候給這個教練們一個喜歡的好時機! :D
上傳完成后,拔下USB電纜,然后放入電池。代碼將開始運行,Wemos板將自動嘗試連接Wi-Fi路由器并等待來自Blynk服務器的命令。
代碼說明:
在這個項目中我只不得不使用ESP8266和Blynk庫。它們是在代碼的開頭添加的。
#include
#include
您必須配置Blynk授權密鑰和Wi-Fi憑證。通過這種方式,您的ESP8266將能夠到達您的Wi-Fi路由器并等待來自Blynk服務器的命令。將XXXXX,YYYYY和ZZZZZ替換為您的驗證密鑰(您將通過電子郵件收到),您的Wi-Fi網絡的SSID和密碼。
char auth[] = “XXXXX”;
char ssid[] = “YYYYY”/
char pass[] = “ZZZZZ”;
定義引腳Wemos連接到h橋。您可以使用每個引腳的GPIO編號的文字值(D1,D2,De等)。
#define ENB D3
#define MOTORB_1 D4
#define MOTORB_2 D5
#define MOTORA_1 D7
#define MOTORA_2 D6
#define ENA D8
我在設置過程中做的第一件事就是配置I/O引腳狀態(作為輸出)并將使能引腳設置為低電平。這樣你就可以在啟動時禁用兩個電機,機器人在等待剩下的代碼時不會隨機移動。
pinMode(ENA, OUTPUT);
pinMode(MOTORA_1, OUTPUT);
pinMode(MOTORA_2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(MOTORB_1, OUTPUT);
pinMode(MOTORB_2, OUTPUT);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
然后啟動串口通信(用于驗證代碼)和Blynk通信(此處將執行Wi-Fi連接)。
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
主循環包括僅在運行Blynk.run函數時。它將檢查來自服務器的傳入命令,并在發生某些事情時調用其他函數。
// MAIN CODE
void loop()
{
Blynk.run();
}
應用程序上的每個按鈕都映射到虛擬引腳(V0到V3)。 BLYNK_WRITE函數檢查是否單擊了給定的引腳,然后執行某些操作。為每個虛擬按鈕定義了相同的塊。當按下按鈕時,它們會讓機器人沿其中一個方向移動。
// FORWARD
BLYNK_WRITE(V0) {
int button = param.asInt(); // read button
if (button == 1) {
Serial.println(“Moving forward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
else {
Serial.println(“Stop”);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
如果你按照我的方式連接引腳,你將得到以下輸出:
輸出ENAIN1IN2ENBIN3IN4
FORWARDHIGHHIGHLOWHIGHLOWHIGH
BACKWARDHIGHLOWHIGHHIGHHIGHLOW
RIGHTHIGHLOWHIGHHIGHLOWHIGH
LEFTHIGHHIGHLOWHIGHHIGHLOW
STOPLOW**LOW**
第8步:Blynk App#2 - 滑動條
在之前的應用程序中,我使用簡單的按鈕來控制機器人。正如我之前解釋的那樣,當按下按鈕時,電機將全速運轉。這次我做了一個使用兩個滑桿的實驗。每一個都將設置給定電機的速度和方向。根據每個軌道的速度,可以使機器人向前移動,向左/向右轉或以可變速度返回。
為此,我在Blynk App上使用了“Vertical Slider”小部件。在窗口小部件框中選擇此選項,拖放,并根據需要調整按鈕的大小。后來我意識到普通的’Slider‘會是一個更好的選擇(握住手機并同時移動兩個電機會更舒服)。
在按鈕設置下你必須命名每個按鈕(向右或向左),指定虛擬引腳作為輸出,并設置值的范圍。我使用了以下虛擬引腳:
左:V0引腳,從-1023到1023
右:V1引腳,從-1023到1023
您可以在上面的圖片上看到最終應用的屏幕截圖。
請記住將“僅發布時發送值”設置為“關閉”。這樣,當您更改滑塊位置時,Blynk將向機器人發送命令,而不僅僅是在釋放時。
Arduino代碼:
代碼初始化與描述的幾乎相同之前。
以下幾行被添加到初始化中。
Blynk.virtualWrite(V0, 0);
Blynk.virtualWrite(V1, 0);
這樣滑塊在啟動過程中將轉到零位(機器人將停止移動)。
為每個電機創建了以下代碼。微控制器將讀取每個滑塊的值,該值將轉換為每個軌道的速度。定義了死區(介于-500和500之間),以便機器人在低速時停止。
如果它接收到負速度,則切換到motor1和motor2引腳的信號。速度還決定了模擬輸出中使用的PWM信號的占空比。絕對值越大,機器人運行得越快。
// LEFT TRACK
BLYNK_WRITE(V0) {
int speedL = param.asInt(); // read button
Serial.print(“Left speed: ”);
Serial.println(speedL);
if (speedL 》 500) {
analogWrite(ENB,speedL);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
else if (speedL 《 -500) {
analogWrite(ENB,-speedL);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
else {
digitalWrite(ENB,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
步驟9:Blynk App#3 - Accelerometer
智能手機的某些傳感器也可以與Blynk一起使用。這次我想用它的加速度計來控制我的機器人。傾斜手機,機器人將向左/向右轉動或向前/向后移動。
從窗口小部件框中拖動加速度計對象并將其放在儀表板上。在按鈕設置下,將虛擬引腳指定為輸出。我使用虛擬引腳V0。您可以在上面的圖片上看到最終應用的屏幕截圖。
Arduino代碼:
代碼的初始化與之前描述的幾乎相同。
BLYNK_WRITE(V0)函數用于讀取加速度計值。 y軸上的加速度用于控制機器人是否應該向右/向左轉,并且使用z軸加速度來查看機器人是否應該向前/向后移動。
代碼驗證是否加速度高于/低于給定的閾值,以便選擇電機的速度/方向。
BLYNK_WRITE(V0) {
float y = param[1].asFloat(); // read y-axis acceleration
float z = param[2].asFloat(); // read z-axis acceleration
if (y 》 0.5) {
Serial.println(“Turning left”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
if (y 《 -0.5) {
Serial.println(“Turning right”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,HIGH);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
if (z 《 -0.9) {
Serial.println(“Moving forward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
if (z 》 0) {
Serial.println(“Moving backward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,HIGH);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
if ((y 《 0.5) and (y 》 -0.5) and (z 》 -0.9) and (z 《 0)) {
Serial.println(“Stop”);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
如果未超過閾值,電機將停止。
第10步:Blynk App#4 - 操縱桿
在這個應用程序中,我使用一個操縱桿來控制機器人。定義每個軌道的速度在操縱桿的x和y位置上降低。這樣,就可以在每個軌道上應用不同的速度,并以不同的速度/方向移動機器人。
-
智能手機
+關注
關注
66文章
18516瀏覽量
180691 -
機器人
+關注
關注
211文章
28597瀏覽量
207832 -
wi-fi
+關注
關注
14文章
2162瀏覽量
124770
發布評論請先 登錄
相關推薦
評論