使用Arduino开发板DIY制作自平衡机器人

在受到Segway的RYNO Motors电动独轮摩托车和其他自平衡滑板车的启发后,我一直想要制作一个类似的东西。基于这一点,我决定使用Arduino开发板制作一个自平衡机器人。通过这种方式,我将能够掌握所有这些踏板车背后的基本概念,并了解PID算法的工作原理。

在开始制作后,我意识到这个机器人制作起来有点挑战。有很多可供选择的选项,因而,从选择电机到调整PID值,充满着疑惑。还有许多事情需要考虑,如电池类型、电池位置、车轮把手、电机驱动器类型、维持CoG(重心)等等。

但是,一旦完成后,你会觉得它并不像听起来那么难。让我们开始面对吧,在本篇文章中,我们将主要学习制作自平衡机器人的知识。你可能是一个刚刚开始的纯初学者,或者可能在长时间没有让你的机器人工作的挫折之后来到这里。这个地方旨在成为您的最终目的地。让我们开始吧……

使用的零件

● Arduino UNO开发板

● 齿轮直流电机(黄色) - 2Nos

● L298N电机驱动器模块

● MPU6050

● 一对轮子

● 7.4V锂离子电池

● 连接导线

● 3D打印的车体

控制器:我在这里使用的控制器是Arduino UNO,为什么?因为它简单易用。您也可以使用Arduino Nano或Arduino mini,但我建议您坚持使用UNO,因为我们可以直接编程而无需任何外部硬件。

电机:毫无疑问,您可以使用自平衡机器人的最佳电机选择是步进电机。但为了简单起见,我使用了直流减速电机。是的,没有强制要求步进器;机器人也可以使用这些廉价的黄色直流减速电机。

电机驱动器:如果您选择了像我这样的直流减速电机,那么您可以使用像我这样的L298N驱动模块,甚至L293D应该可以正常工作。

轮子:不要低谷这些家伙;我很难搞清楚问题出在车轮上。因此,请确保您的车轮在您正在使用的地板上有良好的抓地力。仔细观察,你的抓地力永远不应该让你的车轮在地板上滑行。

加速度计和陀螺仪:机器人的加速度计和陀螺仪的最佳选择是MPU6050。因此,不要尝试使用像ADXL345这样的普通加速度计来制作,它不会起作用。在本文的最后你会知道为什么。

电池:我们需要一个尽可能轻的电池,工作电压应大于5V,这样我们就可以直接为Arduino供电而无需升压模块。因此理想的选择是7.4V锂聚合物电池。在这里,由于我有一个7.4V锂离子电池,我已经使用过它了。但请记住,Li-po比Li-ion更有优势。

车体:另一个你不应该忽视的地方是你的机器人车体。您可以使用纸板、木材、塑料制作您喜欢的任何东西。但是,只要确保车体坚固,并且在机器人试图平衡时不应该摆动。我在Solidworks上基于其他机器人设计了自己的车体,并打印出3D。如果您有打印机,那么您也可以打印设计,设计文件将附在下一个标题中。

这里写图片描述

更多内容请参考以下链接:https://www.yiboard.com/thread-939-1-1.html

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个基于Arduino开发板和MPU6050陀螺仪传感器的平衡小车可以分为以下几个步骤: 1. 硬件连接:将MPU6050陀螺仪传感器连接到Arduino开发板上。可以使用I2C协议将传感器连接到开发板的SDA和SCL引脚上,同时将VCC和GND引脚连接到相应的电源和地线。 2. 编写程序:编写程序来读取陀螺仪传感器的数据,并根据数据控制电机以保持平衡。可以使用PID控制算法来实现平衡控制。 3. 调试:进行调试以确保小车能够保持平衡并能够前进、后退和转向。 以下是一个简单的示例代码,用于读取MPU6050陀螺仪传感器数据和控制电机: ```C++ #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; int16_t ax, ay, az; int16_t gx, gy, gz; const int motorPin1 = 9; const int motorPin2 = 3; const int motorSpeedPin = 10; void setup() { Wire.begin(); mpu.initialize(); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorSpeedPin, OUTPUT); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); } void loop() { mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // Calculate angle based on accelerometer data double angle = atan2(ay, az) * 180 / M_PI; // Apply PID control algorithm to adjust motor speed double error = angle; double Kp = 1; double Ki = 0.1; double Kd = 0.1; double P = Kp * error; double I = Ki * (I + error); double D = Kd * (error - lastError); lastError = error; double motorSpeed = P + I + D; // Set motor speed and direction based on PID output if (motorSpeed > 0) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); } else { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); motorSpeed = -motorSpeed; } analogWrite(motorSpeedPin, motorSpeed); } ``` 请注意,这只是一个简单的示例代码,需要根据具体的硬件和需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值