5111| 7
|
土壤湿度传感器测试-arduino篇 |
引言: 土壤传感器大家都用过,可是在实际应用中普遍发现老版的传感防水差,易氧化等问题,这次终于期盼到了新版防水土壤传感。感谢DF团队提供的这个测试机会。主控呢用的是Arduino 迷你,arduino做的各种应用广泛被开源硬件爱好者喜欢。这次的项目利用了RGB灯和蜂鸣器来反应植物的情绪,例如缺水,湿润等,达到互动娱乐性。 相关视频展示如下: 第一步:展示内容 将传感放入水中后,传感相连的RGB灯则变色,变成紫红色。出水则报警和变回灰色。 第二步:代码要点 先用串口的代码来找到传感在空气和水中的值,然后把这个值做一个简单的运算。得到精确的临界值。 第三步:硬件搭建 所需器材:A rduino mini控制器(2);DF的防水土壤传感器(3);5V蜂鸣器(4);5v 锂电池;(5);USB数据线;(6);DF的RGB灯板 第四步:了解一下关键硬件的参数 根据测试,土壤传感的灵敏度很好,没有延迟, 第五步: 发一些硬件的图片。让人有个直观的认识 第六步:总体概括 项目用RGB灯和Buzzer来反应出土壤传感的回传值。这个值和你插入土中的传感的深度相关。这里我插入的是传感的三分之一,那么我是从这个点取值,即400.展现的结果是传感遇水则发出红紫色,缺水则用Buzzer发警告,同时RGB灯的颜色变灰。具体参见视频。 第七部:连线图 连线图如下: 第八部:代码部分的设计 [mw_shl_code=applescript,false] void setup() { Serial.begin(9600); // open serial port, set the baud rate to 9600 bps} void loop() { Serial.println(analogRead(A0)); //connect sensor and print the value to serial delay(100); }[/mw_shl_code] 先用上面的代码测出你的传感的干湿范围。 我取的是600空气值和400水湿度.你可以参考一下产品WIKI的描述 ============= 记录传感器放置在空气中时读到的模拟值,代表干燥时的读数。由于空气中的湿度不同,该 数值区间一般在520-640之间。 将传感器插入水中一定深度,深度推荐在"Recommend Depth"之间,不要超过板子上 的"Warning Line"。待传感器反馈数值为0时,代表100%湿度的读数,此时根据传感器上的刻 度,记录读到的深度值,在土壤中使用时,也推荐插入至该深度值。 ============= [mw_shl_code=applescript,false]/*This sketch is created by gada888*/ const int AirValue = 600; //you need to change this value that you had recorded in t const int WaterValue = 400; //you need to change this value that you had recorded in th int intervals = (AirValue - WaterValue)/3; int soilMoistureValue = 0; int RLed = 2; int GLed = 3; int BLed = 4; int piezoPin = 8; int pitches[] = {523, 587, 659, 698, 784}; int numPitches = 5; void setup(){ Serial.begin(9600); pinMode(RLed, OUTPUT); pinMode(GLed, OUTPUT); pinMode(BLed, OUTPUT); } void loop(){ soilMoistureValue = analogRead(A0); //put Sensor insert into soil if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals)) { Serial.println("Very Wet"); digitalWrite(RLed, LOW); digitalWrite(BLed, LOW); digitalWrite(GLed, HIGH); //Green LED } else if(soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals)) { Serial.println("Wet"); digitalWrite(RLed, LOW); digitalWrite(BLed, LOW); digitalWrite(GLed, HIGH); //Green LED } else if(soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals)) { Serial.println("Dry"); digitalWrite(RLed, HIGH); digitalWrite(BLed, LOW); //Blue LED digitalWrite(GLed, LOW); int i; for( i=0; i<numPitches; i++){ tone(piezoPin, pitches, 200); delay(200); } delay(100); } } [/mw_shl_code] |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed