循迹避障一体小车 利用光电传感(红外对射管,红外发射与接收二极管组成)检测黑白线,实现小车能跟着白线(或黑线)行走,同时也可避开障碍物,即小车寻迹过程中,若遇障碍物可自行绕开,绕开后继续寻迹。 循迹光电传感器原理,利用黑白线对红外线不同的反射能力。然后通过光敏二极管或光敏三极管,接收反射回的不同光强信号,把不同光强转换为电流信号,最后通过电阻,转换为单片机可识别的高低电平。光电传感器实现循迹的基本电路如下图所示  、 循迹传感器基本电路 电路解释:TC端是传感器工作控制端,为高电平时,发光二极管不工作,传感器休眠,为低电平时,传感器启动。Signal端为检测信号输出,当遇到黑线,黑线吸收大量的红外线,反射的红外线很弱,光敏三极管不导通,signal输出高电平,当遇到白线,与黑线相反,反射的红外线很强,使光敏三极管导通,signal输出低电平。 寻迹部分 调整左右传感器之间的距离,两探头距离约等于白线宽度最合适,一般白线宽度选择范围为3 – 5 厘米比较合适。注意:该传感器的灵敏度是可调的,偶尔传感器遇到白线却不能送出相应的信号,通过调节传感器上的可调电阻,适当的增大或减小灵敏度。另外,循迹传感器的安放也算是比较有讲究的,有两种方法,一种是两个都是放置在白线内侧但紧贴白线边缘,第二种是都放置在白线的外侧,同样紧贴白线边缘。我们通常采用第二种方法。 编写程序使小车遇白线时,小车跟着白线走。当小车先前前进时,如果向左偏离了白线。那么右边传感器会产生一个低电平,单片机判断这个信号,然后向右拐。回到白线后。两传感器输出信号为高电平。小车前进。如果小车向右偏离白线,左边传感器产生一个低电平,单片机判断这个信号,然后向左拐。如此如此,小车必不偏离白线。若小车的两对光电传感器同时输出的信号为高电平(黑底)或低电平(白底),即单片机判断的都为高电平或低电平,小车向前直走,在此过程中(直走)小车若遇白线,小车又重复上面动作跟着白线走。 避障部分 当小车在寻迹(沿着白线走或直走)过程中遇障碍物,小车亦可自行转弯,转弯动作完成后,又继续寻迹。 电机驱动芯片采用L298N,是一款承受高压大电流的全桥型直流/步进电压驱动器,如下图 电机控制芯片L298N的引脚排列
L298N引脚编号与功能
L298N内部原理图 电机驱动A/B的控制逻辑如下表所示 电机驱动A/B的工作原理 电机控制逻辑如下:以电机A为例,当使能端A为高电平是,如果输入端M1 Direction引脚为高电平,三极管导通,输入引脚1为低电平而输入引脚2为高电平,电机A反转;如果输入端M1 Direction引脚为底电平,三极管截止,输入引脚1为高电平而输入引脚2为低电平,电机A正转。
电机驱动原理图
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块。其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字,也可完成图形显示。具有低电压低功耗特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: 低电源电压(VDD:+3.0--+5.5V)
显示分辨率:128×64点
内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
内置 128个16×8点阵字符
2MHZ时钟频率
显示方式:STN、半透、正显
驱动方式:1/32DUTY,1/5BIAS
视角方向:6点
背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
通讯方式:串行、并口可选
内置DC-DC转换电路,无需外加负压
无需片选信号,简化软件设计
工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃
模块接口说明:
*注:1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接;2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空;3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 引脚控制信号应用 D/I,R/W的配合选择决定控制界面的4种模式:
D/I | R/W | 功能说明 | L | L | MPU写指令到指令暂存器(IR) | L | H | 读出忙标志(BF)及地址记数器(AC)的状态 | H | L | MPU写入数据到数据暂存器(DR) | H | H | MPU从数据暂存器(DR)中读出数据 |
E信号操作: E状态 | 执行动作 | 结果 | 高——>低 | I/O缓冲——>DR | 配合/W进行写数据或指令 | 高 | DR——>I/O缓冲 | 配合R进行读数据或指令 | 低/低——>高 | 无动作 |
|
内部寄存器信号 ● 忙标志:BF
BF标志提供内部工作情况,BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态。 ●字型产生ROM(CGROM)
字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DFF 的状态是指令DISPLAY ON/OFF和D/IT信号控制的。 ● 显示数据RAM(DDRAM)
模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在此阶段0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。 ●字型产生RAM(CGRAM)
字型产生RAM提供图象定义(造字)功能,可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。 ● 地址计数器AC
地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当D/I为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。 ●光标/闪烁控制电路
此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。 指令操作 模块控制芯片提供两套控制命令,基本指令和扩充指令如下: 指令表1:(RE=0:基本指令) 指令 | 指 令 码 | 功 能 | D/I | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 清除 显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H" | 地址 归位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | 设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容 | 显示状态
开/关 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D=1: 整体显示 ON C=1: 游标ON B=1:游标位置反白允许 | 进入点设定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位 | 游标或显示移位控制 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X | 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 | 功能
设定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | DL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 | 设定CGRAM地址 | 0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定CGRAM 地址 | 设定DDRAM地址 | 0 | 0 | 1 | 0 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定DDRAM 地址(显示位址) 第一行:80H-87H 第二行:90H-97H | 读取忙标志和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值 | 写数据到RAM | 1 | 0 | 数据 | 将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) | 读出RAM的值 | 1 | 1 | 数据 | 从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM) |
指令表2:(RE=1:扩充指令) 指令 | 指 令 码 | 功 能 | D/I | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 待命
模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 进入待命模式,执行其他指令都终止 | 卷动地址开关开启 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SR | SR=1:允许输入垂直卷动地址 SR=0:允许输入IRAM和CGRAM地址 | 反白
选择 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | R1 | R0 | 选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R0=00,第一次设定为反白显示,再次设定变回正常 | 睡眠
模式 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SL | X | X | SL=0:进入睡眠模式
SL=1:脱离睡眠模式 | 扩充功能设定 | 0 | 0 | 0 | 0 | 1 | CL | X | RE | G | 0 | CL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 G=1/0:绘图开关 | 设 定
绘图RAM
地 址 | 0 | 0 | 1 | 0 AC6 | 0 AC5 | 0 AC4 | AC3 AC3 | AC2 AC2 | AC1 AC1 | AC0 AC0 | 设定绘图RAM
先设定垂直(列)
AC6AC5…AC0
再设定水平(行)地址AC3AC2AC1AC0
将以上16位地址连续写入即可 |
注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。 三、显示应用 1、字符显示 带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。 80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H | 90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H | 88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH | 98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
其中,C语言编译器具有直接把中文转换成ASCII码字符功能。对照下面原理图,编译程序示例,并下载到实验板上,观测现象。
|