Мазмуну:

Arduino чаң бөлүкчөлөрүн көзөмөлдөө станциясы: 4 кадам (сүрөттөр менен)
Arduino чаң бөлүкчөлөрүн көзөмөлдөө станциясы: 4 кадам (сүрөттөр менен)

Video: Arduino чаң бөлүкчөлөрүн көзөмөлдөө станциясы: 4 кадам (сүрөттөр менен)

Video: Arduino чаң бөлүкчөлөрүн көзөмөлдөө станциясы: 4 кадам (сүрөттөр менен)
Video: Portable dust detector for PM10 & PM2.5 : Arduino uno + particle sensor + OLED + portable battery 2024, Июль
Anonim
Arduino чаң бөлүкчөлөрүн көзөмөлдөөчү станция
Arduino чаң бөлүкчөлөрүн көзөмөлдөөчү станция

Сиз үйүңүздөгү чаңдын булганышын көзөмөлдөп турган нерселердин DIY интернеттерин 50 доллардан аз кура аласыз жана чаңдын деңгээли өтө жогору болгондо кабардар болуп турасыз, ошондуктан бөлмөнү желдете аласыз, же болбосо аны сыртка коюп, кабар алсаңыз болот эгер сиз өтө булганган аймакта жашасаңыз, сыртка чыгуу коопсуз.

Мен муну мектептин проектиси катары жасадым, ошондуктан MQTT билдирүүлөрүн кабыл ала турган кызматты табууга жана эскертмелер же электрондук каттар сыяктуу сизге жөнөтүүгө жетиштүү убактым жок болчу.

Ошондой эле, сенсорду дайыма күйгүзүү күйөрмандын иштөө мөөнөтүн кыскартат.

1 -кадам: Тетиктер керек

Тетиктер керек
Тетиктер керек

Сизге эмне керек

  • Arduino Uno
  • Arduino Ethernet калканы
  • Бөлүк зат лазердик сенсор
  • DHT11 температура жана нымдуулук сенсору (милдеттүү эмес)
  • Breadboard
  • Өтмө кабелдер

2 -кадам: Бөлүктөрдү чогултуу

Бөлүктөрдү чогултуу
Бөлүктөрдү чогултуу

Биринчиден, Ethernet калканчын Arduino'го туташтыруу керек

PM сенсорунун бир нече зымдары бар, бирок бизге VCC, GND, TX, RX керек.

VCC жана GND'ди тиешелүүлүгүнө жараша нан тактасына + жана - туташтырыңыз.

Arduino аппараттык RX жана TX казыктары бар, бирок биз RX жана TX казыктарынын программалык эмуляциясын тиешелүү түрдө 2 жана 3 -казыктарда колдонобуз. Сенсордун RX'ин Arduino TX жана сенсордун TX Arduino RXине туташтырыңыз.

Эгерде сиз температура сенсорун колдоно турган болсоңуз, VCC жана GND линияларын Breadboardдогу + жана - линиясына 7 -пинге туташтырыңыз.

3 -кадам: Кодекс

Сиз MQTT брокерин малина пи же дайыма үйүңүздө болгон компьютерге орното аласыз же Cloud MQTT сыяктуу булут MQTT кызматын колдоно аласыз. Андан кийин, сиз IFTT вебхукуна HTTP катары жөнөтүүчү сценарий жаза аласыз, анткени алар MQTT вебхуктарын азырынча колдобойт жана үйүңүздөгү чаңдын деңгээли өтө жогору болгондо эскертмелерди орнотот.

Ардуино аба бекети

#кошуу

#кошуу
#кошуу
#кошуу
#кошуу
#кошуу

#кошуу

#кошуу
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IPAddress ip (169, 169, 100, 98);
байт мак = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
constchar *mqtt_server = "m23.cloudmqtt.com";
constint mqtt_port = 11895;
constchar *mqtt_user = "jetjewk";
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 наркы;
char previousValue;
if (! client.connected ())
{
эгерде (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 (индекс == 5) {
pm1 = 256 * previousValue + мааниси;
тамыр ["pm1"] = абс (pm1);
}
elseif (индекс == 7) {
pm2_5 = 256 * previousValue + value;
тамыр ["pm2_5"] = абс (pm2_5);
}
elseif (индекс == 9) {
pm10 = 256 * previousValue + мааниси;
тамыр ["pm10"] = абс (pm10);
}
elseif (индекс> 15) {
тыныгуу;
}
индекс ++;
}
while (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
эгерде (DHT.temperature == -999 || DHT. humidity == -999) {
тамыр ["температура"] = "Жок";
тамыр ["нымдуулук"] = "Жок";
} башка {
тамыр ["температура"] = DHT.temperature;
тамыр ["нымдуулук"] = DHT. нымдуулук;
}
sendResults ();
id ++;
кечигүү (5000);
}
voidsendResults () {
// MQTTге жарыялоо
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// серияга мүчүлүштүктөрдү оңдоо
root.printTo (Сериялык);
Serial.print ('\ n');
}
// Жазылган тема боюнча келген билдирүүлөрдү иштетет
voidcallback (char* темасы, байт* пайдалуу жүк, белгисиз узундугу) {
}

GitHub тарабынан ❤ уюштурулган rawair_quality.ino караңыз

4 -кадам: Кутуну чогултуу

Кутуну чогултуу
Кутуну чогултуу
Кутуну чогултуу
Кутуну чогултуу
Кутуну чогултуу
Кутуну чогултуу

Мен жөн эле жаткан кутучамды колдондум жана сенсордун абасын алуу үчүн тешик жасадым жана кабелдердин чыгып кетиши үчүн тешикти кесип алдым (бул өтө чоң болсо да).

Мен сенсорду кутуга бекитүү үчүн клей төшөмөлөрдү колдондум, сенсордун кирүү тешигин кутунун бургуланган тешиги менен тегиздедим.

Акырында, ethernet жана электр кабелдерин туташтырдым.

Сунушталууда: