Arduino智能小车设计(三)

202
0
2020年12月16日 09时14分

今天继续来介绍这些电子元件。

 

4.LM2596S DC-DC降压电源模块

 

介绍:一块降低调整电压的元件

 

接线方式:
IN+ 输入正极 IN-输入负极 (分别接电源的正负极)
OUT+输出正极 OUT-输出负极 (输出你想要的电压)

 

基本工作原理:
1、输入电压范围:直流3.2V 至 40V (输入的电压必须比要输出的电压高1.5V以上。不能升压)产品特点:
2、输出电压范围:直流 1.25V至 35V 电压连续可调,高效率(可高达92%)输出电流可达3A。

 

1

 

使用方法:
1.接入电源(3-40V),电源指示灯亮,模块正常工作。
2.调整蓝色电位器旋钮(一般顺时针旋转升压,逆时针旋转降压)并用万用表监测输出电压达到需要电压为止。

 

2

 

注意:
1.长时间工作建议在2.5A以内的电流使用,同时加上散热片(10W以上输出);由于是降压模块,为了保证输出稳定,请保持最小1.5V压差。
2.一定一定不要把正负极接错,小东西,比较精贵,一旦接反,很可能就烧了。。

 

5.TB6612FNG 电机驱动模块

 

介绍:一块控制各种电机的模块。

 

3

 

基本工作原理:通过控制I/O口的输出,来控制电机的速度,方向(顺,逆时针)。
使用代码:

 

//motor A connected between A01 and A02
//motor B connected between B01 and B02
 
int STBY = 10; //standby
 
//Motor A
int PWMA = 3; //Speed control 
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction
 
//Motor B
int PWMB = 5; //Speed control
int BIN1 = 11; //Direction
int BIN2 = 12; //Direction
 
void setup(){
  pinMode(STBY, OUTPUT);
 
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
 
  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
}
 
void loop(){
  move(1, 255, 1); //motor 1, full speed, left
  move(2, 255, 1); //motor 2, full speed, left
 
  delay(1000); //go for 1 second
  stop(); //stop
  delay(250); //hold for 250ms until move again
 
  move(1, 128, 0); //motor 1, half speed, right
  move(2, 128, 0); //motor 2, half speed, right
 
  delay(1000);
  stop();
  delay(250);
}
 
void move(int motor, int speed, int direction){
//Move specific motor at speed and direction
//motor: 0 for B 1 for A
//speed: 0 is off, and 255 is full speed
//direction: 0 clockwise, 1 counter-clockwise
 
  digitalWrite(STBY, HIGH); //disable standby
 
  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;
 
  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }
 
  if(motor == 1){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }
  else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}
 
void stop(){
//enable standby  
  digitalWrite(STBY, LOW); 
}

 

代码是网上找的,不是博主自己写的。大致的思路就是用这个电机驱动来控制哪一个电机运转,速度,方向(顺逆时针)

 

void move(int motor, int speed, int direction){
//Move specific motor at speed and direction
//motor: 0 for B 1 for A
//speed: 0 is off, and 255 is full speed
//direction: 0 clockwise, 1 counter-clockwise
 
  digitalWrite(STBY, HIGH); //disable standby
 
  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;
 
  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }
 
  if(motor == 1){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}

 

这里编写了一个move函数,函数的参数分别是 控制的是哪个电机,速度,方向(顺逆时针)。电机方向控制,就是通过输入1或非1的参数来对inPin1值和inPin2值的改变,从而控制了电机哪头是高电平及低电平控制方向。速度则是由analogWrite()控制。(速度最大不可超过255)

 

连接示意图:(因为太过麻烦,所以找的图片,更加清楚一点)

 

5

 

引脚说明:

 

      A控制信号输入------PWMA               VM ------电机驱动电压输入端(4.5V-15V)

      A电机输入端2 ------AIN2                VCC ------逻辑电平输入端(2.7V-5.5V)

      A电机输入端1 ------AIN1                GND ------ 接地

      正常工作/待机状态控制端------STBY                 AO1 ------- A电机输出端1

      B电机输入端1------BIN1                AO2 ------ A电机输出端2

      B电机输入端2------BIN2                BO2 ------ B电机输出端2

      B控制信号输入端------PWMB                BO1 ------ B电机输出端1

                接地------GND                GND ------- 接地

 

我的想法:今天挺气人的。。。。
1.昨天测试了寻迹功能,今天测试避障。原本想着避障应该是最轻松的,但是却基本上搞了一天的时间。。。果然代码和硬件的结合,需要一定的磨练啊。本想着弄个智能小车,弄着弄着,越来越感觉像个智障小车。当然,我会在后续的博客中,写出自己所遇到的问题。
2.调试一天的小车总算是差不多,抽空写博客,本来博客的内容更丰富一些的,但是写到一半,电脑自带的浏览器用Markdown编辑时,整崩了。我也不知道是怎么回事,崩了之后,布局全都乱了,文章也发表不出去,只能从新来了。所以这篇应该算是比较精练了。。。。。当然内容少了一些。

发表评论

后才能评论