机器人运动控制与循线机器人搭建指南
立即解锁
发布时间: 2025-08-24 00:50:21 阅读量: 2 订阅数: 5 

### 机器人运动控制与循线机器人搭建指南
#### 1. 机器人运动序列控制
机器人的运动控制可以通过特定的运动序列来实现。以下是一系列运动序列的详细说明:
- **左转序列**:改变左手电机为反转,右手电机为正转。要使电机正转,将其方向引脚设置为 HIGH;反转则设置为 LOW。速度保持在 50%,即向两个电机的速度引脚写入值 128。此运动持续 1 秒,大约使机器人左转 90 度。之后电机停止 1 秒。代码如下:
```cpp
digitalWrite(direction1, LOW);
digitalWrite(direction2, HIGH);
analogWrite(speed1, 128);
analogWrite(speed2, 128);
delay(1000);
```
- **前进序列**:让机器人再次以 50%的速度前进 2 秒,随后停止 1 秒。代码如下:
```cpp
digitalWrite(direction1, HIGH);
digitalWrite(direction2, HIGH);
analogWrite(speed1, 128);
analogWrite(speed2, 128);
delay(2000);
```
- **右转序列**:改变轮子方向,使左手轮正转,右手轮反转,机器人顺时针旋转(右转)。速度设置为 64,即 25%占空比,旋转持续 2 秒,大约使机器人右转 180 度。代码如下:
```cpp
digitalWrite(direction1, HIGH);
digitalWrite(direction2, LOW);
analogWrite(speed1, 64);
analogWrite(speed2, 64);
```
这四个序列组合起来,能让机器人前进 2 秒、停止、左转 90 度、停止、再次前进 2 秒、停止,然后以较慢速度右转 180 度,之后重复该过程。不过,你可能需要根据自己的机器人调整时间和速度,因为不同的电压、电机齿轮比等因素都会影响机器人的运动。
#### 2. 电机扩展板的使用
在这个项目中,新使用的硬件是电机扩展板。扩展板是一块预先制作好的电路板,尺寸适合安装在 Arduino 上。它有引脚与 Arduino 的引脚相连,顶部有母插座,这样你仍然可以通过扩展板访问这些引脚。不同类型的扩展板会占用 Arduino 的一些引脚,例如 Ardumoto 扩展板会使用数字引脚 10、11、12 和 13。
扩展板的优点是,只需插入并上传必要的代码,就能为 Arduino 增加额外的功能。常见的扩展板类型包括以太网访问、GPS、继电器控制、SD 和 Micro SD 卡访问、LCD 显示、电视连接、无线通信、触摸屏、点阵显示和 DMX 灯光控制等。
#### 3. 循线机器人项目
现在,我们将利用前面学到的电机控制技能,来构建一个能够检测并跟随地板上黑线的机器人。这种机器人在工厂中被广泛应用,被称为自动导引车(AGVs)。
##### 3.1 所需零件
|零件名称|数量|
| ---- | ---- |
|小型轻量级机器人底座|1 个|
|电机扩展板|1 个|
|限流电阻|4 个|
|1KΩ 电阻|3 个|
|白色 LED|4 个|
|光敏电阻(LDR)|3 个|
|直流电机|2 个 或者 两轮机器人底座|
|电池组|1 个|
##### 3.2 电路连接步骤
1. 按照特定电路图连接电路,扩展板的四个输出分别连接到电机 A 和电机 B。
2. 四个 LED 可以是任何颜色,但白色 LED 最佳,因为它们以最低电流输出最大亮度。将四个 LED 与引脚 9 并联,并使用适当的限流电阻。
3. 将三个光敏电阻连接到模拟引脚 0、1 和 2。光敏电阻的一侧接地,另一侧通过 1K 欧姆电阻连接到 +5V。模拟引脚的电线连接在电阻和光敏电阻引脚之间。
为了方便测试,可以使用面包板。但制作机器人时,需要制作一个传感器条,将四个 LED 和三个光敏电阻安装在一起,使它们紧密排列并指向同一方向。将传感器条安装在机器人的前侧,使 LED 和光敏电阻距离地面约 1 厘米或半英寸。电池组应放置在机器人底座的中心,并用 Velcro 固定,以保持负载平衡。
##### 3.3 代码实现
以下是循线机器人的代码:
```cpp
// Project 30 - Line Following Robot
#define lights 9
int LDR1, LDR2, LDR3; // sensor values
// calibration offsets
int leftOffset = 0, rightOffset = 0, centre = 0;
// pins for motor speed and direction
int speed1 = 3, speed2 = 11, direction1 = 12, direction2 = 13;
// starting speed and rotation offset
int startSpeed = 70, rotate = 30;
// sensor threshold
int threshhold = 5;
// initial speeds of left and right motors
int left = startSpeed, right = startSpeed;
// Sensor calibration routine
void calibrate() {
for (int x = 0; x < 10; x++) { // run this 10 times to obtain average
digitalWrite(lights, HIGH); // lights on
delay(100);
LDR1 = analogRead(0); // read the 3 sensors
LDR2 = analogRead(1);
LDR3 = analogRead(2);
leftOffset = leftOffset + LDR1; // add value of left sensor to total
centre = centre + LDR2; // add
```
0
0
复制全文
相关推荐









