智能寻迹小车制作

发布者:shtlsw最新更新时间:2015-01-15 来源: 51hei关键字:智能寻迹小车  51单片机  最小系统 手机看文章 扫描二维码
随时随地手机看文章

刚学单片机的时候做的一个智能小车,现在把当时的一些资料整理了一下,希望对刚入门的童鞋有帮助!

1、下图为单片机的最小系统,可以自己用万用板焊接,顺便练练焊接能力也不错的。本设计采用了51单片机,网上关于51单片机的资料有一大堆,大伙可以从它来入门,推荐郭天祥的视频(我就是跟着他学的),讲的挺详细的。

       2、这一部分来介绍下驱动电路,如下图所示为驱动电路的原理图,采用的是L298驱动芯片,一般的智能小车这个芯片用的比较多,控制起来也比较简单:芯片两个使能端输入高电平(有效电平),再给其余的两个引脚(比如P1+,P1-)输入一高一低就能让电机正反转从而控制小车的前进后退,当然也可以在EN端输入PWM信号来控制小车的速度,PWM信号可以由芯片的相应引脚输出,51单片机不能直接输出PWM信号,可以用定时器来实现也很方便的。

       3、下面来介绍下循迹传感器。循迹模块用的是红外对管,正常情况下发射端发出的光线可以被接收端接收到接收端导通输出低电平,而当遇到黑线后,黑线吸收了发射端发射的光线,输出高电平;输出的高低电平经过电压比较器比较输出后来判断小车的哪个传感器在黑线之上,得到小车的位置信息(看起来很简单大家要动手做才有意思)。


4、下面我把源代码贴出来,感兴趣的童鞋可以看看希望有豪帮助!
  • 以下是“CarDrive.c”文件中的源程序:
#include "CarDrive.h"
 
//左电机正转 
void LeftMotorCorotation(void)
{
LeftMotor_1 = 1;
LeftMotor_2 = 0;
}
 
//左电机反转 
void LeftMotorRollback(void)
{
LeftMotor_1 = 0;
LeftMotor_2 = 1;
}
 
//右电机正转 
void RightMotorCorotation(void)
{
RightMotor_1 = 1;
RightMotor_2 = 0;
}
 
//右电机反转 
void RightMotorRollback(void)
{
RightMotor_1 = 0;
RightMotor_2 = 1;
}
 
//小车前进 
void CarGoAhead(void)
{
LeftMotorCorotation();
RightMotorRollback();
}
 
 
//小车慢速左拐 
void CarTurnLeft_Low(void)
{
LeftMotor_1 = 0;
LeftMotor_2 = 0;
RightMotorRollback();
}
 
//小车慢速右拐
void CarTurnRight_Low(void)
{
RightMotor_1 = 0;
RightMotor_2 = 0;
LeftMotorCorotation();
 
//小车快速左拐 
void CarTurnLeft_High(void)
{
LeftMotorRollback();
RightMotorRollback();
}
 
//小车快速右拐
void CarTurnRight_High(void)
{
LeftMotorCorotation();
RightMotorCorotation();
 
 
//小车道路判断 
void CarRoadJudge(void)
{
if(LeftPhotoelectricCell_1&&(!LeftPhotoelectricCell_2)&&(!RightPhotoelectricCell_2)&&RightPhotoelectricCell_1)
CarGoAhead();
if(LeftPhotoelectricCell_1&&(!LeftPhotoelectricCell_2)&&RightPhotoelectricCell_2&&RightPhotoelectricCell_1)
CarGoAhead();
if(LeftPhotoelectricCell_1&&LeftPhotoelectricCell_2&&(!RightPhotoelectricCell_2)&&RightPhotoelectricCell_1)
CarGoAhead();
if((!LeftPhotoelectricCell_1)&&(!LeftPhotoelectricCell_2)&&RightPhotoelectricCell_2&&RightPhotoelectricCell_1)
CarTurnLeft_Low();
if(LeftPhotoelectricCell_1&&LeftPhotoelectricCell_2&&(!RightPhotoelectricCell_2)&&(!RightPhotoelectricCell_1))
CarTurnRight_Low();
if((!LeftPhotoelectricCell_1)&&LeftPhotoelectricCell_2&&RightPhotoelectricCell_2&&RightPhotoelectricCell_1)
CarTurnLeft_High();
if(LeftPhotoelectricCell_1&&LeftPhotoelectricCell_2&&RightPhotoelectricCell_2&&(!RightPhotoelectricCell_1))
CarTurnRight_High();
if(LeftPhotoelectricCell_1&&LeftPhotoelectricCell_2&&RightPhotoelectricCell_2&&RightPhotoelectricCell_1)
//CarTurnRight_Low();
CarGoAhead();
if((!LeftPhotoelectricCell_1)&&(!LeftPhotoelectricCell_2)&&(!RightPhotoelectricCell_2)&&(!RightPhotoelectricCell_1)) 
CarGoAhead();
}
 
 
  • 以下是“CarDrive.h”文件中的源程序:
#ifndef _CarDrive_H_
#define _CarDrive_H_
 
#include
#define uint unsigned int
#define uchar unsigned char
 
sbit LeftMotor_1 = P0^0;
sbit LeftMotor_2 = P0^1;
sbit RightMotor_1 = P0^2;
sbit RightMotor_2 = P0^3;
 
sbit LeftPhotoelectricCell_1   = P3^0;
sbit LeftPhotoelectricCell_2   = P3^1;
sbit RightPhotoelectricCell_2  = P3^2;
sbit RightPhotoelectricCell_1  = P3^3;
 
void CarGoAhead(void);
//void CarBackOff(void);
void CarTurnLeft_Low(void);
void CarTurnRight_Low(void); 
void CarTurnLeft_High(void);
void CarTurnRight_High(void);
//void CarBrake(void);
void CarRoadJudge(void);
 
 
 
#endif
 
 
  • 以下是“main.h”中的程序:
#ifndef _main_H_
#define _main_H_
 
#include
#include "CarDrive.h"
 
#define uint unsigned int
#define uchar unsigned char
 
#endif
 
  • 以下是“main.c”中的程序:
#include "main.h"
 
void main(void)
{
while(1)
{
CarRoadJudge();
}
}
5、下面是小车的视频
 
总结:好了,电路图、程序源码、视频都在这了,大家多动手才是,最后感谢童鞋们花费宝贵的时间来浏览我的博客,我是“香莲清风”咱们下次见!
关键字:智能寻迹小车  51单片机  最小系统 引用地址:智能寻迹小车制作

上一篇:4*4矩阵键盘的扫描原理
下一篇:用51单片机中断编写的4x4键盘程序

推荐阅读最新更新时间:2024-03-16 13:51

如何实现eView触摸屏与51单片机之间的通信
Modbus协议由于其具有开放性、透明性、成本低、易于开发等特点,已成为当今工业领域通信协议的首选。 本文介绍了一种基于Modbus通信协议的eView触摸屏与常用的51单片机的通信方法。该方法通过C51编程实现Modbus通信,在51系列单片机上具有通用性,有一定的借鉴作用。 工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。 触摸屏与单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推
[单片机]
如何实现eView触摸屏与<font color='red'>51单片机</font>之间的通信
51单片机点亮一盏LED灯的原理解析
首先应该了解51单片机最小系统:51最小系统也称为51最小应用系统,是指用最少的元件组成的51单片机可以工作的系统。如图2.1.1所示,51最小系统一般应该包括:单片机、晶振电路、复位电路。 晶振电路的原理及组成,作用: 在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周
[单片机]
51单片机串口检测程序
#i nclude "reg51_STC.H" #define uchar unsigned char #define uint unsigned int //-------------------------------------------------------------------------- //函数名称: UART_Init() //函数功能: 串口初始化函数,在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s //其他说明: 串口接收中断允许,发送中断禁止 //-------------------------------------------------------------
[单片机]
学习笔记之-51单片机特殊功能寄存器
一.前言 学习51单片机的过程中,其实就是学习怎么用它的特殊功能寄存器(有些寄存器是我们看不到的),特殊功能寄存器是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。我们写程序驱动硬件其实就是配置各种各样的寄存器,他是软硬件的最底层的一个接口。更加深入了解寄存器的工作过结构原理会在后面的内容中补充,这里只是把最常用的做一个整理,方便学习查阅。 51单片机内部共有21个SFR,其布局如图:    上面就是51系列单片机21个特殊功能的寄存器,我们可以根据是否可以位寻址把这些寄存器分成2类,这里先简单说一下什么是为寻址吧,从图中可以看出,每个SFR占1个字节,多数字节单元中的每一位又有专用的“
[单片机]
学习笔记之-<font color='red'>51单片机</font>特殊功能寄存器
51单片机定时器中断基础
一、中断概念 中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。 把自己想象成单片机的CPU,你正在洗衣服,但是突然快递小哥给你打电话让你去拿快递,于是你停下洗衣服去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。 51单片机有五个中断源 INT0——外部中断0 INT1——外部中断1 T0——定时器/计数器0中断 T1——定时器/计数器1中断 TI/RI——串行口中断 二、使用中断的过程(下面以定时器0、工作方式1为例) 定时器0选择工作方式1 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 G
[单片机]
MCS-51单片机内部数据存储器的RAM结构详细解析
内部数据存储器低128单元 8051单片机的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。如图所示为低128单元的配置图。 寄存器区 8051共有4组寄存器,每组8个寄存单元(各为8),各组都以R0~R7作寄存单元编号。寄存器常用于存放操作数中间结果等。由于它们的功能及使用不作预先规定,因此称之为通用寄存器,有时也叫工作寄存器。4组通用寄存器占据内部RAM的00H~1FH单元地址。 在任一时刻,CPU只能使用其中的一组寄存器,并且把正在使用的那组寄存器称之为当前寄存器组。到底是哪一组,由程序状态字寄存器PSW中RS1、R
[单片机]
MCS-<font color='red'>51单片机</font>内部数据存储器的RAM结构详细解析
51单片机学习———3--蜂鸣器
原理 蜂鸣器介绍 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。 多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音,非常简单。 蜂鸣器控制 改变单片机引脚输出
[单片机]
<font color='red'>51单片机</font>学习———3--蜂鸣器
MCS-51单片机与CPLD/FPGA接口逻辑设计
在功能上,单片机与大规模CPLD有很强的互补性。单片机具有性能价格比高、功能灵活、易于人机对话、良好的数据处理能力潍点;CPLD/FPGA则具有高速、高可靠以及开发便捷、规范等优点。以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中仍将被广泛应用。本文就单片机与CPLD/FPGA的接口方式作一简单介绍,希望对从事单片机和CPLD/FPGA研发的朋友能有所启发。 单片机与CPLD/FPGA的接口方式一般有两种,即总线方式与独立方式,分别说明如下: 一、总线方式 单片机以总线方式与CPLD/FPGA进行数据与控制信息通信有许多优点。 (1)速度快。如图一所示,其通信工作时序是纯硬件行为,对于MCS-51单片机,只需一条单字节
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved