基于Arduino的巡线小车

简介: 巡线小车

本文是基于Ardino的两轮循迹小车源码。

由于学校的要求于是进行了相应的小车开发,由于结构过于简单,在此就不再赘述,直接附上当时比赛的源代码。

intLeft_motor_go=8;     //左电机前进(IN1)intLeft_motor_back=9;     //左电机后退(IN2)intRight_motor_go=10;    // 右电机前进(IN3)intRight_motor_back=11;    // 右电机后退(IN4)constintSensorRight1=6;     //右循迹红外传感器(P3.2 OUT1)constintSensorRight2=3;    //右循迹红外传感器constintSensorLeft1=4;       //左循迹红外传感器(P3.3 OUT2)constintSensorLeft2=5;       //左循迹红外传感器(P3.3 OUT2)intSL1;    //左循迹红外传感器状态 intSL2;    //左循迹红外传感器状态intSR1;    //右循迹红外传感器状态intSR2;    //右循迹红外传感器状态voidsetup()
{
//初始化电机驱动IO为输出方式pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)//  pinMode(key,INPUT);//定义按键接口为输入接口// pinMode(beep,OUTPUT);pinMode(SensorRight1, INPUT); //定义右循迹红外传感器为输入pinMode(SensorRight2, INPUT);
pinMode(SensorLeft1, INPUT); //定义左循迹红外传感器为输入pinMode(SensorLeft2, INPUT);
}
//=======================智能小车的基本动作=========================voidruns()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
voidrun()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
//void left(int time)         //左转(左轮不动,右轮前进)voidspin_left()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,90); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,75); 
analogWrite(Left_motor_back,0);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_lefts()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,140.3); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140);//PWM比例0~255调速///delay(time * 100);  //执行时间,可以调整  }
//void right(int time)        //右转(右轮不动,左轮前进)voidspin_right()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,0); 
analogWrite(Right_motor_back,75);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,90);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_rights()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,140); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140.3);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidloop()
{ 
// keysacn();//调用按键扫描函数  while(1)
  {
//有信号为LOW  没有信号为HIGH   检测到黑线  输出高  检测到白色区域输出低SR1=digitalRead(SensorRight1);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭SR2=digitalRead(SensorRight2);
SL1=digitalRead(SensorLeft1);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭SL2=digitalRead(SensorLeft2);
if (SL1==LOW&&SL2==LOW&&SR1==LOW&&SR2==LOWorSL2==HIGH&&SL1==HIGH&&SR2==HIGH&&SR1==LOWorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==HIGHorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==LOW   )
run();   //调用前进函数elseif (SR1==LOW&&SL2==LOW&&SL1==HIGH&&SR2==LOW)
spin_right();
elseif (SL1==LOW&&SR2==LOW&&SL2==HIGH&&SR1==LOW)
spin_rights();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==LOW&&SR2==LOW)
spin_rights();
elseif (SL1==LOW&&SR1==HIGH&&SR2==LOW&&SL2==LOW) 
spin_lefts();
elseif (SR1==LOW&&SR2==HIGH&&SL2==LOW&&SL1==LOW)
spin_left();
elseif (SL1==LOW&&SL2==LOW&&SR1==HIGH&&SR2==HIGH)
spin_lefts();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==HIGH&&SR2==HIGHorSR1==HIGH&&SR2==LOW&&SL1==HIGH&&SL2==LOWorSL1==LOW&&SL2==HIGH&&SR1==LOW&&SR2==HIGH )
runs();
  }
  }
相关文章
|
12天前
|
传感器 数据采集 编解码
LabVIEW电机槽楔松动声测系统
LabVIEW电机槽楔松动声测系统
11 0
|
9月前
|
编解码 网络性能优化 芯片
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
585 0
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
|
传感器
Arduino实现超声波测距
Arduino实现超声波测距
LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)
利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果。
|
数据处理
LabVIEW串口示波器
之前的博文分享过LabVIEW虚拟数字示波器,虚拟示波器的数据来自于软件模拟,本篇博文将分享一款串口示波器,LabVIEW设计上位机,数据来自于节点上传(STM32)。 上位机使用LabVIEW技术实现三通道示波器,实现数据处理和显示,支持多种触发方式,支持实时采集,可以对信号进行加窗处理,并具有FFT频谱分析等功能。
|
传感器
【arduino】超声波垃圾桶
【arduino】超声波垃圾桶
184 0
|
传感器 存储 IDE
HTU21D温湿度传感器与Arduino连接电路图说明
在本用户指南中,我们将学习如何将 HTU21D 温湿度传感器模块与 Arduino 连接。首先,我们将向您介绍 HTU21D 传感器,包括其引出线、特性以及与 Arduino 的接口。其次,我们将在 Arduino IDE 中安装 Adafruit HTU21D 库以访问传感器数据。最后,我们将看到两个在串行监视器和 SSD1306 OLED 显示器上显示温度和湿度值的示例。
257 0
HTU21D温湿度传感器与Arduino连接电路图说明