笔记|常用传感器讲解四--水位传感器(water sensor)

常用传感器讲解四–水位传感器(water sensor) 笔记|常用传感器讲解四--水位传感器(water sensor)
文章图片

具体讲解 该传感器通过使用一系列五个连接到系统接地的裸露走线来工作。在每两个接地迹线之间交错插入一个感测迹线,五个接地迹线和总共五个感测迹线。感测走线连接到一个1兆欧的上拉电阻。感测迹线被拉高,直到一滴水或水平面使感测迹线接地。理论上,此传感器将输出0-1024之间的模拟信号,但随着PCB上的走线长度的增加,我发现可用范围在480至?710之间。传感器未设计为完全浸入水中,请谨慎安装,以便仅PCB上裸露的走线会与水接触。传感器的输出电压为0-4.2 V,因此如果仅需要低/高指示,则可以将其用作数字输入。
模拟量输出值对应于与传感器底部的以下距离(近似值):
480 = 0毫米
530 = 5毫米
615 = 10毫米
660 = 15毫米
680 = 20毫米
690 = 25毫米
700 = 30毫米
705 = 35毫米
710 = 40毫米
传感器分辨率随着水位的增加而降低。
==安装
1.将草图上传到您的Arduino。
2.使用该项目随附的原理图组装电路。
** LED:LED电阻器必须安装在电路接地和LED之间。如果您的LED的一个分支比另一个分支更长,则需要将更长的分支连接到电源电压(Arduino的D2)。
*注意:我使用的传感器线长约为2.5英尺,LED的线长为2英尺。这使我可以将Arduino放在远离水的地方,并将LED布线到树枝的末端以提高可视性。
3.按照下面的校准说明进行操作(也包括在草图中):
*********校准/设置 *********
a)将Arduino连接到IDE并打开串行监视器。
b)将深度传感器插入水中,直到您认为是触发满指示器所需的最小深度。请注意串行监视器中指示的值,以用作全电平。
*任何大于等于=的值都会触发相应的全闪烁代码。
c)重复步骤2,确定您将分配给LOW值的值。
*高于此值但低于FULL值的任何值都将触发相应的INTERMEDIATE闪烁代码。
*低于此值的任何值都会触发相应的LOW闪烁代码。
d)将步骤2和3中确定的值插入到草图中的const int FULL和LOW值中。
e)使用更新后的值上传草图,现在传感器已校准。
4.将Arduino放在某种类型的外壳上,以防止水,运动部件或短路损坏。
5.将系统安装到您的应用程序中。
编号零件名称零件编号数量
R1 1k 1/4 W电阻TE Con??nectivity CFR16J1K0(或类似产品)1
L1 LED CREE C503B-RAN-CZ0C0AA2(或类似产品)1
S1传感器Solu SL067 1
IC1 Arduino纳米A000005 1
PS电源您可以选择5 Vdc(> = 300mA)1
电路连接 【笔记|常用传感器讲解四--水位传感器(water sensor)】笔记|常用传感器讲解四--水位传感器(water sensor)
文章图片

实现代码

const int full = 575; const int low = 490; int depthSensor = 0; //Set depthSensor input pin to Analog 0. int lastValue = https://www.it610.com/article/0; char printBuffer[128]; /* The following line sets the LED pin to the corresponding digital pin of the Arduino.You can set these to any digital pin as needed */const int whiteLED = 2; void setup() { Serial.begin(9600); // Begin serial communication to obtain sensor values during calibration. pinMode(whiteLED, OUTPUT); // Set LED pin to OUTPUT mode. }void loop() { int value = analogRead(depthSensor); // Read the sensor values. if(((lastValue>= value) && ((lastValue - value) > 10)) || (lastValue = https://www.it610.com/article/10)) /* If the delta between last and current value is> 10, display the current value. */ { // Displays depth sensor value to serial port. sprintf(printBuffer, "ADC%d level is %d\n", depthSensor, value); Serial.print(printBuffer); Serial.println(); //Serial.println(value); //Serial.println(); // Set last value to current value for next loop. lastValue - value; } if(value >= full) { // FULL for(int x = 0; x < 3; x++){ digitalWrite(whiteLED, HIGH); delay(800); digitalWrite(whiteLED, LOW); delay(800); } } else if((value < full) && (value >= low)) { // INTERMEDIATE for(int x = 0; x < 2; x++){ digitalWrite(whiteLED, HIGH); delay(1000); } } else { //LOW for(int x = 0; x < 4; x++){ digitalWrite(whiteLED, HIGH); delay(100); digitalWrite(whiteLED, LOW); delay(100); } } delay(3000); // Read current sensor value every three seconds. }

    推荐阅读