这里我们需要两个硬件:
- Arduino UNO开发板
- HC-SRO4超声波传感器
如下图所示:
来看看效果:
VID_20200308_111314
下面来看看代码实现:
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{ Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{ digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58; //将回波时间换算成cm
cm = (int(cm * 100)) / 100; //保留两位小数
if (cm < 10)
{digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
}
else if (cm > 10 && cm < 50)
{digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
}
else if (cm > 50)
{digitalWrite(13, HIGH);
delay(10);
digitalWrite(13, LOW);
}
Serial.print(cm);
Serial.print("cm");//串口输出
Serial.println();
}
这里我加了条件判断:
- 距离足够远时,灯常亮
- 准备接近物体时,灯闪烁,但速度较慢
- 即将碰到物体时,灯快速闪烁
这样一来,我们便可以通过灯光的状态来判断距离,当然,我们也可以通过串口输出来查看实际距离:
如果我们还要用数据做其他的事,我们可以用Python来读取:
import serial
serialPort = "COM6" # 串口
baudRate = 9600 # 波特率
ser = serial.Serial(serialPort, baudRate, timeout=0.5)
print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
while True:
str = ser.readline()
print(str)
ser.close()