文 湖北省宜昌市夷陵中学 付伟韬
智能垃圾桶
文 湖北省宜昌市夷陵中学 付伟韬
垃圾桶是日常生活中的常用物品。传统的垃圾桶开盖时均需采用手动或脚踩方式实现,既不卫生又不方便。同时,随着垃圾桶中垃圾的增多,细菌在其中滋生,如果不及时清理,会散发臭气和有害物质,影响人体的健康。
我设计了一种智能垃圾桶,它无需手或脚接触垃圾桶,只需让手靠近垃圾桶顶部,垃圾桶的盖子就会自动打开,投入垃圾后桶盖自动关闭。当垃圾桶快装满时,会发出声音和灯光提醒。
人体感应模块可安装在垃圾桶顶部,便于用户接近时受到感应。触发距离建议设在15cm左右,既能保证及时打开盖子,又能防止误触发。开盖动作可采用伺服电机驱动,便于根据桶盖的开合角度设定电机的定位角度值。
当垃圾将要装满时,超声波信号被遮挡,传感器测得的距离减小,系统计算的距离小于设定的阀值时,系统将进行警示,提醒及时处理垃圾。测距模块可安装在垃圾桶内侧顶部,并根据垃圾桶的口径设定阀值。可通过同时点亮LED灯和使蜂鸣器发声进行警示。
智能垃圾桶的系统结构如下图。
系统总体结构图
所需的元器件有ArduinoUNOR3开发板、红外避障模块、伺服电机SG90、测距模块HC-SR04、LED灯(红、绿)、蜂鸣器、9V电池、面包板、10K电阻、连接线。
把以上各组件分别和垃圾桶组装在一起,通过导线连接各组件,输入代码程序测试各部位动作和信号。最终测试成功,同时发出声、光提示信号。
智能垃圾桶成品图
void openDoor()//检测开门信号
{int SensorState
=digitalRead(SensorPin);
//读取2引脚的电平
if(SensorState==
1){
digitalWrite(greenledPin,LOW);
myservo.write(180);//关门
openCheck=0;
}
else{if(openCheck==1){
digitalWrite(greenledPin,HIGH);
myservo.write(90);//开门}
else openCheck=1;//保存第一次检测结果
}delay(2000);//防止开盖误判延时2秒
}
void fullCheck()//检测桶满信号
{digitalWrite(TrigPin,HIGH);//向TRIG接口发送高电平
delayMicroseconds(15);//延时15微秒
digitalWrite(TrigPin,LOW);//向TRIG接口发送低电平
int pulseTime=pulseIn(EchoPin,HIGH);//读出脉冲时间,单位为微秒
distance=pulseTime*0.17;//将脉冲时间转化为距离,单位为毫米,声速为340m/s
if(distance<limit)//如果距离小于阀值警示灯亮起,蜂鸣器发出do,re,mi声调提示音
{digitalWrite(redledPin,HIGH);
tone(tonePin,523);delay(200);
tone(tonePin,578);delay(200);
tone(tonePin,659);delay(200);
noTone(tonePin);}
else//如果距离大于阀值警示灯熄灭,蜂鸣器不发声
{digitalWrite(redledPin,LOW);
noTone(tonePin);}
智能垃圾桶功能基本实现,但在测试过程中还存在如下问题。
1.当有人或物体偶然从垃圾桶前经过,可能会导致桶盖误开。可在系统第一次检测到开门信号时,不立即开桶盖,而是延迟2秒钟后再次检测,如果又接收到开门信号,才触发伺服电机动作,打开桶盖。这也要求手在感应器前至少停留2秒钟才有效。
2.消除伺服电机的抖动。在测试过程中,需使用USB线连接电脑、上传代码,发现伺服电机在固定角位有微小的颤动。这是由于伺服电机较敏感,在驱动伺服电机转向时接入负载的变化会引起电压的微小变化,导致伺服电机抖动。所以,可改用独立的电源为伺服电机供电。
总之,Arduino电子互动平台拥有使用简单、功能多样、价格低廉等优点,每个爱上它的人都可以插上想象的翅膀,创造出一个个属于自己的智能创意作品。