聚豐項目 > 基于IntoRobot創客開發板的遠程云遙控小車
基于IntoRobot創客開發板的遠程云遙控小車,通過網絡遠程進行小車的遙控控制。
機器人工作者
分享機器人工作者
團隊成員
秦嘉 創客
硬件準備:1.小車底盤(鋁基板加四個減速電機)
2.電機驅動板(TB6612是最常用的電機驅動模塊體積小發熱小效率高)
3.電源模塊(DC-DC降壓模塊用來做5V供電電源)LM2596 DC-DC
4.底板(用來連接各模塊,這個底板是覆銅板自己做的,前一段時間做的用來做底板非常合適)
5.下面這個就是今天的主角核心控制器(IntoRobot Neutron 開發板)
6.鋰電池(為整個系統供電)11.1V 600MAH
7。BB響(這個可有可無因為我的鋰電池懷孕了必須實時進行檢測電壓保護,所以接上了一個BB響提示電過低)
8.電位器(作為本工程里面用來調節小車速度的)20K的滑動變阻器,官方控件不能自己編輯所以調速的東西還是用硬件來實現,畢竟速凍控制在調試的時候很重要。
首先建立一個新的工程(新建工程連接WIFI等..在前幾期已經介紹過了這里就不再一一敘述了)
在線編輯主要介紹一下帶碼,之前想用按鈕來控制前進后退,后面發現自編應用里沒用合適的控件按鈕,僅有的按鈕是單擊的不能自己復位,會出現一直點擊的情況,最后在官網看到有個虛擬手柄的控件是個好東西,于是就載入到應用里面,在這個控件上走了不少彎路自己寫的代碼跟這個控件不能對接導致不能進行遙控,后面在官網查詢不少資料后發現有個例程可以參考
下面就直接貼出我的全部代碼了:
編輯代碼前一定要添加一個按鍵解析的官方庫,不然編譯會出錯的。
/*該頭文件引用由IntoRobot自動添加.*/
#include "WidgetJoypad/WidgetJoypad.h"
#define A_IN0 D0 // A 電機驅動IO 電機接口
#define A_IN1 D1 // A 電機驅動IO
#define B_IN0 D3 // B 電機驅動IO
#define B_IN1 D4 // B 電機驅動IO
#define AB_EN D2 // A B 電機使能
#define LED D7 狀態指示燈調試程序用的
const int analogInPin = A2; 定義一個電位器的模擬量輸入接口
const int analogOutPin_A = A0; 定義一電機速度控制的兩個PWM輸出接口
const int analogOutPin_B = A1;
int sensorValue = 0; 定義模擬量輸入輸出變量
int outputValue = 0;
int outputValue_A = 0;
int outputValue_B = 0;
WidgetJoypad joypad;
void SwitchCb(void) 按鍵解析函數的(解析收到的按鍵信號并進行處理)
{
if(joypad.getUpkey()) 檢測前進按鍵
{
goahead(); 小車前進
delay(300);
延時(這個是我一直困惑的問題按道理是不用加延時的,但是實際情況不
加延時會出現不前進的情況,后續還會繼續研究這個問題,官方的例
子就是帶延時的所以先按照官方的來)
}
else
{
stopm(); 小車停止
}
if(joypad.getDownkey()) 后退檢測
{
goback();
delay(300);
}
else
{
stopm();
}
if(joypad.getRightkey()) 右轉
{
trunright();
delay(300);
}
else
{
stopm();
}
if(joypad.getLeftkey()) 左轉
{
trunleft();
delay(300);
}
else
{
stopm();
}
}
void setup() 初始化
{
// put your setup code here, to run once.
pinMode(A_IN0, OUTPUT);
pinMode(A_IN1, OUTPUT); 電機接口初始化
pinMode(B_IN0, OUTPUT);
pinMode(B_IN1, OUTPUT);
pinMode(AB_EN, OUTPUT);
pinMode(LED, OUTPUT); 指示燈初始化
pinMode(analogInPin,AN_INPUT); 模擬量輸入
pinMode(analogOutPin_A,OUTPUT); PWM輸出
pinMode(analogOutPin_B,OUTPUT);
joypad.begin(SwitchCb);
}
void goahead() 前進子函數
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN0, HIGH); //燈亮
digitalWrite(A_IN1, LOW); //燈滅
digitalWrite(B_IN1, HIGH); //燈亮
digitalWrite(B_IN0, LOW); //燈滅
}
void goback() 后退子函數
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN1, HIGH); //燈亮
digitalWrite(A_IN0, LOW); //燈滅
digitalWrite(B_IN0, HIGH); //燈亮
digitalWrite(B_IN1, LOW); //燈滅
}
void trunright()
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN0, HIGH); //燈亮
digitalWrite(A_IN1, LOW); //燈滅
digitalWrite(B_IN0, HIGH); //燈亮
digitalWrite(B_IN1, LOW); //燈滅
}
void trunleft()
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN1, HIGH); //燈亮
digitalWrite(A_IN0, LOW); //燈滅
digitalWrite(B_IN1, HIGH); //燈亮
digitalWrite(B_IN0, LOW); //燈滅
}
void stopm()
{
digitalWrite(AB_EN, LOW);
digitalWrite(A_IN0, LOW); //燈亮
digitalWrite(A_IN1, LOW); //燈滅
digitalWrite(B_IN1, LOW); //燈亮
digitalWrite(B_IN0, LOW); //燈滅
}
void loop()
{
sensorValue = analogRead(analogInPin); 讀取模擬量數據
outputValue = map(sensorValue, 0, 2047, 0, 255)/4; 數值轉換(實驗發現結果除4速度比較穩定)
outputValue_A = outputValue;
outputValue_B = outputValue;
analogWrite(analogOutPin_A, outputValue); 輸出PWM
analogWrite(analogOutPin_B, outputValue);
}
代碼調試:
調試完畢后將小車進行組裝:
最后打開控制軟件進行遙控:(可以手機電腦同時控制,由于本人條件有限使用手機錄制視屏只好用電腦進行演示)
PS:勾選下面的按鍵控制可用電腦鍵盤進行操作
總結一下:使用電位器可將車速控制在合適的范圍,擰動電位器可進行調節,速度控制非常流暢,全部功能都都可以實現,方向控制是我想說的重點也是和上面延時函數可能也有關系,在控制過程中有時會出現動作延時的情況,還有不能連續控制的情況,這些問題我還在繼續研究,可能其他小伙伴已經解決了(有的話請高手留言賜教非常感謝),下面我就想說下關于控件的使用,控件的種類個人感覺還需要再增加一些,如果控件可以自己設計那就更完美了,整個開發過程相對來說非常之快,歸功于這個開源的平臺使項目開發變得非常容易,如果使用傳統的方法以我這個菜鳥的技術不知道什么時候才能搞出來。
大樹林218: 你做的云遙控小車遙控距離是多少?
回復