Оглавление:

Станция мониторинга пылевых частиц с питанием от Arduino: 4 шага (с изображениями)
Станция мониторинга пылевых частиц с питанием от Arduino: 4 шага (с изображениями)

Видео: Станция мониторинга пылевых частиц с питанием от Arduino: 4 шага (с изображениями)

Видео: Станция мониторинга пылевых частиц с питанием от Arduino: 4 шага (с изображениями)
Видео: Как собрать станцию атмосферного мониторинга за 4 тысячи рублей 2024, Июль
Anonim
Станция мониторинга пылевых частиц с питанием от Arduino
Станция мониторинга пылевых частиц с питанием от Arduino

Вы можете довольно легко создать DIY-устройство для Интернета вещей, которое отслеживает загрязнение пыли в вашем доме, менее чем за 50 долларов и получать уведомления, когда уровень пыли становится слишком высоким, чтобы вы могли проветрить комнату, или вы можете установить его снаружи и получать уведомление, если это безопасно выходить на улицу, если вы живете в сильно загрязненном районе.

Я сделал это как школьный проект, поэтому у меня не было достаточно времени, чтобы найти службу, которая будет принимать сообщения MQTT и отправлять их вам в виде уведомлений или электронных писем.

Также обратите внимание, что постоянное питание датчика сокращает срок службы вентилятора.

Шаг 1: Необходимые детали

Необходимые детали
Необходимые детали

Что тебе понадобится

  • Ардуино Уно
  • Шилд Arduino Ethernet
  • Лазерный датчик твердых частиц (обычно стоит 10-30 долларов на eBay / aliexpress)
  • Датчик температуры и влажности DHT11 (опция)
  • Макетная плата
  • Соединительные кабели

Шаг 2: соберите детали

Соберите детали
Соберите детали

Во-первых, вам нужно подключить экран Ethernet к Arduino.

Датчик PM имеет несколько проводов, но нам нужны VCC, GND, TX, RX.

Подключите VCC и GND к + и - на макетной плате соответственно.

Arduino имеет аппаратные контакты RX и TX, но мы будем использовать программную эмуляцию контактов RX и TX на контактах 2 и 3 соответственно. Подключите RX датчика к TX Arduino и TX датчика к RX Arduino.

Если вы собираетесь использовать датчик температуры, подключите линии VCC и GND к + и - на макетной плате, а линию данных к контакту 7.

Шаг 3: Код

Вы можете установить брокер MQTT на Raspberry Pi или на компьютер, который у вас всегда есть дома, или использовать облачный сервис MQTT, например Cloud MQTT. Затем вы можете написать сценарий, который отправляет данные как HTTP на веб-перехватчик IFTT, поскольку он еще не поддерживает веб-перехватчик MQTT, и настраивает уведомления, когда уровень пыли в вашем доме становится слишком высоким.

Аэродром Ардуино

#включают

#включают
#включают
#включают
#включают
#включают

#включают

#включают
# defineDHT11_PIN7
# defineRX_PIN2
# defineTX_PIN3
IP-адрес ip (169, 169, 100, 98);
byte mac = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
constchar * mqtt_server = "m23.cloudmqtt.com";
constint mqtt_port = 11895;
constchar * mqtt_user = "jhetjewk";
constchar * mqtt_pass = "QB2p9PiMV6pn";
constchar * mqtt_client_name = "arduinoClient1"; // Клиентские подключения не могут иметь одно и то же имя подключения
EthernetClient ethClient;
Клиент PubSubClient (ethClient);
SoftwareSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
unsignedlong id;
// Файл myFile;
String s;
StaticJsonBuffer <200> jsonBuffer;
JsonObject & root = jsonBuffer.createObject ();
voidsetup () {
Serial.begin (57600);
pmSerial.begin (9600);
id = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
если (Ethernet.begin (mac) == 0)
{
Serial.println («Не удалось настроить Ethernet с помощью DHCP»);
// попытка с фиксированным IP-адресом
Ethernet.begin (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (обратный вызов);
задержка (2000);
Serial.println (Ethernet.localIP ());
client.connect ("arduinoClient", mqtt_user, mqtt_pass);
Serial.print ("rc =");
Serial.print (client.state ());
Serial.print ("\ n");
}
voidloop () {
intindex = 0;
значение символа;
char previousValue;
если (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println («подключен»);
}
}
while (pmSerial.available ()) {
значение = pmSerial.read ();
if ((index == 0 && value! = 0x42) || (index == 1 && value! = 0x4d)) {
Serial.println («Не удается найти заголовок данных.»);
возвращение;
}
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) {
previousValue = значение;
}
elseif (index == 5) {
pm1 = 256 * предыдущее значение + значение;
корень ["pm1"] = abs (pm1);
}
elseif (index == 7) {
pm2_5 = 256 * предыдущее значение + значение;
корень ["pm2_5"] = абс (pm2_5);
}
elseif (index == 9) {
pm10 = 256 * предыдущее значение + значение;
корень ["pm10"] = abs (pm10);
}
elseif (index> 15) {
перерыв;
}
index ++;
}
а (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
if (DHT.температура == -999 || DHT.влажность == -999) {
корень ["температура"] = "Н / Д";
корень ["влажность"] = "Н / Д";
} еще {
корень ["температура"] = DHT.температура;
корень ["влажность"] = DHT.влажность;
}
sendResults ();
id ++;
задержка (5000);
}
voidsendResults () {
// публикуем в MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// отладка на серийный номер
root.printTo (серийный);
Serial.print ('\ n'); Серийный принт ('\ n');
}
// Обрабатывает сообщения, полученные по темам, на которые подписаны
voidcallback (char * topic, byte * payload, unsignedint length) {
}

просмотреть rawair_quality.ino, размещенный на ❤ на GitHub

Шаг 4: соберите коробку

Соберите коробку
Соберите коробку
Соберите коробку
Соберите коробку
Соберите коробку
Соберите коробку

Я просто использовал коробку, в которой валялся, и просверлил отверстие для датчика, из которого он мог забирать воздух, и вырезал отверстие для выхода кабелей (хотя оно было слишком большим).

Я использовал клейкие подушечки, чтобы прикрепить датчик к коробке, совместив входное отверстие датчика с просверленным отверстием на коробке.

Наконец, я подключил сетевой кабель и кабель питания.

Рекомендуемые: