智能垃圾桶
2017-12-11付伟韬
付伟韬
垃圾桶是日常生活中的常用物品。传统的垃圾桶开盖时均需采用手动或脚踩方式实现,既不卫生又不方便。同时,随着垃圾桶中垃圾的增多,细菌在其中滋生,如果不及时清理,会散发臭气和有害物质,影响人体的健康。
我设计了一种智能垃圾桶,它无需手或脚接触垃圾桶,只需让手靠近垃圾桶顶部,垃圾桶的盖子就会自动打开,投入垃圾后桶盖自动关闭。当垃圾桶快装满时,会发出声音和灯光提醒。
一、工作原理
1.自动感应开盖
人體感应模块可安装在垃圾桶顶部,便于用户接近时受到感应。触发距离建议设在15cm左右,既能保证及时打开盖子,又能防止误触发。开盖动作可采用伺服电机驱动,便于根据桶盖的开合角度设定电机的定位角度值。
2.垃圾桶装满提示
当垃圾将要装满时,超声波信号被遮挡,传感器测得的距离减小,系统计算的距离小于设定的阀值时,系统将进行警示,提醒及时处理垃圾。测距模块可安装在垃圾桶内侧顶部,并根据垃圾桶的口径设定阀值。可通过同时点亮LED灯和使蜂鸣器发声进行警示。
智能垃圾桶的系统结构如下图。
二、线路连接
所需的元器件有Arduino UNO R3开发板、红外避障模块、伺服电机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 {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电子互动平台拥有使用简单、功能多样、价格低廉等优点,每个爱上它的人都可以插上想象的翅膀,创造出一个个属于自己的智能创意作品。