简介
(资料图片)
上面的视频就是制作成型的感应式垃圾桶,手靠近感应器的时候,就可以自动开盖大概一秒,自动再盖上,它的用处可大了,比如:用来喝水,用来泡面或者用来当笔筒,总之垃圾桶能干的事情,它一样都干不了??????来合个影
缘起
哈哈哈,看到抖音使用树莓派、单片机等等小玩意,制作好玩的东西,于是决定在家也玩一玩破板子,破感应器,破垃圾桶,破蜂鸣器制作一个感应垃圾桶。必须要在无聊的生活中自己找寻乐趣!!!
硬件简介
超声波感应器
前面两个圆柱形的东西就是一个超声波感应器,一个是发射口,一个是接收口,基本工作原理就是发射口发射超声波,另一个口会接受反射回来的超声波,然后根据声速以及时间来计算前方障碍物,也就是我们的手,距离垃圾桶有多远,我们通过编写程序来设置,多少多少距离内开盖,超过多少距离关盖。
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,马达一直停止