用无线插板控制RC(远程遥控)小车

来源:互联网 发布:华为软件开发云 编辑:程序博客网 时间:2024/04/28 05:35
多亏了它的开源平台和易用的软件&硬件,在线有详细的数以千计的Arduino项目,供每个爱好者享用。这个项目展示了,如何改装一个不昂贵的RC小车套件,并可以用网络界面控制。你可以在这个Arduino板子上编程,让这个小车实现任意方向的行驶~

第一步:备齐材料

RC小车1

来自Sparkfun的迷你Bot套件

我使用了如下材料:

  • Sparkfun的迷你Bot套件:ProtoSnap MiniBot提供一个Arduino兼容控制器,发动机控制器板,红外接近传感器&大量的原型空间都在一个单板上。
  • WIZnet的无线插板:WizFi插板利用完全认证的WizFi210无线模块,提供Arduino无线功能。SPI接口用来提供更快的传输速度&空出Arduino UART接口。所有的软件&硬件的材料都是免费且开源的
  • 锂电池

第二步:将WizFi插板与迷你Bot套件连接

RC小车2

要用Wi-Fi控制RC小车,我们需要6个GPIO和1个模拟引脚(如下)。

描述

Arduino 兼容板

WizFi 插板

SCLK

D13

JP2.13

MISO

D12

JP2.12

MOSI

D11

JP2.11

/SS_WIFI

D10

JP2.4

Data_ready

D9

JP2.3

WIFI_RST

D8

JP2.2

电池电压检测器

A2

分压后

连接电池输出

第三部:代码

Sparkfun的教程使用3个引脚来控制,但是我们需要6个引脚来分别控制两个轮子。代码如下:

#define LEFT_PWM     3#define LEFT_1       4#define LEFT_2       2#define RIGHT_PWM    6#define RIGHT_1      5#define RIGHT_2      7void pinSetup(){  // Motor control pins- the PWM pins are speed control while the other pins  //  control the "mode" of operation- forward, reverse, stop, brake. These  //  functions are abstracted in some utility functions below, so a user need  //  only call the "driveFwd()" function, eg, to move the robot forward.  pinMode(LEFT_PWM, OUTPUT);  pinMode(LEFT_1, OUTPUT);  pinMode(LEFT_2, OUTPUT);  pinMode(RIGHT_PWM, OUTPUT);  pinMode(RIGHT_1, OUTPUT);  pinMode(RIGHT_2, OUTPUT);}void driveStop(){  rightStop();  leftStop();}void rightStop(){  digitalWrite(RIGHT_1, LOW);  digitalWrite(RIGHT_2, LOW);  analogWrite(RIGHT_PWM, 0);}void leftStop(){  digitalWrite(LEFT_1, LOW);  digitalWrite(LEFT_2, LOW);  analogWrite(LEFT_PWM, 0);}void moveForward(){  rightFwd();  leftFwd();}void moveBackward(){  rightBwd();  leftBwd();}void turnRight(){  rightBwd();  leftFwd();}void turnLeft(){  rightFwd();  leftBwd();}void rightFwd(){  digitalWrite(RIGHT_1, LOW);  digitalWrite(RIGHT_2, HIGH);  analogWrite(RIGHT_PWM, current_speed);}void rightBwd(){  digitalWrite(RIGHT_1, HIGH);  digitalWrite(RIGHT_2, LOW);  analogWrite(RIGHT_PWM, current_speed);}void leftFwd(){  digitalWrite(LEFT_1, LOW);  digitalWrite(LEFT_2, HIGH);  analogWrite(LEFT_PWM, current_speed);}void leftBwd(){  digitalWrite(LEFT_1, HIGH);  digitalWrite(LEFT_2, LOW);  analogWrite(LEFT_PWM, current_speed);}

RC小车3

当你用网络浏览器连接你的WizFi插板时,你可以看见如上的网页,并且可直接控制RC小车。如果你点击按钮,网络浏览器发送HTTP GET信息&WizFi插板会解析以下用以控制发动机。

下面的代码说明了怎样解析HTML请求,控制发动机并制作HTML页。


             myHTMLParser.Parsing((char *)rcvdBuf);           if((rcvdBuf[retval - 1] == 0x0A) && (rcvdBuf[retval - 2] == 0x0D) &&               (rcvdBuf[retval - 3] == 0x0A) && (rcvdBuf[retval - 4] == 0x0D))           {             retval = myHTMLParser.GetParam();             if(retval == FW_CMD)             {               Serial.println("FW_CMD Rcvd");               myHTMLParser.SetParam(NO_CMD);               moveForward();             }else if(retval == BW_CMD)             {               Serial.println("BW_CMD Rcvd");               myHTMLParser.SetParam(NO_CMD);               moveBackward();             }else if(retval == RT_CMD)             {               Serial.println("RT_CMD Rcvd");               myHTMLParser.SetParam(NO_CMD);               turnRight();             }else if(retval == LF_CMD)             {               Serial.println("LW_CMD Rcvd");               myHTMLParser.SetParam(NO_CMD);               turnLeft();             }             while(myHTMLPages.GetNextLine((char *)rcvdBuf))             {               myClient[i].write((byte *)rcvdBuf);             }

myHTMLParser.Parsing() 函数是解析接收数据& GetNextLine() 函数使HTML页根据浏览器请求应答。

 

感谢阅读!

欢迎与我们更多交流!

原创粉丝点击