Stacja monitorowania cząstek kurzu zasilana Arduino: 4 kroki (ze zdjęciami)
Stacja monitorowania cząstek kurzu zasilana Arduino: 4 kroki (ze zdjęciami)
Anonim
Stacja monitorowania cząstek kurzu zasilana przez Arduino
Stacja monitorowania cząstek kurzu zasilana przez Arduino

Możesz dość łatwo zbudować własne urządzenie internetowe, które monitoruje zanieczyszczenie kurzem w domu za mniej niż 50 USD i otrzymuje powiadomienie, gdy poziom kurzu jest zbyt wysoki, aby można było napowietrzyć pomieszczenie lub ustawić je na zewnątrz i otrzymać powiadomienie, jeśli jest bezpiecznie wyjść na zewnątrz, jeśli mieszkasz w bardzo zanieczyszczonym obszarze.

Zrobiłem to jako projekt szkolny, więc nie miałem wystarczająco dużo czasu, aby znaleźć usługę, która będzie pobierać wiadomości MQTT i wysyłać je do Ciebie, takie jak powiadomienia lub e-maile.

Należy również pamiętać, że ciągłe zasilanie czujnika skróci żywotność wentylatora.

Krok 1: Potrzebne części

Potrzebne części
Potrzebne części

Co będziesz potrzebował

  • Arduino Uno
  • Osłona Arduino Ethernet
  • Czujnik laserowy cząstek stałych (zwykle kosztuje 10-30 USD w serwisie eBay/aliexpress)
  • Czujnik temperatury i wilgotności DHT11 (opcja)
  • Deska do krojenia chleba
  • Kable rozruchowe

Krok 2: Złóż części

Złóż części
Złóż części

Najpierw musisz podłączyć osłonę Ethernet do Arduino

Czujnik PM ma wiele przewodów, ale te, których potrzebujemy, to VCC, GND, TX, RX.

Podłącz VCC i GND odpowiednio do + i - na płytce stykowej.

Arduino ma sprzętowe piny RX i TX, ale użyjemy programowej emulacji pinów RX i TX odpowiednio na pinach 2 i 3. Podłącz RX czujnika do TX Arduino i TX czujnika do RX Arduino.

Jeśli zamierzasz używać czujnika temperatury, podłącz linie VCC i GND do + i - na płytce do krojenia chleba, a linię danych do pinu 7.

Krok 3: Kodeks

Możesz zainstalować brokera MQTT na raspberry pi lub komputerze, który zawsze masz w domu, lub skorzystać z usługi MQTT w chmurze, takiej jak Cloud MQTT. Następnie możesz napisać skrypt, który wysyła dane jako HTTP do webhooka IFTT, ponieważ nie obsługują one jeszcze webhooków MQTT i skonfigurować powiadomienia, gdy poziom kurzu w domu stanie się zbyt wysoki.

Stacja lotnicza Arduino

#włączać

#włączać
#włączać
#włączać
#włączać
#włączać

#włączać

#włączać
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
Adres IP ip(169, 169, 100, 98);
bajt mac = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
constchar *mqtt_server = "m23.cloudmqtt.com";
consint mqtt_port = 11895;
constchar *mqtt_user = "jhetjewk";
constchar *mqtt_pass = "QB2p9PiMV6pn";
constchar *mqtt_nazwa_klienta = "arduinoClient1"; // Połączenia klienta nie mogą mieć tej samej nazwy połączenia
EthernetClient ethClient;
Klient PubSubClient (ethClient);
SoftwareSerial pmSerial(RX_PIN, TX_PIN);
dht DHT;
int pm1;
wewn pm2_5;
wewn pm10;
identyfikator unsignedlong;
//Plik mójPlik;
Ciąg s;
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
voidsetup() {
Serial.początek (57600);
pmSerial.początek(9600);
identyfikator = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
jeśli (Ethernet.begin(mac) == 0)
{
Serial.println("Nie udało się skonfigurować Ethernetu przy użyciu DHCP");
// próba ze stałym adresem ip
Ethernet.begin(mac, ip);
}
klient.setServer(mqtt_server, mqtt_port);
klient.setCallback(oddzwanianie);
opóźnienie (2000);
Serial.println(Ethernet.localIP());
client.connect("arduinoClient", mqtt_user, mqtt_pass);
Serial.print("rc=");
Serial.print(klient.stan());
Serial.print("\n");
}
voidloop() {
indeks = 0;
wartość znaku;
char poprzednia wartość;
jeśli (!klient.podłączony())
{
if (client.connect("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println("podłączony");
}
}
while (pmSerial.available()) {
wartość = pmSerial.read();
if ((indeks == 0 && wartość != 0x42) || (indeks == 1 && wartość != 0x4d)) {
Serial.println("Nie można znaleźć nagłówka danych.");
powrót;
}
jeśli (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) {
poprzednia wartość = wartość;
}
elseif (indeks == 5) {
pm1 = 256 * poprzednia wartość + wartość;
korzeń["pm1"] = abs(pm1);
}
elseif (indeks == 7) {
pm2_5 = 256 * poprzednia wartość + wartość;
korzeń["pm2_5"] = abs(pm2_5);
}
elseif (indeks == 9) {
pm10 = 256 * poprzednia wartość + wartość;
root["pm10"] = abs(pm10);
}
elseif (indeks >15) {
przerwa;
}
indeks++;
}
while (pmSerial.available()) pmSerial.read();
int chk = DHT.odczyt11(DHT11_PIN);
jeśli (DHT.temperatura == -999 || DHT.wilgotność == -999) {
root["temperatura"] = "nie dotyczy";
root["wilgotność"] = "nie dotyczy";
} w przeciwnym razie {
root["temperatura"] = DHT.temperatura;
root["wilgotność"] = DHT.wilgotność;
}
sendResults();
id++;
opóźnienie(5000);
}
voidsendResults() {
// opublikuj w MQTT
char jsonChar[100];
root.printTo(jsonChar);
Serial.println(client.publish("arduino", jsonChar));
// debuguj do serialu
root.printTo(Serial);
Serial.print('\n');
}
// Obsługuje wiadomości otrzymane w subskrybowanych tematach
voidcallback(char* temat, bajt* ładunku, długość unsignedint) {
}

zobacz rawair_quality.ino hostowane z ❤ przez GitHub

Krok 4: Złóż pudełko

Złóż pudełko
Złóż pudełko
Złóż pudełko
Złóż pudełko
Złóż pudełko
Złóż pudełko

Po prostu użyłem pudełka, które leżałem i wywierciłem otwór na czujnik, z którego wydostało się powietrze, i wyciąłem otwór na kable (choć był trochę za duży).

Użyłem podkładek klejących do przymocowania czujnika do pudełka, wyrównując otwór wejściowy czujnika z wywierconym otworem w pudełku.

W końcu podłączyłem kable ethernetowe i zasilające.

Zalecana: