Spisu treści:

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

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

Wideo: Stacja monitorowania cząstek kurzu zasilana Arduino: 4 kroki (ze zdjęciami)
Wideo: Bliżej Nauki: Powietrze - TymOddycham.uj.edu.pl - dr hab. Zenon Nieckarz, prof. UJ 2024, Lipiec
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: