遥控玩具汽车(附源码)

合集下载

智能小车循迹、避障、红外遥控C语言代码

智能小车循迹、避障、红外遥控C语言代码

智能小车循迹、避障、红外遥控C语言代码//智能小车避障、循迹、红外遥控 C 语言代码// 实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹, 1602 显示小车的工作状态,另有三个独立按键分别控制三种状态的转换// 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点#include <> #include <> #include"" #include <> #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" uchar ENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]=" run back stop left right "; ";//1602 显示数组H. H. H. uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong"; #define HW P2 #define PWM /****************************** P1 //红外传感器引脚配置P2k 口/* L298N 管脚定义*/ 超声波引脚控制******************************/ sbit ECHO=P3A2; sbit TRIG=P3A3;///// 红外控制引脚配置 sbit sbituchar KEY2=P3A7; KEY 仁 P3M;state_total=3,state_2=0;// 2 为红外遥控 ucharuchar time_1 uchar 局变量 // 超声波接收引脚定义 // 超声波发送引脚定义// 红外接收器数据线 // 独立按键控制总状态控制全局变量 state_1,DAT; // 红外扫描标志位time_1=0,time_2=0;// 定时器1 中断全局变量控制转弯延时计数也做延时一次time,timeH,timeL,state=0;// 超声波测量缓冲变量count=0;//1602 显示计数兼红外遥控按键state_total =2 兼循迹按键state_total= 0 自动避障 state_total=10 为自动循迹模块 1 为自动避障模块 time_ 2 控制 PWM 脉冲计数state 为超声波状态检测控制全uint /**************************/ unsigned char IRC0M[7]; // 红外接收头接收数据缓存unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; /********* voidvoid voidIRC0M[2 ]存放的为数据 // 红外接收缓存变量 **/ IRdelay(char x); //x* 红外头专用 delay run(); back();void stop(); void left_90(); void left_180(); void right_90(); void delay(uint dat); //void init_test();void delay_100ms(uint ms) ;void display(uchar temp); void bizhang_test(); void xunji_test(); void hongwai_test();void Delay10ms(void);void init_test()// 定时器 0{ 1 外部中断 // 超声波显示驱动 0 1 延时初始化 TMOD=0x11; TH1=0Xfe; TL1=0x0c; TF0=0; TF1=0; ET0=1; ET1=1; EA=1;// 设置定时器 0 1 // 装入初值定时一次为工作方式 1 16 位初值定时器2000hz// 定时器 // 定时器 // 允许定时器// 允许定时器 0 方式 1 计数溢出标志 1 方式 1 计数溢出标志 0 中断溢出 1 中断溢出//开总中断 if(state_total==1)// 为超声波模块时初始化 {TRIG=0; ECHO=0; EX0=0; IT0=1;}if(state_total==2)// 发射引脚低电平 // 接收引脚低电平 // 关闭外部中断// 由高电平变低电平,触发外部中断 0// 红外遥控初始化{ IT1=1; EX1=1;TRIG=1;}del ay(60);} void main(){ uint i; delay(50); init_test(); TR1=1; LCD1602_Init() ; delay(50); while(state_2==0)// 外部中断 1 为负跳变触发 // 允许外部中断 1 // 为高电平 I/O 口初始化// 等待硬件操作// 开启定时器 1{if(KEY1==0){Delay10ms(); // 消除抖动 if(KEY1==0) {state_total=0; // 总状态定义 0 为自动循迹模块 1 为自动避障模块2 为红外遥控while((i<30)&&(KEY1==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}}if(TRIG==0){while((i<30)&&(TRIG==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}if(KEY2==0){while((i<30)&&(KEY2==0))// 检测按键是否松开{Delay10ms(); i++; }i=0;// 检测按键 s1 是否按下//检测按键s2是否按下障模块Delay10ms(); // 消除抖动 if(TRIG==0) { state_total=1; 2 为红外遥控//总状态定义 0 为自动循迹模块 1 为自动避// 检测按键 s3 是否按下障模块Delay10ms(); // 消除抖动 if(KEY2==0) { state_total=2; 2 为红外遥控// 总状态定义 0 为自动循迹模块1 为自动避}}} init_test();delay(50); // 等待硬件操作50us TR1=0; // 关闭定时器 1 if(state_total==1) {//SPEED=90; bizhang_test();} if(state_total==0) {// SPEED=98; 电平// 自动循迹速度控制// 自动循迹速度控制高电平持续次数占空比为10 的低电平高电平持续次数占空比为40 的低xunji_test(); }if(state_total== 2){//SPEED=98; // 自动循迹速度控制高电平持续次数占空比为40 的低电平hongwai_test(); }void 断号init0_suspend(void)2 外部中断0 4 串口中断外部中断 1timeH=TH0;timeL=TL0;state=1;EX0=0;}void 断号0{if(state_total==1) { TH0=0X00;TL0=0x00;}if(state_total==0) { TH0=0Xec;TL0=0x78;time_1++;interrupt 0 //3 为定时器 1 的中断号 1 定时器0 的中// 记录高电平次数//// 标志状态为// 关闭外部中断1,表示已接收到返回信号//3 为定时器 1 的中断号2 外部中断0 4 串口中断time0_suspend0(void) interrupt 1外部中断 1// 自动避障初值装入// 装入初值// 自动循迹初值装入// 装入初值定时一次200hz// 控制转弯延时计数1 定时器0 的中}}void IR_IN(void){unsigned char j,k,N=0;EX1 = 0; IRdelay(5); if (TRIG==1) { EX1 =1; return;}//确认IR 信号出现//等IR 变为高电平,跳过 9ms 的前导低电平信号。

