小伤口 发表于 2021-6-19 01:33:51

51小车设计:循迹+遥控

本帖最后由 小伤口 于 2021-12-12 17:46 编辑

51小车设计:循迹+遥控





外观

演示视频请看评论下方

小车



软件(并不是我写的)



零件

一个小车底板,两个减速电机,一个 51 最小系统(气人的是买来的竟然是坏的,
最后只好自己焊了一个),两个红外对管,一个 L298N 电机驱动模块
一个 12 V 的锂电池,若干根杜邦线

各个模块的作用

红外对管



传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来的强度不够大,
光敏三极管就会处于关断状态(表示开关断开时,电路处于无电的状态。),此时模块输出端为低电平,
指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,
光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。


发射的红外线遇到黑线被吸收因此可以通过这个原理达到循迹的效果

L298N驱动模块



L298N 是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在 6 V 到 46 V 的电压范围内,提供 2 安培的电流,并且具有过热自断和反馈检测功能。

L298N 可对电机进行直接控制,通过主控芯片的 I/O 输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。

然后通过 51 单片机可以控制正反转根据 PWM 来控制电机的速度,两个电机不同的转速就可以实现转弯

HC-06



用串口通信通过蓝牙接受蓝牙发送的二进制数据来达到控制的效果

代码

主代码( C 语言)
#include <AT89X52.H>
#include "UART.h"
#include "timer0.h"

typedef unsigned int uint;
typedef unsigned char uchar;
uint Su_Ju = 0;

sbit Moter_1=P0^1;
sbit Moter_2=P0^2;
sbit Moter_3=P0^3;
sbit Moter_4=P0^4;
sbit XunJi_1=P1^0;
sbit XunJi_2=P1^1;
unsigned char counter_1,shudu_1,shudu_2,behind_1,behind_2;
void main()
{
        unsigned char Mo_Shi=0;
        UART_Init();
        Timer0_Init();
        while(1)
        {
                if (Su_Ju==0x35 ||Su_Ju==0x36)//遥控模式
                {
                        Mo_Shi=        Su_Ju;
                }
                if (Mo_Shi==0x35)//遥控模式
                {
                        if (Su_Ju==0x30)//向左
                        {
                                behind_1=1;
                                behind_2=0;
                                shudu_1=100;
                                shudu_2=50;
                        }
                        if (Su_Ju==0x31)//向右
                        {
                                behind_1=1;
                                behind_2=0;
                                shudu_1=40;
                                shudu_2=90;
                        }
                        if (Su_Ju==0x32)//向后
                        {
                                behind_1=1;
                                behind_2=0;
                                shudu_1=100;
                                shudu_2=90;
                        }
                        if (Su_Ju==0x33)//向前
                        {
                                behind_1=0;
                                behind_2=1;
                                shudu_1=100;
                                shudu_2=90;
                        }
                       
                        if (Su_Ju==0x34)//停止
                        {
                                behind_1=0;
                                behind_2=0;
                        }
                       
                }
                if (Mo_Shi==0x36)//循迹模式
                {
                        behind_1=1;
                        behind_2=0;
                        if (XunJi_1==0&&XunJi_2==0)
                        {
                                shudu_1=20;
                                shudu_2=20;
                        }
                        if (XunJi_1==0&&XunJi_2==1)//左
                        {
                                shudu_1=60;
                                shudu_2=0;
                        }
                        if (XunJi_1==1&&XunJi_2==0)//右
                        {
                                shudu_1=0;
                                shudu_2=60;
                        }
                }
        }
               
}
void TIMER_Interrupt()interrupt 1
{
        TL0= 0x9C;                //设置定时初值
        TH0 = 0xFF;                //设置定时初值
        counter_1++;
        counter_1%=100;
        if (counter_1<shudu_1)
        {
                                Moter_1=behind_1;
                                Moter_2=behind_2;                               
               
        }
        else
        {
                        Moter_1=0;
                        Moter_2=0;
        }
       
       
        if (counter_1<shudu_2)
        {
                                Moter_3=behind_1;
                                Moter_4=behind_2;                               
        }
        else
        {
                        Moter_3=0;
                        Moter_4=0;
        }
       
}
void UART_Interrupt() interrupt 4
{
        Su_Ju=SBUF;
        RI=0;
        SBUF = Su_Ju;    //手机和蓝牙模块通讯时,我们可以打开电脑串口调试工具查看我们的发送值)
        while(!TI);
        TI = 0;
}
整个文件
**** Hidden Message *****
宣传



欢迎大家关注小伤口的微信公众号

懒狗李 发表于 2021-6-19 16:14:56

{:10_256:}

hornwong 发表于 2021-6-19 19:19:15

{:5_95:}

龙舞九天 发表于 2021-6-19 20:36:26

{:10_254:}哈喽!

noah-py 发表于 2021-6-20 09:48:17

{:10_275:}

小伤口 发表于 2021-6-20 09:51:46

龙舞九天 发表于 2021-6-19 20:36
哈喽!

hello{:10_254:}

16beat 发表于 2021-6-20 15:04:40

{:5_108:}

庚午 发表于 2021-6-21 08:58:05

{:5_108:}

划句顾 发表于 2021-6-21 09:52:06

学习一下{:10_257:}NIce!

Dragon910623 发表于 2021-6-21 13:02:27

?

51Arduino32 发表于 2021-6-21 15:47:24

开始进军硬件了吗{:10_277:}

小伤口 发表于 2021-6-21 16:47:06

51Arduino32 发表于 2021-6-21 15:47
开始进军硬件了吗

不过会的知识太少了{:10_266:}

kardpan 发表于 2021-6-21 22:19:37

666666666666666666666

htf 发表于 2021-6-21 23:32:24

{:10_279:}

连帅帅 发表于 2021-6-22 09:14:11

可以的,不断学习,充实自己,加油{:10_265:}

沉默mn 发表于 2021-6-22 15:52:30

666

鱼c123456 发表于 2021-6-22 18:00:33

感谢分享!

爱鱼儿ad 发表于 2021-6-22 21:15:53

昨非 发表于 2021-6-22 21:35:39

{:10_330:}

小伤口 发表于 2021-6-23 09:12:00

昨非 发表于 2021-6-22 21:35


好久没看 you 了{:10_254:}
页: [1] 2 3
查看完整版本: 51小车设计:循迹+遥控