基于51单片机的四驱无线遥控小车(附电路图,源代码)
基于51单片机的无线遥控小车设计
基于51单片机的无线遥控小车设计随着科技的不断发展,无线遥控小车已经成为了人们生活中不可或缺的一部分。
无线遥控小车具有控制方便、灵活性高等特点,可以广泛应用于各个领域,如家庭娱乐、工业搬运等。
本文将介绍一种基于51单片机的无线遥控小车设计,并附上相应的代码。
本设计的无线遥控小车由四个轮子、两个直流电机、一个超声波测距模块和一个遥控模块组成。
其中,遥控模块用于接收人们发送的指令,超声波测距模块用于测量小车与障碍物之间的距离,以便避免碰撞。
首先,我们需要连接四个轮子和两个直流电机到51单片机的相应引脚上。
接下来,将超声波测距模块连接到51单片机的一个引脚上,用于接收超声波测距的信号。
最后,将遥控模块接收到的指令转化为电平信号,并将其连接到51单片机的引脚上。
在代码部分,我们首先需要初始化相应的引脚和串口,以便接收和发送指令。
然后,我们需要编写一个函数用于接收遥控模块发送的指令,并根据指令来控制小车的运动。
例如,当接收到前进指令时,小车向前运动;当接收到后退指令时,小车向后运动。
在控制小车运动的同时,我们还需要通过超声波测距模块来检测小车与障碍物之间的距离,以便避免碰撞。
此外,在代码中还需设置一些保护措施,例如在小车运动过程中检测到距离障碍物过近时自动停止前进,或者在接收到无效指令时忽略该指令等。
总结起来,基于51单片机的无线遥控小车设计离不开硬件连接和代码编写两个方面的工作。
合理的硬件连接可以保证信号的稳定传输,而完善的代码编写可以保证小车的正常运行和灵活性。
这种无线遥控小车具有控制方便、灵活性高等优点,可广泛应用于各个领域。
通过不断的优化和改进,无线遥控小车的性能将会更加出色。
基于51单片机WiFi智能小车制作
基于51单片机WiFi智能小车制作基于51单片机WiFi智能小车制作一、基本原理51单片机WiFi智能小车是利用PC或手机作为控制端,通过手机连接wifi模块(路由器)以获得wifi信号,同时车载也连接wifi模块以获得和手机相同的IP地址,实现手机和小车的连接,然后利用PC或手机上的控制软件以wifi网络信号为载体发送相关信号,wifi模块接收PC 或手机端发送来的相关信号并分析转换成TTL 电平信号,然后发送给单片机,单片机接收到的电平信号处理、分析、计算,转化成控制指令并发送给电机驱动模块以实现小车的前进、后退、左拐、右拐等功能。
二、购买所需材料了解51单片机WiFi智能小车基本原理后,需要购买所需材料进行制作。
下面列出所需制作材料:序号材料备注图例6 小车底盘7 摄像头 根据固件支持摄像头购买8 电源根据自己需要购买种类9 杜邦线及小配件制作所需工具:序号工具名备注图例称1 电烙铁一套 包括松香焊锡2 螺丝刀 平口、十字等3 微型电钻 可以自制4手工刀5 剪刀6 万用表7 热熔胶枪或快干胶8US B下载器三、开始制作1、制作流程开始制作前,我们首先需要看购买路由器的型号,笔者采用的是703n 路由器,所以需要引出ttl 线。
总体步骤为:路由器引TTL 线→路由器刷OpenWrt 固件→制作51单片机最小系统→下载下位机程序到51单片机→安装上位机程序至PC 或手机→测试上、下位机通信→组装→调试完成。
2、路由器引ttl线首先打开703n路由器,按照下图标示位置焊接ttl线。
注意:1、焊接的时候要小心焊接,焊好后微拉下查看松紧2、焊接最好采用软线焊接,防止意外整块拉掉焊点3、焊好后一定用胶固定,最好采用热熔胶下图为引好ttl线样子3 刷OpenWrt固件何为OpenWrt固件,OpenWrt可以被描述为一个嵌入式的Linux 发行版,(主流路由器固件有dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的,静态的系统。
基于51单片机红外无线遥控智能小车控制设计
基于51单片机红外无线遥控智能小车控制设计摘要:本文利用51单片机设计了一款具有红外无线遥控功能的智能小车控制系统。
该系统基于红外技术,实现了对智能小车的远程控制。
通过建立遥控信号传输模型和小车控制模块,实现了智能小车的实时运动控制,包括前进、后退、左转、右转等操作。
本文详细介绍了系统设计方案、硬件设计和软件设计,通过实验验证,证明该系统能够稳定地实现智能小车的远程控制,具有一定的应用价值和推广前景。
关键词:51单片机;红外无线遥控;智能小车控制;遥控信号传输模型Abstract:In this paper, a smart car control system with infrared wireless remote control function based on 51 single-chip microcomputer is designed. The system is based on infrared technology, which realizes the remote control of the smart car. By establishing the remote control signal transmission model and the car control module, real-time motion control of the smart car, including forward, backward, turning left and turning right, is realized. This paper introduces the system design scheme, hardware design and software design in detail. Through experiments, it is proved that the system can stably realize the remote control of the smart car, and has certain application value and promotion prospects.Keywords:51 single-chip microcomputer; infrared wireless remote control; smart car control; remote control signaltransmission model1. 引言智能小车控制系统是一种目前比较受关注的智能化系统,在智能出行和智慧交通中有着广泛的应用。
基于51单片机的红外遥控智能小车源程序(C语言)
/*预处理命令*/#include<reg52.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};sbit IRIN=P3^2; //红外接收器数据线sbit LCD_RS = P0^7;sbit LCD_RW = P0^6;sbit LCD_EN = P0^5;uchar begin[]={"My car!"};uchar cdis1[]={"jiansu!"};uchar cdis2[]={"qianjin!"};uchar cdis3[]={"jiasu!"};uchar cdis4[]={"zuozhuang!"};uchar cdis5[]={"STOP!"};uchar cdis6[]={"youzhuan!"};uchar cdis8[]={"daoche!"};sbit M1 = P1^0;sbit M2 = P1^1;sbit M3 = P1^2;sbit M4 = P1^3;sbit EN12 = P1^4;sbit EN34 = P1^5;uchar IRCOM[7];uchar m,n;uchar t=2;uchar g;uchar code digit[]={"0123456789"};uint v;uchar count;bit flag;void delayxms(uchar t);void delay(unsigned char x) ;void delay1(int ms);void motor();void lcd_display();/*检查LCD忙状态lcd_busy为1时,忙,等待。
51单片机无线遥控小车设计
51单片机无线遥控小车设计一、引言无线遥控小车是一种基于51单片机的智能小车系统,它利用无线通信技术实现了对小车的遥控。
通过无线遥控,我们可以随时控制小车的方向,实现室内或者室外的移动。
本设计将详细介绍51单片机无线遥控小车的整体设计框架、电路连接和关键模块设计。
二、整体设计框架整个系统分为遥控器端和小车端两个部分。
遥控器端通过按键或者摇杆输入控制指令,经过编码和解码处理后,通过无线传输模块将指令发送给小车端。
小车端接收到指令后,通过解码和控制模块来控制小车的运动。
三、电路连接遥控器端由单片机、按键(或者摇杆)、编码芯片和无线传输模块组成。
按键用于输入控制指令,编码芯片用于将按键输入的模拟信号转换为数字信号,单片机将数字信号进行编码后发送给无线传输模块,最终通过无线通信将指令传输给小车端。
小车端由单片机、解码芯片、电机驱动、电机和无线接收模块组成。
无线接收模块用于接收遥控器端发送过来的指令,解码芯片将数字信号转换为控制信号,单片机根据控制信号来控制电机驱动,从而实现小车的运动。
四、关键模块设计1.编码和解码模块设计编码和解码模块是整个系统中的关键部分,它负责将模拟信号转换为数字信号,并将数字信号转换为控制信号。
2.无线传输模块选择无线传输模块是实现遥控通信的关键组件,我们可以选择使用蓝牙模块、无线射频模块等。
选择合适的无线传输模块需要考虑通信距离、通信速率、功耗等因素。
3.电机驱动模块设计电机驱动模块负责将控制信号转换为电机运动控制信号,驱动电机完成小车的移动。
在设计电机驱动模块时,需要考虑电机的类型和电机驱动电路的选型。
五、总结本设计详细介绍了51单片机无线遥控小车的整体设计框架,电路连接和关键模块设计。
通过对整个设计的理解和实现,我们可以实现对小车的远程遥控,从而实现室内或者室外的自动移动。
这种无线遥控小车系统在娱乐、智能家居、无人巡检等领域都有广泛的应用前景。
实例制作基于C51的无线遥控玩具汽车
实例制作基于C51的无线遥控玩具汽车从事无线遥控玩具开发工作多年,开发了很多种类的无线遥控玩具产品。
总结了很多工作经验。
用的绝大部分IC是T X2C(遥控)和RX2C(接收),其功能分别是:前进,后退,左转,右转。
笔者利用工作的空闲时间用AT89C2051单片机编出了跟TX2C和RX2C一样的编解码程序,并成功进行了实际制作。
编解码与TX2C和RX2C兼容。
现将制作原理图和源程序公开给读者参考学习与制作,相信对初学者有极大的帮助,这也是笔者的心愿!其原理图如下:图2为接收部分,图3为发射部分。
源程序和仿真文件见附件.读者如果想仿制的话,建议RF接收和RF发射部使用市面上成品的315MHz模块,应用起来很方便,这样可以免去调试高频部分。
下面图1是遥控前进部分编码波形:从编码图1中看出有四个周期一样的同步脉冲,各个功能是按数据脉冲个数的不同实现功能不同的。
这样编码有很强的搞干扰能力,也可以应用到其它领域遥控上面去,可以做成遥控飞机,也可以做成遥控船……这要看读者的需要应用了。
具体功能相应编码以下:前进:同步脉冲+10个数据脉冲后退:同步脉冲+40个数据脉冲左转:同步脉冲+64个数据脉冲右转:同步脉冲+58个数据脉冲前进+左转:同步脉冲+34个数据脉冲前进+右转:同步脉冲+28个数据脉冲后退+左转:同步脉冲+46个数据脉冲后退+右转:同步脉冲+52个数据脉冲按键松开时发送2帧停止位:同步脉冲+4个数据脉冲。
接收部分收到的是反相的信号,读者在制作时要注意。
图二(点击放大)图三;五功能遥控车发射程序.;MCU:2051;OSC:12M;DATE:08.05.18;功能:;前进(F);后退(B),;左转(L),;右转(R).;加速(T).;作者:徐增钟;===================================================================================KEY EQU P3DATAOUT BIT P1.0 ;数据输出口.LED BIT P1.1 ;发射指示灯.KEYBUF EQU 70H ;键号存放单元.KEYMASK BIT 01HKEYFLAG BIT 05HORG 0000HAJMP STARTORG 000BHAJMP INTTCCORG 0030H;======================================================= ============================CLEAR_RAM:MOV R0,#30H ;从30H单元开始.MOV R3,#127 ;清除127个单元NEXT: MOV @R0,#00 ;清除INC R1 ;DJNZ R3,NEXT ;127个单元清完?;RET;======================================================= ===========================;程序初始化;BEGIN:MOV SP,#50H ;MOV P1,#00H ;MOV P3,#0FFH ;MOV TMOD,#01HMOV TH0,#0B1HMOV TL0,#0E0HSETB TR0SETB EASETB ET0CLR KEYFLAGSETB KEYMASKRET;======================================================= ============================START:CALL CLEAR_RAM ;清除RAMCALL BEGIN ;程序初始化;LOOP:CALL KEYON ;调用KEYSCANAJMP LOOPNOPNOPNOPAJMP START;======================================================= ============================INTTCC:MOV TH0,#0B1HMOV TL0,#0E0HSETB KEYFLAGRETI;======================================================= ============================KEYON:MOV A,KEYCJNE A,#0FFH,KEYSENDJB KEYMASK,ETSETB KEYMASKCLR LEDMOV R5,#2X2: MOV R3,#4CALL SENDDJNZ R5,X2SETB DATAOUTCALL DY5MSMOV P1,#00ET:RET;======================================================= =============================KEYSEND:SETB LEDCLR KEYMASKCJNE A,#0DFH,K1MOV R3,#10 ;发送10个脉冲. AJMP SENDRETK1: CJNE A,#0EFH,K2MOV R3,#40 ;发送40个脉冲. AJMP SENDRETK2: CJNE A,#0F7H,K3MOV R3,#64 ;发送64个脉冲. AJMP SENDRETK3: CJNE A,#0FBH,K4MOV R3,#58 ;发送58个脉冲. AJMP SENDRETK4: CJNE A,#0D7H,K5MOV R3,#34 ;发送34个脉冲. AJMP SENDRETK5: CJNE A,#0DBH,K6MOV R3,#28 ;发送28个脉冲. AJMP SENDRETK6: CJNE A,#0E7H,K7MOV R3,#46 ;发送46个脉冲. AJMP SENDRETK7: CJNE A,#0EBH,K8MOV R3,#52 ;发送52个脉冲. AJMP SENDK8: CJNE A,#0FFH,KEXIT KEXIT:RET;======================================================= ============================DOUT:SETB DATAOUTCALL DYMS5CLR DATAOUTCALL DYMS5DJNZ R3,DOUTMOV P2,#00RETSEND:MOV R1,#04N1: SETB DATAOUTMOV R4,#255D1: NOPNOPNOPNOPDJNZ R4,D1CLR DATAOUTCALL DYMS5DJNZ R1,N1AJMP DOUTNOPNOPAJMP START;======================================================= ============================DYMS5:MOV R6,#250D2:DJNZ R6,D2RET;======================================================= ===========================DY5MS:MOV R5,#4D3: MOV R3,#248DJNZ R3,$DJNZ R5,D3RET;======================================================= ===========================END以下是接收部分程序;遥控车接收程序.;MCU:AT89C2051;OSC:12M;DATE:08.05.18;接收相应功能:前进,后退,左转,右转.;E-MAIL:chinameifen@;作者:徐增钟;======================================================= ==========IN EQU P3.2 ;RECEIVERXMA BIT 05H;======================================================= ==========ORG 0000HAJMP STARTORG 0003HAJMP INRXORG 0030H;======================================================= =========CLEAR_RAM:MOV R1,#30HMOV R3,#127NEXT: MOV @R1,#00INC R1DJNZ R3,NEXTRET;======================================================= =========START:MOV SP,#50HMOV P3,#0FFH ;MOV P2,#0FFH ;MOV P1,#00 ;SETB EASETB EX0CLR RXMALOOP:CALL NORXAJMP LOOP;======================================================= =============INRX:CLR EX0MOV R4,#4 ;同步脉冲.MOV TMOD,#01HNX1: MOV TH0,#00 ;计数初值为00.MOV TL0,#00 ;SETB TR0INC1: JNB IN,INC1 ;低电平在此等CLR TR0MOV A,TH0CJNE A,#05H,EXITHERE1: JB IN,HERE1 ;等待0.5MS高电平结束.DJNZ R4,NX1JNB IN,$CLR ARD1: INC ARD2: JB IN,RD2MOV R1,#05RD3: JB IN,RD1LCALL DYMS5DJNZ R1,RD3DEC ADEC ADEC ADEC AJZ STOPDEC ADEC ADEC ADEC ADEC ADEC AJZ K1DEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC ADEC AJZ FRDEC ADEC ADEC ADEC ADEC A JZ FL DEC A DEC A DEC A DEC A DEC A DEC A JZ K2 DEC A DEC A DEC A DEC A DEC A DEC A JZ BL DEC A DEC A DEC A DEC A DEC A DEC A JZ BR DEC A DEC A DEC A DEC A DEC A DEC A JZ K3 DEC A DEC A DEC A DEC A DEC A DEC ANOPNOPEXIT: SETB EX0RETISTOP: MOV P1,#00AJMP EXITK1:MOV P1,#00010000B ;FAJMP EXITK2:MOV P1,#00100000B ;BAJMP EXITK3:MOV P1,#01000000B ;LAJMP EXITK4:MOV P1,#10000000B ;RAJMP EXITFR: MOV P1,#10010000B ;F+RAJMP EXITFL:MOV P1,#01010000B ;F+LAJMP EXITBR:MOV P1,#10100000B ;B+RAJMP EXITBL:MOV P1,#01100000B ;B+LAJMP EXIT;======================================================= =======NORX:MOV R1,#200RX: JNB IN,NETCALL DY1MSDJNZ R1,RXMOV P1,#00NOSI:RET;======================================================= =======DYMS5:MOV R5,#135DJNZ R5,$RET;======================================================= =======DY1MS:MOV R6,#138D2:DJNZ R6,D2RET;======================================================= =======END。
基于51单片机四路循迹小车
基于51单片机四路循迹小车[导读]这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~一. 任务要求二. 系统原理本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。
这里的轨道是指汽车沿着白色地板上的黑线行驶。
由于黑线与白地板的反射系数不同,可以根据接收到的反射光的强度来判断“道路”。
常用的方法是红外检测。
红外检测方法,即在汽车行驶过程中,利用红外光在具有不同颜色的物体表面的不同反射特性,不断向地面发射红外光。
当红外光与白纸地板相遇时,会发生漫反射,反射光被安装在车内的接收器接收,如果遇到黑线,就会变成红色。
外部光被吸收,车内的接收器不能接收红外线。
单片机根据是否接收到反射的红外光来确定黑线的位置和汽车的行驶路线。
三. 整体方案1. 控制模块小车的核心控制部件采用STC公司生产的8位单片机STC89C52。
它是一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。
STC89C52有3个16 位定时器/计数器,2个外部中断,1个串口中断。
最小系统51单片机的具体引脚功能不细说,不了解的可自行百度。
直接上最小系统电路图(自己画的,凑合着看)。
顺便说一句,在我看来一个没有指示灯的电路是最烦的电路<(`^´)> 我的复位一定要有灯才行!三部分:①电源电路:给单片机提供5V的电源②时钟电路:外接11.0592M石英晶振。
③复位电路:确保单片机是从一个确定的初始状态开始。
焊接时注意P0口要接上拉电阻,否则不能用,一般都用排阻做上拉电阻(当然如果能自己画板子就更好了)。
去除AD网格线记一下怎么去除AD网格线,如图步骤,最后去掉Visible前面的对勾即可,别忘记最后点OK:2. 电机驱动模块我使用的是最经典的LM298N电机驱动:我太喜欢用298了。
(完整版)基于51单片机的智能小车控制源代码(毕业设计)
'*************************************************//***************************************************//// 智能小车控制器基于51 单片机实现前进后退转弯与智能采样控制功能#include <reg52.h>#include<intrins.h>unsigned int tata[8];unsigned char flag=0,flag2=0,flag3=0,n,m;unsigned int Angle,q,length,temp1;sbit A仁P3A2;sbit A2=P3A3;sbit B1=P3A4;sbit B2=P3A5;sbit ENA=P3A6;sbit ENB=P3A7;sbit red1=P1A3;sbit red2=P1A6;void InitUART(void) {TMOD = 0x20;SCON = 0x50;TH1 = 0xFD;TL1 = TH1;PCON = 0x00; ES = 1; TR1 = 1;EA = 1;ENA = 1;ENB = 1;}void delay(void) // 直线延时延时函数{unsigned char a,b;for(b=255;b>0;b --) for(a=38;a>0;a--);}void delay1(void) // 转角延时函数{unsigned char w,y,c;for(c=1;c>0;c--) for(y=97;y>0;y--)for(w=3;w>0;w --);void delay3(void) // 避障延时函数{unsigned char a,b,c; for(c=98;c>0;c--) for(b=100;b>0;b --)for(a=40;a>0;a --);}void delay2(void) // 手动控制延时函数{unsigned char a,b,c;for(c=98;c>0;c--) for(b=15;b>0;b --) for(a=17;a>0;a --) { if(m){ break;}}}void qianjin() // 前进{unsigned char f;A1=1;A2=0;B1=1;B2=0;for(f=0;f<155;f++){A1=0;A2=0;B1=0;B2=1;} // 直线校准语句A1=1;A2=0;B1=1;B2=0;}void zuozhuan() // 左转{A1=1;A2=0;B1=0;B2=1;}void youzhuan() // 右转A1=0;A2=1;B1=1;B2=0;}void houtui(){A1=0;A2=1;B1=0;B2=1;}void tingzhi(){A1=0;A2=0;B1=0;B2=0;}void main(){unsigned char temp;InitUART();while(1){if(flag){flag=0;for(temp=2;temp<8;temp++) // 字符型转成整型函数{tata[temp]=tata[temp]%16;}// 执行转角指令Angle=10*(tata[2]*100+tata[3]*10+tata[4]);m=0;if(Angle<10) // 地面小角度摩擦校正函数{Angle++;}if(tata[1]=='L'){for(q=0;q<Angle;q++){zuozhuan();delay1();if(m){break;}}}else if(tata[1]=='R'){for(q=0;q<Angle;q++){ youzhuan(); delay1(); if(m) { break;}}} tingzhi();delay(); for(temp=2;temp<8;temp++) // 字符型转成整型函数{ tata[temp]=tata[temp]%16;}// 执行前进指令length=100*(tata[5]*100+tata[6]*10+tata[7]);// m=0;if(!m){ for(q=0;q<length;q++){ qianjin(); delay(); delay(); if(m) { break;} if(!red1){ delay1(); if(!red1) { youzhuan(); delay3();while(!red1);}if(!red2){delay1(); if(!red2){zuozhuan(); delay3();while(!red2);}}if((!red1)||(!red2)){houtui();delay3();while((!red1)||(!red2));}}}}if(flag3){m=0;flag3=0;if(tata[1] =='W'){qianjin(); }else if(tata[1]=='A'){A1=0;A2=0;B1=0;B2=1;} elseif(tata[1]=='S'){houtui();}else if(tata[1]=='D'){A1=0;A2=1;B1=0;B2=0;}else if(tata[1]=='T'){tingzhi(); }delay2();}tingzhi();}}void UARTInterrupt(void) interrupt 4 {if(RI) m=1;RI = 0;if(SBUF=='$'){flag2=1;}if(flag2){tata[n]=SBUF;n++;if(n==9&&tata[8]=='*'){n=0;flag=1;flag2=0;}if(n==3&&tata[2]=='#'){n=0;flag3=1;flag2=0;}}。
单片机红外遥控小车源程序
单片机红外遥控小车源程序The document was finally revised on 202151单片机红外遥控小车源程序单片机源程序如下:1./*******************************************************************************2.--------------------------------------------------------------------------------3.* 实验名 : 红外线试验4.* 实验说明 : 数码管显示红外线发送过来的键值。
5.* 连接方式 : 见连接图6.* 注意 :7.*******************************************************************************/8.9.//#include<>10.#include<>11.//--定义使用的IO--//12.13.14.sbit IRIN = P3^2;15.sbit PWM1?= P0^1;16.sbit PWM2?= P0^2;17.18.//--定义一个全局变量--//19.unsigned char timer1;20.unsigned char IrValue[6]; //用来存放读取到的红外值21.unsigned char Time;22.23.//--声明全局函数--//24.void IrInit();25.void DelayMs(unsigned int );26.void Time1Config();27.void speedup();28.void Slowdown();29.void go();30.void left();31.void right();32.void pwm_left(int x);33.void pwm_right(int x);34./*******************************************************************************35.* 函数名 : main36.* 函数功能 : 主函数37.* 输入 : 无38.* 输出 : 无39.*******************************************************************************/40.41.void main()42.{43. PWM1=0;44. PWM2=0;45. IrInit();46. Time1Config();47. while(1)48. {49.50. IrValue[4]=IrValue[2]>>4; //高位51. IrValue[5]=IrValue[2]&0x0f; //低位52. if(IrValue[4]==0x0e&&IrValue[5]==0x08)53. {54.55. pwm_left(37);56. pwm_right(40);57.58. }59.60.61. if(IrValue[4]==0x0d&&IrValue[5]==0x04)62. {63.64. pwm_left(0);65. pwm_right(0);66.67. }68.69.//70. if(IrValue[4]==0x0e&&IrValue[5]==0x02)71. {72.73. pwm_left(35);74. pwm_right(22);75.76.77. }78.79. if(IrValue[4]==0x0e&&IrValue[5]==0x00)80. {81.82. pwm_left(22);83. pwm_right(35);84.85.86. }87.88. }89.90.}91.92.93.94.95.96.void pwm_left(int x)97.{98. if(timer1>100)//PWM周期为100*99. {100.101. timer1=0;102. }103.104. if(timer1 < x) //改变30这个值可以改变直流电机的速度105. {106.107. PWM1=1;108. }109.110. else111. {112.113. PWM1=0;114. }115.116.}117.118.void pwm_right(int y)119.{120. if(timer1>100)//PWM周期为100*121. {122.123. timer1=0;124. }125.126. if(timer1 < y) //改变30这个值可以改变直流电机的速度127. {128.129. PWM2=1;130. }131.132. else133. {134.135. PWM2=0;136. }137.138.}139./***************************************************************** **************140.* 函数名 : DelayMs()141.* 函数功能 : 延时142.* 输入 : x143.* 输出 : 无144.****************************************************************** *************/145.146.void DelayMs(unsigned int x) //误差 0us147.{148. unsigned char i;149. while(x--)150. {151.152. for (i = 0; i<13; i++)153. {}154. }155.156.}157./***************************************************************** **************158.* 函数名 : IrInit()159.* 函数功能 : 初始化红外线接收160.* 输入 : 无161.* 输出 : 无162.****************************************************************** *************/163.164.void IrInit()165.{166. IT0=1;//下降沿触发167. EX0=1;//打开中断0允许168. EA=1; //打开总中断169.170. IRIN=1;//初始化端口171. PWM1=0;172.173. PWM2=0;174.}175./***************************************************************** **************176.* 函数名 : ReadIr()177.* 函数功能 : 读取红外数值的中断函数178.* 输入 : 无179.* 输出 : 无180.****************************************************************** *************/181.182.void ReadIr() interrupt 0183.{184. unsigned char j,k;185. unsigned int err;186. Time=0;187. DelayMs(70);188.189. if(IRIN==0) //确认是否真的接收到正确的信号190. {191.192.193. err=1000; //1000*10us=10ms,超过说明接收到错误的信号194. /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时195.侯,程序死在这里*/196. while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去197. {198.199. DelayMs(1);200. err--;201. }202.203. if(IRIN==1) //如果正确等到9ms低电平204. {205.206. err=500;207. while((IRIN==1)&&(err>0)) //等待的起始高电平过去208. {209.210. DelayMs(1);211. err--;212. }213.214. for(k=0;k<4;k++) //共有4组数据215. {216.217. for(j=0;j<8;j++) //接收一组数据218. {219.220.221. err=60;222. while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去223. {224.225. DelayMs(1);226. err--;227. }228.229. err=500;230. while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
基于51单片机的蓝牙遥控小车
基于51单片机的蓝牙遥控小车基于单片机的智能避障遥控小车目录第一章绪论 (1)1.1 研究背景和意义 (1)第二章系统框架及软硬件结构设计 (2)2.1 系统要求 (2)2.2 系统整体算法流程 (3)2.3 总体任务设计 (4)2.4 整体硬件结构设计 (5)2.5 整体软件结构设计 (6)第三章模块的详细设计 (7)3.1 L293D电机驱动模块 (7)3.1.1模块介绍 (7)3.1.2 PWM脉冲控制原理 (7)3.1.3 脉冲控制代码 (8)3.2 HC05蓝牙模块 (9)3.2.1 模块简介 (9)3.2.2 蓝牙串口程序说明 (10)3.2.3 模块引脚说明 (11)3.3 USB转TTL模块 (12)第四章系统功能设计与实现 (14)4.1 安卓手机蓝牙遥控的设计与实现 (14)4.1.1 设计基本思路 (14)4.1.2 遥控任务分配 (15)4.2.3 蓝牙遥控操作流程 (15)第五章软硬件调试 (18)5.1 硬件调试 (18)5.2 软件调试 (18)第一章绪论1.1 研究背景和意义智能化无处不在。
各种智能化设备在不同的领域中发挥着自己的特长,而在家用方面的智能有着相当重要的意义。
本次所设计的智能小车系统包含着对周围环境的检测、舵机控制以及短距离无线遥控等的功能,它需要实现微控制器、多传感器技术、蓝牙遥控、机械结构原理、数字逻辑、自动控制等各学科技术内容的渗透融合。
智能小车通过其上部搭载的89C52芯片作为核心控制器,通过多种传感器来获取周围环境信息并将采集到的信息输送给CPU,然后由CPU来给各个部分下达相对应的指令。
智能小车不仅价格低廉,而且甚至能够担任人类难以从事的任务,它在工业、农业以及社会生产生活等许多领域都起到了重要作用。
本次课题设计中所采用到的短距离无线遥控、单片机控制原理、多传感器技术、自动避障技术等等。
现在在工业制造、农业生产、国家安全、军事武器,医疗保健、太空探测等许多领域都日益发挥着其作用,在军事侦察、反恐、防暴、防核化等高危任务方面、环境污染检测方面和在恶劣环境中均有着非常好的发展前景,从这些方面可知本课题研究意义非凡。
基于51单片机的红外遥控智能小车源程序(C语言)
基于51单片机的红外遥控智能小车源程序(C语言)/*预处理命令*/#include //包含单片机寄存器的头文件#include //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; sbit IRIN=P3^2; //红外接收器数据线sbit LCD_RS = P0^7;sbit LCD_RW = P0^6;sbit LCD_EN = P0^5;uchar begin[]={"My car!"};uchar cdis1[]={"jiansu!"};uchar cdis2[]={"qianjin!"};uchar cdis3[]={"jiasu!"};uchar cdis4[]={"zuozhuang!"};uchar cdis5[]={"STOP!"};uchar cdis6[]={"youzhuan!"};uchar cdis8[]={"daoche!"};sbit M1 = P1^0;sbit M2 = P1^1;sbit M3 = P1^2;sbit M4 = P1^3;sbit EN12 = P1^4;sbit EN34 = P1^5;uchar IRCOM[7];uchar m,n;uchar t=2;uchar g;uchar code digit[]={"0123456789"};uint v;uchar count;bit flag;void delayxms(uchar t);void delay(unsigned char x) ;void delay1(int ms);void motor();void lcd_display();/*检查LCD忙状态lcd_busy为1时,忙,等待。
51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表
51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。
核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。
驱动板上有电源电路、电机驱动电路以及一些功能模块接口。
智能小车前进只要控制智能小车四个轮子向前转动就可以了。
智能小车四个轮子由四个直流减速电机驱动。
直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。
但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。
比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。
那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。
智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。
在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。
不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。
这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。
这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。
智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。
unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。
unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。
通过以下函数初始化定时器0,每1毫秒中断一次。
void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。
基于51单片机的无线遥控小车
本科生产实习报告姓名:学号:年级:专业:电子信息技术及仪器系室:测控技术与仪器系目录目录 (1)1 生产实习计划安排 (2)2 电路板制作 (3)实习目的 (3)2.2所需器件介绍 (3)2.3制作过程 (4)2.4成果展示 (7)3 小车控制系统软硬件设计 (7)实习目的 (7)3.2所需器件介绍 (7)3.3制作过程 (9)3.4功能演示 (11)4新飞电器公司实习 (11)4.1优秀毕业设计讲解 (11)4.2新飞公司 (13)5、生产实习心得体会 (18)附录:单片机C语言程序 (20)1 生产实习计划安排2 电路板制作2.1实习目的能够熟练使用一些常用软件进行基本的程序编写(keil)、制板(Altium Designer等);进一步了解电子产品开发、生产、测试等内容,培养自身的动手能力,并通过组队让我们了解团队合作的重要性,并为做一些实际的项目积累经验。
2.2 所需器件介绍①Altium Designer Winter 09 :电路原理图、PCB图绘制软件②打印机、转印纸:将设计完成的PCB图打印在转印纸光面上③覆铜板、砂纸、热转印机:将转印纸上的电路图热转印到铜板上④腐蚀液:将铜板上墨迹以外的部分腐蚀掉⑤打孔机:将铜板上需要留孔的地方进行打孔⑥电烙铁、锡丝等:将元器件焊接在制作的铜板上图1利用Altium Designer 绘制原理图的流程图2.3 制作过程1、原理图的绘制过程的流程图如图1所示:⑴、使用Altium Designer绘图软件,画出单片机最小系统板的原理图,正确选择放置所需要的元器件并正确连接,适当添加元件库。
必须用到的有微处理器芯片STC89C52RC、串口通信芯片MAC232等一系列电子元件。
⑵、原理图设计完成后对各元件进行封装,以生成和现实元器件具有相同外观和尺寸的封装网络表。
单片机最小系统板原理图如图2所示:图2利用Altium Designer绘制的原理图⑶、生成PCB图。
基于51单片机的手机蓝牙遥控小车设计(程序元件清单实物图)
基于51单片机的手机蓝牙遥控小车设计(程序元件清单实物图)本人一直想做一个遥控车,终于今天实现了,跟大家分享一下。
一、元件清单1、某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块亚克力板和一些配件螺丝)2、L298n模块两个(一个298控制两个电机)3、HC-06蓝牙模块4、电池盒跟18650电池3个5、单片机最小系统6、杜邦线至少12根,当然越多越好7、若干根导线(连接电机用的,以及电池盒连到L298N跟单片机)二、制作过程首先,先去了解一下L298N的接线,我当时也是懵逼了好久,反正摸索着也会了,一般店家都有资料。
然后是蓝牙模块的使用,拿到蓝牙模块后,有开发板的话(没有就用单片机的烧录器),先按照TXD接TXD,RXD接RXD,打开电脑的串口助手与蓝牙构建通信,打开AT,发送AT指令集,比如设设波特率,改个名字,改个配对的密码。
但通过蓝牙与单片机连接通信的时候,就是TXD接RXD了。
最后一个就是,本人在接线的时候经常碰壁。
比如,你以为接好的线他其实没接好,根本没通,还是拿万用表B了才知道。
因为本人忘了买电池盒,所以我是用12V的直流电接着的,导致遥控车拖着跟电线。
三、实物图(拖着跟电线以及充电宝供电的车不过我没通电)资料内包括L298N的部分资料,以及蓝牙的说明书(看AT指令集就好)和源程序。
app:单片机源程序如下:1./*手机蓝牙遥控小车 APP可以在应用市场搜蓝牙串口助手2.左转右转大概是90度我的是四驱的,如果是只有一个l298N 的话就把带2的删了3.pwm有十级变速*/4.5.6.#include <reg52.h>7.8.#define Left_moto2_pwm P0_4 //接驱动模块ENA 使能端,输入PWM信号调节速度左后轮9.#define Right_moto2_pwm P0_5 //接驱动模块ENB 右后轮10.#define Left_moto_pwm P1_4 //接驱动模块ENA 使能端,输入PWM信号调节速度左前轮11.#define Right_moto_pwm P1_5 //接驱动模块ENB 右前轮12.#define uchar unsigned char13.#define uint unsigned int14.15.sbit P0_4=P0^4; //定义P0_416.sbit P0_5=P0^5; //定义P0_517.sbit P1_4=P1^4; //定义P1_418.sbit P1_5=P1^5; //定义P1_519.20./*电机驱动IO定义*/21.sbit IN1 = P1^2; //为1 左电机反转前轮22.sbit IN2 = P1^3; //为1 左电机正转前轮23.sbit IN3 = P1^6; //为1 右电机正转前轮24.sbit IN4 = P1^7; //为1 右电机反转前轮25./*sbit EN1 = P1^4; //为1 左电机使能26.sbit EN2 = P1^5; //为1 右电机使能 */27.28.sbit IN5 = P0^2; //为1 左电机反转后轮29.sbit IN6 = P0^3; //为1 左电机正转后轮30.sbit IN7 = P0^6; //为1 右电机正转后轮31.sbit IN8 = P0^7; //为1 右电机反转后轮32./*sbit EN3 = P0^4; //为1 左电机使能后轮33.sbit EN4 = P0^5; //为1 右电机使能后轮 */34.35.bit Right_moto_stop=1;36.bit Left_moto_stop =1;37.unsigned int time=0;38.int pwm=1;39.40.#define left_motor_en EN1 = 1 //左电机使能41.#define left_motor_stops EN1 = 0 //左电机停止42.#define right_motor_en EN2 = 1 //右电机使能43.#define right_motor_stops EN2 = 0 //右电机停止44.45.#define left_motor2_en EN3 = 1 //左电机使能后46.#define left_motor2_stops EN3 = 0 //左电机停止后47.#define right_motor2_en EN4 = 1 //右电机使能后48.#define right_motor2_stops EN4 = 0 //右电机停止后49.50.51.#define left_motor_go IN1 = 0, IN2 = 1//左电机正传52.#define left_motor_back IN1 = 1, IN2 = 0//左电机反转53.#define right_motor_go IN3 = 1, IN4 = 0//右电机正传54.#define right_motor_back IN3 = 0, IN4 = 1//右电机反转55.56.#define left_motor2_go IN5 = 0, IN6 = 1//左电机正传57.#define left_motor2_back IN5 = 1, IN6 = 0//左电机反转58.#define right_motor2_go IN7 = 1, IN8 = 0//右电机正传59.#define right_motor2_back IN7 = 0, IN8 = 1//右电机反转60.61.unsigned char pwm_val_left =0;//变量定义62.unsigned char push_val_left =0;// 左电机占空比N/1063.unsigned char pwm_val_right =0;64.unsigned char push_val_right=0;// 右电机占空比N/1065.66.67.void delay(uint z)68.{69.uint x,y;70.for(x = z; x > 0; x--)71.for(y = 114; y > 0 ; y--);72.}73.74.75.76.//蓝牙初始化77.void UART_INIT()78.{79.SM0 = 0;80.SM1 = 1;//串口工作方式181.REN = 1;//允许串口接收82.EA = 1;//开总中断83.ES = 1;//开串口中断84.TMOD = 0x20;//8位自动重装模式85.TH1 = 0xfd;86.TL1 = 0xfd;//9600波特率87.TR1 = 1;//启动定时器188.}89.90./************************************************************************/91.void run(void) //pwm调速函数92.{93.push_val_left =pwm; //PWM 调节参数1-10 1为最慢,10是最快改这个值可以改变其速度94.push_val_right =pwm; //PWM 调节参数1-10 1为最慢,10是最快改这个值可以改变其速度95.if(pwm==10) pwm=0;96.if(pwm==0&&pwm<0) pwm=0;97.98.}99.100.101./******************************************************** ****************/102./* PWM调制电机转速 */ 103./******************************************************** ****************/104.105.106./* 左侧电机调速 */107./*调节push_val_left的值改变电机转速,占空比 */108.void pwm_out_left_moto(void)109.{110.if(Left_moto_stop)111.{112.if(pwm_val_left<=push_val_left)113.{ Left_moto_pwm=1;114.Left_moto2_pwm=1; }115.else116.{ Left_moto_pwm=0;Left_moto2_pwm=0; }117.118.if(pwm_val_left>=10)119.pwm_val_left=0;120.}121.else { Left_moto_pwm=0;Left_moto2_pwm=0; }122.}123./******************************************************** **********/124./* 右侧电机调速 */125.void pwm_out_right_moto(void)126.{127.if(Right_moto_stop)128.{129.if(pwm_val_right<=push_val_right)130.{ Right_moto_pwm=1;131.Right_moto2_pwm=1; }132.else133.{Right_moto_pwm=0;134.Right_moto2_pwm=0;}135.if(pwm_val_right>=10)136.pwm_val_right=0;137.}138.else {Right_moto_pwm=0;Right_moto2_pwm=0; } 139.}140./***************************************************/141.///*TIMER0中断服务子函数产生PWM信号*/142.void timer0()interrupt 1 using 2143.{144.TH0=0XF8; //1Ms定时145.TL0=0X30;146.time++;147.pwm_val_left++;148.pwm_val_right++;149.pwm_out_left_moto();150.pwm_out_right_moto();151.}152.153.//小车前进154.void forward()155.{156.ET0 = 1;157.run(); //pwm 程序158.left_motor_go; //左电机前进159.right_motor_go; //右电机前进160.left_motor2_go; //左电机前进后轮161.right_motor2_go; //右电机前进后轮162.}163.164.void left_go() //左转165.{166.ET0 = 1;167.run();168.left_motor_back;169.right_motor_go;170.left_motor2_back;171.right_motor2_go;172.delay(700);173.forward();174.}175.//右转176.void right_go()177.{178.ET0 = 1;179.run();180.delay(50);181.right_motor_back;182.left_motor_go;183.right_motor2_back;184.left_motor2_go;185.delay(700);186.forward();187.}188.//小车左转圈189.void left()190.{191.ET0 = 1;192.run();193.delay(50);194.right_motor_go; // 右电机前进195.left_motor_back; // 左电机后退196.right_motor2_go; // 右电机前进197.left_motor2_back; // 左电机后退198.}199.200.//小车右转圈201.void right()202.{203.ET0 = 1;204.run();205.left_motor_go;206.right_motor_back;207.left_motor2_go;208.right_motor2_back; 209.}210.211.//小车后退212.void back()213.{214.ET0 = 1;215.run();216.left_motor_back;217.right_motor_back; 218.left_motor2_back;219.right_motor2_back; 220.}221.222.//小车停止223.void stop()224.{225.ET0 = 0;226.P1=0;227.P0=0;228.}229.230.231.//串口中断232.void UART_SER() interrupt 4 233.{234.if(RI)236.RI = 0;//清除接收标志237.switch(SBUF)238.{239.case 'g': forward(); break;//前进240.case 'b': back(); break;//后退241.case 'l': left(); break;//左转圈242.case 'r': right(); break;//右转圈243.case 's': stop(); break;//停止244.case 'z': left_go(); break;//左转行驶245.case 'y': right_go(); break;//右转行驶246.case 'p': pwm++;break; //加速247.case 'c': pwm--;break; //减速248.}249.250.}251.}252.253.void main()254.{255.TMOD=0X01;256.TH0= 0XF8; //1ms定时257.TL0= 0X30;258.TR0= 1;259.ET0= 1;260.EA = 1;261.UART_INIT();//串口初始化262.while(1);263.}264.。
基于51单片机的WIFI遥控小车
基于51单片机的WIFI遥控小车本文所述智能车寻迹系统采用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹。
通过加长转臂的舵机驱动前轮转向,使用符合PI算法的控制器实现直流电机的调速。
为了使智能车快速、平稳地行驶,系统必须把路径识别、相应的转向伺服电机控制以及直流驱动电机控制准确地结合在一起。
本设计最大亮点在于WIFI智能,过高速WIFI信号来控制小车的前进、后退、左右转弯、高清摄像头实时拍摄。
具有高度的智能化、人性化。
标签:智能;WIFI;51单片机1 引言智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
电动智能车就是其中的一个体现。
本次设计的电动智能车可实现循迹、避障、WIFI 智能视频等功能。
随着控制技术及计算机技术的发展,智能车系统将在未来工业生产和日常生活中扮演重要的角色。
2 设计方案该设计以AT89C51为核心,经焊接相关芯片用电路板自制而成,通过I/O 口检测信号,输出信号到LD293D,从而驱动两个直流电机控制其前进、停止、左转、右转。
检测信号则为三组红外发射和接收管,一组黑线时输出高电平,白线时输出低电平。
另两组黑线时输出低电平,白线时输出高电平。
并通过采用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹。
通过加长转臂的舵机驱动前轮转向,使用符合PI算法的控制器实现直流电机的调速。
为了使智能车快速、平稳地行驶,系统必须把路径识别、相应的转向伺服电机控制以及直流驱动电机控制准确地结合在一起。
3 硬件电路设计硬件电路分为电源模块、单片机最小系统模块、传感器模块、LM298电机驱动模块。
下面分别介绍下电源模块、传感器模块和电机驱动模块。
4 研究内容设计采用Atmel系列中的AT89C51单片机。
以AT89C51为控制核心,利用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的四驱无线遥控小车(附电路图,源代码)
遥控小车大家都玩过,网上也有各种DIY小车的制作详解,本文介绍的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计主要强调单片机控制,就是说,这个小车是由单片机控制的,把单片机按键发送程序、无线模块使用、电机驱动是本教程的核心内容。
一硬件组装
1 小车运动部分
所需工件:直流电机4个,L293D电机驱动模块,蓄电池一块,车身底盘
说明:车身底盘大家根据自己的购买力自行购买,蓄电池也是,至于L293D模块,淘宝上卖的比较贵,不过我用的就是成品模块,效果非常好,钱不多的同学可以自己买芯片,自制模块,原理很简单,官方资料是很详细的;或者改为继电器控制都可以,具体看自己的实际购买力。
用模块的好处是,模块可以输出5V 电源给系统供电,详细请参考淘宝网。
如果你买的是现成的底盘,那就和我的一样了,组装实在是没啥可说的,把电机固定上去就是,不行?别开玩笑了,小学生都会的!至于想自己做底盘的,我想说,要搞结实点,咱这次的小车马力是很足的,因为有电机驱动,速度比较快(不带减速齿轮的底盘一定要小心,速度非常的快),后劲也足,不小心撞墙很正常,所以不好的底盘就得小心了!
组装好后,就是电机和驱动模块的接线了,下面我就详细的说一下L293D模块的使用:
L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理如图:
其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。
1,2EN 3,4EN需要短接,芯片最大工作电压不得超过7V。
封装图:
Vcc1接工作电压,5V,Vcc2接电机的驱动电源,一般来说,这个电压要比5V 高,我用的是12V蓄电池,就把12v的正极接到VCC2,要记住的是,芯片、单片机、蓄电池电源是需要共地的,不要觉得你电机是12V,单片机控制部分是5V就把电源完全独立开来,正极是完全独立的没错,但是GND(负极)都必须是接在一起的。
驱动芯片与电机的接法:
例:左边前后轮:
1Y接电机红线,2Y接电机黑线,左边前轮电机
3Y接电机红线,4Y接电机黑线,左边后轮电机
前进指令:1A=1(输出12V),2A=0(输出0V),3A=1(输出12V),4A=0(输出0V)
后退指令:1A=0(输出12V),2A=1(输出0V),3A=0(输出12V),4A=1(输出0V)
右边的和左边的接法是完全一样的
注意:前进和后退并不是绝对的,因为是直流电机,不刻意的强调正负极,就看你电机是怎么接线的,结果完全可以与我的相反。
不过一定要保证电机接线的统一性,不能随意,不能说前轮接的是顺时针线序,后轮是逆时针线序,如果买的电机连接线不带颜色,一定要自己测好了那种接法是顺时针的,哪种是逆时针,否则前轮前进后轮后退,很摧残电机的,或者左右边的2对电机转动方向不统一,导致编程麻烦。
芯片默认输出0V ,所以在没有程序的时候,大家不需要担心电机会转动。
一个芯片只能控制2个电机,右边的再接个芯片就可以了,网上卖的模块都是2个驱动芯片的,刚刚好够4个电机。
买模块的好处就是拿来可以直接接线,而且
模块上有标号,不必担心接错,希望初学者还是买模块,贵是贵了,但是速度有保证的!驱动模块如图:
接好之后,我就说下小车的转动方式:前进后退就是4个电机同时的正转、反转;左转弯和有转弯有2种方式:A一边转动一边不转,B一边正向转动一边反向转动,这两种各有个的好处,各位可以根据自己的实际情况来确定转弯的方式,不同车的底盘效果肯定是不一样的,转弯的方式是程序控制的,本程序是B种方式。
我的小车图:
这种电机是减速的,所以不会很快,如果是直接电机带动的轮子,再用12V 电源的话,那速度就非常快了,模块的输出直接连接电机电源线,输出根据标号或根据程序接入到单片机上
单片机的接线:
如图:
这是我的最小系统板,全部引出IO,带板载USB下载功能,P0口输出接了8路流水灯(有选通开关),这样设计板子是为了P0口做输出时专门看输出状态的。
板子是我们工作室自己设计的,我们所有的作品调试都是建立在它的基础上,网上也有的卖这种USB下载板,40元左右吧!
我这个人比较懒,用的是电机驱动模块,L293D的输入是有标号的,1——8直接按照顺序接到P1.0——P1.7就可以了,说到这里,我不得不说一下,单片机的接线是非常自由的,因为是程序控制,无法就是改改端口而已,我只根据我的程序来说明接线,有基础的可以自己设计!
驱动芯片和电机连接好后,就是要把线固定好,留出要与单片机连接的8跟控制线。
也要注意给无线模块留一个小空间。
无线模块解说:
我们工作室一直使用的是433无线串口模块,具体型号和价格我会附在清单表里,现在我说下它的性能、这种无线模块最大的好处就是有较强的抗干扰性,2个模块直接可以设置ID,只有在一个ID号下的个模块才可以通信,而且可以实现一对多通信;而且这种模块是无需编程的,直接把数据发送到串口即可,模块会自动调制解调,就目前使用的情况而言,还没发现它有调制解调错误的时候,
可以说,在数据传输上,这个模块误码率还是极低的,不过需要注意的是,模块2次接收(发送)之间的间隔要大于200ms,这是非常重要的一个参数,如果想做高速数据传输的朋友请慎重选用!(本段文字来源于淘宝睿迪无线模块手册,本人也已经上传,也请读者尊重该店的著作权)。
模块的接线还是蛮简单的,电源2根线,数据线2根:TX(接单片机RX)、RX(接单片机TX),关于无线模块的设置方案,请参考淘宝睿迪无线
XL02-232AP1型号的资料手册。
模块在通电的一瞬间红灯绿灯同时会闪一下,然后熄灭,此时进入待机状态,模块发送数据时,红灯亮;接收数据时,绿灯亮。
组装好之后的图:
我用是12v蓄电池,接到驱动模块后,模块的5V输出又可以直接给无线模块和最小系统部分供电。
虽然看起来比较笨重,但是12V的电源,与一般的小车在速度和耐力上,都有了本质的提高!
遥控部分:
下面是原理图和hex代码,以后程序我会直接挂在网页上,仿真提供16进制文件
原理仿真.zip
原件清单.xls
源代码:
;接收程序
ORG 0 ;程序起始地址
SJMP STAR ;跳转到主程序
ORG 30H ;串口中断地址
sjmp loop ;跳转到中断服务程序
STAR:
MOV SP,#5FH ;设置堆栈
MOV SCON,#50H ;串行数据格式(详情请参考51手册)
MOV TMOD,#20H ;定时器工作方式(请参考51手册)
MOV PCON,#0 ;波特率不倍速(请参考51手册)
MOV TH1,#0fdH ;设置波特率在9600
MOV TL1,#0fdH ;设置波特率在9600
SETB EA ;开起中断
clr ET1 ;关闭定时1中断
SETB ES ;开起串口中断
SETB TR1 ;启动定时器1
mov a,#0 ;
mov p1,a ;设置初始值,即开机p1输出00h小车不动作main:
mov p1,a ;把a值给p1端口
sjmp main ;无限循环main程序
LOOP:
jnb ri,$ ;判断接收位是否接收完
clr ri ;接收完后清空接收位
mov a,sbuf ;发送的数据给a
reti ;返回后,a的值就会给p1
END
;发送程序
ORG 0 ;程序起始地址
SJMP START ;跳转到主程序
ORG 30H ;串口中断地址
START:
MOV SP,#5FH ;设置堆栈
MOV TMOD,#20H ;定时器工作方式(请参考51手册)MOV PCON,#0 ;波特率不倍速(请参考51手册)
MOV SCON,#50H ;串行数据格式(详情请参考51手册)MOV TH1,#0fdH ;设置波特率在9600
MOV TL1,#0fdH
setb EA ;开起中断
clr ET1 ;关闭定时1中断
setb ES ;开起串口中断
SETB TR1 ;启动定时器1
main:
lcall kcs ;调用按键扫描程序
jnz key ;有键按下则跳转到key程序段
sjmp main ;无限循环main程序
kcs:
mov p1,#0ffh ;p1给初值
mov a,p1 ;p1的数值给a
cpl a ;取反a
anl a,#0ffh ;与运算
ret
key:
lcall delay ;软件延时程序,按键去抖jb acc.0,send1
jb acc.1,send2
jb acc.2,send3
jb acc.3,send4
jb acc.4,send5
ret
DELAY:
MOV R5,#20
D1:MOV R6,#10
D2:MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
ret
send1:
mov r1,#10101010b ;前进指令sjmp send
send2:
mov r1,#01010101b ;后退指令sjmp send
send3:
mov r1,#01011010b ;左转指令sjmp send
send4:
mov r1,#10100101b ;右转指令sjmp send
send5:
mov r1,#00h ;停止指令
sjmp send
send:
MOV SBUF,r1 ;指令给sbuf
JNB TI,$ ;判断是否发送完
reti ;中断返回
END。