这里我们需要两个硬件:
- 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); //低高低电平发一个短时间脉冲去TrigPindelayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW);cm = pulseIn(EchoPin, HIGH) / 58; //将回波时间换算成cmcm = (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 serialserialPort = "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()