回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕学编程】Arduino动手做(228)---2米PVC水管六个TT马达驱动火星车 简单

头像 驴友花雕 2024.08.29 85 0

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。



 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车

 

02.jpg

使用外径20mm的PVC水管,还有各种接口与三通,尝试做个越野版火星车,没想到用了二米长的水管子。

 

03.jpg
04.jpg
05.jpg

实验模块接线示意图

 

07-.jpg

打开Arduino IDE,点开工具——管理库——搜索“L298N”——安装库

 

08.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之一:火星车的前进、后退与转向

实验开源代码

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之一:火星车的前进、后退与转向
*/

#include <L298N.h>

// 创建对象
L298N motor1(9, 5, 4); // 第一个电机(并接右侧三个TT马达)
L298N motor2(6, 3, 2); // 第二个电机(并接左侧三个TT马达)

// 主程序开始
void setup() {
  // 初始化电机
  motor1.setSpeed(0);
  motor2.setSpeed(0);
}

void loop() {
  // 前进:M1和M2正转
  motor1.setSpeed(200);
  motor1.forward();
  motor2.setSpeed(200);
  motor2.forward();
  delay(1000);
  motor1.stop();
  motor2.stop();
  delay(1000);

  // 后腿:M1和M2反转
  motor1.setSpeed(200);
  motor1.backward();
  motor2.setSpeed(200);
  motor2.backward();
  delay(1000);
  motor1.stop();
  motor2.stop();
  delay(1000);


  // 左转向:M1正转,M2反转
  motor1.setSpeed(200);
  motor1.forward();
  motor2.setSpeed(200);
  motor2.backward();
  delay(1000);
  motor1.stop();
  motor2.stop();
  delay(1000);

  // 右转向:M1反转,M2正转
  motor1.setSpeed(200);
  motor1.backward();
  motor2.setSpeed(200);
  motor2.forward();
  delay(1000);
  motor1.stop();
  motor2.stop();
  delay(1000);
}

实验记录视频

 

【花雕学编程】Arduino动手做(228)---2米PVC水管六个TT马达驱动火星车

 

https://www.bilibili.com/video/BV1hmsVe1En3/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

实验场景图

 

06.jpg

 

Mind+图形编程

 

09.jpg

Linkboy仿真编程

 

10.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之四:不使用库,详细控制火星车的多种速度变化

实验开源代码
 

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之二:不使用库,详细控制火星车的多种速度变化
*/

// 电机A
#define ENA_PIN 9 // PWM引脚
#define IN1_PIN 5 // 方向引脚1
#define IN2_PIN 4 // 方向引脚2

// 电机B
#define ENB_PIN 6 // PWM引脚
#define IN3_PIN 3 // 方向引脚1
#define IN4_PIN 2 // 方向引脚2

// 定义电机结构体
struct Motor {
  byte speed = 0; // 电机速度
  byte input1 = LOW; // 方向引脚1状态
  byte input2 = LOW; // 方向引脚2状态
};

// 创建电机对象
Motor motorA, motorB;

void setup() {
  Serial.begin(115200);

  // 设置PWM和方向引脚为输出
  pinMode(ENA_PIN, OUTPUT);
  pinMode(IN1_PIN, OUTPUT);
  pinMode(IN2_PIN, OUTPUT);

  pinMode(ENB_PIN, OUTPUT);
  pinMode(IN3_PIN, OUTPUT);
  pinMode(IN4_PIN, OUTPUT);

  // 初始化电机
  sendToMotor(motorA, ENA_PIN, IN1_PIN, IN2_PIN);
  sendToMotor(motorB, ENB_PIN, IN3_PIN, IN4_PIN);
}

void loop() {
  Serial.println("电机现在停止");
  delay(2000);

  // 设置电机方向为前进
  setMotorDirection(motorA, HIGH, LOW);
  setMotorDirection(motorB, HIGH, LOW);

  Serial.println("逐渐增加电机速度到最大");
  changeMotorSpeedGradually(0, 255);

  Serial.println("电机现在全速运行");
  delay(2000);

  Serial.println("逐渐减少电机速度到最小");
  changeMotorSpeedGradually(255, 0);

  Serial.println("电机现在停止");
  delay(2000);

  // 设置电机方向为后退
  setMotorDirection(motorA, LOW, HIGH);
  setMotorDirection(motorB, LOW, HIGH);

  Serial.println("逐渐增加电机速度到最大");
  changeMotorSpeedGradually(0, 255);

  Serial.println("电机现在全速运行");
  delay(2000);

  Serial.println("逐渐减少电机速度到最小");
  changeMotorSpeedGradually(255, 0);
}

// 发送控制信号到电机
void sendToMotor(Motor &motor, byte enPin, byte in1Pin, byte in2Pin) {
  analogWrite(enPin, motor.speed); // 设置PWM信号
  digitalWrite(in1Pin, motor.input1); // 设置方向引脚1
  digitalWrite(in2Pin, motor.input2); // 设置方向引脚2
}

// 设置电机方向
void setMotorDirection(Motor &motor, byte input1, byte input2) {
  motor.input1 = input1;
  motor.input2 = input2;
  sendToMotor(motor, ENA_PIN, IN1_PIN, IN2_PIN);
  sendToMotor(motor, ENB_PIN, IN3_PIN, IN4_PIN);
}

// 逐渐改变电机速度
void changeMotorSpeedGradually(int startSpeed, int endSpeed) {
  int step = (startSpeed < endSpeed) ? 1 : -1;
  for (int speed = startSpeed; speed != endSpeed; speed += step) {
    motorA.speed = speed;
    motorB.speed = speed;
    sendToMotor(motorA, ENA_PIN, IN1_PIN, IN2_PIN);
    sendToMotor(motorB, ENB_PIN, IN3_PIN, IN4_PIN);
    delay(20); // 添加小延迟以平滑速度变化
  }
}

实验串口返回情况

 

11.jpg

 

要点解读
1、结构简化:将电机的方向和速度控制封装到函数中,减少重复代码,提高可读性。
2、灵活性增强:通过传递电机对象和引脚参数,使代码更具通用性和灵活性。
3、逻辑清晰:将电机方向和速度控制逻辑分离,使代码更易于理解和维护。
4、平滑速度变化:通过逐步增加或减少速度,实现电机速度的平滑变化,减少机械冲击。
5、延迟控制:使用delay()函数控制速度变化的步进时间,确保每个动作有足够的时间完成。

实验场景图

 

07.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之五:启动火星车,控制方向逐渐减少增加电机速度

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之五:启动火星车,控制方向逐渐减少增加电机速度
*/

// 电机A连接
int enA = 9; // PWM引脚
int in1 = 5; // 方向引脚1
int in2 = 4; // 方向引脚2

// 电机B连接
int enB = 6; // PWM引脚
int in3 = 3; // 方向引脚1
int in4 = 2; // 方向引脚2

void setup() {
  // 设置引脚模式为输出
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

  // 初始化电机状态为低电平
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void loop() {
  directionControl(); // 控制电机方向
  delay(1000);
  speedControl(); // 控制电机速度
  delay(1000);
}

void directionControl() {
  // 设置电机为最大速度
  // PWM值范围从0到255
  analogWrite(enA, 255);
  analogWrite(enB, 255);

  // 启动电机A和电机B
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(2000);

  // 改变电机方向
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(2000);

  // 关闭电机
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void speedControl() {
  // 启动电机
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);

  // 逐渐增加电机速度
  for (int i = 0; i < 256; i++) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }

  // 逐渐减少电机速度
  for (int i = 255; i >= 0; --i) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }

  // 关闭电机
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

代码要点解读
1、引脚定义:定义了电机A和电机B的PWM和方向控制引脚。
2、引脚初始化:在setup()函数中,将所有引脚设置为输出模式,并初始化为低电平。
3、方向控制:在directionControl()函数中,通过设置方向引脚的高低电平来控制电机的旋转方向,并通过PWM信号控制速度。
4、速度控制:在speedControl()函数中,通过逐步增加和减少PWM信号,实现电机速度的平滑变化。
5、延迟控制:使用delay()函数控制电机动作的持续时间,确保每个动作有足够的时间完成。

 

12.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之六:JDY-31蓝牙模块从模式与Arduino的回环测试

 

0.jpg

05.jpg
12 (1).jpg

13 (1).jpg
14 (1).jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之六:JDY-31蓝牙模块从模式与Arduino的回环测试

实验开源代码

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之六:JDY-31蓝牙模块从模式与Arduino的回环测试
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D0
  RXD         D1
*/

void setup() {
  Serial.begin(9600); // 初始化串口通信,波特率设置为9600
  Serial.println("JDY-31蓝牙模块准备就绪!"); // 向串口输出初始化完成信息
}

void loop() {
  while (Serial.available()) // 检查串口是否有可读取的数据
  {
    char c = Serial.read(); // 读取串口数据
    if (c == 'A') // 如果读取到的数据是字符'A'
    {
      Serial.println("Hello 火星车!"); // 向串口输出“Hello 火星车!”
    }
  }
  delay(100); // 延迟100毫秒
}

实验串口返回情况

 

16.jpg

实验场景图 

 

17.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之七:通过JDY-31蓝牙模块Arduino 控制板载LED灯

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之七:通过JDY-31蓝牙模块Arduino 控制板载LED灯
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D0
  RXD         D1
*/

const byte LED = 13; // 定义LED引脚为13
char val; // 定义一个字符变量val

void setup() {
  pinMode(LED, OUTPUT); // 设置LED引脚为输出模式
  Serial.begin(57600); // 初始化串口通信,波特率设置为57600
  Serial.println("JDY-31蓝牙模块准备就绪!"); // 向串口输出初始化完成信息
}

void loop() {
  if ( Serial.available() ) { // 检查串口是否有可读取的数据
    val = Serial.read(); // 读取串口数据并存储在val中
    switch (val) { // 根据读取到的数据执行不同的操作
      case '0' : // 如果读取到的数据是字符'0'
        digitalWrite(LED, LOW); // 将LED设置为低电平(关闭)
        Serial.println("LED 灭"); // 向串口输出“LED 灭”
        break;

      case '1' : // 如果读取到的数据是字符'1'
        digitalWrite(LED, HIGH); // 将LED设置为高电平(打开)
        Serial.println("LED 亮"); // 向串口输出“LED 亮”
        break;
    }
  }
}

实验串口返回情况

 

18.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之八:通过JDY-31蓝牙模块串口字符来控制火星车

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之八:通过JDY-31蓝牙模块串口字符来控制火星车
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D0
  RXD         D1
*/

#include <L298N.h>

// 创建电机对象
L298N motor1(9, 5, 4); // 第一个电机(并接右侧三个TT马达)
L298N motor2(6, 3, 2); // 第二个电机(并接左侧三个TT马达)

char command; // 用于存储从蓝牙模块接收到的命令

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // 设置板载LED为输出模式
  Serial.begin(57600); // 初始化串口通信,波特率设置为57600
  Serial.println("JDY-31蓝牙模块准备就绪!"); // 向串口输出初始化完成信息
}

void loop() {
  if (Serial.available()) { // 检查串口是否有可读取的数据
    command = Serial.read(); // 读取串口数据并存储在command中
    switch (command) { // 根据接收到的命令执行不同的操作
      case 'F': // 前进
        motor1.setSpeed(200); // 设置电机1的速度为200
        motor1.forward(); // 电机1正转
        motor2.setSpeed(200); // 设置电机2的速度为200
        motor2.forward(); // 电机2正转
        Serial.println("前进"); // 向串口输出“前进”
        break;

      case 'B': // 后退
        motor1.setSpeed(200); // 设置电机1的速度为200
        motor1.backward(); // 电机1反转
        motor2.setSpeed(200); // 设置电机2的速度为200
        motor2.backward(); // 电机2反转
        Serial.println("后退"); // 向串口输出“后退”
        break;

      case 'L': // 左转
        motor1.setSpeed(200); // 设置电机1的速度为200
        motor1.backward(); // 电机1反转
        motor2.setSpeed(200); // 设置电机2的速度为200
        motor2.forward(); // 电机2正转
        Serial.println("左转"); // 向串口输出“左转”
        break;

      case 'R': // 右转
        motor1.setSpeed(200); // 设置电机1的速度为200
        motor1.forward(); // 电机1正转
        motor2.setSpeed(200); // 设置电机2的速度为200
        motor2.backward(); // 电机2反转
        Serial.println("右转"); // 向串口输出“右转”
        break;

      case 'S': // 停止
        motor1.stop(); // 停止电机1
        motor2.stop(); // 停止电机2
        Serial.println("停止"); // 向串口输出“停止”
        break;

      default:
        Serial.println("无效命令"); // 向串口输出“无效命令”
        break;
    }
  }
}

实验串口返回情况

 

19.jpg

实验场景图

 

19 (1).jpg

在头条上搜:蓝牙串口APP,并安装

 

21 (1).jpg
22.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之九:最简单的蓝牙控制板载LED的程序,输入1为亮,其他为熄灭,
 串口显示输入字符(手机端-应用宝-搜索《SPP》-安装-打开-搜蓝牙
 <JDY-31-SPP>-连接-设置控制面板)

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之九:最简单的蓝牙控制板载LED的程序,输入1为亮,其他为熄灭,
  串口显示输入字符(手机端-应用宝-搜索《SPP》-安装-打开-搜蓝牙
  <JDY-31-SPP>-连接-设置控制面板)
  连接方式 LED D13
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D3
  RXD         D2
*/

#include <SoftwareSerial.h>

const byte LED_PIN = 13; // 定义LED引脚为常量

/* 创建一个名为bt的SoftwareSerial类对象 */
SoftwareSerial bt(2, 3); /* (Rx, Tx) 引脚定义 */

void setup() {
  pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式
  bt.begin(9600); // 定义软件串口通信的波特率为9600
  Serial.begin(9600); // 定义硬件串口通信的波特率为9600
  Serial.println("JDY-31蓝牙模块准备就绪!"); // 向串口输出初始化完成信息
  Serial.println("请在手机APP上输入单个字符:");
}

void loop() {
  if (bt.available()) { // 检查软件串口是否有可读取的数据
    char inputChar = bt.read(); // 读取软件串口数据并存储在inputChar中
    Serial.print(inputChar); // 向串口输出读取到的字符
    if (inputChar == '1') { // 如果输入字符为'1'
      digitalWrite(LED_PIN, HIGH); // 点亮LED
      Serial.println("-LED打开"); // 向串口输出“LED打开”
    } else { // 其他字符
      digitalWrite(LED_PIN, LOW); // 熄灭LED
      Serial.println("-LED关闭"); // 向串口输出“LED关闭”
    }
  }
}

打开手机蓝牙串口APP,搜索蓝牙设备,找到“JDY-31-SPP”,进行配对,然后连接

 

23.jpg

打开Arduino IDE的串口,设置波特率为9600,打开手机蓝牙串口APP,连接后,输入1时LED为亮,其他为熄灭。

 

24.jpg

实验串口返回情况

 

25.jpg

代码要点
1、LED引脚定义:使用常量LED_PIN定义LED引脚,便于修改和维护。
2、串口初始化:在setup()函数中初始化软件串口和硬件串口,波特率均设置为9600。
3、数据读取:在loop()函数中检查软件串口是否有数据可读取,并读取输入字符。
4、字符显示:将读取到的字符通过硬件串口输出,便于调试和监控。
5、LED控制:根据输入字符控制LED的状态,输入1时点亮LED并输出“LED打开”,其他字符时熄灭LED并输出“LED关闭”。

 

 

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之十:设置蓝牙控制面板,在键盘上设开灯与关灯二个按键

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之十:设置蓝牙控制面板,在键盘上设开灯与关灯二个按键
  连接方式 LED D13
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D3
  RXD         D2
*/

#include <SoftwareSerial.h>

const byte LED_PIN = 13; // 定义LED引脚为常量

/* 创建一个名为bt的SoftwareSerial类对象 */
SoftwareSerial bt(2, 3); /* (Rx, Tx) 引脚定义 */

void setup() {
  pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式
  bt.begin(9600); // 定义软件串口通信的波特率为9600
  Serial.begin(9600); // 定义硬件串口通信的波特率为9600
  Serial.println("JDY-31蓝牙模块准备就绪!"); // 向串口输出初始化完成信息
  Serial.println("请在手机APP上输入单个字符:");
}

void loop() {
  if (bt.available()) { // 检查软件串口是否有可读取的数据
    char inputChar = bt.read(); // 读取软件串口数据并存储在inputChar中
    Serial.print(inputChar); // 向串口输出读取到的字符
    if (inputChar == '1') { // 如果输入字符为'1'
      digitalWrite(LED_PIN, HIGH); // 点亮LED
      Serial.println("-LED打开"); // 向串口输出“LED打开”
    } else if (inputChar == '0') { // 如果输入字符为'0'
      digitalWrite(LED_PIN, LOW); // 熄灭LED
      Serial.println("-LED关闭"); // 向串口输出“LED关闭”
    } else {
      Serial.println("-无效命令"); // 向串口输出“无效命令”
    }
  }
}

实验串口返回情况

 

26.jpg

蓝牙控制面板,在键盘上设开灯与关灯二个按键

 

27.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百二十八:2米PVC水管六个TT马达驱动火星车
 项目实验之十一:设置火星车简易蓝牙控制面板,前后左右停止

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十八:2米PVC水管六个TT马达驱动火星车
  项目实验之十一:设置火星车简易蓝牙控制面板,前后左右停止
  JDY-31模块与Uno接线:
  VCC         VCC
  GND         GND
  TXD         D8
  RXD         D7
*/

#include <L298N.h> // 包含L298N电机驱动库
#include <SoftwareSerial.h> // 包含软件串口库

// 创建电机对象
L298N motor1(9, 5, 4); // 第一个电机对象,连接到引脚9, 5, 4(并接右侧三个TT马达)
L298N motor2(6, 3, 2); // 第二个电机对象,连接到引脚6, 3, 2(并接左侧三个TT马达)

// 创建蓝牙串口对象
SoftwareSerial bt(7, 8); // 定义软件串口对象,使用引脚7 (Rx) 和 8 (Tx)

void setup() {
  // 初始化电机
  motor1.setSpeed(0); // 设置电机1的初始速度为0
  motor2.setSpeed(0); // 设置电机2的初始速度为0

  // 初始化蓝牙串口
  bt.begin(9600); // 设置蓝牙串口通信的波特率为9600
  Serial.begin(9600); // 设置硬件串口通信的波特率为9600
  Serial.println("六驱火星车准备就绪!"); // 向串口输出初始化完成信息
}

void loop() {
  if (bt.available()) { // 检查蓝牙串口是否有可读取的数据
    char command = bt.read(); // 读取蓝牙串口数据并存储在command变量中
    Serial.println(command); // 向串口输出读取到的字符

    switch (command) { // 根据读取到的命令执行相应操作
      case 'F': // 前进命令
        motor1.setSpeed(200); // 设置电机1速度为200
        motor1.forward(); // 电机1前进
        motor2.setSpeed(200); // 设置电机2速度为200
        motor2.forward(); // 电机2前进
        Serial.println("前进"); // 向串口输出“前进”信息
        break;

      case 'B': // 后退命令
        motor1.setSpeed(200); // 设置电机1速度为200
        motor1.backward(); // 电机1后退
        motor2.setSpeed(200); // 设置电机2速度为200
        motor2.backward(); // 电机2后退
        Serial.println("后退"); // 向串口输出“后退”信息
        break;

      case 'L': // 左转命令
        motor1.setSpeed(200); // 设置电机1速度为200
        motor1.backward(); // 电机1后退
        motor2.setSpeed(200); // 设置电机2速度为200
        motor2.forward(); // 电机2前进
        Serial.println("左转"); // 向串口输出“左转”信息
        break;

      case 'R': // 右转命令
        motor1.setSpeed(200); // 设置电机1速度为200
        motor1.forward(); // 电机1前进
        motor2.setSpeed(200); // 设置电机2速度为200
        motor2.backward(); // 电机2后退
        Serial.println("右转"); // 向串口输出“右转”信息
        break;

      case 'S': // 停止命令
        motor1.stop(); // 停止电机1
        motor2.stop(); // 停止电机2
        Serial.println("停止"); // 向串口输出“停止”信息
        break;

      default: // 无效命令
        Serial.println("无效命令"); // 向串口输出“无效命令”信息
        break;
    }
  }
}

实验串口返回情况

 

28.jpg

手机端蓝牙聊天模式

 

29.jpg

手机端蓝牙按键模式

 

30.jpg

【花雕学编程】Arduino动手做(228)---2米PVC水管六个TT马达驱动火星车

 

实验记录视频

 

【[花雕动手做] 蓝牙控制的六驱动小车#科技改变生活】

 

 https://www.bilibili.com/video/BV1L2HhebExK/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

实验场景图 

 

30 (1).jpg

评论

user-avatar
icon 他的勋章
    展开更多