您的当前位置:首页>新品 > 正文

如何做一个自动化感应垃圾桶?自动化感应垃圾桶制作教程

来源:CSDN 时间:2023-01-28 08:01:01

简介

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

缘起


【资料图】

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

硬件简介

超声波感应器

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

Arduino电路板

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

实现原理

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

#include#define DuoPIN D5#define Echo D2#define Trig D8Servo 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

再看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 D8Servo 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 然后delay函数代表停顿多少毫秒,后面就是盖盖了,else语句就是距离大于10,马达一直停止

OK讲完了

标签:

最新新闻:

新闻放送
Top