|
Arduino循迹机器人的代码 循迹机器人的编程部分非常简单,我们只需要基础的Arduino功能。程序说明如下。
首先定义我们使用的每个Arduino引脚号。从驱动驱动器的引脚和传感器引脚开始。在这里,我对每一行代码都做了注释,方便大家理解。 - #define enA 5 //Enable1 L293 Pin enA
- #define in1 6 //Motor1 L293 Pin in1
- #define in2 7 //Motor1 L293 Pin in1
- #define in3 9 //Motor2 L293Pin in1
- #define in4 10 //Motor2 L293 Pin in1
- #define enB 8 //Enable2 L298 Pin enB
- #define R_S 4 // Right sensor
- #define L_S 2 // Left sensor
复制代码
在setup()函数中,声明每个引脚的引脚模式。我们需要读取红外传感器的输出,因此将这些引脚定义为输入。电机需要由Arduino驱动,因此将电机驱动器引脚定义为输出。最后,将启用引脚拉高。 - pinMode(R_S, INPUT);
- pinMode(L_S, INPUT);
- pinMode(enA, OUTPUT);
- pinMode(in1, OUTPUT);
- pinMode(in2, OUTPUT);
- pinMode(in3, OUTPUT);
- pinMode(in4, OUTPUT);
- pinMode(enB, OUTPUT);
- digitalWrite(enA, HIGH);
- digitalWrite(enB, HIGH);
复制代码
在loop()函数中,我们首先读取红外传感器的值,然后使用if条件控制电机的运动。下面解释四种运动条件。
向前进: - if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 0)){forward();}
复制代码在这种情况下,如果右侧传感器和左侧传感器同时位于白线之上,则机器人应该向前移动,这时我们调用forward函数。(注意:这里0表示红外传感器输出高,因为传感器在白线上)
转向右侧: - if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 0)){turnRight();}
复制代码如果右侧检测到黑线,而左侧传感器没有检测到任何黑线,则会调用turnRight函数向右转向。
转向左侧: - if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 1)){turnLeft();}
复制代码如果右侧传感器在白线上并且左侧传感器检测到黑色,则它将调turnLeft函数向左转向。
停止: - if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 1)){Stop();}
复制代码如果右侧传感器和左侧传感器位于黑线,则它将调用Stop函数。在这种情况下,机器人将完全停止。
我们定义了机器人工作的4个函数,分别Forward、turnLeft、turnRight和Stop。函数代码如下:
Forward函数: - void forward(){
- digitalWrite(in1, HIGH);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- }
复制代码我们将电机驱动器的输入1和4拉高,因此,两个电机都会向前移动。
以上就是代码部分。使用USB电缆将Arduino与计算机连接,然后使用Arduino IDE上传代码。
测试和校准 我们已经组装了机器人并上传了代码,现在是时候看看它的运行情况了,如果它无法跟随线路,那么我们需要校准机器人。首先将机器人放在黑色表面上(两个传感器都应该在黑色表面的顶部)然后调整红外模块的可变电阻,直到红外模块的输出LED熄灭。接下来,将机器人放在白色表面上并检查LED是否亮,如果不亮,则只需调整可变电阻即可。再次重复该过程,以确保输出 LED 按照要求运行。
现在,由于我们已经校准了机器人,需要做的就是将机器人放在黑线上并观察它的运行情况。
如果您有任何问题,请随时在本帖下面进行回复。
|