我们使用SparkFun光敏传感器TEMT6000来检测白天和黑夜。之所以需要区分这两者,主要原因是因为我们要确定何时需要投放食物,两次食物投放之间需要间隔多久。TEMT6000光敏传感器有3个引脚:SIG,GND,VCC。将这个传感器接到Arduino板上的步骤非常简单:VCC连接到5V引脚;GND到板上的GND引脚,然后SIG需要接到模拟输入上。我选择了A0引脚。输出引脚SIG的作用就好像一个晶体管,因此在传感器附近的光越亮,引脚输出的电压就越高。
下图显示了TEMT6000感知到的电流和照度之间的关系。照度是总光通量(即光源发出的可见光,以lm为单位)除以面积(m2)的量度。一般来说,1照度(Ix)=1/m2。TEMT6000可以识别典型的人类可见光光谱,波长在390-700纳米之间。
图1:集电极电流vs照度/Sparkfun
图2:TEMT6000光敏传感器与ArduinoUno的接线图
图3:TEMT6000和ArduinoUno之间的接线图
由于该传感器连接在模拟引脚上,而模数转换器的分辨率是10位的,所以其最大值为1023。例如,当传感器接收到来自我手机闪光灯的最亮照射时,从传感器读出的值大约是1023。
图4:Arduino显示传感器最大值的串口监视器
光敏传感器的代码:
intlightSensor=0;voidsetup(){ Serial.begin(9600);}voidloop(){ intvalueFromLightSensor=analogRead(lightSensor); Serial.println(valueFromLightSensor); delay(1000);}
为了测量距离,我选择了一个模拟传感器(SharpGP2Y0A21YK),因为与其他距离传感器相比,它的效果最好。其工作原理如下:首先发出一个信号,当它发现路上有障碍物时,它也会发回一个信号(一个电压值,该电压值随障碍物的远近而变化),这个电压会转换成距离。
GP2Y0A21YK将被安置在食物容器上方,在开启自动喂食功能前,需要先测量瓶子里的剩余空间(即食物的多少)。有了这个距离传感器,系统将检测食物容器(或瓶子)是满的还是空的。具体工作方式如下:
这里的距离表示从安装距离传感器的位置到食品容器底部的距离。由于传感器的量程为10-80cm,所以传感器需要在食品容器顶部以上10cm处才能读取正确的距离值。
如何确定传感器的最佳拟合线:
摘自Pololu.com
传感器的输出电压与测量距离的倒数之间的关系在传感器的可用范围内近似线性。您可以使用此图将传感器输出电压转换为一个近似的距离,方法是创建一条最佳拟合线,将输出电压(V)的倒数与距离(cm)联系起来。线性化方程的最简形式可以表述为到反射物体的距离约等于一个常数尺度因子(~27v*cm)除以传感器的输出电压之后的数值。因此增加一个恒定的距离偏移量并修改缩放因子可以改善这条线的拟合。
图5:距离传感器的特性/Pololu.com
摘自Phidgets.com
这种传感器可以找到离物体的距离,这些物体呈现出非常窄的边缘,比如角度非常尖锐的墙壁。
注:该传感器的输出因单元而异,并取决于目标的特性(反射率、尺寸、运动方向、目标对准)。
图6:夏普GP2Y0A21YK与Uno之间的接线图
图7:夏普距离传感器、TEMT6000、Uno之间的接线图
代码:
intlightSensor=0;intdistanceSensor=1;voidsetup(){Serial.begin(9600);}voidloop(){intvalueFromLightSensor=analogRead(lightSensor);Serial.print("LightValue=");Serial.print(valueFromLightSensor);Serial.println("");Serial.print("DistanceValue=");intvalueFromDistanceSensor=analogRead(distanceSensor);intdistance=4800/(valueFromDistanceSensor-20);Serial.print(distance);delay(1000);}
这是一个实用模块,即使在系统关闭时,上面所配备的电池也能保证系统工作的连续性。
图8:RTC模块接线图
图9:RTC、夏普距离传感器、TEMT6000、Uno之间的接线图
为了获得最佳的使用效果,需要为模块添加两个库。
#include
图12:所显示的小时
Tiberia目前是布加勒斯特理工大学电气工程学院的大四学生。她非常热衷于智能家居设备的设计和开发,旨在让我们的日常生活更加轻松。