历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2021年12月16日 | 51单片机控制的手机蓝牙遥控小车设计

2021-12-16 来源:eefocus

废话不多说,先上实物图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、项目元件清单

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可以在应用市场搜 蓝牙串口助手

左转右转大概是90度 我的是四驱的,如果是只有一个l298N的话就把带2的删了

pwm有十级变速/


#include


#define Left_moto2_pwm P0_4 //接驱动模块ENA 使能端,输入PWM信号调节速度 左后轮

#define Right_moto2_pwm P0_5 //接驱动模块ENB 右后轮

#define Left_moto_pwm P1_4 //接驱动模块ENA 使能端,输入PWM信号调节速度 左前轮

#define Right_moto_pwm P1_5 //接驱动模块ENB 右前轮

#define uchar unsigned char

#define uint unsigned int


sbit P0_4=P0^4; //定义P0_4

sbit P0_5=P0^5; //定义P0_5

sbit P1_4=P1^4; //定义P1_4

sbit P1_5=P1^5; //定义P1_5


/电机驱动IO定义/

sbit IN1 = P1^2; //为1 左电机反转 前轮

sbit IN2 = P1^3; //为1 左电机正转 前轮

sbit IN3 = P1^6; //为1 右电机正转 前轮

sbit IN4 = P1^7; //为1 右电机反转 前轮

/*sbit EN1 = P1^4; //为1 左电机使能

sbit EN2 = P1^5; //为1 右电机使能 */


sbit IN5 = P0^2; //为1 左电机反转 后轮

sbit IN6 = P0^3; //为1 左电机正转 后轮

sbit IN7 = P0^6; //为1 右电机正转 后轮

sbit IN8 = P0^7; //为1 右电机反转 后轮

/*sbit EN3 = P0^4; //为1 左电机使能 后轮

sbit EN4 = P0^5; //为1 右电机使能 后轮 */


bit Right_moto_stop=1;

bit Left_moto_stop =1;

unsigned int time=0;

int pwm=1;


#define left_motor_en EN1 = 1 //左电机使能

#define left_motor_stops EN1 = 0 //左电机停止

#define right_motor_en EN2 = 1 //右电机使能

#define right_motor_stops EN2 = 0 //右电机停止


#define left_motor2_en EN3 = 1 //左电机使能 后

#define left_motor2_stops EN3 = 0 //左电机停止 后

#define right_motor2_en EN4 = 1 //右电机使能 后

#define right_motor2_stops EN4 = 0 //右电机停止 后


#define left_motor_go IN1 = 0, IN2 = 1//左电机正传

#define left_motor_back IN1 = 1, IN2 = 0//左电机反转

#define right_motor_go IN3 = 1, IN4 = 0//右电机正传

#define right_motor_back IN3 = 0, IN4 = 1//右电机反转


#define left_motor2_go IN5 = 0, IN6 = 1//左电机正传

#define left_motor2_back IN5 = 1, IN6 = 0//左电机反转

#define right_motor2_go IN7 = 1, IN8 = 0//右电机正传

#define right_motor2_back IN7 = 0, IN8 = 1//右电机反转


unsigned char pwm_val_left =0;//变量定义

unsigned char push_val_left =0;// 左电机占空比N/10

unsigned char pwm_val_right =0;

unsigned char push_val_right=0;// 右电机占空比N/10


void delay(uint z)

{

uint x,y;

for(x = z; x > 0; x–)

for(y = 114; y > 0 ; y–);

}


//蓝牙初始化

void UART_INIT()

{

SM0 = 0;

SM1 = 1;//串口工作方式1

REN = 1;//允许串口接收

EA = 1;//开总中断

ES = 1;//开串口中断

TMOD = 0x20;//8位自动重装模式

TH1 = 0xfd;

TL1 = 0xfd;//9600波特率

TR1 = 1;//启动定时器1

}


/************************************************************************/

void run(void) //pwm调速函数

{

push_val_left =pwm; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度

push_val_right =pwm; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度

if(pwm10) pwm=0;

if(pwm0&&pwm<0) pwm=0;


}


/***********************************************************************/

/ PWM调制电机转速 /

/***********************************************************************/


/* 左侧电机调速 */

/*调节push_val_left的值改变电机转速,占空比 */

void pwm_out_left_moto(void)

{

if(Left_moto_stop)

{

if(pwm_val_left<=push_val_left)

{ Left_moto_pwm=1;

Left_moto2_pwm=1; }

else

{ Left_moto_pwm=0;Left_moto2_pwm=0; }


if(pwm_val_left>=10)

pwm_val_left=0;

}

else { Left_moto_pwm=0;Left_moto2_pwm=0; }

}

/*****************************************************************/

/ 右侧电机调速 /

void pwm_out_right_moto(void)

{

if(Right_moto_stop)

{

if(pwm_val_right<=push_val_right)

{ Right_moto_pwm=1;

Right_moto2_pwm=1; }

else

{Right_moto_pwm=0;

Right_moto2_pwm=0;}

if(pwm_val_right>=10)

pwm_val_right=0;

}

else {Right_moto_pwm=0;Right_moto2_pwm=0; }

}

/**************************************************/

///TIMER0中断服务子函数产生PWM信号/

void timer0()interrupt 1 using 2

{

TH0=0XF8; //1Ms定时

TL0=0X30;

time++;

pwm_val_left++;

pwm_val_right++;

pwm_out_left_moto();

pwm_out_right_moto();

}


//小车前进

void forward()

{

ET0 = 1;

run(); //pwm 程序

left_motor_go; //左电机前进

right_motor_go; //右电机前进

left_motor2_go; //左电机前进 后轮

right_motor2_go; //右电机前进 后轮

}


void left_go() //左转

{

ET0 = 1;

run();

left_motor_back;

right_motor_go;

left_motor2_back;

right_motor2_go;

delay(700);

forward();

}

//右转

void right_go()

{

ET0 = 1;

run();

delay(50);

right_motor_back;

left_motor_go;

right_motor2_back;

left_motor2_go;

delay(700);

forward();

}

//小车左转圈

void left()

{

ET0 = 1;

run();

delay(50);

right_motor_go; // 右电机前进

left_motor_back; // 左电机后退

right_motor2_go; // 右电机前进

left_motor2_back; // 左电机后退

}


//小车右转圈

void right()

{

ET0 = 1;

run();

left_motor_go;

right_motor_back;

left_motor2_go;

right_motor2_back;

}


//小车后退

void back()

{

ET0 = 1;

run();

left_motor_back;

right_motor_back;

left_motor2_back;

right_motor2_back;

}


//小车停止

void stop()

{

ET0 = 0;

P1=0;

P0=0;

}


//串口中断

void UART_SER() interrupt 4

{

if(RI)

{

RI = 0;//清除接收标志

switch(SBUF)

{

case ‘g’: forward(); break;//前进

case ‘b’: back(); break;//后退

case ‘l’: left(); break;//左转圈

case ‘r’: right(); break;//右转圈

case ‘s’: stop(); break;//停止

case ‘z’: left_go(); break;//左转行驶

case ‘y’: right_go(); break;//右转行驶

case ‘p’: pwm++;break; //加速

case ‘c’: pwm–;break; //减速

}


    }

1

}


void main()

{

TMOD=0X01;

TH0= 0XF8; //1ms定时

TL0= 0X30;

TR0= 1;

ET0= 1;

EA = 1;

UART_INIT();//串口初始化

while(1);

}

推荐阅读

史海拾趣

Block USA Inc.公司的发展小趣事

在发展过程中,Block USA Inc.也面临着来自竞争对手和行业变化的挑战。然而,公司始终保持着创新精神,不断调整和优化产品与服务,以适应市场的变化。例如,面对数据安全和隐私保护的日益严格要求,Block加强了其数据保护措施,并公开承认了数据泄露事件并积极采取措施进行补救。同时,公司还继续拓展其业务边界,探索新的增长点,以保持其在电子行业中的竞争优势。

这些故事只是Block USA Inc.在电子行业发展历程中的一部分,它们展示了公司如何通过不断创新和拓展业务领域,逐步成为一家具有影响力的综合性电子企业。然而,随着市场的不断变化和竞争的加剧,Block仍需保持警惕并持续努力,以应对未来的挑战和机遇。

Broyce Control公司的发展小趣事

Broyce Control的故事始于1963年,当时创始人[XXXXX]在英国的一个工业小镇上开设了这家专注于控制面板制造的公司。起初,Broyce Control主要为当地的中小型工厂提供定制化的电气控制解决方案。由于[XXXXX]对电气技术的深刻理解和对工业应用的敏锐洞察,公司的产品在市场上迅速获得了认可。随着口碑的传播,订单量逐渐增加,Broyce Control逐渐积累起了一定的资本和技术储备。

ELECTRONIC ASSEMBLY公司的发展小趣事

在电子组装行业,品质是企业的生命线。一家名为“品质电子组装”的公司,从创立之初就坚持以品质为核心竞争力。公司引进了国际先进的生产设备和管理体系,建立了严格的质量控制体系,确保每一件产品都符合高标准、严要求。正是凭借着对品质的坚守和追求,品质电子组装赢得了客户的广泛赞誉和信赖,逐渐在行业中树立了良好的口碑。

C-MAC Automotive公司的发展小趣事

在电子行业的早期,C-MAC Automotive公司还是一家名不见经传的小企业。然而,随着电动汽车市场的兴起,公司敏锐地捕捉到了市场机遇。通过投入大量研发资源,C-MAC成功开发出一款高效稳定的电池管理系统,这一技术突破为公司的快速发展奠定了坚实基础。随着产品逐渐获得市场认可,C-MAC的订单量大幅增加,公司规模迅速扩大。

Bud Industries公司的发展小趣事

在电子行业快速发展的今天,C-MAC Automotive公司始终保持着对创新的追求。公司不断投入研发资金,探索新的技术方向和应用领域。通过持续创新,C-MAC成功推出了一系列具有竞争力的新产品,为公司的发展注入了新的动力。同时,公司还注重人才培养和团队建设,打造了一支高效、专业的研发团队,为公司的未来发展奠定了坚实基础。

这些故事虽然基于虚构,但反映了电子行业中许多企业发展的普遍规律。通过技术突破、战略合作、创新营销、全球化战略和持续创新等手段,企业可以不断提升自身竞争力,实现快速发展。

G-Mag Usa公司的发展小趣事

进入21世纪后,G-Mag意识到单一产品线难以满足市场多元化需求,于是开始实施并购扩张战略。2005年,G-Mag成功收购了国内一家领先的电子元器件制造商,这次收购不仅增强了G-Mag在供应链上的控制力,还为其带来了丰富的产品线和技术储备。随后几年,G-Mag又陆续完成了对多家在传感器、无线通信等领域具有优势企业的并购,逐步构建起了一个覆盖电子产业链上下游的庞大帝国。通过并购,G-Mag不仅实现了业务的快速增长,还巩固了其在电子行业中的领先地位。

问答坊 | AI 解惑

请推荐一款适用于红外遥控的编码、解码芯片

我是一个新手,请各位大哥大姐请推荐一款适用于红外遥控的编码、解码芯片, 最好是使用比较方便的那种。 谢谢!…

查看全部问答>

pic定时器0的初始值

void init_tmr0() {      T0CS=0;             //TMR0工作于定时器方式      T0IE=1;//Timer0中断允许      GIE=1;    &nbs ...…

查看全部问答>

寻深圳三星ARM芯片开发高手合作

1、项目说明: GPS+DVB-T,需要一位对三星ARM芯片精通的人才。主要负责底层驱动和UI界面、应用程序。跑win ce系统。有意者加好友详谈。 2、整个费用(面谈)分三次支付: 1)签订合同,支付小部分定金; 2)开发完成交予我方,支付大部分费用; ...…

查看全部问答>

有没有modelsim的高手,帮忙进来看看

本人新手,刚下载了个modelsim6.5,结果编译任何模块都出现:** Error: E:/modelsim SE 6.5/NAND.vhd(1): near \"module\": syntax  的错误,这是为什么啊? 请Verilog方面的大神出面指教,或者加我QQ:552104827,帮忙传个没问题的modelsim6 ...…

查看全部问答>

请教2407 FLASH烧写的问题

2407自己作的板子,烧写flash没问题:ok:flash sectors programmed 但擦除的时候出现问题: unexpected fatal error encountered which may have been caused by a stack overflow,out of memory condition, or access violation I\\\'m going ...…

查看全部问答>

如何在AQ430对MSP430IO口进行位操作?

请教,如何在AQ430对MSP430IO口进行位操作? 以前用过PIC 如果想对PA口的第一位操作 格式是 PORTAbits.RA0 不知道MSP的 如何操作IO口的位啊??…

查看全部问答>

新人求助关于cc1101与51单片机的连接问题

cc1101的供电电压是3.3v,也就是说VCC引脚一定得是3.3v,那么其他引脚可以和51单片机IO口直接相连吗(比如SI SO LK这些引脚)?还有就是cc1101发送DS18b20的温度数据时我发现网上都例程差不多都是发送8个字节,这是为何。望各位不吝赐教。…

查看全部问答>

stm32f103vet6可不可以用手机充电器供电???

手机充电器经过转换之后输出的电压在5V左右,大家有没有试过(PS:因为板子不是我的,所以不敢试验) 大家有试过的吱个声,好让我有个底…

查看全部问答>