91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

聚豐項(xiàng)目 > 基于IntoRobot創(chuàng)客開(kāi)發(fā)板的遠(yuǎn)程云遙控小車(chē)

基于IntoRobot創(chuàng)客開(kāi)發(fā)板的遠(yuǎn)程云遙控小車(chē)

基于IntoRobot創(chuàng)客開(kāi)發(fā)板的遠(yuǎn)程云遙控小車(chē),通過(guò)網(wǎng)絡(luò)遠(yuǎn)程進(jìn)行小車(chē)的遙控控制。

機(jī)器人工作者 機(jī)器人工作者

分享
3 喜歡這個(gè)項(xiàng)目
團(tuán)隊(duì)介紹

機(jī)器人工作者 機(jī)器人工作者

團(tuán)隊(duì)成員

秦嘉 創(chuàng)客

分享
項(xiàng)目簡(jiǎn)介
基于IntoRobot創(chuàng)客開(kāi)發(fā)板的遠(yuǎn)程云遙控小車(chē),通過(guò)網(wǎng)絡(luò)遠(yuǎn)程進(jìn)行小車(chē)的遙控控制。
硬件說(shuō)明

硬件準(zhǔn)備:1.小車(chē)底盤(pán)(鋁基板加四個(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  開(kāi)發(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é)小車(chē)速度的)20K的滑動(dòng)變阻器,官方控件不能自己編輯所以調(diào)速的東西還是用硬件來(lái)實(shí)現(xiàn),畢竟速凍控制在調(diào)試的時(shí)候很重要。
                                             

軟件說(shuō)明

首先建立一個(gè)新的工程(新建工程連接WIFI等..在前幾期已經(jīng)介紹過(guò)了這里就不再一一敘述了)

在線(xiàn)編輯主要介紹一下帶碼,之前想用按鈕來(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)澛纷约簩?xiě)的代碼跟這個(gè)控件不能對(duì)接導(dǎo)致不能進(jìn)行遙控,后面在官網(wǎng)查詢(xún)不少資料后發(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();                                 小車(chē)前進(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();                                        小車(chē)停止
    }

    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)試:

142917i2j92y2csjsy8xus.jpg

演示效果

調(diào)試完畢后將小車(chē)進(jìn)行組裝:

最后打開(kāi)控制軟件進(jìn)行遙控:(可以手機(jī)電腦同時(shí)控制,由于本人條件有限使用手機(jī)錄制視屏只好用電腦進(jìn)行演示)


PS:勾選下面的按鍵控制可用電腦鍵盤(pán)進(jìn)行操作

總結(jié)一下:使用電位器可將車(chē)速控制在合適的范圍,擰動(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)解決了(有的話(huà)請(qǐng)高手留言賜教非常感謝),下面我就想說(shuō)下關(guān)于控件的使用,控件的種類(lèi)個(gè)人感覺(jué)還需要再增加一些,如果控件可以自己設(shè)計(jì)那就更完美了,整個(gè)開(kāi)發(fā)過(guò)程相對(duì)來(lái)說(shuō)非常之快,歸功于這個(gè)開(kāi)源的平臺(tái)使項(xiàng)目開(kāi)發(fā)變得非常容易,如果使用傳統(tǒng)的方法以我這個(gè)菜鳥(niǎo)的技術(shù)不知道什么時(shí)候才能搞出來(lái)。

評(píng)論區(qū)(1 )
  • 大樹(shù)林218: 你做的云遙控小車(chē)遙控距離是多少?

    回復(fù)