51循迹小车

51循迹小车

材料:
1.两个亚克力板
2.4个轮子
3.4个电机
4.51最小系统
5.2个L298N
6.两个红外对管
7.杜邦线
第一步

按图所示将电机,轮子,亚克力板安装好
按图所示将电机,轮子,亚克力板安装好
第二步
了解学习并安装L298N模块
L298N模块的样式有很多种但是性质都是一样的,它的作用是驱动电机 他所需的电源电压需要7V到12V效果甚佳,需要注意的是电压在5v左右或者更小是驱动不了电机的电压太大车速过快容易出轨然后是连线L298N上写MOTORA/B,或者写OUT的为连接电机的口,对于电机的正负极不同的接入可以用来调整电机的转向
(可以当作调整轮子转向的物理方法),板子上写ENA ENB为使能接口连接程序中设定的IO口,IN1,IN2,IN3,IN4同样连接程序中设定的IO口,L298N上5V连接单片机上的VCC即可,L298N上VMS(+极),GND(-极)连接7V左右电压的电源
作者用的是差速转弯,所以L298N接的是同一侧的轮子。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步
了解学习并安装红外对管,红外对管三个管口 ,一个为输出信号连接程序定义的IO口即可,另外两个为正负极连接单片机的5V,GND即可,红外对管的灵敏度可以通过拧类似螺母的东西调节
工作原理
一个管口发射红外线,另一个接受红外线。此时为高电平状态,当沿着黑色胶布循迹时由于红外线有部分被黑胶布吸收导致此时为低电平。当然,有时也会受到白炽灯中的红外线干扰。只是这种影响是微乎其微的。使用时对管垂直于地面并2~3cm处。

在这里插入图片描述
最后连接的成品
在这里插入图片描述

再强调一下供电啊(方法不唯一)俺滴是单片机用5V,L298N用7V往上的,不要太大啊。作者大大在L298N供电那加了个DC电源模块(方法不唯一,可以自己焊一个供电的电路板如下图所示)
在这里插入图片描述

在这奉上作者大大的代码

#include "reg52.h"

sbit in1   = P1^2; 
sbit in2   = P1^3;
sbit in3   = P1^4; 
sbit in4   = P1^5;
sbit in5   = P2^2; 
sbit in6   = P2^3;
sbit in7   = P2^4; 
sbit in8   = P2^5;
sbit ENA   = P1^0;//左边两个电机的使能
sbit ENB   = P1^1;//右边两个电机的使能    矢能端为1控制电机转动 
sbit ena   = P2^0;//左边两个电机的使能     矢能端为0电机不转 
sbit enb   = P2^1;//右边两个电机的使能
sbit lse1  = P3^0;//左边红外传感器的数据口
sbit lse2  = P3^1;//右边红外传感器的数据口

typedef unsigned char u8;
typedef unsigned int u16;
void delay(u16 i)
{
    while(i--);
}

void go()
{   
    ENA=1;
    ENB=1;
    ena=1;
    enb=1;
    in1   = 1;
    in2   = 0;
    in3   = 1;
    in4   = 0;
    in5   = 1;
    in6   = 0;
    in7   = 1;
    in8   = 0;
}

void ting()
{   
    in1  = 0;
    in2  = 0;
    in3  = 0;
    in4  = 0;
    in5  = 0;
    in6  = 0;
    in7  = 0;
    in8  = 0;
}

void zuozhuan(void)
{ 
    ENA=1;
    ENB=1;
    ena=1;
    enb=1;
    in1  = 1;
    in2  = 0;
    in3  = 1;
    in4  = 0;
    in5  = 0;
    in6  = 1;
    in7  = 0;
    in8  = 1;   
}

void youzhuan(void)
{ 
    ENA=1;
    ENB=1;
    ena=1;
    enb=1;
    in1  = 0;
    in2  = 1;
    in3  = 0;
    in4  = 1;
    in5  = 1;
    in6  = 0;
    in7  = 1;
    in8  = 0;
}
void xj()
{   
    unsigned char count;
    if((lse1==0)&&(lse2==1))
    {
     count = 0;//左边检测到黑线
    }
    else if((lse1==1)&&(lse2==0))
    {
    count = 1;//右边检测到黑线
 }
    else if((lse1==1)&&(lse2==1))
 {
    count = 3;
 }
 else if(lse1==0&&lse2==0)
 {
    count = 4;
 }
  switch(count)
 {
    
  case 0:
    ting();
	delay(50);
	zuozhuan();
	delay(20); 
  break;

  case 1:
    ting();
	delay(40);
	youzhuan();
	delay(20);  
  break;

  case 3:
    ting();
	delay(40);
	go();
	delay(20);  
  break;

  case 4:
    ting();
	delay(40);
	go();
	delay(15);
  break;

 }
}
void main()
{
 while(1)
 {
  xj() ;
 }
}

最最最后,你们做完之后可能出现一个轮子转,电机有声音但是不转,不能循迹等等一系列不良反应。这就需要在座的各位去想一想,硬件工程师需要积累。
祝各位好运!

### Arduino循迹传感器的使用教程与接线方法 #### 一、硬件准备 为了实现Arduino控制循迹传感器的功能,需要以下材料: - Arduino开发板(如Uno) - 循迹传感器模块 - 连接导线若干 - 面包板(可选) #### 二、接线方式 根据引用中的描述[^1],以下是具体的接线说明: | 功能 | Arduino引脚 | 循迹传感器引脚 | |---------------|-------------------|----------------| | 输出信号 | 数字输入引脚(如9) | OUT | | 电源正极 | 5V | VCC | | 地 | GND | GND | 注意:实际应用中可能涉及多个循迹传感器的同时使用。此时需分别连接各模块的OUT至同的数字输入引脚。 #### 三、代码示例 以下是一个简单的程序用于检测黑色轨迹并驱动LED指示灯亮起或熄灭。 ```cpp const int trackingPin = 7; // 定义循迹传感器的输入引脚 const int ledPin = 13; // 定义LED输出引脚 void setup() { pinMode(trackingPin, INPUT); // 设置trackingPin为输入模式 pinMode(ledPin, OUTPUT); // 设置ledPin为输出模式 } void loop() { int val = digitalRead(trackingPin); // 读取循迹传感器的状态 if (val == HIGH) { // 如果检测到白色区域 digitalWrite(ledPin, LOW); // 关闭LED } else { // 如果检测到黑色区域 digitalWrite(ledPin, HIGH); // 打开LED } } ``` 此代码逻辑简单明了,适用于单个循迹传感器的应用场景[^2]。 #### 四、注意事项 1. **调整灵敏度** 在实际操作过程中,可通过调节循迹传感器上的可调电阻来改变其敏感程度,从而适应同材质表面以及光线条件下的工作环境[^3]。 2. **安装方向** 红外发射接收装置应面向地面或其他待测平面,否则可能导致无法正常获取数据。 3. **多模块协同工作** 当项目需求复杂化时,可以增加更多数量的循迹传感器以提高精度。例如,在机器人底盘两侧布置两个以上传感器,则能够更精准地追踪路径曲线走向。 --- ###
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值