迷宫小车之旅(二)
迷宫小车系列的第二篇
接下来讲述对电机和传感器的基本控制,以及完成小车完整的前进步骤
- 步进电机控制
- 使用超声波模块
- 前进步骤完整代码
接下来看看相关部件:
因为树莓派将负责视觉方面的计算,那么我们将传感器和电机的控制都交给Arduino
Arduino:
超声波模块:
超声波模块我使用的是HC-SR04,工作需要5V的电源输入,检测距离在2cm-400cm左右
步进电机和驱动模块:
一、控制步进电机
接口、接线介绍:(因为大家使用的驱动板各不相同,所以接口和接线方式也并非都是一样的)
vcc:电源
gnd:接地
stp:步进控制接口
dir:方向控制接口
将驱动模块上的vcc和gnd分别接到arduino的5v和地线接口上,然后把stp和dir都接到数字引脚上
(stp的接口需要接到带pwm的数字引脚上,带pwm的接口在数字后会标注 “ ~ ”)
代码控制部分:
在这里我们使用AccelStepper库来控制步进电机
// 控制电机转一圈
#include <AccelStepper.h>
#include <MultiStepper.h>
// 细分数
int xifen = 4;
// 步进数
int steps = 200;
// 设置左右电机引脚接口
AccelStepper stp_l(1, 5, 4);
AccelStepper stp_r(1, 3, 2);
// 前进步数 = 步进数 * 细分数
int pos = steps * xifen;
int speed = 800;
void setup() {
Serial.begin(9600);
stp_l.setMaxSpeed(2000);
stp_r.setMaxSpeed(2000);
}
void loop() {
runToPos(speed, pos);
}
// 移动到指定位置
void runToPos(int speed, int pos) {
// 设置速度
stp_l.setSpeed(speed);
stp_r.setSpeed(speed);
// 设置移动距离(步进数)
stp_l.moveTo(pos);
stp_r.moveTo(-pos);
// 电机启动
stp_l.runSpeedToPosition();
stp_r.runSpeedToPosition();
}
二、使用超声波模块
接口、接线介绍:
HC-SR04的引脚共有4个:
VCC:电源,工作需要接5V电源
Trig:发送引脚,高电平时发送超声波
Echo:接收检测引脚,当接收到返回的超声波时,输出高电平
GND:接地
Trig接数字引脚7
Echo接数字引脚6(pwm引脚)
(因为Arduino的5V接口不够,超声波外接5V电源的话需要和Arduino共地,不然无法工作)
工作原理:
超声波模块把声波发射出去,然后开始计时,直到接收到遇到障碍返回的声波,就停止计时
然后将这段时间除以340m/s,再除2,即得出距离
S = 340m/s * t / 2
代码控制部分:
const int echoPin = 6;
const int trigPin = 7;
int distance;
long temp;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
checkdist();
}
void checkdist() {
//低高低电平发送一个短时间脉冲
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
temp = pulseIn(echoPin, HIGH);
distance = (temp * 17) / 1000;
delay(50);
Serial.print("距离:");
Serial.print(distance);
Serial.println();
}
三、前进步骤完整代码
暂时还在整理…