3.基于Arduino的循迹小车

前言:长期以来一直把arduino看为一款比较弱智简单的单片机,好像事实也是如此,小学生基本不会去学51单片机,但是却在学习arduino单片机,因为相当于傻瓜编程,网上程序一扎一大堆,甚至小学生比有的大学生玩的还溜

arduino使用的是专用的编译器arduino IDE,注意使用时下程序前需要选择芯片型号和串口号,此软件自带串口监视器,也就是串口助手,入口在编辑界面的右上角,使用的是C++作为编程语言,有C语言的功底完全可以胜任

循迹小车是单片机项目中,中低级的一个项目,也是一种很好的练手项目,除了需要电机驱动、电池供电、核心板电路板,最重要的是传感器的方案,在本文中,主要介绍传感器的电路和编程,对电机电路,降压电路等等不予介绍

传感器是小车的眼睛,循线的方式有很多种,其中有电磁循线,单条黑胶带循线,双黑胶带循线等等,具体的其他等等可以参考飞思卡尔智能车竞赛,最简单也是成本最低的是使用单条黑胶带循线,使用的传感器是红外黑白传感器,某宝一搜就能见到,传感器模块前有两个二极灯珠,一个是发送端,一个是接收端,后面有滑动变阻器可以调节检测距离,当下面照着的是白色是高电平,当下面是黑色是高电平,不同模块电平可能是反着的,一个能循线的小车最少需要装两个传感器才能识别并且循线

下面就是程序如何编写了,看你是几驱的电机然后写什么样的程序,但是写程序前都要想好思路,程序如何运行,我们写的程序就是告诉小车,传感器检测到什么样的信号时你要对应做出什么动作。比如一种策略(两个传感器),写程序前首先描述出这种策略,有几种运行状况:1.两边都是白色,直行  2.左黑右白,左行  3.左白右黑,右行  4.左检测到黑,右检测到黑之前,一直左拐直到右检测到黑  5.反方向全都对应反过来,使用标志位来记录运行状态

下面列一下三个传感器的程序:

 sensorS=digitalRead(sensorP);
 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 0)&& (digitalRead(tracker_sensor_straight) == 1) && flag1 ==0 && flag2==0)    {moveForward() ;  a=1;}
 if ((digitalRead(tracker_sensor_right) == 1)&& (digitalRead(tracker_sensor_left) == 0) && flag1 ==0 && flag2==0)    {moveRight();a=2;}
 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 1) && flag1 ==0 && flag2==0)   { moveLeft(); a=3;}

 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 0)&& (digitalRead(tracker_sensor_straight) == 0) && flag1 ==0 && flag2==0)    
   {
   if(a==1)moveForward() ;
   if(a==2)moveRight() ;
   if(a==3)moveLeft() ;
   }
 
 if (digitalRead(tracker_sensor_right) == 1&& digitalRead(tracker_sensor_left) == 1&& digitalRead(tracker_sensor_straight) == 1) { flag1 = 1;}     //装货
 if (sensorS==LOW)   { delay(500);flag1 = 0; }       //装货结束
 if(flag1==1 || flag2 ==1) {delay(5); moveStop();}//过了线再停车
 if (sensorS==LOW)   { flag1 = 0; }       //装货结束

 if (digitalRead(tracker_sensor_rightside) == 1 && digitalRead(tracker_sensor_leftside) == 0)
    {
      flag2 = 1; 
     myservo.write(55);
     delay(1000);
     myservo.write(150);
     delay(2000);
     myservo.write(55);
     flag2 = 0;
     }

发布了28 篇原创文章 · 获赞 39 · 访问量 6818

猜你喜欢

转载自blog.csdn.net/qq_36071362/article/details/90633121