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

在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
实验模块接线示意图

在这里插入图片描述
打开Arduino IDE,点开工具——管理库——搜索“L298N”——安装库

在这里插入图片描述

【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

【花雕学编程】Arduino动手做(228)---2米PVC

实验场景图

在这里插入图片描述

Mind+图形编程

在这里插入图片描述

Linkboy仿真编程

在这里插入图片描述

【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); // 添加小延迟以平滑速度变化
  }
}

实验串口返回情况

在这里插入图片描述

实验场景图

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
「雕爷编程Arduino动手做寻迹的实验可以使用TCRT5000红外反射光电开关寻迹传感器模块。这个传感器模块可以通过检测周围的光反射来进行寻迹操作。你可以将这个模块连接到mBot的主控板mCore V1.5的RJ25接口上,因为mBot的主控板兼容Arduino系统,所以你可以使用Arduino编程语言来控制mBot进行寻迹操作。请参考【Arduino】168种传感器模块系列实验中的实验六十六,该实验详细介绍了如何使用TCRT5000红外反射光电开关寻迹传感器模块进行寻迹。祝你成功完成实验!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【雕爷编程Arduino动手做(194)---makeblock mbot 主控板2](https://blog.csdn.net/weixin_41659040/article/details/132141677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【雕爷编程Arduino动手做(65)---红外寻迹传感器](https://blog.csdn.net/weixin_41659040/article/details/106604080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值