来个小项目,练练手。。。
此感应垃圾桶是基于超声波感知距离而实现
#include <Servo.h>
#define Echo D5
#define Trig D6
#define EnginePIN D2
Servo myengine;
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW); //发送一个10us的脉冲
return pulseIn(Echo,HIGH); //波传输过程echo高电平,返回高电平持续时间
}
void initUltra()
{
pinMode(Trig,OUTPUT); //打开超声波输出
pinMode(Echo,INPUT); //打开超声波输入
}
void setup()
{
myengine.attach(EnginePIN); //连接舵机
initUltra();
//initBeep();
Serial.begin(115200);
}
void loop()
{
long d;
d = getTime()/58; //获取距离
Serial.print(d);
Serial.print("cm");
Serial.println();
if(d < 20){
myengine.write(90); //舵机角度
delay(1000);
}else{
myengine.write(180); //舵机角度
delay(1000);
}
}
关于距离中除以58的说明:
58也很好理解,声音在干燥、摄氏20度的空气中的传播速度大约为343米/秒,合34300厘米/秒。或者,我们作一下单位换算,34,300 除以1,000,000厘米/微秒。即为:0.0343厘米/微秒,再换一个角度,1/ (0.0343厘米/微秒)即:29.15微秒/厘米。这就意味着,每 291.5微秒表示10CM的距离。1厘米就是29.1 5微秒。但是发送后到接收到回波,声音走过的是2倍的距离呀。
所以实际距离就是1厘米,对应58.3微秒。实际上整个测距过程是测的发出声波到收到回波的时间,你的程序里的第一个distance实际上 是时间us。所以换成距离cm,要除以58。当然除以58.3可能更精确。所以程序中用pulseln(EcoPin, HIGH)/ 58.00获取测得的距离
**简简单单一个小项目,不需要深厚的C语言基础,激发学习习兴趣,才能更好的往后学,加油吧
本人能力一般,水平有限。。。
如果您的问题得到了解决,我很荣幸。