迷宫小车之旅(二)

迷宫小车系列的第二篇

接下来讲述对电机和传感器的基本控制,以及完成小车完整的前进步骤

  1. 步进电机控制
  2. 使用超声波模块
  3. 前进步骤完整代码

接下来看看相关部件:
因为树莓派将负责视觉方面的计算,那么我们将传感器和电机的控制都交给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();
}

三、前进步骤完整代码

暂时还在整理…

猜你喜欢

转载自blog.csdn.net/hqy2000c/article/details/83188228
今日推荐