【Arduino实验18 智能小车控制装置】

目录

一、设计主题

二、基本内容

三、项目要求

四、附件(参考资料)

1.软件

2.Arduino UNO R3开发板开发板结构:

3.硬件模块

4.H桥电路控制

​5.红外遥控

6.PS/3三轴遥控传感器

7.反馈型移动机器人

8.差分技术

9.小车底盘

10.两轮小车驱动程序示例

五、系统调试

六、实验总结


一、设计主题

        综合课程所学、所掌握的软硬件知识,简介自己制作的Arduino智能控制装置,项目所解决的现实问题与实现的功能。

二、基本内容

        项目设计方案:阐述清楚设计思路,软、硬件条件与设计目标实现的可行性。

        硬件设计:硬件功能与结构概述、主要模块功能描述、硬件设计电路图、电路功能说明

        软件设计:软件功能设计概述、程序流程图、流程图功能描述、主程序与程序模块源代码

        调试过程:电路搭建、实验调试、功能测试、结果说明

        总结与反思:设计任务目标的实现程度,实验中的问题与解决办法,反思与改进

三、项目要求

        1.原创:可以参考、吸收既有文献内容为己所用,但严禁抄袭!

        2.项目要求:

        基本要求:遥控小车的起、停,前进、后退、左转、右转、加速、减速等基本动作

        功能扩展:智能避障、智能循迹、智能跟随、智能归航等

        3.作品验收

        现场操作演示;现场答辩

        4.项目报告

        以设计性实验报告样式为参考,内容包括项目设计方案、硬件设计、软件设计、调试过程、总结与反思等。

        5.时间要求

        验收作品、提交报告。

四、附件(参考资料)

1.软件

        Arduino IDE(略)Mixly(略)Fritzing(略)c/c++(略)

2.Arduino UNO R3开发板开发板结构:

        最小系统功能、I/O接口(参数)、TX/RX串口、输入/输出、电源

3.硬件模块

        主要包括:智能小车底盘、红外遥控传感器、PS/3双轴摇杆、L298N双电机驱动模块、直流电机、电池组、超声波传感器、红外循迹传感器、红外避障传感器、防撞开关、......

        红外循迹传感器:

        红外循迹传感器由一对红外线发射与接收管构成,发射管发射出一定频率的红外线,当检测方向遇到障碍物时,红外线反射回来被接收管接收,经过比较器电路处理后,信号输出口输出数字信号,可通过电位器旋钮调节检测距离,有效距离范围2-30cm,工作电压3.3-5V。利用红外线在不同颜色物体表面具有不同反射强度的特点,红外循迹传感器根据红外接受头接收到红外反射信号强弱来判断小车是否运行在黑色(或白色)轨迹上,来判断小车运行位置状态

【Arduino实验18 智能小车控制装置】_第1张图片

 

        巡线小车红外循迹原理

        小车循迹,是小车在白色地板上循黑线前进,通常采用红外探测法。在小车行驶过程中不断地向地面发射红外光,当遇到白色质地地面发生强的漫反射反射光被红外接收管接收;如果遇到黑色质地地面则被强吸收,红外接收头接收不到红外光或被弱接收。Arduino主控板根据接收到反射回来的红外光为依据来确定黑线的位置与小车前进的路线。

                        【Arduino实验18 智能小车控制装置】_第2张图片

         A/B两路循迹传感器的循迹巡线小车控制逻辑:

【Arduino实验18 智能小车控制装置】_第3张图片        红外避障传感器

        红外避障传感器:红外避障感器由一对红外线发射与接收管构成,发射管主动发射出一定频率的红外线,当检测方向遇到障碍物时,红外线反射回来被接收管接收,经过比较器电路处理后,信号输出口输出数字信号。当检测到障碍物时,信号输出端口持续输出低电平信号,可通过电位器旋钮调节检测距离,有效距离范围2-30cm,工作电压3.3-5V。

                                【Arduino实验18 智能小车控制装置】_第4张图片

         接触式碰撞开关传感器

        接触式碰撞开关传感器:接触式碰撞开关传感器依靠内部的机械结构来完成电路的导通和断开。当外部的碰撞臂收到碰撞挤压,探测臂受力下压开关内部的拨动簧片,使电路开关状态发生改变,输出端口信号状态发生改变。

                                【Arduino实验18 智能小车控制装置】_第5张图片

4.H桥电路控制

        H桥电路名称的由来是因为控制电路的形状向字母H。晶体管H桥控制电路如图所示,当左侧为高电平、右侧为低电平,电流从左向右流过直流电机,如果左侧为低电平、右侧为高电平,电流方向则相反。

【Arduino实验18 智能小车控制装置】_第6张图片

         L298N为双H桥电机驱动模块,其芯片内部包含了两组H桥式电路,可以驱动并控制两个直流电机的正反转,其中ENA/ENA使能端可以控制电机的启停和转速。

        L298N驱动模块控制直流电机:

        使能端ENAENB可输入PWM脉宽调制信号对直流电机转速进行调节控制。ENAENA接上跳线帽,电机工作电压为5V,电机处于最高速状态,取下跳线帽,电机,电机停止转动。             

        直流电机的正反转控制。信号输入端IN1=HIGH,IN2=LOW,电机MA正转;信号输入端N1=LOWIN2=HIGH,电机MA反转。电机MB同理。

【Arduino实验18 智能小车控制装置】_第7张图片5.红外遥控

        红外遥控器、红外遥控库函数、红外遥控的按键编码的发射与接收

        红外遥控小车

        红外遥控器的使用,参考红外遥控实验。

                【Arduino实验18 智能小车控制装置】_第8张图片

6.PS/3三轴遥控传感器

        PS/3双轴遥控器传感器,具有XYanalog输出,Z1路按钮digital输出,3路信号分别通过杜邦线线接到Arduino传感器扩展板,需占用2个模拟输入端口、1个数字输入端口实现3路信号控制

【Arduino实验18 智能小车控制装置】_第9张图片

        PS/3摇杆工作原理

        摇杆实是由接XY的两个电位器与一个按键开关构成。XYArduino模拟输入接口,输入值范围0~ 1023。操纵杆保持垂直状态的中心位置时,电位器X/Y轴的值为512左右。以512左右的值为中心,摇动操纵杆X轴,低于512的值时可使电机向一个方向旋转,高于512的值时可控制电机旋转方向反向;将X轴的读取值0-511映射为255-0X轴的读取值512-1023映射为0-255,转换为PWM值控制电机的速度。

        PS/3摇杆Z轴等效于按键开关,当垂直按下摇杆时,为闭合状态,松开时为断开状态。

        【Arduino实验18 智能小车控制装置】_第10张图片

 

7.反馈型移动机器人

        反馈型移动机器人概念

        反馈型智能移动机器人,可以简单地定义为一种实时感知环境信号并进行反馈处理,最终实现智能控制方式将感知和执行动作连接在一起的可自动移动设备,具有在一个位置环境中独立完成某些工作的能力。

        本课程的智能小车是通过传感器感知外界变化的信息,通过主控程序进行分析判断,并通过执行器做出自动反应。

        感知

        机器人由装置的传感器实时收集环境信息,并将信息变化转换为电信号,机器人感知到外部环境的改变。传感器是由主程序控制并不断重复扫描,读取传感器转化来的电信号值及其变化,由编程判断机器人所处的环境状况。

        不同类型的传感器感知特定的环境信息,如超声波传感器获取前方物体的距离,热敏传感器感知环境热源,温度传感器感知环境的温度等。

        动作与执行

        机器人的动作与执行是对外界变化做出的反应。将主程序的指令或传感器获得的电信号通过执行机构完成向声、光、电、位置变化等的转换。如发声、显示、通过电机执行动作等。

        机器智能

        机器人的设计,是将机器人硬件系统、机器人控制程序、机器人所在环境感知与执行结合在一起的智能设备系统。反馈型机器人处在一个动态的环境,对环境的改变能实时做出反应。机器人的智能设计,是基于尽可能全面、精确的传感器感知信号,合理灵活的系统结构设计加上完整、逻辑性强的程序设计共同完成。

        开环控制

        开环控制是当控制系统接收一个输入量后,不对输出量进行检测和反馈,输出与输出之间没有形成反馈环路的控制系统。

        【Arduino实验18 智能小车控制装置】_第11张图片

        闭环控制

        闭环控制是当控制系统接收到一个输入量后,对输出量进行检测,计算实际输出结果和目标输出结果之间的偏差,并将计算偏差通过某种途径变换后反馈回输入端,以抑制内部或外部扰动对输出量的影响。

        【Arduino实验18 智能小车控制装置】_第12张图片

        闭环控制会持续一定的时间,以修正输入端的控制。

        反馈型机器人的控制一般都采用闭环控制,以适应不断变化的环境。如智能巡线智能小车,智能跟随智能小车,自动防撞小车等。

        智能跟随

        智能跟随是机器人预设一个合理的反应距离范围,通过传感器实时测定机器人距离,当在合理距离范围内随着距离的增大并超过设定距离,机器人前进直到距离缩小到反应距离范围内;当机器人距离小于设定合理的反应距离时,机器人后退增到距离直到达到合理距离范围。

        智能跟随机器人距离传感器可用超声波传感器、红外测距传感器、红外避障传感器等。

8.差分技术

        在智能移动机器人应用中,采用两个以上传感器检测环境信息,在运动过程中各个传感器检测到的信息一定有先后、大小、强弱的区别,依靠不同传感器之间、或同一传感器先后接收到的信号之间的差分信号来控制机器人运动方向的技术。

        实现差分信号的传感器在机器人上安装方式必须确保:当机器人方向改变使一个传感器信号逐渐增强时,另一个传感器的输出信号应随着方向改变而逐渐减弱。如红外循迹小车、寻光归航小车、智能跟随小车、红外避障小车、超声波避障小车等都是利用差分技术实现智能控制移动功能。

                【Arduino实验18 智能小车控制装置】_第13张图片

 

        注意,小车从静止启动的转矩不为0,启动时PWM>n,启动的n值需要通过调试确定。通电时由于电机受到阻力>输入PWM值产生的动力,电机不能转动并会发出“嗡嗡”的噪音,电能全部转化为热能,时间过长发热会烧坏电机,因此需要及时停止电机的驱动。

        特别注意,给Arduino开发板上传程序之前,需要将小车车体架起,使车轮悬空,避免启动时车轮运转致小车摔落损坏。

        循迹归航小车

        在智能小车前两侧安装至少2个红外循迹模块,分别位于黑线两侧。更具红外循迹模块检测到的返回值来控制小车的状态。

                【Arduino实验18 智能小车控制装置】_第14张图片

         寻光归航小车

        在小车前的两侧安装两个光敏电阻模块,根据光敏电阻模块获取前方灯光照明的返回值来控制小车的状态。寻光归航小车示意图:

【Arduino实验18 智能小车控制装置】_第15张图片

        运动方向控制程序模块流程图示意图

 【Arduino实验18 智能小车控制装置】_第16张图片

         差分避障小车

        避障行为能够使机器人避开障碍物,以免发生危险。机器人避障行为常采用超声波传感器、红外测距传感器、红外接近开关传感器,通过两个传感器获取返回信号值得强弱来控制小车的状态,编程实现避开障碍物的运动控制。

        【Arduino实验18 智能小车控制装置】_第17张图片

9.小车底盘

        9.1 Arduino小车机器人组件

        【Arduino实验18 智能小车控制装置】_第18张图片

         【Arduino实验18 智能小车控制装置】_第19张图片

                【Arduino实验18 智能小车控制装置】_第20张图片

                 【Arduino实验18 智能小车控制装置】_第21张图片

         【Arduino实验18 智能小车控制装置】_第22张图片

         9.2小车机器人装配

        直流电机的安装固定

            【Arduino实验18 智能小车控制装置】_第23张图片

         电池盒的安装

                【Arduino实验18 智能小车控制装置】_第24张图片

        配件的固定与安装

        小车正面安装固定铜柱,车头使用中铜柱,中部使用长铜柱,车尾使用根短铜柱,并在小车底板背面用圆头螺丝固定。                                                                ​​​​​​​        ​​​​​​​                ​​​​​​​        

                【Arduino实验18 智能小车控制装置】_第25张图片

         万向轮的安装

        ​​​​​​​【Arduino实验18 智能小车控制装置】_第26张图片

         主控板的安装

        ​​​​​​​        【Arduino实验18 智能小车控制装置】_第27张图片

         超声传感器或防撞传感器的安装

        【Arduino实验18 智能小车控制装置】_第28张图片

         9.3 电池使用说明

        (1)要先用专用充电器给18650锂电池充电,充电器指示灯为红灯,指示灯为黄灯(绿灯)表示已充满电。充电时必须有人值守,避免发生意外。

​​​​​​​【Arduino实验18 智能小车控制装置】_第29张图片

        (2)当不用小车的时候要把开关关掉或拔下跳线断电,这样电池不会再放电。

        (3)小车运行约10-20 分钟可能需要充电。小车长期不用时要取下电池,电池长期闲置时候充满电。

        9.4电机上电调试

        (1)上电测试前,必须认真、仔细地确认各模块电源端、接地端连接无误!

        (2)对小车机器人上电测试,遵循先分别测试各独立模块,再进行系统功能调试。

        (3)电机模块上电调试

        将电机驱动模块L298N的EN1/EN2/EN3/EN4接到5V电源、GND,检查确认电机转向正常,否则交换接口方向。

        9.5 传感器上电调试

        黑白线循迹模块调试

        【Arduino实验18 智能小车控制装置】_第30张图片

        黑白线识别模块调试由SW3、SW4 电位器,L3、L2 指示灯以及P3、P2 光电传感器组成。

        (1)P3、P2 光电传感器检测到黑色时,L3、L2 指示灯不亮(输出高电平1)。

        (2)P3、P2 光电传感器检测到白色时,L3、L2 指示灯亮起(输出高电平0)

        (3)SW3 左光电信号强度调节—顺时针调节电位器是增加检测距离,反时针调节电位器时减少检测距离。

        (4)SW4 右光电信号强度调节—顺时针调节电位器是增加检测距离,反时针调节电位器时减少检测距离(同SW3 一样)。

        注意事项:调试时不要对着强光,建议在室内调节,环境光线对检测距离有比较大的影响,此为红外线本身原因。

        避障模块调试

        【Arduino实验18 智能小车控制装置】_第31张图片

         避障模块由SW1(SW2)电位器,L4(L5)指示灯以及LEAS1、RC1(及LEAS2、RC2)红外发射接收对管组成。

        (1)当LEAS1、RC1(及LEAS2、RC2)红外发射接收模块没有检测到障碍物时,L4(L5)指示灯不亮(输出高电平);反之检测到障碍物,L4(L5)指示灯亮起(输出低电平)。

        (2)SW1 左光电信号强度调节—顺时针调节电位器是增加检测距离,反时针调节电位器时减少检测距离。

        (3)SW2 右光电信号强度调节—顺时针调节电位器是增加检测距离,反时针调节电位器时减少检测距离(同SW1 一样)。

        注意事项:调试时不要对着强光,建议在室内调节,环境光线对检测距离有比较大的影响,此为红外线本身原因。

        超声测距模块的调试(略)

10.两轮小车驱动程序示例

        智能小车机器人只有两个驱动轮,一个万向轮,控制两个驱动轮电机的方向、速度就可以实现小车运动动作的控制。

        小车L298N驱动模块电机控制接口IN1/IN2/IN3/IN4,ENA/ENB使能端接口2个,典型运动模式驱动程序示例如下:

//两轮小车驱动程序示例
int leftmotorpin_IN1 = 9;
int lettmotorpin_IN2 = 10;
int ENA = 5;
int rightmotorpin_IN3 = 11;
int rightmotorpin_IN4 = 12;
int ENB = 6;
void setup(){
    pinMode(leftmotorpin_IN1,OUTPUT);
    pinMode(leftmotorpin_IN2,OUTPUT);
    pinMode(rightmotorpin_IN3,OUTPUT);
    pinMode(rightmotorpin_IN4,OUTPUT);
    pinMode(ENA,OUTPUT);
    pinMode(ENB,OUTPUT);
    digitalWrite(leftmotorpin_IN1,LOW);
    digitalWrite(leftmotorpin_IN2,LOW);
    digitalWrite(rightmotorpin_IN3,LOW);
    digitalWrite(rightmotorpin_IN4,LOW);
    analogWrite(ENA,0);analogWrite(ENB,0);}
void loop(){
    forward();//向前进2秒
    delay(2000);
    stop();
    backward();//向后退2秒
    delay(2000);
    stop();
    turnleft();//向左转2秒
    delay(2000);
    stop();
    turnright();//向右转2秒
    delay(2000);
    stop();
    rotateleft();//原地左转2秒
    delay(2000);
    stop();
    rotateright();//原地右转2秒
    delay(2000);
    stop();
}
forward(){
    digitalWrite(leftmotorpin_IN1,HIGH);    //左电机前进    
    digitalWrite(leftmotorpin_IN2,LOW);
    digitalWrite(rightmotorpin_IN3,HIGH);   //右电机前进            
    digitalWrite(rightmotorpin_IN4,LOW);
    analogWrite(ENA,150);        //设定左电机PWM调速值150
    analogWrite(ENB,150);        //设定左电机PWM调速值150}backward(){
    digitalWrite(leftmotorpin_IN1,LOW); 
    digitalWrite(leftmotorpin_IN2, HIGH);    //左电机后退                
    digitalWrite(rightmotorpin_IN3,LOW); 
    digitalWrite(rightmotorpin_IN4, HIGH);   //右电机后退
    analogWrite(ENA,150);        //设定左电机PWM调速值150
    analogWrite(ENB,150);        //设定左电机PWM调速值150}
    turnleft(){digitalWrite(leftmotorpin_IN1,LOW); 
    digitalWrite(leftmotorpin_IN2, HIGH);//左电机后退
    digitalWrite(rightmotorpin_IN3,LOW);   //右电机前进
    digitalWrite(rightmotorpin_IN4, HIGH); //设定左电机速度值小于右电机,向左转    
    analogWrite(ENA,150);        //设定左电机PWM调速值100
    analogWrite(ENB,150);        //设定左电机PWM调速值200
}
turnright(){
    digitalWrite(leftmotorpin_IN1, HIGH);    //左电机前进
    digitalWrite(leftmotorpin_IN2, LOW); 
    digitalWrite(rightmotorpin_IN3, HIGH);   //右电机前进
    digitalWrite(rightmotorpin_IN4, LOW); //设定右电机速度值小于左电机,向右转        
    analogWrite(ENA,150);        //设定左电机PWM调速值200
    analogWrite(ENB,150);        //设定左电机PWM调速值100
}
rotateleft(){
    digitalWrite(leftmotorpin_IN1,LOW);
    digitalWrite(leftmotorpin_IN2, HIGH);//左电机后退
    digitalWrite(rightmotorpin_IN3, HIGH);   //右电机前进
    digitalWrite(rightmotorpin_IN4, LOW); //设定左右电机速度相等,原地转    
    analogWrite(ENA,150);        //设定左电机PWM调速值100
    analogWrite(ENB,150);        //设定左电机PWM调速值100
}
rotateright(){
    digitalWrite(leftmotorpin_IN1, HIGH);    //左电机前进
    digitalWrite(leftmotorpin_IN2, LOW); 
    digitalWrite(rightmotorpin_IN3, LOW);
    digitalWrite(rightmotorpin_IN4, HIGH);//右电机后退//设定左右电机速度相等,原地转    
    analogWrite(ENA,150);        //设定左电机PWM调速值100
    analogWrite(ENB,150);        //设定左电机PWM调速值100
}
stop(){
    digitalWrite(leftmotorpin_IN1, LOW); 
    digitalWrite(leftmotorpin_IN2, LOW); 
    digitalWrite(rightmotorpin_IN3, LOW);   //右电机后退
    digitalWrite(rightmotorpin_IN4, LOW); //设定左右电机速度相等,原地转
    analogWrite(ENA,0);        //设定左电机PWM值为0
    analogWrite(ENB,0);        //设定左电机PWM值为0
}

五、系统调试

        运行结果:

        ​​​​​​​                【Arduino实验18 智能小车控制装置】_第32张图片

六、实验总结

        通过本次实验,我学会了用程序和连接电路控制智能小车,可以让小车循迹,过程中的错误在老师和同学的帮助下改正了,能够正常实现它的功能,收获颇丰。

 

 

         

你可能感兴趣的:(Arduino,单片机,嵌入式硬件,物联网,arduino,c语言)