成功实现手机蓝牙控制智能小车机器人!视频+程序源代码(Android)

成功实现手机蓝牙控制智能小车机器人!视频+程序源代码(Android)

上次成功实现了通过笔记本电脑蓝牙来控制智能小车机器人的运动,但是通过电脑控制毕竟不方便,于是乎~本人打算将控制程序移植到手机上。

目前主流的手机操作系统有塞班、安卓(Android)、Windows Mobile,对比了一下,首先,塞班是用C++写的,这么多门语言我唯独看到C++就头大···,放弃了···,Windows Moblie 其实和之前发的电脑端程序基本是一样的,也就没什么意思了,最后决定选择目前正火的Android手机作为控制平台。

Android是个开源的应用,使用Java语言对其编程。

于是这次的开发我选用Eclipse作为开发工具,用Java语言开发手机端的控制程序,由于之前对Android的蓝牙通信这块涉及不多,一开始感觉有点小茫然,而网上也少有这方面的例程,有少数人做出了类似的东西,但是只传了个视频装X!雪特····经过几天的研究,最终确定了手机蓝牙通信其实就是Socket编程,再经过一番编写和调试,昨晚终于大功告成!这是视频:下面开始介绍Android手机端控制程序的编写:首先打开Eclipse,当然之前的Java开发环境和安卓开发工具自己得先配置好,这里就不多说了,网上教程一大摞。

然后新建一个Android项目,修改布局文件main.xml,代码如下:<?xml version="1.0" encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/widget0"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><Buttonandroid:id="@+id/btnF"android:layout_width="100px"android:layout_height="60px"android:text="前进"android:layout_x="130px"android:layout_y="62px"></Button><Buttonandroid:id="@+id/btnL"android:layout_width="100px"android:layout_height="60px"android:text="左转"android:layout_x="20px"android:layout_y="152px"></Button><Buttonandroid:id="@+id/btnR"android:layout_width="100px"android:layout_height="60px"android:text="右转"android:layout_x="240px"android:layout_y="152px"></Button><Buttonandroid:id="@+id/btnB"android:layout_width="100px"android:layout_height="60px"android:text="后退"android:layout_x="130px"android:layout_y="242px"></Button><Buttonandroid:id="@+id/btnS"android:layout_width="100px"android:layout_height="60px"android:text="停止"android:layout_x="130px"android:layout_y="152px"></Button></AbsoluteLayout>这个布局文件的效果就是如视频中所示的手机操作界面。

基于51单片机的遥控赛车设计

基于51单片机的遥控赛车设计

