【Arduino 动手做】可以向任何方向移动的三轴麦轮机器人
2025-06-172023
AI 快速预览详细
本项目介绍了一个基于ESP8266处理器的全向轮机器人,能够向8个不同方向移动,并通过Web服务器进行控制。主要硬件包括ESP8266、DRV8833双电机驱动器和ws2812矩阵显示器。通过安装Adafruit_NeoPixel库并上传代码,用户可以通过IP地址“192.168.4.1”访问Web服务器来控制机器人。这个项目适合STEM教育和儿童科学实验,让孩子们在实践中学习编程和机械原理。
|
关于该项目 在这个项目中,我决定制作一个全向轮机器人,与普通机器人相比,这种类型的机器人由于具有特殊的轮子,能够向多个方向移动。 特征 • 能够向 8 个不同方向移动 • 使用 Web 服务器进行控制 开始 我们将 ESP8266 用作处理器。我们将添加一个 ws2812 矩阵显示以使其看起来更好。此外,在 DRV8833 双电机驱动器模块的帮助下,我们能够通过 WiFi 使用 WebServer 控制我们的直流电机。 • ESP8266 • DRV8833 双电机驱动器 • ws2812 矩阵显示器 • 直流电动机 图解的 根据下表和示意图进行连接。 • 完整原理图 安装 在上传代码之前,您需要在 Arduino IDE 中安装所需的库。请执行以下步骤: • 按照以下路径 Sketch> Include Library> Manage Libraries • 搜索 Adafruit_NeoPixel • 安装库 用法 完成所有步骤后,将为您创建一个接入点,通过连接到它并搜索 IP 地址“192.168.4.1”,您可以访问 Web 服务器并控制机器人。 ![]() ![]() ![]() |







项目链接:https://www.hackster.io/CiferTech/omni-wheel-robot-a-robot-that-can-move-in-any-direction-dced52
项目作者:CiferTech
项目代码:https://github.com/cifertech/OMNI-ROBOT
[code]#include
#include
#include
#include
#include
#include
#include
#include
const char* ssid = "OMNI BOT";
const char* password = "123456789";
char Data;
#define PIN D2
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(4, 4, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
const uint16_t colors[] = {
matrix.Color(255, 0, 0),
matrix.Color(0, 255, 0),
matrix.Color(0, 0, 255)
};
#define AIN1 D7
#define AIN2 D8
#define BIN1 D5
#define BIN2 D6
#define AIN3 D3
#define AIN4 D4
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
)rawliteral";
WebSocketsServer webSocket = WebSocketsServer(81);
ESP8266WebServer server(80);
void setup() {
Serial.begin(9600);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(20);
matrix.setTextColor(colors[0]);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(AIN3,OUTPUT);
pinMode(AIN4,OUTPUT);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(myIP);
server.on("/", [](){
server.send(200, "text/html", INDEX_HTML);
});
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
int x = matrix.width();
int pass = 0;
void loop() {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
if(Data=='a')fl();
else if(Data=='b')fr();
else if(Data=='c')br();
else if(Data=='d')bl();
else if(Data=='o')ccw();
else if(Data=='f')cw();
else if(Data=='F')forword();
else if(Data=='B')backword();
else if(Data=='R')right();
else if(Data=='L')left();
else if(Data=='S')stop();
webSocket.loop();
server.handleClient();
}
void webSocketEvent(uint8_t num, WStype_t type,uint8_t * Payload, size_t length){
switch(type) {
case WStype_DISCONNECTED:
//Serial.printf("[%u] Disconnected!\r\n", num);
break;
case WStype_CONNECTED:
{IPAddress ip = webSocket.remoteIP(num);}
break;
case WStype_TEXT:
//Serial.printf("%s\r\n", Payload);
Data = Payload[0];
Serial.println(Data);
// send data to all connected clients
webSocket.broadcastTXT(Payload, length);
break;
case WStype_BIN:
hexdump(Payload, length);
// echo data back to browser
webSocket.sendBIN(num, Payload, length);
break;
default:
break;
}
}
void face1() {
matrix.fillScreen(0);
matrix.setCursor(x, -1);
matrix.print(F("-----------"));
if(--x < -36) {
x = matrix.width();
if(++pass >= 3) pass = 0;
matrix.setTextColor(matrix.Color(255, 0, 255));
}
matrix.show();
delay(100);
}
void face2() {
matrix.fillScreen(0);
matrix.setCursor(x, 1);
matrix.print(F("^^^^^^^^^"));
if(--x < -36) {
x = matrix.width();
if(++pass >= 3) pass = 0;
matrix.setTextColor(matrix.Color(255, 0, 255));
}
matrix.show();
delay(100);
}
void stop() {
face1();
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,LOW);
}
void backword() {
face2();
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,LOW);
}
void forword() {
face2();
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,LOW);
}
void left() {
face2();
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
digitalWrite(AIN3,HIGH);
digitalWrite(AIN4,LOW);
}
void right() {
face2();
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,HIGH);
}
void cw() {
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,HIGH);
digitalWrite(AIN4,LOW);
}
void ccw() {
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,HIGH);
}
void br() {
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,HIGH);
}
void fl() {
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,HIGH);
digitalWrite(AIN4,LOW);
}
void bl() {
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
digitalWrite(AIN3,HIGH);
digitalWrite(AIN4,LOW);
}
void fr() {
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
digitalWrite(AIN3,LOW);
digitalWrite(AIN4,HIGH);
}[/code]