Arduino小车资料整理 |
您所在的位置:网站首页 › arduino小车pwm调速 › Arduino小车资料整理 |
目录
一、小车简介 二、材料清单 三、Arduino UNO R3简介及使用说明 四、各模块安装接线及测试 1.驱动模块接线及测试 (1)减速直流电机 (2)L298N电机驱动模块 (3)具体接线 (4)代码及测试 2.巡线模块接线及测试 (1)TCRT5000红外反射传感器 (2)具体接线 (3)代码及测试 (4)PWM调速 3.蓝牙模块接线及测试 (1)HC-05蓝牙模块 (2)具体接线 (3)代码及测试 4.超声波避障模块接线及测试 (1)HC-SR04超声波测距模块 (2) SG90舵机 (3)具体接线 (4)代码及测试 一、小车简介本小车选用Arduino UNO R3主控板,在小车上搭建了电机驱动模块、蓝牙模块、红外线传感器模块、超声波模块实现小车的基本运动、蓝牙通信、巡线、避障功能。 小车所使用的材料如下表: 名称注释数量小车底盘套件底盘*2、轮子*4、减速直流电机*4、紧固件*8、M3*30螺丝*8、M3螺母*14、M3*6螺丝*6、L30+6铜柱*6 1套Arduino开发板Arduino UNO R31个电机驱动模块L298N电机驱动模块1个电池18650锂电池2节电池盒18650电池盒(2节)1个红外线传感器模块TCRT5000红外反射传感器4个蓝牙模块HC-05主从一体无线蓝牙模块1个超声波模块HC-SR04超声波测距模块1个舵机SG90舵机1个杜邦线若干 三、Arduino UNO R3简介及使用说明Arduino Uno是基于ATmega328P,它有14个数字输入/输出引脚(其中6个可用作PWM输出)、6个模拟输入、一个16 MHz陶瓷谐振器(CSTCE16M0V53-R0)、一个USB连接、一个电源插孔、一个ICSP接头和一个复位按钮。 该开发板的详细资料链接:Arduino UNO 四、各模块安装接线及测试 1.驱动模块接线及测试 (1)减速直流电机该小车使用的减速直流电机参数如下: 工作电压DC 3VDC 5VDC 6V工作电流100mA100mA120mA减速比48:1空载转速100 r/min190 r/min240 r/min (2)L298N电机驱动模块利用L298N模块可以实现电机的正转、反转,从而驱动小车实现前进、后退及转向功能。其具体引脚功能和使用方法如下: 12V输入:12V是由L298N芯片所能接受的最大电压,一般外接5~12V直流电源的正极。 GND :接地端一般接直流电源的负极,在与Arduino开发板连接时两者要共地。 5V输入:由于L298N模块自带板载5V输出使能,5V接口可稳定输出5V电压给Arduino板供电。 A、B通道使能(ENA、ENB):此处有跳线帽,未拔掉时,马达A、B端稳定输出5V电压,拔掉后,可实现PWM调速,改变A、B两端电压,从而改变马达转速。 I/O控制输入:有4个输入接口:IN1、IN2、IN3、IN4,与这四个输入对应的输出为:马达A输出的OUT1、OUT2和马达B输出的OUT3、OUT4。 L298N模块控制电机的原理如下:(下表中高、低为电平状态) 电机运动状态IN1IN2IN3IN4电机A正转高低//反转低高//停止低低//电机B正转//高低反转//低高停止//低低 (3)具体接线此部分为两节串联的18650锂电池(总电压7.4V)作为电源,L298N马达驱动模块,四个减速直流电机和UNO开发板的接线: 18650锂电池正极+------12V输入L298N模块负极-------GNDUNO开发板A0------IN1A1------IN2A2------IN3A3------IN4GND------GND5V------5V输入L1、L2电机a端------OUT1b端------OUT2R1、R2电机a端------OUT3b端------OUT4下面是仿真接线图:(所用仿真软件linkboy点此下载) 注意:此处未使用L298N电机驱动模块 的A、B使能通道,因此A、B使能端的跳线帽不能拔掉,所以不具有PWM调速功能,电机输入电压为板载的5V。 (4)代码及测试Arduino程序的编写一边用到官方软件ArduinoIDE(windows点此下载),打开后写入代码,在工具中选择端口和开发板信息即可进行编译及上传。驱动测试部分输入以下代码: //定义小车五种运动状态 #define STOP 0 //停止 #define FORWARD 1 //向前 #define BACKWARD 2 //后退 #define TURNLEFT 3 //左转 #define TURNRIGHT 4 //右转 int leftmotor1=A0; //定义所用到的引脚 int leftmotor2=A1; //用A0、A1、A2、A3脚(模拟信号引脚可作为数字引脚使用) int rightmotor1=A2; int rightmotor2=A3; void setup() //定义用到的引脚为输出端 { pinMode(leftmotor1,OUTPUT); pinMode(leftmotor2,OUTPUT); pinMode(rightmotor1,OUTPUT); pinMode(rightmotor2,OUTPUT); } void motorRun(int m) //定义小车的运动函数 { switch(m) { 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); } } void loop() { int m; for(m=0;m0) // 判断串口是否有数据写入 { char m=Serial.read();//读取蓝牙模式 Serial.print(m);//向开发板串口发数据 if(m=50)//如果距离大于50cm { return 50;//返回50 } else //如果小于50cm,返回距离值 return distance; } void avoidance() { int p; int dis[3]; motorRun(FORWARD,200); myServo.write(90);//舵机在正中间 dis[1]=getDistance();//得到正中间距离 if(dis[1] |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |