搜档网
当前位置:搜档网 › 循迹小车程序1

循迹小车程序1

循迹小车程序1
循迹小车程序1

#include

sbit P00=P1^0; //循迹口

sbit P01=P1^1;

sbit P02=P1^2;

sbit P03=P1^3;

sbit P04=P1^4; //电机1 左轮

sbit P05=P1^5;

sbit P06=P1^6; //电机2

sbit P07=P1^7;

//unsigned int i=0,j=0;

void main()

{

while(1)

{

P04=1;P05=1;P06=1; P07=1;

TMOD=0X01;

EA=1;

ET0=1;

///////////////////////////////////////////////////////////////////////////////////

if(P00==0&&P01==0&&P02==0&&P03==0) // 小车直走定时0.002ms

{

TH0=0XFF; //定时0.01ms

TL0=0xFe;

TR0=1;

}

///////////////////////////////////////////////////////////////////////////////

if(P00==0&&P01==0&&P02==1&&P03==0) //小车右转定时0.005ms

{

TH0=0XFF;

TL0=0Xfb;

TR0=1;

}

if(P00==0&&P01==0&&P02==1&&P03==1) //小车右转定时0.005ms

{

TH0=0XFF;

TL0=0Xfb;

TR0=1;

}

////////////////////////////////////////////////////////////////////////////////////

if(P00==0&&P01==1&&P02==0&&P03==0) //小车左转定时0.005ms

{

TH0=0XFF;

TL0=0XFb;

TR0=1;

}

if(P00==1&&P01==1&&P02==0&&P03==0) //小车左转定时0.005ms

{

TH0=0XFF;

TL0=0XFb;

TR0=1;

}

///////////////////////////////////////////////////////////////////////////////////////

if(P00==1&&P01==1&&P02==1&&P03==1) //全部检测到黑线时车停

{

TH0=0XFF;

TL0=0Xfb;

TR0=1; }

}

}

xiong() interrupt 1

{

if(P00==0&&P01==0&&P02==0&&P03==0) //小车直线快走定时0.002ms

{

TH0=0XFF;

TL0=0xFe;

P04=0; //电机1 左轮

P05=1;

P06=1; //电机2 右转

P07=0;

}

//////////////////////////////////////////////////////////////////////////////////

if(P00==0&&P01==0&&P02==1&&P03==0) //右转特别

{TH0=0XFF;

TL0=0Xfb;

P04=1;

P05=1;

P06=1;

P07=0;

j=0;

}

if(P00==0&&P01==0&&P02==1&&P03==1) // 右转特别

{TH0=0XFF;

TL0=0Xfb;

P04=1;

P05=1;

P06=1;

P07=0;

j=0;

}

/////////////////////////////////////////////////////////////////////////////////////

if(P00==0&&P01==1&&P02==0&&P03==0) // 左转特别{ TH0=0XFF;

TL0=0Xfb;

P04=0;

P05=1;

P06=1;

P07=1;

i=0;

}

if(P00==1&&P01==1&&P02==0&&P03==0) //左转特别

{ TH0=0XFF;

TL0=0Xfb;

P04=0;

P05=1;

P06=1;

P07=1;

i=0;

}

////////////////////////////////////////////////////////////////////////////////////////////

if(P00==1&&P01==1&&P02==1&&P03==1)

{ //全部检测到黑线时车停TH0=0XFF;

TL0=0Xfb;

P04=1;

P05=1;

P06=1;

P07=1;}

}

基于51单片机智能小车循迹程序

#include #define uchar unsigned char #define uint unsigned int ////电机驱动模块位定义//// sbit M11=P0^0; //左轮 sbit M12=P0^1; sbit M23=P0^2; //右轮 sbit M24=P0^3; sbit ENA=P0^4; //左轮使能PWM输入改变dj1数值控制转速sbit ENB=P0^5; //右轮使能PWM输入改变dj2数值控制转速////占空比变量定义//// unsigned char dj1=0; unsigned char dj2=0; uchar t=0; ////红外对管位定义//// sbit HW1=P1^0; //左前方 sbit HW2=P1^1; //右前方 sbit HW3=P1^2; //左后方 sbit HW4=P1^3; //右后方 ////小车前进//// void qianjin() { M11=1; //左轮 M12=0; // M23=1; //右轮 M24=0; // dj1=50; dj2=50; } ////向左微调//// void turnleft2() { M11=1; M12=0; M23=1; M24=0; dj1=7; //左轮 dj2=50; //右轮 } ////向右微调//// void turnright2() { M11=1; M12=0;

M23=1; M24=0; dj1=50; dj2=7; } ////向左大调//// void left() { M11=0; M12=1; M23=1; M24=0; dj1=7; dj2=80; } ////向右大调//// void right() { M11=1; M12=0; M23=0; M24=1; dj1=80; dj2=7; } ////循迹动作子函数//// void xj() { if(HW1==0&&HW2==0&&HW3==0&&HW4==0) //前进逻辑 { qianjin(); } if(HW1==1&&HW2==0&&HW3==0&&HW4==0) //左右微调 { turnleft2(); } if(HW1==0&&HW2==1&&HW3==0&&HW4==0) { turnright2(); } if(HW1==1&&HW2==0&&HW3==1&&HW4==0) //左右大调 { left(); }

智能循迹小车设计与实现

智能循迹小车设计与实现 摘要本文介绍的是基于单片机STC89C52控制智能循迹小车的设计。利用红外对光管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的运动,从而实现自动循迹避障的功能。其中小车的电机由LG9110驱动,整个系统的电路结构简单,可靠性高。 关键词STC89C52 LG9110 红外对光管循迹小车

The manufacture of intelligent tracking car Abstract This articale introduces the design of intelligent tracking car based on the STC89C52 single chip computer.Based infrared detection of black lines and the road obstacles,and use a STC89C52 MCU as the controlling core for the movement.A electronic drived,which can automatic track and avoid obstacle,was designed and fabricated.In which,the electric machinery of car is drived by the LG9110.The electric circuit stuction of whole system is simple,and the function is dependable. Keywords STC89C52 LG9110 Infrared emitting diode Tracking car

基于STC89C52单片机-红外智能循迹小车 (1)

基于STC89C52单片机红外智能循迹小车 实验报告册 学院:电气工程学院 协会:电子科技协会 班级:电气1206 班 姓名:蔡申申 学号:201223910625 联系方式:151 **** ****

摘要 本报告论述了自己参加第八届河南工业大学科技创新大赛——基于STC89C52RC单片机红外智能循迹小车的方案论证、制作过程、调试过程。设计采用STC89C52RC单片机为核心控制器件,采用TCRT5000红外反射式开关传感器作为小车的循迹模块来识别白色路面中央的黑色引导线,采集信号并将信号转换为能被单片机识别的数字信号,单片机获取路面信息后,进行分析、处理,最后控制减速电机转动实现转向。实验表明:该系统抗干扰能力强、电路结构简单、制作成本低,运行平稳、可靠性好。 关键词:STC89C52单片机、反射式光电对管、PWM调速 减速电机

目录 摘要 (2) 1 绪论 (4) 1.1 智能循迹小车概述 (4) 1.1.1 循迹小车的发展历程回顾 (4) 1.1.2 智能循迹分类 (4) 1.1.3 智能循迹小车的应用 (5) 2 智能循迹小车总体设计方案 (5) 2.1 整体设计方案 (5) 2.1.1 系统设计步骤 (5) 2.1.2 系统基本组成 (5) 2.2 整体控制方案确定 (6) 3 系统的硬件设计 (6) 3.1 单片机电路的设计 (6) 3.1.1 单片机的功能特性描述 (6) 3.1.2 晶振电路 (7) 3.1.3 复位电路 (7) 3.2 光电传感器模块 (8) 3.2.1 传感器分布 (8) 3.3 电机驱动电路 (9) 3.3.1 L298N引脚结构 (9) 3.3.2 电机驱动原理 (9) 4 系统的软件设计 (10) 4.1 软件设计的流程 (10) 4.2 本系统的编译器 (10) 5 系统的总体调试 (11) 5.1 硬件的测试 (11) 5.2 系统的软件调试 (11) 结论 (11) 致谢 (11) 参考文献 (12) 附录A 原理图与模块电路图 (12) 附录B 程序代码 (13) 附录C 硬件实物图 (15)

智能循迹小车详细制作过程

(穿山乙工作室)三天三十元做出智能车 基本设计思路: 1.基本车架(两个电机一体轮子+一 个万向轮) 2.单片机主控模块 3.电机驱动模块(内置5V电源输出) 4.黑白线循迹模块 0.准备所需基本元器件 1).基本二驱车体一台。(本课以穿山乙推出的基本车体为 例讲解) 2).5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红 色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40 个。 3).5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一 个;双孔接线柱三个、10u电解电容2个、排针12个、9110 驱动芯片2个。 4).5x7cm洞洞板、LM324比较器芯片各一个;红外对管三 对、4.7K电阻3个、330电阻三个、红色3mmLED三个。 一、组装车体

(图中显示的很清晰吧,照着上螺丝就行了) 二、制作单片机控制模块 材料:5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。 电路图如下,主要目的是把单片机的各个引脚用排针引出来,便于使用。我们也有焊接好的实物图供你参考。(如果你选用的是STC98系列的单片机在这里可以省掉复位电路不焊,仍能正常工作。我实物图中就没焊复位)

三、制作电机驱动模块 材料:5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。 电路图如下,这里我们把电源模块与驱动模块含在了同一个电路板上。因为电机驱动模块所需的电压是+9V左右(6—15V 均可),而单片机主控和循迹模块所需电压均为+5V。 这里用了一个7805稳压芯片将+9V电压稳出+5V电压。

51红外循迹小车报告(舵机版)最终版

简易教程

前言 往届全国大学生电子设计竞赛曾多次出现了集光、机、电于一体的简易智能小车题目,此次,笔者在通过多次论证、比较与实验之后,制作出了简易小车的寻迹电路系统。 整个系统基于普通玩具小车的机械结构,利用小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。系统分为检测、控制、驱动三个模块。首先利用光电对接收管和路面信号进行检测,然后经过比较器处理,对软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。 智能小车能在画有黑线的白纸“路面”上行驶,这是由于黑线和白纸对光线的反射系数不同,小车可根据接收到的反射光的强弱来判断“道路”---黑线,最终实现简单的循迹运动。 个人水平有限,有错误不足之处,还望各位前辈同学多多包含,指出修正,完善。谢谢! 李学云王维 2016年7月27号

目录 前言 (1) 第一部分硬件设计 (1) 1.1 车模选择 (1) 1.2传感器选择 (1) 1.3 控制模块选择 (2) 第二部分软件设计及调试 (3) 2.1 开发环境 (3) 2.2总体框架 (3) 2.3 舵机程序设计与调试 (3) 2.3.1 程序设计 (3) 2.3.2 调试 (3) 2.3.3 程序代码 (4) 2.4 传感器调试 (5) 2.4.1 传感器好坏的检测 (5) 2.4.2 单片机能否识别信号并输出信号 (5) 2.5 综合调试 (7) 附录1 (9) 第一篇舵机(舵机及转向控制原理) (9) 1.1概述 (9) 1.2舵机的组成 (10) 1.3舵机工作原理 (11) 1.4舵机使用中应注意的事项 (12) 1.5如何利用程序实现转向 (12) 1.6舵机测试程序 (13) 附录2 (14) 第二篇光电红外传感器 (14) 2.1传感器的原理 (14) 2.2红外光电传感器ST188 结构图 (15) 2.3传感器的选择 (15) 2.4传感器的安装 (16) 2.5使用方法 (16) 2.7红外传感器输入输出调试程序 (17)

智能循迹小车C程序(完美-详尽)

-----------------------小车运行主程序------------------- -------------------------------------------------------- 简介:@模块组成:红外对管检测模块----五组对管,五个信号采集端口 直流电机驱动模块----驱动两个直流电机,另一个轮子用万向轮 单片机最小系统------用于烧写程序,控制智能小车运动 @功能简介:在白色地面或皮质上用黑色胶带粘贴出路线路径宽度微大于相邻检测管间距。 这样小车便可在其上循迹运行。 @补充说明:该程序采取“右优先”的原则: 即右边有黑线向右转, 若无,前方有黑线,向前走, 若无,左边有黑线,向左转, 若全无,从右方向后转。 程序开头定义的变量的取值是根据我的小车所调试选择好的, 如果采用本程序,请自行调试适合自己小车的合适参数值。 编者:陈尧,黄永刚(江苏大学电气学院二年级,三年级) 1.假定:IN1=1,IN3=1时电机正向转动,必须保证本条件 2.假定:遇到白线输出0,遇到黑线输出1; 如果实际电路是:遇到白线输出1,遇到黑线输出0, 这种情况下只需要将第四,第五句改成: #define m0 1 #define m1 0 即可。 3.说明1:直行---------------速度full_speed_left,full_speed_right. 转弯,调头速度------correct_speed_left,correct_speed_right. 微小校正时---------高速轮full_speed_left,full_speed_right; 低速轮correct_speed. 可以通过调节第六,七,八,九,十条程序,改变各个状态 下的占空比(Duty cycle ),以求达到合适的转弯,直行速度 4.lenth----------length检测到黑线到启动转动的时间间隔 5.width----------mid3在黑线上到脱离黑线的时间差 6.mid3-----------作为判断中心位置是否进入黑线的标志,由于运行的粗糙性和惯性, 常取其他对管的输出信号作为判断条件 7.check_right----若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延

循迹小车基本思路

循迹小车基本思路 1)基本车架:两个直流减速电动机;万向轮一个;模板一块; 2)基本模块:7.2V电源一块;输出为5V的稳压模块一个;单片机最小系统主控模块;L298电机驱动;光电传感器4个。 3)黑线循迹。 4)组装车型: 5)L298驱动内部电路: 6)调试程序:另附~。 #include 7)#define uchar unsigned char

8)#define uint unsigned int 9)sbit PWM1=P1^0; //电机使能10)sbit PWM2=P1^1; 11)sbit IN1=P1^2; //电机输入控制12)sbit IN2=P1^3; 13)sbit IN3=P1^4; 14)sbit IN4=P1^5; 15)sbit RP1=P2^0; //传感器管脚声明16)sbit RP2=P2^1; 17)sbit RP3=P2^2; 18)sbit RP4=P2^3; 19)int num1,num2,s1,s2; 20) 21)void init() 22){ 23)TMOD=0x01; 24)TH0=(65536-1000)/256; 25)TL0=(65536-1000)%256; 26)ET0=1; 27)EA=1; 28)TR0=1; 29)}

30)void delay(uint z) 31){ 32)uint x,y; 33)for(x=z;x>0;x--) 34){for(y=110;y>0;y--);} 35)} 36)void forward1()//电机前进37){ 38)IN1=0; 39)IN2=1; 40)} 41)void forward2() 42){ 43)IN3=0; 44)IN4=1; 45)} 46)void back1() //电机后退47){ 48)IN1=1; 49)IN2=0; 50)} 51)void back2()

基于单片机89c51循迹小车原理与程序

自循迹小车 第一章引言 1.1 设计目的 通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。 1.2 设计方案介绍 该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管的不同状态判断小车当前状态,通过pid控制发出控制命令,控电机的工作状态以实现对小车姿态的控制。 1.3 技术报告内容安排 本技术报告主要分为三个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。

第二章技术方案概要说明 本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块. 在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对单片机、光电管提供5V电压,对电机提供6V电压 路径识别电路由3对光电发送与接收管组成。由于路面存在黑色引导线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进而在光电接收管两端产生不同的电压值,由此判断路线的走向。传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。 单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。 电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM 调速

智能循迹小车分析方案

智能循迹小车设计 专业:自动化 班级:0804班 姓名: 指导老师: 2018年8月——2018年10月 摘要:

本课题是基于AT89C52单片机的智能小车的设计与实现,小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以 AT89S52 单片机为系统控制处理器;采用红外传感获取赛道的信息,来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。 引言

当今世界,传感器技术和自动控制技术正在飞速发展,机械、电气和电子信息已经不再明显分家,自动控制在工业领域中的地位已经越来越重要,“智能”这个词也已经成为了热门词汇。现在国外的自动控制和传感器技术已经达到了很高的水平,特别是日本,比如日本本田制作的机器人,其仿人双足行走已经做得十分逼真,而且具有一定的学习能力,还据说其智商已达到6岁儿童的水平。 作为机械行业的代表产品—汽车,其与电子信息产业的融合速度也显著提高,呈现出两个明显的特点:一是电子装置占汽车整车<特别是轿车)的价值量比例逐步提高,汽车将由以机械产品为主向高级的机电一体化方向发展,汽车电子产业也很有可能成为依托整车制造业和用车提升配置而快速成为新的增长点;二是汽车开始向电子化、多媒体化和智能化方向发展,使其不仅作为一种代步工具、同时能具有交通、娱乐、办公和通讯等多种功能。 无容置疑,机电一体化人才的培养不论是在国外还是国内,都开始重视起来,主要表现在大学生的各种大型的创新比赛,比如:亚洲广播电视联盟亚太地区机器人大赛

