×

农村黑客工具包开源分享

消耗积分:0 | 格式:zip | 大小:0.39 MB | 2022-12-14

王辉

分享资料个

描述

农村黑客工具包。

Rural Hack Kit 是一套完美的电子设备,可让您开始对您的农场、花园或阳台上的植物进行黑客攻击。

该套件包括监测我们的绿色沉默朋友环境的必需品:精确的土壤湿度传感器、精确的数字光传感器模块和温度和湿度传感器。

此外,为了使您的温室自动化,该套件具有一个继电器模块,您可以使用它来控制水阀、风扇或灯。

 
poYBAGOYOFKANLvEAACPLFV8O2Y720.png
 

套件内容

  • 湿度传感器 (DHT22)
  • 对数级模拟光传感器(Adafruit 风味的 Ga1a12s202)
  • Miceuz 的土壤湿度传感器(又名纤细的啁啾)
  • Seeed 的 Grove 中继模块
  • 电阻器/按钮/连接器

这是一系列教程中的第一篇,该教程将教授如何使用套件中的模块。在本教程中,我们将学习如何将传感器和执行器连接到 Arduino,读取它们的数据并与之交互。

在接下来的教程中,您将学习如何将传感器连接到云服务并远程照顾您的花园。

DHT22温湿度传感器

传感器规格

DHT22 是一款能够读取环境温度和湿度的数字传感器。

  • 低成本
  • 3 至 5V 电源和 I/O
  • 转换期间使用的最大电流为 2.5mA(请求数据时)
  • 适用于 0-100% 湿度读数,精度为 2-5%
  • 适用于 -40 至 80°C 温度读数 ±0.5°C 精度
  • 不超过 0.5 Hz 采样率(每 2 秒一次)
  • 机身尺寸 27mm x 59mm x 13.5mm (1.05" x 2.32" x 0.53")
  • 4 针,0.1" 间距
  • 重量(仅 DHT22):2.4g

连接

连接到传感器非常容易。如图所示连接

  • 板上 VCC 的第一个引脚。
  • 第二个引脚是数据输出引脚,将其连接到板上的任何数字引脚。
  • 让第三个引脚断开。
  • 将第四个引脚接地。
 
pYYBAGOYOFmAZZniAACuQmUQlh4045.png
 

设置和测试

在您尝试使用传感器之前,您需要安装其库。在库管理器上搜索 dht 并安装库。

 
poYBAGOYOGyAd2X3AAKzNAEi6u8074.png
 

现在您只需上传将从传感器获取数据并将其打印到串行端口的测试草图。

#include 
// for DHT22,  
// VCC: 5V or 3V 
// GND: GND 
// DATA: 6 
int pinDHT22 = 6; 
SimpleDHT22 dht22; 
void setup() { 
 Serial.begin(115200); 
} 
void loop() { 
 // start working... 
 Serial.println("================================="); 
 Serial.println("Sample DHT22..."); 
 // read without samples. 
 // @remark We use read2 to get a float data, such as 10.1*C 
 //    if user doesn't care about the accurate data, use read to get a byte data, such as 10*C. 
 float temperature = 0; 
 float humidity = 0; 
 int err = SimpleDHTErrSuccess; 
 if ((err = dht22.read2(pinDHT22, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { 
   Serial.print("Read DHT22 failed, err="); Serial.println(err);delay(2000); 
   return; 
 } 
 Serial.print("Sample OK: "); 
 Serial.print((float)temperature); Serial.print(" *C, "); 
 Serial.print((float)humidity); Serial.println(" RH%"); 
 // DHT22 sampling rate is 0.5HZ. 
 delay(2500); 
} 

您现在可以打开串行监视器,您应该能够看到那里打印的温度和湿度值。

I2C土壤湿度传感器

套件随附的土壤湿度传感器可能是市场上用于 DIY 土壤湿度测量的最可靠且价格最低的传感器之一。

经典的土壤湿度传感器(看起来像带有两个电极的叉子)测量种植在土壤中的两个电极之间的电阻;电极之间的高电阻意味着土壤不导电,因此它可能是干燥的;低电阻意味着电流在两个电极之间很容易流动,这就是传感器在水中或潮湿土壤中时发生的情况。

所描述技术的缺点是电极上的铜很快就会生锈,因此过了一段时间,这些传感器的读数就不再准确了。

套件中提供的传感器使用电容感应来测量其周围介质的电容:例如,湿土壤的电容比干土壤或空气的电容高。它没有电极,而是采用电容式天线,无需与土壤直接接触,这可以保护传感器,使其读数可靠且及时。

传感器可以通过 I2C 协议读取并提供以下功能:

  • 土壤湿度传感
  • 光感应
  • 温度感应
  • 复位芯片
  • I2C地址更改
  • 沉睡

传感器规格

  • 版本 2.7.5
  • 供电电压 3.3V - 5V
  • 电流消耗:1.1mA @ 5V, 0.7mA @ 3.3V 空闲时, 14mA @ 5V, 7.8mA @ 3.3V 测量时。全速持续轮询传感器时,电流消耗平均为 4.5mA @ 5V、2.8mA @ 3.3V
  • 工作温度 0°C - 85°C
  • 湿度读数随温度漂移 - 在整个温度范围内 <10%
  • 不要忘记为 SCL 和 SDA 线提供上拉
  • 默认 I2C 地址为 0x20(十六进制)

连接

与传感器的连接是通过 i2c 完成的,根据您使用的电路板,您可能有不同的引脚分配给 I2C;

如果您使用 MKR1000 连接:

  • VCC 到 VCC
  • 地到地
  • SCL 到 12
  • SDA 到 11
 
poYBAGOYOHGACuJAAACI0ePQ8h8024.png
 

设置和测试

首先安装I2CSoilMoistureSensor 库:打开库管理器,搜索 I2CSoilMoistureSensor 并安装库。

 
poYBAGOYOHeABKG1AAJtSEkBe4Y071.png
 

现在上传示例草图,您应该能够看到测量数据。

#include <I2CSoilMoistureSensor.h> 
#include <Wire.h> 
I2CSoilMoistureSensor sensor(0x60); 
void setup() { 
 Wire.begin(); 
 Serial.begin(9600); 
 sensor.begin(); // reset sensor 
 delay(1000); // give some time to boot up 
 Serial.print("I2C Soil Moisture Sensor Address: "); 
 Serial.println(sensor.getAddress(),HEX); 
 Serial.print("Sensor Firmware version: "); 
 Serial.println(sensor.getVersion(),HEX); 
 Serial.println(); 
} 
void loop() { 
 while (sensor.isBusy()) delay(50); // available since FW 2.3 
 Serial.print("Soil Moisture Capacitance: "); 
 Serial.print(sensor.getCapacitance()); //read capacitance register 
 Serial.print(", Temperature: "); 
 Serial.print(sensor.getTemperature()/(float)10); //temperature register 
 Serial.print(", Light: "); 
 Serial.println(sensor.getLight(true)); //request light measurement, wait and read light register 
 sensor.sleep(); // available since FW 2.3 
} 

GA1A12S202 对数刻度模拟光传感器

这种由 Adafruit 生产的非常便宜的传感器模块比您可能在其他项目中使用的老式光敏电阻要准确得多。

大多数光传感器与光照水平呈线性关系,这意味着它们对黑暗区域的变化不是很敏感,并且当有很多光时很容易“最大化”。

该传感器在 3 到 55,000 Lux 的大动态范围内是对数的,因此它在低光照水平下具有很高的灵敏度,但也几乎不可能“最大化”,因此您可以在室内或室外使用它而无需更改代码或校准。

传感器规格

  • 2.3-6V电源
  • 板载 68K 负载电阻,最大 3V 模拟输出
  • 0.2克
  • 0.4 英寸 x 0.5 英寸 x 0.06 英寸(10 毫米 x 13 毫米 x 1.5 毫米)
  • 0.1” (2.5mm) 安装孔

您可以在此处获取完整的数据表

连接

使用此传感器读取光强度就像从模拟传感器读取模拟一样容易。

只需通过 VCC 和 GND 连接电源,然后将 OUT 引脚连接到板上的模拟输入。

  • VCC 至 3.3V 或 5V,具体取决于您的电路板电压
  • OUT到你板上的AO
  • GND 到板上的 GND
 
pYYBAGOYOHmAMljJAABRYxbLQUw131.png
 

设置和测试

您不需要任何库来使用它,只需使用 analogRead() 函数从 A0 引脚读取值。

该传感器的最大输出值为 3.3V,如果您使用的是 mkr1000 之类的 3.3V 板,则开箱即可获得准确的读数。

!!!如果您的电路板工作电压为 5v,请查看此 adafruit 教程,您会发现有关如何使用外部模拟参考值的便捷技巧。

在下面提供的示例草图中完成了从模拟读数到勒克斯的简单转换。

将其上传到您的电路板,您应该能够准确测量房间内的光线。

/* 
 Test sketch for the Adafruit Analog Light Sensor 
 by Bill Earl 
 for Adafruit Industries 
 Connect sensor output to Analog Pin 0 
 Connect VCC to VCC and GND to GND 
*/ 
int sensorPin = A0;    // select the input pin for the potentiometer 
float rawRange = 1024; // 3.3v 
float logRange = 5.0; // 3.3v = 10^5 lux 
void setup()  
{ 
 analogReference(EXTERNAL); // 
 Serial.begin(9600); 
 Serial.println("Adafruit Analog Light Sensor Test"); 
} 
void loop()  
{ 
 // read the raw value from the sensor: 
 int rawValue = analogRead(sensorPin);     
 Serial.print("Raw = "); 
 Serial.print(rawValue); 
 Serial.print(" - Lux = "); 
 Serial.println(RawToLux(rawValue));  
 delay(1000); 
} 
float RawToLux(int raw) 
{ 
 float logLux = raw * logRange / rawRange; 
 return pow(10, logLux); 
} 

凹槽继电器

套件的最后一个重要部分是继电器。继电器是一个机电组件,可用于控制 Arduino 的大负载。您可以连接水泵、风扇以及基本上可以打开或关闭的任何东西。

!!!小心 !!!连接像220V灯这样的大负载很危险!!!如果您使用超过 120V 的电压,请采取所有必要的预防措施。

套件中提供的继电器也可以由 3.3v 设备控制,因此很容易将其连接到 MKR1000。

连接

将继电器连接到 Arduino 非常简单,只需将随附的 3 根电线连接到 Arduino 即可。

  • VCC 到 VCC
  • 地到地
  • SIG 到 Arduino 上的 pin9。

模块上的两个螺丝端子是您应该连接负载的地方:风扇、泵、灯条或其他任何东西。

 
poYBAGOYOH-AJA58AAFvpWtVM8c962.png
 

设置和测试

为了测试一切是否正常,我们将在我们的板上上传一个眨眼草图。

每次打开或关闭 LED 时,您都会听到继电器外壳内的机械噪音。

int RELAY_PIN=9; 
void setup() { 
 pinMode(LED_BUILTIN, OUTPUT); 
 // initialize digital pin RELAY_BUILTIN as an output. 
 pinMode(RELAY_PIN, OUTPUT); 
} 
void loop() { 
 digitalWrite(LED_BUILTIN, HIGH);    
 pinMode(RELAY_PIN, HIGH);          // open the circuit 
 delay(1000);                        
 digitalWrite(LED_BUILTIN, LOW);   // close the circuit 
 pinMode(RELAY_PIN, LOW); 
 delay(1000);                       // wait for a second 
} 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !