摘要
麦克纳姆轮小车由于车轮本身的特殊结构,可以实现全向行驶,可玩性非常强。麦克纳姆轮原理在这里不做展开,麦克纳姆小车主要是通过控制四个轮胎的转与不转以及转动的方向来实现多方向的运动,其中一种X型车轮分布车轮转动方向与车体运动方向关系如下:
所需材料
1. Nodemcu模块
2. Arduino nano 开发板
3. TB6612电机驱动模块×2
4. 麦克纳姆轮小车底盘
5. 点灯科技APP
6. 电烙铁、导线、稳压电源等
制作步骤
1. 将各模块按如下图所示进行连接
2.打开点灯科技APP,添加独立设备,在添加的设备界面添加如图所示的按键组件,数据键名与代码内一致
3.分别在Nodemcu和Arduino nano中写入以下代码
Nodemcu
#define BLINKER_WIFI //选择WIFI连接模式
#include <Blinker.h>
#include <Wire.h>
char auth[] = "***************"; //BlinkerAPP内获取的设备密钥
char ssid[] = "Your Wi-Fi Name"; //Wi-Fi名称
char pswd[] = "Your Wi-Fi Password"; //Wi-Fi密码
BlinkerButton Button1("1"); //新建按键对象
BlinkerButton Button2("2");
BlinkerButton Button3("3");
BlinkerButton Button4("4");
BlinkerButton Button5("5");
BlinkerButton Button6("6");
BlinkerButton Button7("7");
BlinkerButton Button8("8");
BlinkerButton Button9("9");
BlinkerButton Button0("0");
BlinkerButton Button11("11");
void button1_callback(const String & state) //按键1所执行函数
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_PRESSED) //按键按下
{
Wire.beginTransmission(1); //发送数据到设备号为1的从机
Wire.write("f"); // 发送字符串
Wire.endTransmission(); // 停止发送
Button1.text("向前行驶");
Button1.print();
}
else if(state == BLINKER_CMD_BUTTON_RELEASED)//按键释放
{
Wire.beginTransmission(1);
Wire.write("s");
Wire.endTransmission();
}
Blinker.vibrate(); //手机震动
}
void button2_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_PRESSED)
{
Wire.beginTransmission(1);
Wire.write("b");
Wire.endTransmission();
}
else if(state == BLINKER_CMD_BUTTON_RELEASED)
{
Wire.beginTransmission(1);
Wire.write("s");
Wire.endTransmission();
}
Blinker.vibrate();
}
void button3_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_PRESSED)
{
Wire.beginTransmission(1);
Wire.write("l");
Wire.endTransmission();
}
else if(state == BLINKER_CMD_BUTTON_RELEASED)
{
Wire.beginTransmission(1);
Wire.write("s");
Wire.endTransmission();
}
Blinker.vibrate();
}
void button4_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_PRESSED)
{
Wire.beginTransmission(1);
Wire.write("r");
Wire