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