zoukankan      html  css  js  c++  java
  • 如何做一个自动化感应垃圾桶

    简介

    • 上面的视频就是制作成型的感应式垃圾桶,手靠近感应器的时候,就可以自动开盖大概一秒,自动再盖上,它的用处可大了,比如:用来喝水,用来泡面或者用来当笔筒,总之垃圾桶能干的事情,它一样都干不了??????
    • 来合个影 感应式垃圾桶

    缘起

    • 哈哈哈,看到抖音使用树莓派、单片机等等小玩意,制作好玩的东西,于是决定在家也玩一玩破板子,破感应器,破垃圾桶,破蜂鸣器制作一个感应垃圾桶。必须要在无聊的生活中自己找寻乐趣!!!

    硬件简介

    超声波感应器

    • 前面两个圆柱形的东西就是一个超声波感应器,一个是发射口,一个是接收口,基本工作原理就是发射口发射超声波,另一个口会接受反射回来的超声波,然后根据声速以及时间来计算前方障碍物,也就是我们的手,距离垃圾桶有多远,我们通过编写程序来设置,多少多少距离内开盖,超过多少距离关盖。

    Arduino电路板

    • 垃圾桶后面沾了一块电路板,这块电路板就是控制的核心,我们的程序要烧录的地方,给了垃圾桶以大脑才能完成任务。这块板子是Ardunio平台的,上面有很多接口,用于供电,传输信号等等,上个图 Ardunio电路板

    实现原理

    • 基本到这里就介绍完硬件了,下面来介绍程序实现,我感觉没啥兴趣的基本到这里就看完了,总之两个字,NB!!!!
    • 先上完整代码,这个项目是使用C语言实现的,平台是Ardunio平台,要引入它的实现包
    #include<Servo.h>

    #define DuoPIN D5
    #define Echo D2
    #define Trig D8

    Servo myDuoJi;
    long getTime(){
      digitalWrite(Trig,HIGH);
      delayMicroseconds(10);
      digitalWrite(Trig,LOW);

      return pulseIn(Echo,HIGH);
    }

    void initChaoShengBo(){
      pinMode(Echo,INPUT);
      pinMode(Trig,OUTPUT);
    }

    void setup(){
      initChaoShengBo();
      myDuoJi.attach(DuoPIN);
      Serial.begin(115200);
    }
    void loop(){
      long dis;
      dis = getTime()/58;
      ` 1
      if(dis<10){43RFGUYT6
        myDuoJi.write(70);
        delay(700);
        myDuoJi.write(90);
        delay(1000);
        myDuoJi.write(100);
        delay(1140);
        myDuoJi.write(90);
      }else{
        myDuoJi.write(90);  
      }
    }

    • 然后我们逐一解析

    1.启动函数

    • 先引入Ardunio平台下马达机给我们提供的工具包,里面是一些绑定上硬件驱动的函数集合
    #include<Servo.h>
    • 再看setup()函数,这个函数是程序运行的开始,作用就是初始化板子,也就是做准备工作,啥都准备好了,开始下一个函数loop(),这里都是业务逻辑
    void setup(){
      initChaoShengBo();
      myDuoJi.attach(DuoPIN);
      Serial.begin(115200);
    }
    • 第一行初始化超声波感应器initChaoShengBo
    void initChaoShengBo(){
      pinMode(Echo,INPUT);
      pinMode(Trig,OUTPUT);
    }
    • 基本意思就是绑定接口(也就是感应器上的的端口是什么意思),Echo口作为输入端,Trig口作为输出端
    • 然后myDuoJi.attach(DuoPIN)的意思就是旋转马达接口绑定到DuoPIN这个口
    #define DuoPIN D5
    #define Echo D2
    #define Trig D8

    Servo myDuoJi;
    • 从上面看出来就是电路板的接口D5绑定马达的接口,D2绑定到感应器的输出接口,D8绑定到感应器的触发接口。在下面一行就是初始化一个Servo实例(对象)

    2.业务逻辑

    • 然后板子在执行完setup函数之后,会无线循环业务逻辑,也就是不断执行loop函数
    void loop(){
      long dis;
      dis = getTime()/58;
      ` 1
      if(dis<10){43RFGUYT6
        myDuoJi.write(70);
        delay(700);
        myDuoJi.write(90);
        delay(1000);
        myDuoJi.write(100);
        delay(1140);
        myDuoJi.write(90);
      }else{
        myDuoJi.write(90);  
      }
    }
    • 先定义一个long型变量用力保存接收感应距离,然后下一行getTime函数就是用来返回发送到接收超声波的时间间隔,然后除以58即为距离,至于58怎么来的,自己算吧,声音在空气中的传播速度约为340m/s,换算一下就好了。哦,对了前面返回的时间的单位是微秒。
    • 距离小于10cm,马达机开始旋转0.7秒,速度是20

    这里就是要说明一下,write里面的参数是速度的意思,90代表静止不动,0代表顺时针全速选装,180代表逆时针全速旋转,数值离90越远,代表速度越快,比如参数100就是指以(100-90)的速度逆时针旋转。

    • 然后delay函数代表停顿多少毫秒,后面就是盖盖了,else语句就是距离大于10,马达一直停止

    OK讲完了

  • 相关阅读:
    指针问题,p+i什么意思i代表什么
    怎么用C语言写一个飞机程序
    switch()语句中()中必须是常量吗
    一元二次方程运行结果中输入上系数后总显示输入不合法无论系数可以得出实根
    我想学号图论求大神请教
    c-freelib库
    十进制转十六进制问题(有代码)
    关于逐个读取同一目录下txt文本的问题
    JAVA-JDK1.7-ConCurrentHashMap-测试和验证
    JAVA-JDK1.7-ConCurrentHashMap-源码并且debug说明
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/14125300.html
Copyright © 2011-2022 走看看