51智能小车黑线寻迹(防出线)

51智能⼩车⿊线寻迹(防出线)
实验需要pwm的知识,实验⽤到的传感器主要就是RPR220传感器;实验原理就是左右两个传感器通过对红外光进⾏判断,如果是⿊线的话输出0,否则输出1
实验之前需要调节左右两个电位器,⽤⼀根宽度为2.6厘⽶的⿊线尽量将左右两个LED的调到碰到⿊线同时灭,离开⿊线同时亮
通过原理图到关于实验的两个控制引脚为P3^2,P3^3;其中还要定义蜂鸣器和矩阵键盘的引脚
#ifndef __QXA51_H__
#define __QXA51_H__
/*电机驱动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 left_led1=P3^3;//左寻迹信号为0没有识别到⿊线为1识别到⿊线
sbit right_led1=P3^2;//右寻迹信号为0没有识别到⿊线为1识别到⿊线
sbit beep=P2^3;
sbit key_s2=P3^0;
#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_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 //右电机反转
#endif
#include <REGX52.H>
#include <QXA51.H>
unsigned char pwm_left_val = 150;//左电机占空⽐值取值范围0-170,0最快unsigned char pwm_right_val = 150;//右电机占空⽐值取值范围0-170 ,0最快unsigned char pwm_t;//周期
void delay(unsigned int z)//毫秒级延时
{
{
unsigned int x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
/*⼩车前进*/
void forward()
{
left_motor_go; //左电机前进
浮选机叶轮盖板right_motor_go; //右电机前进
}
/*⼩车左转*/
void left_run()
{
left_motor_stops; //左电机停⽌
right_motor_go; //右电机前进
}
/*⼩车右转*/
void right_run()
{
right_motor_stops;//右电机停⽌
left_motor_go;    //左电机前进
}
/*⼩车后退*/
void backward()
{
left_motor_back; //左电机后退
right_motor_back; //右电机后退刻字笔
}
食品安全检测试纸
//定时器0中断
void timer0() interrupt 1
{
pwm_t++;//周期计时加
if(pwm_t == 255)
pwm_t = EN1 = EN2 = 0;
if(pwm_left_val == pwm_t)//左电机占空⽐
EN1 = 1;
if(pwm_right_val == pwm_t)//右电机占空⽐
EN2 = 1;
}
void main()
{
for(;;) //死循环
{
if(key_s2 == 0)// 实时检测S2按键是否被按下
{
delay(5); //软件消抖
if(key_s2 == 0)//再检测S2是否被按下
{
while(!key_s2);//松⼿检测
IKRTVbeep = 0; //使能有源蜂鸣器
delay(200);//200毫秒延时
beep = 1; //关闭有源蜂鸣器
break;  //退出FOR死循环
}
}
}
delay(1000);//延时1秒
TMOD |= 0x02;//8位⾃动重装模块
TH0 = 220;
TL0 = 220;//11.0592M晶振下占空⽐最⼤⽐值是256,输出100HZ  TR0 = 1;//启动定时器0
ET0 = 1;//允许定时器0中断
EA = 1;//总中断允许
while(1)
while(1)
{
//为0 没有识别到⿊线为1识别到⿊线
if(left_led1 == 1 && right_led1 == 1)//左右寻迹探头识别到⿊线
发电机出口断路器{
forward();//前进
}
else
{
if(left_led1 == 1 && right_led1 == 0)//⼩车右边出线,左转修正
{
left_run();//左转
}
if(left_led1 == 0 && right_led1 == 1)//⼩车左边出线,右转修正
{
right_run();//右转
}
if(left_led1 == 0 && right_led1 == 0)//左右寻迹探头都没识别到⿊线  {
backward();//后退
}
}
}
}

本文发布于:2024-09-20 22:54:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/98658.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:电机   实验   寻迹   检测   蜂鸣器   识别   传感器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议