智能循迹小车C程序完美详尽

/*------------------------------------------------------ -----------------------小车运行主程序------------------- -------------------------------------------------------- 简介:@模块组成:红外对管检测模块----五组对管,五个信号采集端口 直流电机驱动模块----驱动两个直流电机,另一个轮子用万向轮 单片机最小系统------用于烧写程序,控制智能小车运动 @功能简介:在白色地面或皮质上用黑色胶带粘贴出路线路径宽度微大于相邻检测管间距。 这样小车便可在其上循迹运行。 @补充说明:该程序采取“右优先”的原则: 即右边有黑线向右转, 若无,前方有黑线,向前走, 若无,左边有黑线,向左转, 若全无,从右方向后转。 程序开头定义的变量的取值是根据我的小车所调试选择好的, 如果采用本程序,请自行调试适合自己小车的合适参数值。 编者:陈尧,黄永刚(江苏大学电气学院二年级,三年级) 1.假定:IN1=1,IN3=1时电机正向转动,必须保证本条件 2.假定:遇到白线输出0,遇到黑线输出1; 如果实际电路是:遇到白线输出1,遇到黑线输出0, 这种情况下只需要将第四,第五句改成: #define m0 1 #define m1 0 即可。 3.说明1:直行---------------速度full_speed_left,full_speed_right. 转弯,调头速度------correct_speed_left,correct_speed_right. 微小校正时---------高速轮full_speed_left,full_speed_right; 低速轮correct_speed. 可以通过调节第六,七,八,九,十条程序,改变各个状态 下的占空比(Duty cycle ),以求达到合适的转弯,直行速度 4.lenth----------length检测到黑线到启动转动的时间间隔 5.width----------mid3在黑线上到脱离黑线的时间差 6.mid3-----------作为判断中心位置是否进入黑线的标志,由于运行的粗糙性和惯性, 常取其他对管的输出信号作为判断条件 7.check_right----若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延

循迹小车Arduino 程序

//循迹小车Arduino 程序: // R是右(right),L是左(left) 小车对着自己看时分的左右int MotorRight1=14; //A0 IN1 int MotorRight2=15; //A1 IN2 int MotorLeft1=16; //A2 IN3 int MotorLeft2=17; //A3 IN4 int MotorRPWM=5; //PWM 5 int MotorLPWM=3; //PWM 3 const int SensorLeft = 2; //左感測器輸入腳 const int SensorRight = 6; //右感測器輸入腳 int SL; //左感測器狀態 int SR; //右感測器狀態 void setup() { Serial.begin(9600); pinMode(MotorRight1, OUTPUT); // 腳位 14 (PWM) pinMode(MotorRight2, OUTPUT); // 腳位 15 (PWM) pinMode(MotorLeft1, OUTPUT); // 腳位 16 (PWM) pinMode(MotorLeft2, OUTPUT); // 腳位 17 (PWM) pinMode(MotorLPWM, OUTPUT); // 腳位 3 (PWM) pinMode(MotorRPWM, OUTPUT); // 腳位 5 (PWM)

pinMode(SensorLeft, INPUT); //定義左感測器 pinMode(SensorRight, INPUT); //定義右感測器 } void loop() { SL = digitalRead(SensorLeft); SR = digitalRead(SensorRight); if (SL == LOW&&SR==LOW)// 前進 { digitalWrite(MotorRight1,LOW);//IN1 右电机高电平反转 digitalWrite(MotorRight2,HIGH);//IN2 右电机高电平正转 analogWrite(MotorRPWM,130); //0---100--250 digitalWrite(MotorLeft1,LOW);//IN3 左电机高电平正转 digitalWrite(MotorLeft2,HIGH);//IN4 左电机高电平反转 analogWrite(MotorLPWM,130); } else // R是右(right),L是左(left) 小车对着自己看时分的左右 { if (SL == HIGH & SR == LOW)// 左白右黑, 快速左轉 { delay(1);

51单片机循迹小车程序

/*功能:寻迹小车 使用芯片:AT89S52或者STC89C52 或A T89S51 STC89C51 晶振:12MHZ 编译环境:Keil 作者:MH~?*/ #include <reg51、h>// 引用标准库得头文件 #include #define ucharunsignedchar #defineuintunsigned int //=================电机驱动===================== sbit dianji_r = P3^0;//右边电机控制口,低电平转? sbitdianji_l= P3^7;//左边电机控制口,低电平转 //=============循迹感应接口====================== sbit xjmk_r=P3^2;// 右边寻迹模块检测口INT0 sbit xjmk_l= P3^3;// 左边寻迹模块检测口INT1 void check_righet();//右边时候检测到黑线测试程序 voidcheck_left();//左边时候检测到黑线测试程序 void delay_50us(uint t); void delayms(uintMs); ucharr_count;//右边传感器检测到得次数计数单元 uchar l_count; uint time; //***********************主程序****************************** main() { time=50; dianji_r=0;//上电时右侧电机运行 dianji_l=0;//上电时左侧电机运行 EA=1; EX1=1; EX0=1; IT1=0; IT0=0; xjmk_r=1;//置IO为1,准备读取数据 xjmk_l=1; _nop_(); r_count=0; l_count=0; while(1) { _nop_(); //check_righet();//调用右边寻迹检测传感器 //check_left();//

智能循迹小车程序代码

/**************************************************************** ************ 硬件连接 P1_4接驱动模块ENA使能端,输入PWM信号调节速度 P1_5接驱动模块ENB使能端,输入PWM信号调节速度 P1_0 P1_1接IN1 IN2 当P1_0=1,P1_1=0; 时左电机正转驱动蓝色输出 端OUT1 OUT2接左电机 P1_0 P1_1接IN1 IN2 当P1_0=0,P1_1=1; 时左电机反转 P1_2 P1_3接IN3 IN4 当P1_2=1,P1_3=0; 时右电机正转驱动蓝色输出 端OUT3 OUT4接右电机 P1_2 P1_3接IN3 IN4 当P1_2=0,P1_3=1; 时右电机反转 P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 八路寻迹传感器有信号(白线)为0 没有信号(黑线)为1 ***************************************************************** ***********/ #include #define Right_moto_pwm P1_4 //接驱动模块ENA使能端,输入PWM 信号调节速度 #define Left_moto_pwm P1_5 //接驱动模块ENB使能端,输入PWM 信号调节速度 #define Left_1_led P2_0 //四路寻迹模块接口第一路 #define Left_2_led P2_1 //四路寻迹模块接口第二路 #define Right_1_led P2_2 //四路寻迹模块接口第三路 #define Right_2_led P2_3 //四路寻迹模块接口第四路 #define Left_moto_go {P1_0=0,P1_1=1;} //左电机前进 #define Left_moto_back {P1_0=1,P1_1=0;} //左电机后退 #define Left_moto_stop {P1_0=1,P1_1=1;} //左电机停转 #define Right_moto_go {P1_2=0,P1_3=1;} //右电机前转

智能循迹小车设计

智能循迹/避障小车研究 工作报告 一、智能循迹小车程序结构框图 二、Proteus仿真图 三、软件程序设计

一、智能循迹小车程序结构框图 经过几天在网上的查找,对智能循迹/避障小车有了大致的了 解, 一般有三个模块: 1、最基本的小车驱动模块,使用两个二相四线步进电机对小车的两个后轮分别进行驱动,前轮最好用万向轮,能使小车更好地转弯; 2、小车循迹模块,在小车底部有三个并排安装的红外对管,对黑色与白色的反射信号不同,经单片机处理后对小车进行相应处理; 3、避障模块,我写的程序中对于避障模块是用中断来处理的(即安装在小车车头的红外对管检测到有障碍物后,就会向单片机的P3_2口输出一个高电平或是低电平,这时中断程序将对小车进行预先设定好的避障处理),但是在程序结构框图中,我不太会表示中断处理方式,所以就用查询的方式画了。

N Y N Y 二、Proteus 仿真图 我用Proteus 大概地仿真了小车的运行状态。图中的两个二相四线步进电机就代表小车的左右轮(假定步进电机顺时针转动方向为小车前进方向),网上有很多种驱动芯片,在仿真时我只使用L298N 芯

片来驱动步进电机。用三个单刀双制开关模拟用于小车循迹的三个红外对管的输出信号,经一个与门与三极管开关连接到P3_3口,中断程序对P1_0, P1_1, P1_2三个口进行检测,并做出相应处理。同时因为避障模块的优先级高于循迹模块,所以将外部中断0用于避障,外部中断1用于循迹。P1_3口则用于检测小车是否到达终点。 1、小车驱动模块: 使用一片298芯片驱动一个二相四线步进电机,电机的电压为12V。

51单片机循迹小车程序

/*功能:寻迹小车 使用芯片:AT89S52 或者STC89C52 或AT89S51 STC89C51 晶振:12MHZ 编译环境:Keil 作者:MH~ */ #include // 引用标准库的头文件 #include #define uchar unsigned char #define uint unsigned int //=================电机驱动===================== sbit dianji_r = P3^0; //右边电机控制口,低电平转? sbit dianji_l = P3^7; //左边电机控制口,低电平转 //=============循迹感应接口====================== sbit xjmk_r = P3^2;// 右边寻迹模块检测口INT0 sbit xjmk_l = P3^3;// 左边寻迹模块检测口INT1 void check_righet();//右边时候检测到黑线测试程序 void check_left();//左边时候检测到黑线测试程序 void delay_50us(uint t); void delayms(uint Ms); uchar r_count;//右边传感器检测到的次数计数单元 uchar l_count; uint time; //***********************主程序****************************** main() { time=50; dianji_r=0;//上电时右侧电机运行 dianji_l=0;//上电时左侧电机运行 EA=1; EX1=1; EX0=1; IT1=0; IT0=0;

智能循迹小车程序

智能循迹小车程序 Document number:BGCG-0857-BTDO-0089-2022

#include<> #define uchar unsigned char #define uint unsigned int //D0-D7:f,b,a,e,d,h,c,g 共阴依次编码 //74LS04反相器驱动数码管 uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7}; uchar i = 0; //用于0-3数码管轮流显示uint j = 0; //计时的次数 uint time=0; //计时 uint pwm=16; //占空比 uint speed; //调制PWM波的当前的值 sbit R=P3^2; //右边传感器 P3^2 sbit L=P3^3; //左边传感器 P3^3 //电机驱动口定义 sbit ENB=P1^0; //前轮电机停止控制使能 sbit ENA=P1^1; //后轮控制调速控制端口 sbit IN1=P1^2; //前轮 sbit IN2=P1^3; //前轮 sbit IN3=P1^4; //后轮

sbit IN4=P1^5; //后轮 void Init() { TMOD = 0x12; //定时器0用方式2,定时器1用方式1 TH0=(256-200)/256; //pwm TL0=(256-200)/256; TH1 = 0x0F8; //定时2ms TL1 = 0x30; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } void tim0(void) interrupt 1 //产生PWM { speed ++; if(speed <= pwm) //pwm 就相当于占100的比例{ ENA = 1; }

循迹小车(程序)

附录程序 目录 一、前言------------------------------------------------------------ 二、小车功能------------------------------------------------------ 三、元器件选择-------------------------------------------------- 四、I/O分配及硬件连接简图--------------------------------- 五、相关模块、算法--------------------------------------------- 六、系统框图------------------------------------------------------ 七、调试过程------------------------------------------------------ 八、小车图片资料--------------------------------------------------- 九、讲座所感------------------------------------------------------ 十、实习总结------------------------------------------------------

一、前言 感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。 之前我们本来商量是不是可以拿往年电子设计大赛的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。在网上选购单片机最小系统的时候,发现有一家商铺的最小系统上集成了红外模块,就想着不要浪费了,就萌生了做遥控车的想法,这样系统可以实现两个功能一个是类似于“光影魔术手”一样的物体追踪功能,一个是遥控运行功能。 组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始熟悉开发环境keil uvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。 二、小车具体功能 1、小车系统功能简述 接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。 控制系统方框图: 超声波测距追踪:

智能循迹小车总体设计方案

智能循迹小车总体设计方案 整体设计方案 本系统采用简单明了的设计方案。通过高发射功率红外光电二极管和高灵敏度光电晶体管组成的传感器循迹模块黑线路经,然后由AT89S52通过IO口控制L298N驱动模块改变两个直流电机的工作状态,最后实现小车循迹。 系统设计步骤 (1)根据设计要求,确定控制方案; (2)将各个模块进行组装并进行简单调试; (3)画出程序流程图,使用C语言进行编程; (4)将程序烧录到单片机内; (5)进行调试以实现控制功能。 系统基本组成 智能循迹小车主要由AT89S52单片机电路、循迹模块、L298N驱动模块、直流电机、小车底板、电源模块等组成。 (1)单片机电路:采用AT89S52芯片作为控制单元。AT89S52单片机具有低成本、高性能、抗干扰能力强、超低功耗、低电磁干扰,并且与传统的8051单片机程序兼容,无需改变硬件,支持在系统编程技术。使用ISP可不用编程器直接在PCB板上烧录程序,修改、调速都

方便。 (2)循迹模块:采用脉冲调制反射红外发射接收器作为循迹传感器,调制信号带有交流分量,可减少外界的大量干扰。信号采集部分就相当于智能循迹小车的眼睛,有它完成黑线识别并产生高、低平信号传送到控制单元,然后单片机生成指令来控制驱动模块来控制两个直流电机的工作状态,来完成自动循迹。 (3)L298N驱动模块:采用L298N作为点击驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便、稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。

PWM调速+循迹--智能小车程序

//T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K的上拉电阻。 /* 晶振采用12M,产生的PWM的频率约为100Hz */ #include #include #define uchar unsigned char #define uint unsigned int sbit en1=P3^4; /* L298的Enable A */ sbit en2=P3^5; /* L298的Enable B */ sbit s1=P1^0; /* L298的Input 1 */ sbit s2=P1^1; /* L298的Input 2 */ sbit s3=P1^3; /* L298的Input 3 */ sbit s4=P1^2; /* L298的Input 4 */ sbit R=P2^0; sbit C=P2^1; sbit L=P2^2; sbit key=P1^4; uchar t=0; /* 中断计数器*/ uchar m1=0; /* 电机1速度值*/ uchar m2=0; /* 电机2速度值*/ uchar tmp1,tmp2; /* 电机当前速度值*/ /* 电机控制函数index-电机号(1,2); speed-电机速度(0-100) */ void motor(uchar index, char speed) { if(speed<=100) { if(index==1) /* 电机1的处理*/ { m1=abs(speed); /* 取速度的绝对值*/ s1=1; s2=0; } if(index==2) /* 电机2的处理*/ { m2=abs(speed); /* 电机2的速度控制*/ s3=1; s4=0; } } } void Back(void)

智能循迹小车详细源代码程序MSPID

巡线车程序(完整版) 1 #ifndef _Macro.h_ 2 #define _Macro.h_ 3 #include 4 #include 5 #define uchar unsigned char 6 #define uint unsigned int 7 #define one 11.11 8 #define LMAX 1999 9 #define RMAX 3999 10 #define CPU_F ((double)8000000) 11 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 12 13 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 14 #define PC 20 // 比例放大系数 15 #define IC 0 //积分放大系数 16 #define DC 85 //大系数 17 #define LEFTOUT TACCR1 18 #define RIGHTOUT TACCR2 19 #define SensorIn P5IN 20 #define F 5000//5000hz 21 #define Period (8000000/F) 22 #define EnableLeftPos P3OUT|=BIT1 23 #define UnenableLeftPos P3OUT&=~BIT1 24 25 #define EnableLeftNeg P3OUT|=BIT0 26 #define UnenableLeftNeg P3OUT&=~BIT0 27 28 #define EnableRightPos P3OUT|=BIT2 29 #define UnenableRightPos P3OUT&=~BIT2 30 31 #define EnableRightNeg P3OUT|=BIT3 32 #define UnenableRightNeg P3OUT&=~BIT3 33 34 #define Basic_Left 100//百分之八十 35 #define Basic_Right 100//Basic_Left 36 #define MAX (100) 37 #define MIN (-100) 38 #define foreward 1 39 #define backward 0

相关主题