步骤1:必需的硬件
1。粒子光子
光子是一种微型Wi-Fi IoT设备,用于为物联网创建连接的项目和产品。它易于使用,功能强大且已连接到云。该开发板本身使用赛普拉斯Wi-Fi芯片(可在Nest Protect,LIFX和Amazon Dash中找到该芯片)以及功能强大的STM32 ARM Cortex M3微控制器。
使用PEI2C扩展,使用粒子电子/光子为扩展控制器世界提供云连接。
PEI2C提供了一个5伏I2C扩展端口,允许您的粒子电子或光子连接到不同的I2C设备。连接用于光度监视,气体水平检测,温度和湿度监视的传感器,以及多种类型的运动,加速度和方向传感器。
3。一路继电器(5V)
4。 MQ9
使用我们的I2C迷你模块形状因子,MQ-9气体传感器可轻松监控一氧化碳和可燃气体浓度。 MQ9连接到ADC121C 12位模数转换器,该转换器只需使用两个地址跳线即可充分扩展到每个I2C端口9个气体传感器(充分利用了浮动地址系统)。
MQ-9能够检测介于10和1,000ppm之间的一氧化碳空气浓度水平以及介于100和10,000ppm之间的可燃气体浓度。 MQ9的理想感测条件是在65%±5%的湿度下20°C±2°C
5。 SHT30
SHT30是Sensirion的下一代温度和湿度传感器。
与之前的产品相比,SHT30具有更高的智能性,可靠性和改进的精度指标。其功能包括增强的信号处理,以便可以使用I2C通信读取温度和湿度。
步骤2:与粒子光子的连接
必要的连接(参见图片)如下:
1。这将在I2C上工作。取一个用于粒子光子的I2C屏蔽,然后将其轻轻地连接到粒子光子的引脚上。
2。将I2C电缆的一端连接到SHT30的端口,另一端连接到I2C屏蔽。
3。使用I2C电缆将MQ9传感器入口连接到SHT30上。
4。要打开继电器电源,请使用光子的3V和GND引脚。将光子的D7引脚连接到继电器的IN引脚。
5。最后,使用USB电缆为粒子光子供电。您还可以使用光子的力量之盾来提供外部电源。
步骤3:使用粒子Webhooks将粒子光子连接到Ubidots
了解您可以访问以下链接的Particle Webhook功能。
1。要开始使用您的粒子光子设备,请单击此处。
2。安装完设备后,请执行以下步骤:
登录到您的粒子帐户,转到粒子控制台,将鼠标指针移到集成。
单击“新集成”
选择“ Webhook”
将事件命名为Ubidots。
添加URL
https://industrial.api.ubidots.com/api/v1.6/devices/{{{PARTICLE_DEVICE_ID}}}
选择请求类型 POST,请求格式“自定义正文”, 设备任意。
转到“高级设置”并插入文本“ {{{PARTICLE_EVENT_VALUE}}} ” ”。
现在移至 HTTP头并插入:
Host | industrial.api.ubidots.com X-Auth-Token | YOUR_UBIDOTS_TOKEN_HERE Content-Type | application/json
单击创建网络并确认数据正在流式传输到Ubidots。
步骤4:对光子进行编程
使用Webhooks成功将您的Particle帐户连接到Ubidots之后,就可以对Photon进行编程了。
1。创建新应用,单击 Particle IDE 。
2。为您的应用命名。
3。将Ubidots库添加到新项目中:
转到“粒子IDE”右侧面板上的“库”选项,然后单击它。
在社区图书馆中搜索Ubidot,单击它。
单击包含在项目中。
单击您的应用名称,确认,然后将插入库。
4。复制并粘贴以下“火灾-一氧化碳(CO)警报系统.ino”代码。
// This #include statement was automatically added by the Particle IDE.
// This code is designed for Particle Photon to work with the SHT30 and MQ9 I2C Mini Module available from dcubestore.com
// This code is written for Fire and Carbon Monoxide Alert System
// Ubidots using Particle Webhooks.
/****************************************
Include Libraries
****************************************/
#include
#include
#include
/****************************************
Define Instances and Constants
****************************************/
#define interval 1000
#define Addr 0x44
#define Addr2 0x50
double cTemp = 0.0, fTemp = 0.0, humidity = 0.0;
int raw_adc_MQ9 = 0;
double ppm_MQ9 = 0.0;
int relay = D7;
int i = 0;
const char* WEBHOOK_NAME = “Ubidots”;
Ubidots ubidots(“webhook”, UBI_PARTICLE);
/****************************************
Main Functions
****************************************/
void setup() {
Serial.begin(115200);
ubidots.setDebug(true); // Uncomment this line for printing debug messages
// Set variable for SHT30
Particle.variable(“i2cdevice”, “SHT30”);
Particle.variable(“cTemp”, cTemp);
Particle.variable(“humidity”, humidity);
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise serial communication, set baud rate = 9600
Serial.begin(9600);
delay(300);
// Set variable for MQ9
Particle.variable(“i2cdevice”, “ADC121C_MQ9”);
Particle.variable(“PPM”, ppm_MQ9);
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise serial communication, set baud rate = 9600
Serial.begin(9600);
delay(300);
pinMode(relay, OUTPUT);
}
void loop() {
// SHT30
unsigned int data[6];
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Send 16-bit command byte
Wire.write(0x2C);
Wire.write(0x06);
// Stop I2C transmission
Wire.endTransmission();
delay(300);
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Stop I2C Transmission
Wire.endTransmission();
// Request 6 bytes of data
// Read 6 bytes of data
// temp msb, temp lsb, crc, hum msb, hum lsb, crc
if (Wire.available() == 6)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
data[4] = Wire.read();
data[5] = Wire.read();
}
delay(500);
// Convert the data
cTemp = ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45;
fTemp = (cTemp * 1.8) + 32;
humidity = ((((data[3] * 256.0) + data[4]) * 100) / 65535.0);
// Output data to dashboard
Particle.publish(“Temperature in Celsius: ”, String(cTemp));
Particle.publish(“Temperature in Fahrenheit: ”, String(fTemp));
Particle.publish(“Relative Humidity: ”, String(humidity));
float value2 = humidity ;
float value1 = cTemp ;
if (cTemp 》= 60)
{
digitalWrite(relay, HIGH);
delay(interval);
digitalWrite(relay, HIGH);
delay(interval);
} else {
digitalWrite(relay, LOW);
delay(interval);
digitalWrite(relay, LOW);
delay(interval);
}
delay(1000);
// MQ9
unsigned int data2[2];
// Start I2C transmission
Wire.beginTransmission(Addr2);
// Select data register
Wire.write(0x00);
// Stop I2C transmission
Wire.endTransmission();
// Request 2 bytes of data
Wire.requestFrom(Addr2, 2);
// Read 2 bytes of data
// raw_adc msb, raw_adc lsb
if (Wire.available() == 2)
{
data2[0] = Wire.read();
data2[1] = Wire.read();
}
delay(300);
// Convert the data to 12-bits
raw_adc_MQ9 = ((data2[0] & 0x0F) * 256) + data2[1];
float sensor_voltage = raw_adc_MQ9 / 1024.0 * 5.0;
float RS_gas = (5.0 - sensor_voltage) / sensor_voltage;
float ratio = RS_gas / 3.78;
// Output data to dashboard
Particle.publish(“Carbon Monoxide Concentration : ”, String(ratio));
float value3 = ratio;
delay(1000);
ubidots.add(“Variable_Name_One”, value1); // Change for your variable name
ubidots.add(“Variable_Name_Two”, value2);
ubidots.add(“Variable_Name_Three”, value3);
bool bufferSent = false;
bufferSent = ubidots.send(WEBHOOK_NAME, PUBLIC); // Will use particle webhooks to send data
if (bufferSent) {
// Do something if values were sent properly
Serial.println(“Values sent by the device”);
}
delay(5000);
}
5。验证代码并刷新它。
步骤5:创建Ubidots事件
一旦使用粒子IDE将代码刷新到Photon,数据便开始出现在Ubidots。
Ubidots支持已经集成的事件,使您可以将事件,警报和通知发送给需要知道的人。您可以在创建条件事件和警报中了解有关它们的更多信息。
创建事件的步骤:
1。登录到您的Ubidots仪表板。
2。转到 DATA ,然后选择事件。
3。单击Ubidots控制台左侧的 + 符号以创建事件。
4。选择如果触发器标签,以组织事件逻辑或条件。
5。单击选择变量:温度和湿度。
6。创建条件:如果“温度”或“湿度”的值在0分钟内大于或等于60。
7。选择然后采取行动标签以执行计划的事件或警报,在本例中,我们将使用语音和短信警报。
8。确定要执行的动作以及发送给接收者的消息。
9。确定时间。
10。确认事件
步骤6:输出
步骤7:应用
该系统允许您在Ubidots平台中分析实时数据。
火灾产生的热量和烟雾会严重损坏或完全破坏无法维修的物品。这种带有自动继电器控制的紧急警报可以连接到洒水系统,可以挽救许多生命和财产。
我们还可以连接GPS以获取实时位置,该位置可以与附近的消防局和医院共享,以便它们可以及时到达。
该系统可用于多种用途,例如火灾警报和有毒一氧化碳气体警报。
-
警报器
+关注
关注
2文章
71浏览量
19681
发布评论请先 登录
相关推荐
评论