一个智能垃圾桶,人体感应和机体震动感应控制步进电机转动(开启,90度),开启后人体感应(热敏)在感应范围内感应不到人体,电机反转90度。超声波进行高度感应,在限定范围内直流电机启动,对射光电传感器感应电机转速,少于2圈/秒就控制电机停止转动,否则转5秒后电机停止转动,接着电机反转,到达光电限位后电机停止。
以下是部分代码
<!– wp:zibllblock/enlighter {“c_language”:”cpp”} –>
<pre class=”wp-block-zibllblock-enlighter”><code class=”gl” data-enlighter-language=”cpp” data-enlighter-theme=”” data-enlighter-highlight=”” data-enlighter-linenumbers=”” data-enlighter-lineoffset=”” data-enlighter-title=”” data-enlighter-group=””>#include “reg51.h”
#include “lcd1602.h”
#include”HC_SR04.h”
sbit out1=P2^3;//压缩电机
sbit out2=P2^4;
sbit out3=P2^5;//桶盖电机
sbit k1=P3^3;//人体感应
sbit k2=P3^4;//震动
sbit set1=P1^2;//高度设置
sbit set2=P1^3;
sbit set3=P1^4;//速度设置
sbit set4=P1^5;
uint high=0,high_lim=100;//垃圾高度
uint high_time=0;//超声波定时
uint speed=0,speed_lim=2,speed1=0;//压缩电机速度
uint speed_time=0;//测速计时
uchar pwm=1,time=0;//桶盖电机控制
uchar mode=0;//模式
uint sec=0;//延时变量
uchar hang1[]=”high:000 lim:000″;
uchar hang2[]=”sped:00 lim:00″;
void main()
{
init_1602();//初始化LCD
HC_SRinit();//初始化超声波
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
TMOD|=0X11;
TH1=0XFC;//1MS
TL1=0X18;
ET1=1;//打开定时器0中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
while(1)
{
if(!set1)//高度设置
{
high_lim++;
while(!set1);
}
if(!set2)//高度设置
{
high_lim–;
while(!set2);
}
if(!set3)//速度设置
{
speed_lim++;
while(!set3);
}
if(!set4)//速度设置
{
speed_lim–;
while(!set4);
}
//==================================
if(mode==0)//等待
{
if(!k1 || !k2)//人体感应+震动
{
pwm=2;//开盖
mode=1;
}
}
if(mode==1)
{
if(k1 && k2)//等待离开
{
sec=3000;//等待3s
while(sec>0);
pwm=1;//关闭
if(high<high_lim)//超声波判断
{
out1=0;
out2=1;
sec=2000;//等待2s
while(sec>0);
while(speed1>speed_lim);//等待压缩完成
out1=1;//电机反转5s
out2=0;
sec=5000;
while(sec>0);
out1=1;//停止
out2=1;
}
mode=0;
}
}
}
}
</code></pre>
<!– /wp:zibllblock/enlighter –>
![图片[1]-基于51单片机实现的智能垃圾桶(含源码+仿真+元件清单+讲解图)-多木](https://gitee.com/Cat9521/blogimg/raw/master/20250418201951512.png)
© 版权声明
THE END