AiBOM
中文简体
首页 > 文章 > L298N > L298N驱动小车+红外循迹+蓝牙控制
为您找到相关搜索
STMICROELECTRONICS  L298N  双全桥驱动器, Multiwatt15封装
意法半导体(ST)公司成立于1987年,是意大利SGS半导体公司和法国汤姆逊半导体合并后的新企业,1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。从成立之初至今,ST的增长速度超过了半导体工业的整体增长速度。自1999年起,ST始终是世界十大半导体公司之一。整个集团共有员工近50,000名,拥有16个先进的研发机构、39个设计和应用中心、15主要制造厂,并在36个国家设有78个销售办事处。 ST公司位于瑞士日内瓦,同时也是欧洲区以及新兴市场的总部;公司的美国总部设在德克萨斯州达拉斯市的卡罗顿;亚太区总部设在新加坡;日本的业务则以东京为总部;大中国区总部设在上海,负责香港、大陆和台湾三个地区的业务。 意法半导体是业内半导体产品线最广的厂商之一,其主要产品有:分立二极管与晶体管,复杂的片上系统(SoC)器件,包括参考设计、应用软件、制造工具与规范的完整的平台解决方案等3000多种产品。意法半导体是各工业领域的主要供应商,拥有多种的先进技术、知识产权(IP)资源与世界级制造工艺。 半导体产品大体上可分为两类:专用产品和标准产品。专用产品从半导体制造商以及用户和第三方整合了数量众多的专有IP,这些使其区别于市场上的其他产品,例如: 片上系统(SoC)产品,定制与半定制电路,专用标准产品(ASSP),如:无线应用处理器、机顶盒芯片及汽车IC,微控制器,智能卡IC,专用存储器,专用分立器件等,一旦客户在应用中使用了专用产品,如果不修改硬件和软件设计,通常就不能进行产品替换。 相反,标准产品是实现某种特定的常用功能的器件,这些器件一般由几个供应商提供。通常,制造商推出的标准产品可以被其他制造商的同类产品所取代,供应商间的差别主要在于成本与客户服务上。然而,一旦应用设计被冻结,标准器件在性能优化方面也将变成唯一的器件。标准产品包括:分立器件,如晶体管、二极管与晶闸管,功率晶体管,如MOSFET、Bipolar与IGBT,模拟电路构建模块,如运算放大器、比较器、稳压器与电压参考电路,标准逻辑功能与接口,众多存储器产品,如标准或串行NOR闪存、NAND闪存、EPROM/EEPROM及非易失性RAM,射频分立器件及IC。
查看详情
电机驱动器:就是个开关,电机驱动电流很大或者电压很高,一般的开关或者电子元件不能作为控制电机的开关时就要加个所谓的驱动器来控制电机,驱动器也可以用来调速,控制电机正反转。电机驱动器的功能:电机驱动器的作用指通过控制电机的旋转角度和运转速度,以此来实现对占空比的控制,来达到对电机怠速控制的方式。步进电机驱动器原理:采用单极性直流电源供电。只要对步进电机的各相绕组按合
查看详情
热门推荐
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
使用L293D驱动板(for Arduino)对电动机进行驱动
使用L293D驱动板(for Arduino)对电动机进行驱动

L298N驱动小车+红外循迹+蓝牙控制

liudongdong19 2020-01-02 08:46 567次阅读 L298N 电机驱动器

学习视频:https://www.youtube.com/watch?v=Da4HY7HZ6h0
循迹模块
在此我们使用循迹模块TCRT5000,该模块体积小,灵敏度较高,还可以通过转动上面的电位器来调节检测范围。 

L298N驱动小车

模块特色:
1、采用TCRT5000红外反射传感器 
2、检测距离:1mm~8mm适用,焦点距离为2.5mm 
3、比较器输出,信号干净,波形好,驱动能力强,超过15mA。 
4、配多圈可调精密电位器调节灵敏度 
5、工作电压3.3V-5V 
6、输出形式 :数字开关量输出(0和1) 
7、设有固定螺栓孔,方便安装 
8、小板PCB尺寸:3.2cm x 1.4cm 
9、使用宽电压LM393比较器

工作原理:
TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。

由于黑色具有较强的吸收能力,当循迹模块发射的红外线照射到黑线时,红外线将会被黑线吸收,导致循迹模块上光敏三极管处于关闭状态,此时模块上一个LED熄灭。在没有检测到黑线时,模块上两个LED常量。

L298N驱动模块用法简介
一般拿到一个模块之后都要去对应的官网找到它的资料包,查看其详细用法,在某宝上买的模块一般店家都有整理好的资料包,所以某宝也是一个很好的资料库,大家一定要合理运用哦~

在此我们选用的是L298N模块,该模块引脚分配如下: 

L298N驱动小车


+12V:该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为两节18650串联的电压,即3.7+3.7=7.4V;

GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。

+5V: L298N模块(注意不是L298N芯片)内含稳压电路(将高电压转换为低电压的电路),在模块内部将”+12V”引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

L298N有两路输出,所以可以控制小车前进、后退、转弯,其中: 
ENA: 代表第一路输出的电压大小。驱动模块输出电压越高,电机转速越快。 
1.当其输入为0V的时候,驱动模块输出对第一路电机输出电压为0V; 
2.当其输入为3.3V的时候,驱动模块对第一路电机输出电压为”+12V”引脚的输入电压。 
3.由于ENA输入电压的高低控制驱动对电机的输出电压,因此当我们需要对小车运动速度进行控制的时候,一般通过PWM对”ENA”引脚进行控制。

IN1/IN2:这两个引脚控制电机正反转方向。例:假如IN1输入高电平3.3V,IN2输入低电平0V,ENA为3.3V,电机正转,此时将IN1输入改为0V,IN2输入改为3.3V,其他条件不变,则电机将会反转。

OUT1/OUT2:这两个引脚分别接电机的两极。

ENB,IN3/IN4,OUT3/OUT4引脚控制第二路输出,与上述ENB,IN3/IN4,OUT3/OUT4功能相似。

驱动安装
将准备好的驱动模块固定在小车,将从地盘电机延长出来的导线分左右两边分开,左边两个电机中每一个电机的其中一根线OUT1,另外一个接OUT2。同理,右边两个电机中每一个电机的其中一根线OUT3,另外一个接OUT4,并用螺丝刀将拧蓝色接线柱上方的螺丝拧紧。

电池座固定
将电池固定在小车尾部,将电源的两根线链接到+12V和GND引脚,红色代表正极,接到+12V,黑色代表负极,接到GND(一般电路中默认红色为正,黑色为负),并拧紧螺丝固定。

L298N驱动小车



Ardunio开发板安装
将Arduno板子用螺丝固定在小车中部,由于小车运动中也需要对开发板供电,此时我们用两根公对公的杜邦线为其供电,红色(也可以为其他颜色)杜邦线一边插入Arduino板的”5V”引脚,一边插到L298N驱动的”+5V”引脚,黑色(也可以为其他颜色)杜邦线一边插入Arduino板的”GND”引脚,一边插到L298N驱动的”GND”引脚。 
为控制电机的正反转,此时我们需要拿四根公对母杜邦线,将L298N驱动的IN1/IN2/IN3/IN3引脚与Arduino板的4/5/6/7号引脚对应相连,最终拼装图如下:

L298N驱动小车

 
抱歉,接线有点乱,大家可以用扎带或者皮筋将其捆好固定

至此,我们的小车基本拼装完成,接下来就要开始写程序来控制小车运动咯,有没有很激动~

Ardunio程序编写
Arduino的程序编写一般使用Arduino IDE,该软件安装比较简单,大家可以自行安装,安装成功后打开IDE,在程序里写入下述代码:

// CurieBLE - Version: Latest 


#include <Servo.h>
//定义五中运动状态
#define STOP      0
#define FORWARD   1
#define BACKWARD 2
#define TURNLEFT  3
#define TURNRIGHT 4
//定义需要用到的引脚
int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;
int leftPWM = 9;
int rightPWM = 3;
//定义红外循迹引脚
int trac1 = 10; //从车头方向的最右边开始排序
int trac2 = 11; 
int trac3 = 12; 
int trac4 = 13; 


void setup() {
  Serial.begin(9600);  //设置串口通信
  // put your setup code here, to run once:
  //设置控制电机的引脚为输出状态
  pinMode(leftMotor1, OUTPUT);
  pinMode(leftMotor2, OUTPUT);
  pinMode(rightMotor1, OUTPUT);
  pinMode(rightMotor2, OUTPUT);
  pinMode(leftPWM, OUTPUT);
  pinMode(rightPWM, OUTPUT);
  //定义循迹模块
  pinMode(trac1, INPUT);
  pinMode(trac2, INPUT);
  pinMode(trac3, INPUT);
  pinMode(trac4, INPUT);
}

void loop()
{
  tracing();
}
void tracing()
{
   int data[4];
  data[0] = digitalRead(10);
  data[1] = digitalRead(11);
  data[2] = digitalRead(12);
  data[3] = digitalRead(13);

  if(data[0] && data[1] && data[2] && data[3])  //左右都没有检测到黑线
  {
    motorRun(FORWARD, 255);
  }

  if(!data[0] || !data[1])  //右边检测到黑线
  {
    motorRun(TURNRIGHT, 160);
  }

  if(!data[2] || !data[3])  //左边检测到黑线
  {
    motorRun(TURNLEFT, 100);
  }

  if(!data[0] && !data[3])  //左右都检测到黑线是停止
  {
    motorRun(STOP, 40);
    
  }

  Serial.print(data[0]);
  Serial.print("---");
  Serial.print(data[1]);
  Serial.print("---");
  Serial.print(data[2]);
  Serial.print("---");
  Serial.println(data[3]);
}

void loop2() {
  char data='1';
  int temp=0;
   if(Serial.available()>0)
  {
    char cmd = Serial.read();//读取蓝牙模块发送到串口的数据
    switch(cmd){
      case '1':
         temp=1;
         break;
      case '2':
         temp=2;
         break;
       case '3':
         temp=3;
         break;
      case '4':
         temp=4;
         break;
      case '0':
         temp=0;
         break;
            
    }
    motorRun(temp,100);

  }  
}
//运动控制函数
void motorRun(int cmd,int value)
{
  analogWrite(leftPWM, value);
  analogWrite(rightPWM, value);
  switch(cmd){
    case FORWARD :
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case BACKWARD:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     case TURNLEFT:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case TURNRIGHT:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     default:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
  }
}


温馨提示:本文由网友投稿,经网站编辑整理发布,转载请注明出处和本文链接,如有侵犯您的权益,请及时与我们联系,我们将核实情况后进行相关处理!
相关推荐
使用L293D驱动板(for Arduino)对电动机进行驱动
使用L293D驱动板(for Arduino)对电动机进行驱动
在学术机器人中使用的电动机通常工作在5、6、9、12或24伏。根据型号、制造方法、价格等,它们的电流约为100 mA至5A。您可以通过多种方式使用电机。一种方法是将其直接连接到电池,然后以特定方向以最大速度旋转,但实际上,我们需要控制电机(开关、速度控制、方向控制和位置控制)。
L293D / 电机驱动器 / Arduino 676
关注

关注采芯网

回复型号,查元件信息

采芯网 FindIC 用户意见反馈
问题类型
网站页面问题或建议
数据问题或错误
元器件采购询价
其他
意见建议
联系方式
反馈和联系