case(0x09):xc=0x40;;break; case(0x16):xc=0x02;break; case(0x0d):xc=0x08;;break; case(0x08):xc=0x11;break; case(0x5a):xc=0x44;break; case(0x42):xc=0x22;break; case(0x4a):xc=0x88;;break; default:break; } } delay(100); }
二、设计组成
1.硬件部分
赛车车轮及底盘、L289N 模块(两个)、51 单片机开发板、红外遥控器、导线若干、螺杆 螺母若干、南孚电池 4 节、充电宝一个。
赛车底盘
红外遥控
L289N 模块
51 单片机开发板
2、程序设计(基于 STM89C51 的程序设计)
开关:指示灯亮,小车停止运动 暂停:指示灯灭,小车停止运动 半前进: 前轮向前,后轮不动 半后退: 后轮向后,前轮不动
{
delay(1);
err--;
}
for(k=0;k<4;k++)
//共有 4 组数据
{
for(j=0;j<8;j++) //接收一组数据
{
err=60;
while((IRIN==0)&&(err>0))//等待信号前面的 560us 低电平过去
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
按键
数据码
开关
45H
Mode
46H

多功能电动智能小车(附电路图及源程序代码)、引力波的实验探测给我们的启示

多功能电动智能小车(附电路图及源程序代码)、引力波的实验探测给我们的启示

多功能电动智能小车学院:电子科学与工程学院一引言1.作品设计的目的:本次设计智能小车的目的是为了实践电路设计的方法和技巧,将书本中的理论知识运用到实践中去,做到活学活用,深入了解电子元器件及其他元器件的基本用途和使用方法,并且能够灵活快速的判断电路中出现的故障,学会独立设计电路,积累更多的设计经验,加强并掌握焊接的能力和技巧,完成预期的要求。

2.作品设计的意义:智能小车实质上是众所周知的简易机器人雏形。

机器人设计是一个极富挑战性的高技术密集型项目,融小车机械、机器人学、机电一体化、单片机、数据融合、精密仪器、实时数字信号处理、图象处理与图象识别、知识工程与专家系统、决策、轨迹规划、自组织与自学习理论、多智能体协调、以及无线通讯等理论和技术于一体,既是典型的智能机器人系统,又为研究发展多智能体系统、多机器人之间的合作与对抗提供了生动的研究模型。

机器人设计通过提供标准任务,使研究人员利用各种技术来获得最佳解决方案。

机器人设计所采用的理论与技术可应用于工业生产、自动化流水线、救援、教育等领域,从而有效推动国家科学技术等其他高、精、尖领域的发展本小组本次研制的多功能智能小车具有寻迹、避障、消防和转向指示功能,可用与探测火源以及到某些人类不便接近的地点执行特殊任务,同时也是在机器人研究领域做一次大胆尝试。

3简易智能小车的原理:以单片机为电路的中央处理器来处理传感器采集到的数据,处理完毕后通过电机驱动电路来驱动电机。

电源部分为整个电路模块提供动力。

整体电路共分为七个部分:MCU控制电路、电机驱动电路、电源供电电路、寻迹检测电路、避障检测电路、LED显示部分,探测火源与灭火部分。

二总体方案设计(1)电动车车体的选择方案一:自制小车。

可在车模店选购配件组装,或者自行加工。

优点:这种方法能够制作出完全符合自身设计意图的车体。

缺点:需要较多时间和高水平的加工工艺。

方案二:配置成品的玩具电动小汽车。

优点:较方便。

缺点:不完全符合使用要求,需要做大量修改。

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于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(负极)都必须是接在一起的。

基于51单片机的红外遥控智能小车源程序(C语言)

基于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时,忙,等待。

智能小车源代码

智能小车源代码

资料范本本资料为word版本,可以直接编辑和打印,感谢您的下载智能小车源代码地点:__________________时间:__________________说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时请详细阅读内容#include<reg51.H>#include <intrins.h>//#include"lcd.h"sbit TX=P2^7;sbit RX=P2^6;sbit PWM=P1^4;sbit Beep=P3^7;sbit led1=P3^3;sbit led2=P3^4;sbit led3=P3^5;/***********蓝牙切换按键**********/sbit k1=P3^6;/***自定义一些数据,注意这些数据对应“51智能车蓝牙无线遥控.exe”软件上的数据设置**/#define leftdata 0x11#define rightdata 0x22#define forwarddata 0x33#define backdata 0x44#define stopdata 0x55#define uchar unsigned char#define uint unsigned intunsigned char receiveData,high_velosity,low_velosity;void UsartConfiguration();/***********电机端口定义************************/sbit IN1=P1^0; //为高电平时,左电机后转sbit IN2=P1^1; //为高电平时,左电机正转sbit IN3=P1^2; //为高电平时,右电机正转sbit IN4=P1^3; //为高电平时,右电机后转/**************无线遥控模块定义****************/sbit Key_A = P2^0; //B键信号端对应D0 sbit Key_B = P2^1; //D键信号端对应D1 sbit Key_C = P2^2; //C键信号端对应D2 sbit Key_D = P2^3; //C键信号端void delay0(int a);void delay15us(void);void delay1ms(int z);void di(); //蜂鸣器函数声明unsigned int time;//用于存放定时器时间值unsigned int S; //用于存放距离的值char flag =0; //量程溢出标志位char f1,f2,f3,f4,n0;int a;int n;//运行次数判断标志int s_left,s_right;void Delay10us(unsigned char i){unsigned char j;do{j = 10;do{_nop_();}while(--j);}while(--i);}/**************************************************************** *****************************//*****************电机程序********************//**************************************************************** ****************************/void loop(){IN1=1; //左电机IN2=0;IN3=1; //右电机IN4=0;}void runfront(){IN1=1; //左电机IN2=0;IN3=0; //右电机IN4=1;}//小车后退函数void runback(){IN1=0; //左电机IN2=1;IN3=1; //右电机IN4=0;}//小车左转void runleft(){IN1=0; //左电机IN2=0;IN3=0; //右电机IN4=1;}//小车右转void runright(){IN1=1; //左电机IN2=0;IN3=0; //右电机IN4=0;}////小车左后转//void runbackleft()//{// IN1=0; //左电机// IN2=0;// IN3=0; //右电机// IN4=1;//}////小车右后转//void runbackright()//{// IN1=1; //左电机// IN2=0;// IN3=0; //右电机// IN4=0;//}//小车停止函数void stop(){IN1=0; //左电机IN2=0;IN3=0; //右电机IN4=0;}/**************************************************************** *****************************//***********蓝牙程序************//**************************************************************** ****************************/void delay(unsigned int a){unsigned int b;for(;a>0;a--)for(b=3;b>0;b--);}//左电机转void left_motor_runfront(unsigned int a){IN1=1; //左电机IN2=0;delay(a);IN1=0;IN2=0;delay(100-a);}void right_motor_runfront(unsigned int a){IN3=0; //右电机IN4=1;delay(a);IN3=0;IN4=0;delay(100-a);}void left_motor_back(unsigned int a) {IN1=0; //左电机IN2=1;delay(a);IN1=0;IN2=0;delay(100-a);}void right_motor_back(unsigned int a) {IN3=1; //右电机IN4=0;delay(a);IN3=0;IN4=0;delay(100-a);}void left_motor_stop(){IN1=0; //左电机IN2=0;}void right_motor_stop(){IN3=0; //左电机IN4=0;}//PWM调速void PWM_RUNFRONT(unsigned int a,unsigned int b) //a 属于0~100{left_motor_runfront(a);right_motor_runfront(b);}void PWM_RUNBACK(unsigned int a,unsigned int b) //a 属于0~100{left_motor_back(a);right_motor_back(b);}void PWM_RUNLEFT(unsigned int a) //a属于0~100 {right_motor_runfront(a);left_motor_stop();}void PWM_RUNRIGHT(unsigned int a) //a属于0~100 {right_motor_stop();left_motor_runfront(a);}void bluestop(){left_motor_stop() ;right_motor_stop() ;}void UsartConfiguration(){SCON=0X50; //设置为工作方式1TMOD=TMOD|0x21; //设置计数器工作方式2PCON=0X80; //波特率加倍TH1=0XFA; //计数器初始值设置,注意波特率是4800的TL1=0XFA;ES=1; //打开接收中断EA=1; //打开总中断TR1=1;TH0=0;TL0=0;ET0=1; //打开计数器}/**************************************************************** **************** 函数名 :Delay(unsigned int i)* 函数功能 : 延时函数* 输入 : 无* 输出 : 无***************************************************************** **************/void Usart() interrupt 4{receiveData=SBUF;//出去接收到的数据RI = 0;//清除接收中断标志位if(receiveData==0x66){low_velosity=1;high_velosity=0;// write_com(0x80);}if(receiveData==0x77){low_velosity=0;high_velosity=1;}}/**************************************************************** *****************************//***********舵机程序************//**************************************************************** ****************************/void delayx(int t){char j;for(;t>0;t--)for(j=19;j>0;j--);}void degree0(){int i;for(i=0;i<10;i++){PWM=1;delayx(10);//1msPWM=0;delayx(390);//19ms}}void degree90(){int i;for(i=0;i<10;i++){PWM=1;delayx(24);//50PWM=0;delayx(376);//18.5ms}}void degree180(){int i;for(i=0;i<15;i++){PWM=1;delayx(40);//1.5msPWM=0;delayx(360);//18.5ms}}/**************************************************************** *****************************//**************超声波程序**************//**************************************************************** *****************************//****A键被按下后,前进*****/void Count1(void){time=TH1*256+TL1;TH1=0;TL1=0;S=(time*1.7)/100; n++;if(S<=30&&n==1) {led1=0;stop();degree0();di(); }if(S>30&&n==1) {led1=1;runfront();n=0;}if(n==2){s_left=S;degree180();di(); }if(n==3){s_right=S; degree90();di();n=0; //标志位清零if(s_left>s_right){led2=1;delay1ms(50);led2=0;delay1ms(50);runright();delayx(1250);}else{led3=1;delay(800);led3=0;delay(500);runleft();delayx(1250);}}}/********超声波高电平脉冲宽度计算程序***************/void Timer_Count(void){TR1=1; //开启计数while(RX); //当RX为1计数并等待TR1=0; //关闭计数//Count1(); //计算}/********************************************************/ void StartModule() //启动模块{TX=1; //启动一次模块Delay10us(2);TX=0;}/**************************************************************** *****************************//********************主程序*******************//**************************************************************** *****************************/void main(void){UsartConfiguration();while(1){if(k1==0&&n0==0){delay1ms(20);if(k1==0){n0++;}}else if(k1==0&&n0==1){delay1ms(20);if(k1==0){n0--;}}if(n0==0){if(Key_B==0&&Key_D==0&&Key_C==0&&Key_A==1) //A键被按下{f1=1;f2=0;f3=0;f4=0;di();}else if(Key_A==0&&Key_D==0&&Key_B==1&&Key_C==0) //B键被按下{f1=0;f2=1;f3=0;f4=0;di();}else if(Key_B==0&&Key_D==0&&Key_A==0&&Key_C==1) //C键被按下{f1=0;f2=0;f3=1;f4=0;di();}else if(Key_D==1&&Key_B==0&&Key_A==0&&Key_C==0) //D键被按下{f1=0;f2=0;f3=0;f4=1;di();}if(f1)StartModule();for(a=951;a>0;a--) {if(RX==1){Timer_Count(); Count1();}}}if(f2){runback();}if(f3){loop();}if(f4){stop();}}if(n0==1)if(low_velosity){switch(receiveData){case leftdata: PWM_RUNLEFT(30); break; case rightdata: PWM_RUNRIGHT(30); break; case forwarddata: PWM_RUNFRONT(64,70); break; case backdata: PWM_RUNBACK(64,70); break; case stopdata: bluestop(); break; }}if(high_velosity){switch(receiveData){case leftdata: PWM_RUNLEFT(50); break; case rightdata: PWM_RUNRIGHT(50); break; case forwarddata: PWM_RUNFRONT(94,100); break; case backdata: PWM_RUNBACK(94,100); break; case stopdata: stop(); break;}}}}/*****************蜂鸣器*********************/ void di(){int i;for(i=0;i<150;i++){Beep= 1;delay0(20);}Beep=0;}void delay0(int a){char j;int i;for(i=a; i > 0; i--)for(j = 200; j > 0; j--);}void delay1ms(int z) //延时1ms{int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。

基于MSP430红外遥控小车的设计与开发(开发文档,源代码,电路图)

基于MSP430红外遥控小车的设计与开发(开发文档,源代码,电路图)
图 3-1 ULN2003 芯片驱动步进电机图
方案二:采用 L298N 芯片驱动电机,只需通过单片机产生 PWM 波即可驱动电 机,而且可以同时驱动两个直流电机同时工作,最大输入电压可达 50V,驱动能 力较大。并且可以通过四个输入端口对电机的正反转进行控制,符合遥控小车的 要求,选用方案二。
3.5 显示模块方案选择:
2.6.3 外形尺寸图:
2.7 基本方案论证:
本设计以单片机 MSP430F149 为控制核心,电路主要分为红外发送电路和 红外接收控制电路,红外发送电路包括方向按键电路和红外管发射电路;接收及 控制电路包括红外接收电路,lcd 显示电路,电机驱动电路和计程模块。PC838 一体化红外接收头接收遥控器发射的红外型号,并传送给单片机,单片机根据已 定的协议对车体运行进行控制,并通过计程模块对小车行使的路程进行实时的采 集,通过 LCD 显示。
3.6 计程模块方案选择:
方案一:采用 ST151 计程,ST151 由发光管和光敏元件构成,发光管发 光可导通光敏元件,输出端口输出高电平。在发光管和光敏元件间加一挡板,阻 止光敏元件导通,输出端输出低电平。可以在车轮侧面加挡板,通过 ST151 进
行测距离。 方案二:采用 ON2171 计程,ON2171 原理与 ST151 相同,但其体积小,
3.7.3 红外接收模块 红外接收模块采用一体化红外接收头 PC838,用 3.3V 供电,在电源和地
之间加 104 的滤波电容,消除电源波纹对接受效果的影响。其输出引脚直接接 单片机的 P13 口。电路图如下:
3.7.4 LCD 显示模块 LCD 显示模块用来显示小车的运行状态和行程,Nokia5110lcd 显示屏体
考虑到遥控小车在实际运行中要的灵活性和快速性的要求,最终选择方案二。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线遥控玩具汽车(附源码)
来源:网友投稿作者:伟翔电子徐增钟字号:[大中小]
声明:本文为徐增钟原创作品,如需转载请通过本站联系作者
笔者从事无线遥控玩具开发工作多年,开发了很多种类的无线遥控玩具产品。

总结了很多工作经验。

用的绝大部分IC是TX2C(遥控)和RX2C(接收),其功能分别是:前进,后退,左转,右转。

笔者利用工作的空闲时间用AT89C2051单片机编出了跟TX2C和RX2C一样的编解码程序,并成功进行了实际制作。

编解码与TX2C和RX2C兼容。

现将制作原理图和源程序公开给读者参考学习与制作,相信对初学者有极大的帮助,这也是笔者的心愿!其原理图如下:图2为接收部分,图3为发射部分。

源程序和仿真文件见附件。

(源程序下载仿真文件下载)读者如果想仿制的话,建议RF接收和RF发射部使用市面上成品的315MHz 模块,应用起来很方便,这样可以免去调试高频部分。

下面图1是遥控前进部分编码波形:
从编码图1中看出有四个周期一样的同步脉冲,各个功能是按数据脉冲个数的不同实现功能不同的。

这样编码有很强的搞干扰能力,也可以应用到其它领域遥控上面去,可以做成遥控飞机,也可以做成遥控船……这要看读者的需要应用了。

具体功能相应编码以下:
前进:同步脉冲+10个数据脉冲
后退:同步脉冲+40个数据脉冲
左转:同步脉冲+64个数据脉冲
右转:同步脉冲+58个数据脉冲
前进+左转:同步脉冲+34个数据脉冲
前进+右转:同步脉冲+28个数据脉冲
后退+左转:同步脉冲+46个数据脉冲
后退+右转:同步脉冲+52个数据脉冲
按键松开时发送2帧停止位:同步脉冲+4个数据脉冲。

接收部分收到的是反相的信号,读者在制作时要注意。

图二(点击放大)
徐增钟 2008.05.18于深圳。

相关文档
最新文档