基于51单片机智能小车循迹功能的实现
基于51单片机智能小车循迹功能的实现目录基于51单片机智能小车循迹功能的实现一、思路(仅供参考)二、部分硬件模块介绍1、L298n电机驱动模块2、两路红外循迹模块三、实现1、代码2、运行视频(...注意:该视频有声音!!!建议先关声音...)四、总结一、思路(仅供参考)本实验采用两路红外循迹模块单黑线循迹的方法。当红外循迹模块未检测到黑线,则前进;若一边检测到黑线,则实现转弯;若两边均检测到黑线,则停止。利用两路红外循迹模块接收到的信号控制电机的运动,实现小车的前进,转弯等运动。
二、部分硬件模块介绍1、L298n电机驱动模块2、两路红外循迹模块背面正面--------------------(黄色的旋钮是用来调节灵敏度的)-----------------------------
三、实现1、代码(1)、函数部分
#include#include"header.h"voidLeft_forward()//左轮前转{Left_1=0;Left_2=1;}voidLeft_back()//左轮后转{Left_1=1;Left_2=0;}voidLeft_stop()左轮停止(刹车){Left_1=1;Left_2=1;}voidRight_forward()//右轮前转{Right_1=1;Right_2=0;}voidRight_back()//右轮后转{Right_1=0;Right_2=1;}voidRight_stop()//右轮停止{Right_1=1;Right_2=1;}voidForward_run()//前进{Left_forward();Right_forward();}voidBack_run()//后退{Left_back();Right_back();}voidLeft_run()//边前进边左转{Left_stop();Right_forward();}voidRight_run()//边前进边右转{Left_forward();Right_stop();}voidStop_run()//停止(刹车){Left_stop();Right_stop();}voidStop_Left_run()//原地左转{Left_back();Right_forward();}voidStop_Right_run()//原地右转{Left_forward();Right_back();}voidPWM_left_motor()//左轮pwm调速{if(Left_motor_varLeft_motor_var=0;}}voidPWM_right_motor()//右轮pwm调速{if(Right_motor_varRight_motor_var=0;}}voidInit_timer0(){TMOD=0x01;//定时器0方式1TH0=(65536-100)/256;//100微秒TL0=(65536-100)%256;EA=1;ET0=1;TR0=1;}voidFollow_Function()//循迹函数{if(Left_reaction==0&&Right_reaction==0)//左右均为检测到黑线(有信号返回)Forward_run();else{if(Left_reaction==1&&Right_reaction==1)//左右无信号返回,均检测到黑线Stop_run();if(Left_reaction==0&&Right_reaction==1)//右边检测到黑线,右转Stop_Right_run();if(Left_reaction==1&&Right_reaction==0)//左转Stop_Left_run();}}(2)、头文件
#ifndef__header_H#define__header_H#includetypedefunsignedintuint;/*L298n电机驱动模块*/sbitLeft_1=P1^2;sbitLeft_2=P1^3;sbitRight_1=P1^4;sbitRight_2=P1^5;sbitENA=P1^0;sbitENB=P1^1;/*红外循迹模块R0、L0*/sbitLeft_reaction=P3^6;sbitRight_reaction=P3^7;externuintLeft_motor_var;//用于左电机周期计数externuintLeft_H;//左电机高电平,用于计算占空比externuintRight_motor_var;externuintRight_H;externuintLeft_cycle;//左电机周期externuintRight_cycle;voidLeft_forward();voidLeft_back();voidLeft_stop();voidRight_forward();voidRight_back();voidRight_stop();voidForward_run();voidBack_run();voidLeft_run();voidRight_run();voidStop_run();voidStop_Left_run();voidStop_Right_run();voidPWM_left_motor();voidPWM_right_motor();voidInit_timer0();voidFollow_Function();voidDelay_1ms(uintk);#endif(3)、主函数
#include#include"header.h"uintLeft_motor_var=0;uintLeft_H=100;uintRight_motor_var=0;uintRight_H=100;uintLeft_cycle=100;uintRight_cycle=100;voidmain(){Init_timer0();while(1){Follow_Function();}}voidtimer_t0()interrupt1{TH0=(65536-100)/256;TL0=(65536-100)%256;Left_motor_var++;Right_motor_var++;PWM_left_motor();PWM_right_motor();}2、运行视频(…注意:该视频有声音!!!建议先关声音…)…注意:该视频有声音!!!……注意:该视频有声音!!!……注意:该视频有声音!!!…(建议调小音量再观看)视频若无法正常播放,可前往主页查看视频资源
51循迹小车运行视频
四、总结第一次做小车,感觉只要搞懂各个模块的实现的原理,做起来就轻松了很多。文章比较简洁,不足之处,还望指出。