第五课 释放火星车的移动能力 ====================================================== 准备好了吗,年轻的探索者们!我们已经掌握了电机控制,现在将这些技能带到红色星球。在本课程中,我们将使火星车“复活”! 我们将学习如何将电机组装到摇臂-摆臂悬挂系统中,然后利用我们的编程技能,带领火星车穿越模拟的火星地形。 这是一次火星冒险,在课堂上开始吧!让我们动手吧! .. raw:: html .. note:: 如果你是在完全组装好 GalaxyRVR 后学习本课程,请在上传代码前,将开关切换到右侧。 .. image:: img/camera_upload.png :width: 500 :align: center 学习目标 --------------------------- * 理解如何将电机组装到火星车的摇臂-摆臂悬挂系统中。 * 学习如何使用 Arduino 控制火星车的运动。 * 练习编写程序,控制火星车在不同地形上的运动。 所需材料 -------------------------- * SunFounder R3 板 * TT 电机 * GalaxyRVR Shield * 电池 * 火星车模型(配有摇臂-摆臂系统) * 基本工具和配件(如螺丝刀、螺丝等) * USB 数据线 * Arduino IDE * 电脑 步骤 -------------- **步骤 1:组装火星车组件** 在此步骤中,我们将把电池、R3 板、GalaxyRVR Shield、电机和轮子安装到预先组装好的摇臂-摆臂系统上,使 GalaxyRVR 处于可运行状态。 .. image:: img/1732527386941.png .. image:: img/1732528359492.png **步骤 2:让火星车开始运动** 现在是时候给我们的创造物注入生命,开启它的首次航行了。 但我们该如何与火星车进行通信呢?我们如何指挥它去哪里,做什么? 这时,编程技能派上用场! 在现实生活中,如果我们想让一辆车前进,我们会踩下油门,两个车轮开始旋转。 右侧车轮顺时针旋转,左侧车轮逆时针旋转。 .. image:: img/move_car.gif :align: center 想象你坐在驾驶座上,世界在你眼前飞驰——这正是我们要赋予火星车的体验。 现在,让我们将这种体验转化为火星车能理解的语言——代码! .. code-block:: arduino #include // 定义电机引脚 const int in1 = 2; const int in2 = 3; const int in3 = 4; const int in4 = 5; void setup() { // 初始化 SoftPWM SoftPWMBegin(); } void loop() { // 设置左侧电机逆时针旋转 SoftPWMSet(in1, 255); // 全速 SoftPWMSet(in2, 0); // 停止 // 设置右侧电机顺时针旋转 SoftPWMSet(in3, 0); // 停止 SoftPWMSet(in4, 255); // 全速 } 在这段代码中,我们正与火星车对话,告诉它该做什么。 通过 ``SoftPWMSet()`` 函数,我们充当了车的油门和刹车,控制每个电机的速度和方向。 我们让左侧电机逆时针旋转,右侧电机顺时针旋转,就这样,火星车开始前进了! 当你理解了如何让火星车前进,控制它倒退就变得很简单了。 要让火星车倒退,我们只需要反转每个电机的旋转方向。 下面是如何用代码实现这一点——我们做的正好相反。右侧车轮现在应逆时针旋转,左侧车轮应顺时针旋转。 .. code-block:: arduino :emphasize-lines: 16,17,20,21 #include // 定义电机引脚 const int in1 = 2; const int in2 = 3; const int in3 = 4; const int in4 = 5; void setup() { // 初始化 SoftPWM SoftPWMBegin(); } void loop() { // 设置左侧电机顺时针旋转 SoftPWMSet(in1, 0); // 停止 SoftPWMSet(in2, 255); // 全速 // 设置右侧电机逆时针旋转 SoftPWMSet(in3, 255); // 全速 SoftPWMSet(in4, 0); // 停止 } 在这段代码中,我们通过 ``SoftPWMSet()`` 告诉左侧电机顺时针旋转,右侧电机逆时针旋转。 是不是很神奇?我们仅凭几行代码就能控制火星车的移动!下次坐在车里时,不妨想一想火星车的旅程,它也是通过一次次的旋转探索世界的。敬请期待,因为火星车的冒险才刚刚开始! **步骤 3:让火星车转向** 现在我们已经知道如何让火星车前进和后退,那么如果我们想让它转向左或右呢? 就像现实中的驾驶一样,汽车转向有两种主要方式。 * 第一种方式是让左侧车轮的速度比右侧车轮慢,这样火星车就会向左转。 * 第二种方式是让左右两侧的电机朝同一方向(此时为顺时针)旋转,这样火星车就会绕着自己的轴向左旋转。 让我们看看如何通过代码实现这两种方式: **方法 1:两侧车速不同** .. code-block:: arduino :emphasize-lines: 16,17,20,21 #include // 定义电机引脚 const int in1 = 2; const int in2 = 3; const int in3 = 4; const int in4 = 5; void setup() { // 初始化 SoftPWM SoftPWMBegin(); } void loop() { // 设置左侧电机低速逆时针旋转 SoftPWMSet(in1, 40); SoftPWMSet(in2, 0); // 设置右侧电机高速顺时针旋转 SoftPWMSet(in3, 0); SoftPWMSet(in4, 200); delay(2000); // 持续 2 秒 } 在这段代码中,我们将左侧电机的速度降低,同时保持右侧电机的速度较高。这将使火星车向左转。 **方法 2:所有电机同向旋转** .. code-block:: arduino :emphasize-lines: 16,17,18,19 #include // 定义电机引脚 const int in1 = 2; const int in2 = 3; const int in3 = 4; const int in4 = 5; void setup() { // 初始化 SoftPWM SoftPWMBegin(); } void loop() { // 设置所有电机顺时针旋转 SoftPWMSet(in1, 0); SoftPWMSet(in2, 255); SoftPWMSet(in3, 0); SoftPWMSet(in4, 255); } 在这段代码中,我们让所有电机顺时针旋转。火星车会围绕自己的轴旋转,并改变方向向左转。 要让火星车向右转,方法相同,只需要将旋转方向反转。你能想出如何实现吗? **步骤 4:全面控制火星车运动** 随着我们为火星车开发更多功能,代码可能会变得冗长且杂乱。为了保持代码的清晰和可维护性,编程中有一个好习惯,就是保持代码结构的整洁。一个有效的方式是将不同的任务拆分成单独的函数。 在这种情况下,我们可以为每个方向的运动创建独立的函数。这样不仅使我们的代码更容易理解,也让我们可以在程序的其他地方重用这些函数,而不必重复编写相同的代码。 让我们来看看如何做: .. raw:: html 这样一来,我们的主循环就保持了简洁易懂。 我们可以清晰地看到,火星车先前进,然后后退,再转左转右,最后停止。 .. raw:: html 每个动作的具体实现被隐藏在独立的函数中。这是良好的编程实践中的一个关键概念——抽象。 **步骤 5:分享与反思** 恭喜你完成了与火星车一起的探索之旅!这是你在科学和工程知识上的一次实际应用,做得非常棒! 现在,你可以分享你的火星车如何克服各种地形障碍。你可以拍摄火星车在不同地形上的表现,或者把火星车展示给你的朋友们。 回顾你的学习过程也非常重要。在这个过程中你学到了什么?是否有新的想法或创意出现?在电机控制和编程方面,你收获了什么? 你可以继续探索,发现新知识,不断提升自己。继续加油,未来的科学家和工程师们!