Arduino下的 基于Wemos的智能开盖垃圾桶

11 篇文章 0 订阅
1 篇文章 0 订阅

来个小项目,练练手。。。
此感应垃圾桶是基于超声波感知距离而实现

#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语言基础,激发学习习兴趣,才能更好的往后学,加油吧

本人能力一般,水平有限。。。
如果您的问题得到了解决,我很荣幸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值