İçindekiler:

Arduino Powered Toz Parçacıkları İzleme İstasyonu: 4 Adım (Resimli)
Arduino Powered Toz Parçacıkları İzleme İstasyonu: 4 Adım (Resimli)

Video: Arduino Powered Toz Parçacıkları İzleme İstasyonu: 4 Adım (Resimli)

Video: Arduino Powered Toz Parçacıkları İzleme İstasyonu: 4 Adım (Resimli)
Video: Usta şoför işte yaa 2024, Kasım
Anonim
Arduino Powered Toz Parçacıkları İzleme İstasyonu
Arduino Powered Toz Parçacıkları İzleme İstasyonu

Evinizdeki toz kirliliğini 50 dolardan daha düşük bir fiyata izleyen bir DIY nesnelerin interneti cihazını oldukça kolay bir şekilde oluşturabilir ve toz seviyesi çok yükseldiğinde haberdar olmak için odayı havalandırabilir veya dışarı ayarlayabilir ve eğer öyleyse haberdar olabilirsiniz. çok kirli bir bölgede yaşıyorsanız dışarı çıkmak güvenlidir.

Bunu bir okul projesi olarak yaptım, bu yüzden MQTT mesajlarını alıp size bildirim veya e-posta gibi gönderecek bir servis bulmak için yeterli zamanım olmadı.

Ayrıca, sensörü her zaman açık tutmanın fanın ömrünü azaltacağını unutmayın.

Adım 1: Gerekli Parçalar

Gerekli Parçalar
Gerekli Parçalar

Neye ihtiyacın olacak

  • Arduino Uno
  • Arduino Ethernet kalkanı
  • Partikül madde lazer sensörü (genellikle eBay/aliexpress'te 10-30$'a gidin)
  • DHT11 sıcaklık ve nem sensörü (opsiyonel)
  • ekmek tahtası
  • Atlama kabloları

Adım 2: Parçaları Birleştirin

Parçaları Birleştirin
Parçaları Birleştirin

İlk önce ethernet kalkanını Arduino'ya takmanız gerekir.

PM sensörünün birden fazla kablosu var, ancak ihtiyacımız olan VCC, GND, TX, RX.

VCC ve GND'yi devre tahtasında sırasıyla + ve -'ye bağlayın.

Arduino'nun donanım RX ve TX pinleri vardır, ancak RX ve TX pinlerinin yazılım emülasyonunu sırasıyla pin 2 ve 3'te kullanacağız. Sensörün RX'ini Arduino'nun TX'ine ve sensörün TX'ini Arduino'nun RX'ine takın.

Sıcaklık sensörünü kullanacaksanız, VCC ve GND hatlarını Breadboard'da + ve -'ye ve veri hattını pin 7'ye takın.

Adım 3: Kod

MQTT aracısını bir ahududu pi'ye veya her zaman evde bulunan bir bilgisayara yükleyebilir veya Cloud MQTT gibi bir bulut MQTT hizmetini kullanabilirsiniz. Ardından, henüz MQTT web kancalarını desteklemediğinden ve evinizdeki toz seviyeleri çok yükseldiğinde bildirimler ayarlamadığından, verileri HTTP olarak bir IFTT web kancasına gönderen bir komut dosyası yazabilirsiniz.

Arduino hava istasyonu

#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek

#Dahil etmek

#Dahil etmek
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IPAdresi ip(169, 169, 100, 98);
bayt 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"; // İstemci bağlantıları aynı bağlantı adına sahip olamaz
EthernetClient ethClient;
PubSubClient istemcisi(ethClient);
YazılımSeri pmSerial(RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
imzasız uzun kimlik;
//dosya benimDosyam;
Teller;
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
voidsetup() {
Seri.başla(57600);
pmSerial.begin(9600);
kimlik = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
if (Ethernet.begin(mac) == 0)
{
Serial.println("DHCP kullanılarak Ethernet yapılandırılamadı");
// sabit ip adresi ile deneme
Ethernet.begin(mac, ip);
}
client.setServer(mqtt_server, mqtt_port);
client.setCallback(geri arama);
gecikme(2000);
Serial.println(Ethernet.localIP());
client.connect("arduinoClient", mqtt_user, mqtt_pass);
Seri.print("rc=");
Serial.print(client.state());
Seri.print("\n");
}
boşluk döngüsü() {
inindex = 0;
karakter değeri;
char öncekiValue;
if (!client.connected())
{
if (client.connect("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println("bağlı");
}
}
while (pmSerial.available()) {
değer = pmSerial.read();
if ((index == 0 && değeri != 0x42) || (index == 1 && değeri != 0x4d)) {
Serial.println("Veri başlığı bulunamadı.");
dönüş;
}
if (indeks == 4 || dizin == 6 || dizin == 8 || dizin == 10 || dizin == 12 || dizin == 14) {
öncekiDeğer = değer;
}
elseif (indeks == 5) {
pm1 = 256 * öncekiDeğer + değer;
kök["pm1"] = abs(pm1);
}
elseif (indeks == 7) {
pm2_5 = 256 * öncekiDeğer + değer;
kök["pm2_5"] = abs(pm2_5);
}
elseif (indeks == 9) {
pm10 = 256 * öncekiDeğer + değer;
kök["pm10"] = abs(pm10);
}
elseif (dizin >15) {
kırmak;
}
dizin++;
}
while (pmSerial.available()) pmSerial.read();
int chk = DHT.read11(DHT11_PIN);
if (DHT.sıcaklık == -999 || DHT.nem == -999) {
root["sıcaklık"] = "Yok";
root["nem"] = "N/A";
} Başka {
root["sıcaklık"] = DHT.temperature;
root["nem"] = DHT.humidity;
}
sendResults();
kimlik++;
gecikme (5000);
}
vidsendResults() {
// MQTT'ye yayınla
char jsonChar[100];
root.printTo(jsonChar);
Serial.println(client.publish("arduino", jsonChar));
// seri olarak hata ayıkla
root.printTo(Seri);
Seri.print('\n');
}
// Abone olunan konu(lar)a gelen mesajları işler
voidcallback(char* konu, bayt* yükü, imzasız uzunluk) {
}

GitHub tarafından ❤ ile barındırılan rawair_quality.ino'yu görüntüle

Adım 4: Kutuyu Birleştirin

Kutuyu Birleştirin
Kutuyu Birleştirin
Kutuyu Birleştirin
Kutuyu Birleştirin
Kutuyu Birleştirin
Kutuyu Birleştirin

Sadece etrafta yattığım bir kutu kullandım ve sensörün hava alması için bir delik açtım ve kabloların çıkması için bir delik açtım (biraz fazla büyük olmasına rağmen).

Sensörü kutuya takmak için tutkal pedleri kullandım, sensörün giriş deliğini kutudaki delinmiş delikle hizaladım.

Son olarak ethernet ve güç kablolarını taktım.

Önerilen: