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