说道机器人巡线,这是机器人入门级的玩法,一般来说无非就是巡黑线或者巡白线
用两个循迹传感器就可以很轻松的解决这个问题。
但是最近我在参加一个比赛的时候遇到一种特殊的情况,那就是巡虚线。
先来看看要求和地图
咋一看地图,这个很简单,不就是巡黑线吗?
左右两边各设一个传感器,巡黑线就解决了。
但是没有那么简单
要求是这样的
1、从1开始到2的位置停车,这样算巡外线
2、从1开始到2的位置停车,这样算巡内线,得分比巡外线多20分
怎样判断是巡内线还是巡外线?
如果只是右边装有循迹传感器才算巡内线,否则都算巡外线。
从这个要求来看,简单的巡黑线是可以解决问题,但是这种算巡外线,得分不高
要想拿高分必须要巡内线。
巡内线的难点就在那段虚线。
如何巡虚线呢,百度查找了一圈也没找到任何答案。
看来只能自己想办法
想到的第一种方法:
1、在右边装两个循迹传感器,一个巡黑线,一个巡白线。
2、巡白线传感器到了黑线,不马上判断,延时500毫秒(粗略估计,实际要根据情况而定)之后再判断,如何还是黑线就转,如果已经是白线,就不用转。
这种方法理论上是可行的,但是实际操作中却发现难度很大,最重要是转弯位出问题,调试了很久都无法解决。
第二种方法就非常简单:
1、在右边装三个循迹传感器,一个巡黑线,两个巡白线(一个前面,一个后面,中间相隔刚好是虚线的一段距离)。
2、平时只检查后面的巡白线传感器,到了黑线再检测前面的触感器,如何前后都是黑线就转弯,如果前面是白色后面是黑色就继续前进。
这种方法操作简单,程序简单,学生理解也容易,实现起来也非常简单。
具体安装方法和程序如下,供参考
材料清单
- arduino pro mini主控板(带电机驱动) X1
- 循迹触感器 X6
- 马达+轮子 X2
- 万向轮 X1
- 车架 X1
- 电池及电池盒 X1
步骤1 组装车子
车子安装比较简单,如图所示。
最主要是右边的3个巡线传感器的位置。
其中1号传感器是用来巡黑线
2号传感器是用来巡外面的白线
3号传感器也是用来巡白线,主要是用来巡虚线的白线
4号是用来停车的
5号是用来判断是否遇到门闸的
6号是用来检测红绿灯的。
最重要是2号和3号的位置。
步骤2 编写程序
安装好之后程序就非常简单了。
1、先判断是不是红绿灯,红灯停,否则前进
2、然后判断是不是遇到了闸门,遇到闸门停止,否则前进
3、再判断是不是到了停车位,是的话停止,否则前进
4、前面三种情况都没遇到
如果传感器1是黑色并且传感器2是白色,小车前进。
如果触感器1是白色,小车左转
如果传感器2是黑色,再判断传感器3,如果2和3都是黑色,小车右转,如果2是黑色,3是白色,小车继续前进。
具体程序如下:
注意:
数字管脚4接的是检测红绿灯的传感器
数字管脚3接的是检测门闸的传感器
数字管脚2接的是检测停车的传感器
数字管脚5接的是巡黑线的传感器
数字管脚6接的是巡白线的传感器
数字管脚11接的是巡虚线的传感器
void goahead() {
digitalWrite(7,HIGH);
analogWrite(9,150);
digitalWrite(8,HIGH);
analogWrite(10,150);
}
void goleft() {
digitalWrite(7,HIGH);
analogWrite(9,150);
digitalWrite(8,HIGH);
analogWrite(10,0);
}
void goright() {
digitalWrite(7,HIGH);
analogWrite(9,0);
digitalWrite(8,HIGH);
analogWrite(10,150);
}
void goback() {
digitalWrite(7,LOW);
analogWrite(9,150);
digitalWrite(8,LOW);
analogWrite(10,0);
}
void gostop() {
digitalWrite(7,HIGH);
analogWrite(9,0);
digitalWrite(8,HIGH);
analogWrite(10,0);
}
void setup(){
pinMode(4, INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(11, INPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop(){
if (digitalRead(4) == 0) {
gostop();
} else {
if (digitalRead(3) == 0) {
gostop();
} else {
if (digitalRead(2) == 0) {
gostop();
} else {
if (digitalRead(5) == 1 && digitalRead(6) == 0) {
goahead();
}
if (digitalRead(5) == 0) {
goleft();
}
if (digitalRead(6) == 1 && digitalRead(11) == 1) {
delay(300);
goright();
}
if (digitalRead(6) == 1 && digitalRead(11) == 0) {
goahead();
}
}
}
}
}
步骤3 调试演示
调试的时候主要是调试虚线部分,主要调整传感器2和3的位置。
演示结果如下:
效果还不错,如果大家还有什么更好的办法,麻烦告诉我,谢谢!
肥罗-阿勇2021.10.09
就是普通的TT马达
白凡2019.12.24
老哥你用的哪一款马达?