ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Arduino】循迹小车

2022-03-02 23:34:49  阅读:203  来源: 互联网

标签:循迹 Arduino int 小车 digitalRead LOW digitalWrite motorRun data


这是一个会炫酷倒车并180°摆头的小车

一、小车组件

接了3个红外探测,一个稳压电路,一个驱动,和一个arduino主板,四个车轮和车轮电机。

二、小车展示

1.小车样子

                        

2.倒车动作

                

  • 下面是小车代码

  • #define STOP      0    //定义五个运动状态
    #define FORWARD   1
    #define BACKWARD  2
    #define TURNLEFT  3
    #define TURNRIGHT 4
     
    int LeftMotor1 = 6;    //车轮接口
    int LeftMotor2 = 7;
    int RightMotor1 = 4;
    int RightMotor2 = 5;
    int ena=9;             //电机使能ena和enb
    int enb=10;
    int trac1=11;          //trac1~3分别是三个红外接口
    int trac2=12;
    int trac3=8;
    int data[3];           //用来接受三个红外状态
    int flag=0;
    
    
    void setup() //初始化设置
    {
      Serial.begin(9600);
      pinMode(LeftMotor1, OUTPUT);
      pinMode(LeftMotor2, OUTPUT);
      pinMode(RightMotor1, OUTPUT);
      pinMode(RightMotor2, OUTPUT);
      pinMode(ena,OUTPUT);
      pinMode(enb,OUTPUT);
      pinMode(trac1,INPUT);
      pinMode(trac2,INPUT);
      pinMode(trac3,INPUT);
    }
    
    void loop()     //循环进行trace函数
    {
      while(1)
        trace();    //循迹函数
    }
    
    void motorRun(int cmd)//运动状态
    {
      switch(cmd)
      {
        case FORWARD://前进
          {
          digitalWrite(LeftMotor1, HIGH);    //高电流
          digitalWrite(LeftMotor2, LOW);     //低电流
          digitalWrite(RightMotor1, HIGH);
          digitalWrite(RightMotor2, LOW);
          break;}
         case BACKWARD://返回
          {digitalWrite(LeftMotor1, LOW);
          digitalWrite(LeftMotor2, HIGH);
          digitalWrite(RightMotor1, LOW);
          digitalWrite(RightMotor2, HIGH);
         break;}
         case TURNLEFT://左转
          {
          digitalWrite(RightMotor1, HIGH);
          digitalWrite(RightMotor2, LOW);
          digitalWrite(LeftMotor1, LOW);
          digitalWrite(LeftMotor2, HIGH);
         break;}
         case TURNRIGHT://右转
         {
          digitalWrite(LeftMotor1,HIGH );
          digitalWrite(LeftMotor2, LOW);
          digitalWrite(RightMotor1,LOW);
          digitalWrite(RightMotor2, HIGH);
          break;}
         default://停止
          {digitalWrite(LeftMotor1, LOW);
          digitalWrite(LeftMotor2, LOW);
          digitalWrite(RightMotor1, LOW);
          digitalWrite(RightMotor2, LOW);}
      }
    }
    
    void trace()
    {
    
        data[0]= digitalRead(11);//红外输入
        data[1]= digitalRead(12);
        data[2]= digitalRead(8);
      
      analogWrite(ena,255);    //pwm波调满
      analogWrite(enb,255);
      motorRun(FORWARD);
    
      if(data[0]==0)
      {
        while(data[1])        //右边红外检测到时,右转
        {
          data[1]= digitalRead(12);
          analogWrite(ena,255);
          analogWrite(enb,255);
          motorRun(TURNRIGHT);
        }
      }
     
    
      if(data[2]==0)
      {
        while(data[1])        //左边红外检测到时,左转
        {
          data[1]= digitalRead(12);
          analogWrite(ena,255);
          analogWrite(enb,255);
          motorRun(TURNLEFT);
        }
      }
      
        data[0]= digitalRead(11);//红外输入
        data[1]= digitalRead(12);
        data[2]= digitalRead(8);
    
    
        if(data[2]==0&&data[0]==0&&data[1]==0) //当小车三个红外同时检测到时
        {
          motorRun(FORWARD);                   //先往前运动150ms
          delay(150);
          motorRun(STOP); 
          delay(3000);                         //停3s
          analogWrite(ena,255);                //给倒退时电机的使能
          analogWrite(enb,255);
          motorRun(BACKWARD);                  //倒退1s  
          delay(1000);
          motorRun(TURNRIGHT);                 //先让车头右转500ms
          delay(500);
          data[1]= digitalRead(12);            //更新中间红外的状态
          while(data[1]==1)                    //车头持续右转
          {
            data[1]= digitalRead(12);           //随时更新中间红外状态,没有检测到白线就持续右转
            motorRun(TURNRIGHT);
          }
          }
        }
      }  
    }

  • 总结

           这是我初学C语言和Arduino时和两个队友做出的小车,用来参加了一个小比赛。挺感谢我的两个队友,不是她们的话这小车都不能顺利的跑起来。当时这个倒车加摆头还是挺惊艳的。总之,这次调小车的过程还是带给我很多快乐和回忆,同时也学会了好多东西。

标签:循迹,Arduino,int,小车,digitalRead,LOW,digitalWrite,motorRun,data
来源: https://blog.csdn.net/weixin_64344153/article/details/123218701

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有