第一步:备齐材料
来自Sparkfun的迷你Bot套件
我使用了如下材料:
- Sparkfun的迷你Bot套件:ProtoSnap MiniBot提供一个Arduino兼容控制器,发动机控制器板,红外接近传感器&大量的原型空间都在一个单板上。
- WIZnet的无线插板:WizFi插板利用完全认证的WizFi210无线模块,提供Arduino无线功能。SPI接口用来提供更快的传输速度&空出Arduino UART接口。所有的软件&硬件的材料都是免费且开源的
- 锂电池
第二步:将WizFi插板与迷你Bot套件连接
要用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 7
void 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);
}
当你用网络浏览器连接你的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页根据浏览器请求应答。
感谢阅读!
欢迎与我们更多交流!
本项目介绍如何使用Arduino和Wiznet无线模块改装一个低成本的遥控小车,并通过网络浏览器进行远程控制。项目使用Sparkfun迷你Bot套件作为基础,通过编写特定的Arduino代码实现了小车的前进、后退、转弯等功能。
2318

被折叠的 条评论
为什么被折叠?



