前言
本项目可实现小车红外循迹,L9100s电机驱动,避障,蓝牙控制等功能的切换。
基本概述
硬件准备
51单片机stc12c5a60s2、电机模块L9110S、红外避障模块、循迹模块、蓝牙模块、杜邦线若干、
也可以准备一个面包板。
功能
蓝牙控制小车、小车的避障、循迹
模块介绍
电机模块L9110S
接线说明:
我们以L9110s电机驱动模块为新手小白讲一下这些模块怎么接线,后面就不多赘述模块如何接线了。模块通常的引脚就是VCC,GND,以及其他的控制或信号引脚。VCC就是模块的电源正极(大多数的模块都是5V供电,具体的参考模块说明书),接到单片机最小系统的VCC引脚上。GND就是模块的负极,接到单片机最小系统的GND引脚上。VCC或GND也可接到通过面包板引出的正负极上。剩下的引脚就接到单片机的IO口上即可。
L0110S模块的A、B分别控制着两个电机,如果需要控制四个电机,则需要两个L0110S模块
- 当B-1A为高电平,B-2A为低电平时,电机反转或正转
- 当B-1A为低电平,B-2A为高电平时,电机正转反转
- 当B-1A为低电平,B-2A为低电平时,电机不转
- 电机的正转和反转与跟电机的接线不同而不同,注意自己调试
循迹模块(TCRT5000传感器)
- 当发射出的红外线没有被反射回来或被反射回来但强度不够大时,DO输出高电平,灯灭。 黑色吸收红外线,DO输出高电平,灯亮
- 当发射出的红外线被反射回来或被反射回来且强度足够大,DO输出低电平,灯亮。 白色反射红外线,DO输出低电平,灯亮
- 即黑色输出高电平,灯灭,白色输出低电平,灯亮
红外避障模块
- 当发射出的红外线没有被反射回来或被反射回来但强度不够大时,DO输出高电平,灯灭。没有障碍物
- 当发射出的红外线被反射回来,DO输出低电平,灯亮。有障碍物
- 即有障碍物输出低电平,灯亮,没有障碍物输出高电平,灯灭
遥控小车(使用蓝牙模块,通过串口发送信息控制小车移动)
#include "reg52.h"
#include "string.h"
#define SIZE 12
sbit RightCon1A = P1^0;
sbit RightCon1B = P1^1;
sbit LeftCon1A = P1^2;
sbit LeftCon1B = P1^3;
sfr AUXR = 0x8E;
char buffer[SIZE];
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit(void) //9600bps@11.0592MHz
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1; //启动定时器
EA = 1;//开启总中断
ES = 1;//开启串口中断
}
void goForward()
{
LeftCon1A = 0;
LeftCon1B = 1;
RightCon1A = 0;
RightCon1B = 1;
}
void goRight()
{
LeftCon1A = 0;
LeftCon1B = 1;
RightCon1A = 0;
RightCon1B = 0;
}
void goLeft()
{
LeftCon1A = 0;
LeftCon1B = 0;
RightCon1A = 0;
RightCon1B = 1;
}
void goBack()
{
LeftCon1A = 1;
LeftCon1B = 0;
RightCon1A = 1;
RightCon1B = 0;
}
void stop()
{
LeftCon1A = 0;
LeftCon1B = 0;
RightCon1A = 0;
RightCon1B = 0;
}
//M1qian M2 hou M3 zuo M4 you
void Uart_Handler() interrupt 4
{
static int i = 0;//静态变量,被初始化一次
char tmp;
if(RI)//中断处理函数中,对于接收中断的响应
{
RI = 0;//清除接收中断标志位
tmp = SBUF;
if(tmp == 'M'){
i = 0;
}
buffer[i++] = tmp;
//灯控指令
if(buffer[0] == 'M'){
switch(buffer[1]){
case '1':