İçindekiler:

TBM Sınıfı Kirlilik Denetleyicisi: 10 Adım
TBM Sınıfı Kirlilik Denetleyicisi: 10 Adım

Video: TBM Sınıfı Kirlilik Denetleyicisi: 10 Adım

Video: TBM Sınıfı Kirlilik Denetleyicisi: 10 Adım
Video: ÖZCAN HOCA-HAYVANCILIK 2024, Kasım
Anonim
TBM Sınıfı Kirlilik Denetleyicisi
TBM Sınıfı Kirlilik Denetleyicisi
TBM Sınıfı Kirlilik Denetleyicisi
TBM Sınıfı Kirlilik Denetleyicisi
TBM Sınıfı Kirlilik Denetleyicisi
TBM Sınıfı Kirlilik Denetleyicisi

Merhaba, ben Belçika'dan bir öğrenciyim ve bu benim lisans diplomam için ilk büyük projem! Bu Eğitilebilir Kitap, kapalı odalar, özellikle sınıflar için bir hava kirliliği ölçerin nasıl yapılacağı hakkındadır!

Neden bu proje diye düşündüğünüzü duydum. Her şey liseye gitmemle başladı. Öğleden sonra güzel bir öğle yemeği ve bir aradan sonra dersler yeniden başlar. Ama bir sorun var, öğretmen öğle yemeği yerken pencereyi açmayı unuttu, bu yüzden sıcak, terli ve uykuya daldığınız için konsantre olamıyorsunuz. Çünkü havada çok fazla CO2 var.

Projem bunu çözecek ve tüm öğrencileri derslerinde daha konsantre hale getirecek.

Gereçler

1 xRaspberry Pi 4 (55€)

Sürücülü 1 x step motor (5 €)

2 x 12v 6800 mAh pil (2x 20 €)

2 x düşürme modülü (2x 5 €)

1 x 16x2 LCD (1,5 €)

Sensörler: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x 23 €)

IC'ler: 1x MCP3008, 2x 74hc595AG (1x 2,30 €, 2x 0,40 €

LED'ler: 2x yeşil, 2x kırmızı, 3x sarı (bazı eski donanımlarda bulunur, normalde her biri 0,01 €)

Piller için konektör (2 x 0,35 €)

40 f-f konektör kablosu (1,80 €)

40 f-m konektör kablosu (1,80 €)

20 m'den m'ye bağlantı kablosu (1,80 €)

2 x PCB lehimlemek için (2x 0,70 €)

Aletler:

Havya (tercihen 60 Watt)

lehimlemek için kalay

Alüminyum levha 50x 20

Kasa (Eski bir mini bilgisayar kasası kullandım)

Bu kolayca bazı MDF veya kendi fikirleri olabilir.

Adım 1: RPi'nizi Ayarlama

RPi'nizi Ayarlama
RPi'nizi Ayarlama

Yani kalbimiz beynimiz ve ruhumuz bu üründe. Onu iyi bir şekilde tehdit edin, çünkü bir şekilde size zarar verebilir. Bir RPi 4B 4gb kullanıyorum, diğer modeller gayet iyi durumda olmalı. Eski modellerde biraz daha gecikme bekleyebilirsiniz.

İşletim sistemini phpMyAdmin gibi önceden yüklenmiş bazı yazılımlarla okulumuzdan aldık.

Öncelikle Raspberry Pi'nize ssh üzerinden bağlanabildiğinizden emin olun, bolca zamana ihtiyacımız olacak.

Bu yüzden önce SPI veri yolunu, GPIO pinlerini etkinleştirmeli ve diğer veri yollarını devre dışı bırakmalıyız, onlara ihtiyacımız olmayacak.

Bunu raspi-config menüsünde yapabilirsiniz. Arayüzler'e gidin ve normalde GPIO ve SPI'yi etkinleştirin, buradayken, gelişmiş'e giderek depolamanızı genişletin ve ardından depolama alanını genişlet'te enter'a basın.

Şimdi yeniden başlat. Sunucumuzu ve veritabanımızı çalıştırmak için pi'mizde VS Kodunu kullanmak için bazı uzantılara ihtiyacımız olacak.

VS Code Extension için yükleme işlemi burada bulunabilir.

Şimdi sunucumuz ve veritabanımız için uzantıları yükleyeceğiz. Terminali kullanın ve 'python install flask, flask-cors, mysql-python-connector, eventlet' yazıp bitene kadar bekleyin.

Artık projenin yapımına başlayabiliriz.

2. Adım: MCP3008 + TMP36

MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36

Yani 6 sensörümüz var: 4 gaz, 1 nem + sıcaklık ve 1 sıcaklık sensörü. Onları işe almak gerçek bir görevdir. Tüm sensörler analog sensörlerdir, bu nedenle analog sinyali dijital sinyale dönüştürmemiz gerekir. Bunun nedeni, RPi'nin (Rasberry Pi) yalnızca dijital sinyalleri "anlayabilmesidir". Daha fazla bilgi için buraya tıklayın.

Bu görevi tamamlamak için bir MCP3008'e ihtiyacınız olacak, bu işi harika yapacak!

Üstten (küçük balon) sola, aşağıya, diğer taraftan ve yukarıya doğru sayılan 16 bağlantı noktasına sahiptir. Pin1-8, sensörlerimizden gelen analog sinyalin girişleridir. Diğer taraftaki Pin 9 bir GND'dir, bunun tüm devrenin GND'sine bağlanması gerekir, aksi takdirde bu çalışmaz. Pin 10-13'ün daha dikkatli bir şekilde bağlanması gerekir, bunlar RPi'ye ve RPi'den veri iletecektir. Pin 14 başka bir GND'dir ve pin 15 ve 16 VCC'lerdir ve bunların devrenin pozitif tarafına bağlanması gerekir.

Bu, thr kablolama düzenidir:

  • MCP3008 VDD'den harici 3.3V'a MCP3008 VREF'den harici 3.3V'a
  • MCP3008 AGND'den harici GND'ye
  • MCP3008 DGND'den hariciGND'ye
  • MCP3008 CLK'dan Raspberry Pi pin 18'e
  • Raspberry Pi pin 23'e MCP3008 DOUT
  • MCP3008 DIN'den Raspberry Pi pin 24'e
  • MCP3008 CS/SHDN'den Raspberry Pi pin 25'e

Bu aynı zamanda GND'yi RPI'den harici GND'ye bağlamak için de iyi bir zaman. Bu, RPi'den elektrik akışı sağlayacaktır.

Doğru şekilde nasıl bağlayacağınız aşağıda açıklanmıştır.

Doğru şekilde bağladığınızdan emin olun, aksi takdirde her şeye kısa devre yaptırabilirsiniz!

İlk kod parçası buraya yerleştirilecek.

Kodumu github projemdeki modeller. Analog_Digital altından kopyalayabilirsiniz.

Sayfanın altında, çalışması için kaynak kodu bulacaksınız.

Ama test edebilmemiz için ilk sensörümüze ihtiyacımız var.

Sensörümüzü çalışıyorsa test etmemiz gerekiyor. TMP36'nın pozitif tarafına 3,3V veya 5V güç kaynağı bağlayın. GND'ye de bağlamayı unutmayın, bu belki aptalca bir şey ama inanın bana. Gerçek bu;). Orta pin olan sensörün çıkışını multimetrenizle test edebilirsiniz. Bu basit denklemle sıcaklığı °C cinsinden kontrol edebilirsiniz. ((milivolt*giriş voltajı)-500)/10 ve işte bitti! Hoşçakal! Hayır hahah MCP3008'e ihtiyacımız var. TMP36'nızın analog pinini MCP3008'in ilk giriş pinine bağlayın. Bu pin 0.

Bu MCP sınıfı için alttaki örnek kodu kullanabilirsiniz. Ya da internette bulacağınız bir şey işinizi görecektir.

3. Adım: Veritabanı

Şimdi ilk sensörümüzde okuyabildiğimize göre, onu bir veritabanına kaydetmemiz gerekiyor. Bu beynimizin hafızasıdır. Bu veritabanını genişletilebilir ve gelecekteki değişiklikler için kolayca değiştirilebilir olacak şekilde tasarladım.

Bu yüzden önce girdi olarak ne alacağımızı ve belirli nesnelerin durumları gibi belirli şeyleri kaydetmemiz gerekip gerekmediğini düşünmeliyiz.

Cevabım şu olurdu: 6 sensörden girdi bu yüzden bir sensör tablosu yapmamız gerekiyor, bu sensörlerle değerler yapacağız. Bir değere bağlı olan nedir? Benim için pencerenin durumu, sensör değeri ölçerken açık mı yoksa kapalı mı. Ama konum da benim değerim için bir faktör, bu yüzden bunu ekleyeceğiz. Bir değerin saati ve tarihi de önemlidir, bu yüzden onu ekleyeceğim.

Gelecekteki genişleme için bir kullanıcı tablosu ekledim.

Öyleyse tablolarla ilgili fikrim nedir: tablo değerleri, tablo adresi (odaya bağlı), masa odası (değere bağlı), tablo penceresi (değere bağlı), masa sensörü (değere bağlı) ve vahşi bir tablo için kullanıcılar.

Tabloları birbirine bağlamaya gelince. Her değerin bir sensöre, bir pencereye, sensör için bir değere, değeri benzersiz hale getirebilmemiz için bir kimliğe, değerin ne zaman yapıldığına ilişkin bir zaman damgasına ve son olarak bir odaya ihtiyacımız olmadığı için isteğe bağlı ancak olabilir katma.

Yani şimdi böyle görünüyor. Projemin geri kalanı için kullandığım şey bu.

Adım 4: HNT11, Real Boys için

Yani herhangi bir kütüphaneyi kullanmamıza izin verilmedi. Her şeyi kendimiz programlamalıyız.

HNT11 tek kablolu bir sistemdir, yani bu, diğer elektronik cihazlar gibi bir GND ve VCC'ye sahip olduğunuz anlamına gelir, ancak 3 pini bir giriş ve çıkış pinidir. Bu yüzden biraz garip ama ondan çok şey öğrendim.

VCC'yi harici 3.3V'a ve GND'yi harici GND'ye bağlayın.

DHT11'in veri sayfası, bu sensörleri kullanmak için her şeyi içerir.

Yüksek bitin düşük ve yüksek bit içerdiğini belirleyebiliriz. Ancak yüksek kısmın süresi, biti gerçek olarak belirler. Yüksek kısım 100µs'den (normalde 127µs) daha uzun yayınlanırsa bit yüksektir. Bit 100µs'den kısa mı (normalde 78µs civarında) bit düşüktür.

HNT11 etkinleştirildiğinde sinyal vermeye başlayacaktır. Bu her zaman 41 bittir. Bir başlangıç biti ile başlar, bu bir şey ifade etmez, bu yüzden bunu atlayabiliriz. İlk 16 bit/2 bayt, nem için tam sayı ve kayan kısımdır. Son 2 bayt için aynı ama şimdi sıcaklık için.

Bu yüzden sadece her bitin süresini hesaplamamız gerekiyor ve sonra işimiz bitti.

DHT11 altındaki kaynak kodunda bu sorunu çözme yöntemimi bulacaksınız.

Adım 5: Gaz Sensörleri (Yalnızca efsaneler)

Gaz Sensörleri (Yalnızca efsaneler)
Gaz Sensörleri (Yalnızca efsaneler)
Gaz Sensörleri (Yalnızca efsaneler)
Gaz Sensörleri (Yalnızca efsaneler)

Bu yüzden projenin başında birçok sensör kullanmanın harika bir fikir olacağını düşündüm. Harekete geçmeden önce düşünün ve yerel olarak satın alın, bu size çok fazla uyku saati kazandıracak! Çünkü daha erken başlayabilirsin ve bu, daha istekli olmanı sağlayacak.

Yani 4 gaz sensörüm var. MQ135, MQ8, MQ4 ve bir MQ7 tüm bu sensörler, en iyi ölçtükleri belirli gazlara sahiptir. Ancak bunların hepsi konfigürasyonlarında farklıdır.

Bu yüzden ilk önce veri sayfasını kullandım, bu beni hiç dilenci yapmadı. Sonra kod örnekleri aradım. Bulduğum şey Adafruit'ten bir kitaplıktı. Olabildiğince iyi kopyalamaya çalıştım. Dört sensörden biriyle çalıştı.

Bir süre dinlenmesine izin verdim ve ona geri döndüm.

Bu sensör için çalışmasını sağlamak için yaptığım şey:

- Ölçmek istediğim gazın noktalarını işaretlemek için veri sayfasını kullandım. Yani 1 ro/rs ila 400ppm, 1,2 ila 600ppm…

- Sonra tüm bu noktaları excell'e koydum ve eğrinin formülünü çıkardım. Bunu veritabanıma kaydettim.

- Veri sayfasından normal direnci ve temiz hava direncini de okudum. Bu değerler de veritabanına kaydedilir.

Bunların hepsini bir koda döktüm, bunu MCP3008 sınıfındaki son üç fonksiyon olarak bulabilirsiniz. Ama bu henüz bitmedi, ne yazık ki yeterli zamanım olmadı.

Adım 6: Shiftregister, 74HC595AG

Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG

Yani bu bir IC. Ve özel bir şey yapıyor, bu cihazla aynı çıkış sinyali için daha az GPIO çıkışı kullanmak mümkün. Bunu LCD (Sıvı Kristal Ekran) ve ledlerim için kullandım. Herkes sitede dolaşabilsin diye ip adresini LCD'de göstereceğim.

LED'ler akıllıca 2 kırmızı, 3 sarı ve 2 yeşil olarak seçilmiştir. Bu, odadaki hava kalitesini herhangi bir zamanda gösterecektir.

Shiftregister paralel bir çıkış cihazıdır, bu nedenle bir zaman periyodunda farklı sinyaller vermek mümkün değildir. Bu, dışarıdan programlanmışsa ancak yerel olarak desteklenmemişse mümkün olabilir.

IC nasıl kullanılır? Peki 5 girdiniz ve 9 çıktınız var. 8 pin için 8 mantıksal çıkış ve ardından kalan verileri başka bir shiftregister'a göndermek için 9. pin.

Pin 16'yı harici VCC'ye bağlıyoruz, sonraki pin ilk çıkış bu yüzden LCD için buna ihtiyacımız olacak. Pin 14 veri hattı, buraya veri göndereceğiz. 13. pim anahtarın açık, düşük bir sinyal, IC'yi kapatmak için yüksek bir sinyale ihtiyaç duymasını sağlar. Pin 12, bir bitin ne zaman gönderildiğini belirleyebileceğimiz pindir, bu pini yukarıdan aşağıya doğru çektiğinizde pin 13'ün sinyal durumunu okur ve 8bit hafızasında saklar. Pin 11, bu pin yüksek ve sonra düşük olarak ayarlandığında benzerdir, 8 biti kendi portuna gönderir. Ve son pin, pin 10, master resettir, bu pin yüksek kalmalıdır yoksa çalışmayacaktır. Son bağlantı GND pin 8'dir, bunu harici GND'ye bağlamamız gerekiyor.

Şimdi pinleri ahududu pi'ye istediğiniz gibi bağlayın. Yaptığım şey, nerede olduklarını bildiğimden emin olmak için onları mümkün olduğunca birbirine bağlamaktı.

Doğru bir çıktı aldığınızda. Bunu LED'lerle bir PCB'ye lehimleyebilirsiniz. ve 220 Ohm dirençler. IC'nin çıkışını ilgili led'e lehimleyin. Şimdi böyle bir şeye sahip olmalısınız.

Test kodumu burada Shiftregister altında bulabilirsiniz. Bir 74HC595N ile çalışırken MR'a ihtiyacınız olmayacak, böylece onu bağlı olmadan bırakabilirsiniz.

LCD hemen hemen aynı. LCD'nin girişi tam olarak kaydırma kaydının girişi olduğundan, kaydırma kaydıyla kullanmak oldukça kolaydır.

LCD'nin çalışmasını sağlayacak başka bir kod daha var ama bu sadece Shifregister ile oldukça aynı. Test kodunu burada LCD altında bulabilirsiniz.

7. Adım: Ön Uç, Değerli Bir Ders

Bu yüzden burada dolaşacağım, bu nasıl yapmanız gerektiğine dair bir bölüm. Bu öğrenilen çok çok değerli bir şey.

Ön ucu arka uçtan önce yapın!!!!

Ben tersini yaptım. Veritabanım için gereksiz aramalar yaptım, buna çok zaman harcıyorum.

Açılış sayfasında, güzel bir grafikte mevcut sıcaklık ve nem ile tüm gaz sensörlerinin değerlerine ihtiyacım vardı. Ayrıca RPi'nin ip adresini de göstermem gerekiyor.

Sensörler sayfasında bir sensör seçimine ve seçim süresine ihtiyacım var. Bir gün ve ardından o günden sonraki dönemi seçtim. Bu benim için çok daha kolay oldu çünkü daha fazla kontrol edebiliyordum.

Son sayfada, ayarlar sayfası, sağlıklı tehlikeli veya tehlikeli gaz ve sıcaklık seviyeleri gibi belirli değerleri yönetmek mümkün müdür. Ayrıca, bunu yapmanız gerektiğini düşünüyorsanız, RPi'yi yeniden başlatabilirsiniz.

İlk önce bir tasarım yaptım, böylece kodlama kısmı üzerinde kolayca çalışmaya başlayabilirdim. Her seferinde bir şey yavaş yavaş ilerleme kaydettim. Ödev önce mobildi, bu yüzden önce buna odaklanacağım. Sonra daha büyük ekranlara geçeceğim.

Sayfalarımı, css ve js'mi Github'ımda bulabilirsiniz.

Adım 8: Arka Uç

Bu kısım frontend ile karıştırdığım kısım. Ön uç için bir şey yaptığımda, arka uçta çalışmasını sağladım. Böylece daha sonra revizyona ihtiyaç duymaz. Bu ilk başta yapmadığım bir şeydi ve bu yüzden kesinlikle 2 haftalık zaman kaybettim. Aptal ben! Ama başka projelere memnuniyetle aldığım bir ders.

Yani arka uç yaptığınızda kullanacağınız bir şey yapın. Ancak, yeniden kullanılabilir hale getirerek ve sabit kodlanmadan geleceğe hazır hale getirin. Yani DHT11'imin son 50 değerine ihtiyacım olduğunda, yapılan değerler olup olmadığını kontrol edeceğim? Evet, onları veritabanına nasıl koyabilirim. Bunları veritabanından nasıl çıkarabilirim. Nasıl gösteririm? Grafik mi, grafik mi yoksa sadece düz veri mi? Sonra tarihler, belirli sensör adları veya arayacağım şey gibi farklı parametreler ve özelliklerle yeni bir rota yapıyorum. Yani MQ sensörlerinden gelen tüm değerleri mi çağırayım yoksa adında MQ olan tüm sensörleri mi çağırayım. Sonra biraz hata işleme koydum. Çağrıdan gelen istek ancak doğru yöntem olduğunda, ancak o zaman devam edebilir, aksi takdirde hoş bir hata alır.

Ayrıca burada bulunan threadler, bunlar paralel kod çalıştırmanıza izin veren yazılım parçalarıdır. Web sitesi çağrılarını, değer yaratma fonksiyonunu ve led+shiftregister'ı çalıştırabilirsiniz. Bu fonksiyonlar birbirinden tamamen bağımsız olarak çalışır.

Yani ledler için. CO2 için dip/sağlıklı bir değer yaptım. Bu değer birden fazla hükümet kaynaklarından geldi. Sınıflar için sağlıklı değer, metreküp başına 600 ppm CO2'nin altındadır. Sağlıksız değer 2000 ppm üzerindeki her şeydir. Yani LED'ler köprüyü oluşturur. MQ4 sensörünün değeri 1400 ise hangi seviyede tehlike olduğu otomatik olarak hesaplanacaktır. 2000 - 600 = 1400 yani toplam menzil 1400 /7 = 200 olur. Yani değer 550'ye ulaştığında yeşil led gösterir. 750 2 yeşil led, 950 1 sarı 2 yeşil led gösterir. Ve bunun gibi.

Değer ortanın üzerine çıktığında pencere açılır. Yüksek tork ve hassasiyet nedeniyle step motor kullandım. Ve değer 2000'in üzerine çıktığında küçük bir alarm çalar. Bu, odadaki insanları alarma geçirmek içindir.

Ayrıca yangın anında duman gazlarını da tespit edebiliyoruz. Bunu da kaydeder. Belirli bir değerin üzerine çıktığında alarm devreye girer ve LED'ler yanıp söner.

LCD, esas olarak, sitede gezinebilmeniz için IP adresini göstermek için oradadır.

Her şeyi + kodu app.py'de Githubin'imde bulabilirsiniz.

Adım 9: Vakayı Hazırlamak

Davayı Yapmak
Davayı Yapmak
Davayı Yapmak
Davayı Yapmak
Davayı Yapmak
Davayı Yapmak

Tüm bileşenlerim için küçük bir bilgisayar kasası buldum.

Alüminyum levhayı boyuta göre kestim. Ve levhanın duracağı bazı delikler açtı. Bu, anakart deliklerine karşılık gelir.

Sonra her şeyin kasanın içine nasıl sığacağına baktım. Her şeyi ortaya koydum ve hareket etmeye başladım.

Nasıl çalışacağı konusunda tatmin olduğumda sensörler, RPi, PCB'ler, güç modülleri ve step motor modülü için ihtiyacım olan delikleri işaretlemeye başladım. Delikler PCB soğukluğu içindir, bu biraz yer açacaktır, böylece metal parçalar alüminyum levha ile temas etmeyecektir. Aynı zamanda hoş bir görünüm sağlar.

Her bir IC'den veya başka bir cihazdan kabloları aldım ve birbirine bağladım. Bunun nedeni, hangi kabloların ne için olduğunu görebilmemdi. Her şeyi bazı zıt noktalara güzelce yerleştirdim ve her şeyi güzel bir şekilde yerinde tutmak için biraz somun ve vida kullandım.

Tüm bunlara güç sağlamak için 2 pil kullandım. Bunlar çok fazla güç sağlar, ancak bunlar hala pillerdir, bu nedenle zamanla tükenirler. Bunları biraz cırt cırtla monte ettim. Velcro kullandım çünkü o zaman pilleri kolayca değiştirebilir veya kurtulabilirim.

Steppenmotor, LCD ve LED'ler kasanın üst kısmından çıkacaktır. Bu yüzden kasa kapağını dikkatlice üstüne yerleştirdim ve delikleri işaretledim ve bir matkapla deldim. Böylece her şeyi kolayca görebiliriz.

Dava bittiğinde her şeyi kablolamamız gerekiyor, burada kablolama şemasını bulabilirsiniz.

Adım 10: Değerlendirme ve Sonuç

Değerlendirme ve Sonuç
Değerlendirme ve Sonuç

Yani bu benim ilk projemdi.

Tamam görünüyor sanırım.

Pek çok yeni şey öğrendim, proje yönetiminin harika ve kötü yanlarını öğrendim. Gerçekten çok değerli bir dersti. Bekleyemeyeceğinize eğildim, gerçekten vermeye devam etmeniz gerekiyor. Her hareketi (neredeyse çok hareket) belgelemeniz gerekiyor ve bunu yeni yaptığınızda yapmanız gerekiyor.

Her seferinde 1 şeye odaklanın. Ekranınızdaki sıcaklığı mı istiyorsunuz? Bunu, bunu ve bunu yap. Beklemeyin veya geçmesine izin vermeyin. Yardım etmeyecek. Ve çok değerli zamanınızı kaybedecek.

Ayrıca 4 hafta çok uzun bir süre gibi görünüyor. Ama daha az doğrudur. Bu doğru değil. Sadece 4 haftanız var. İlk 2 hafta gerçekten çok fazla baskı değil. 3 hafta bitirme ve 4 hafta uykusuz gece. Bu şekilde yapmamalısınız.

Belki biraz hırslıydım: Ben süper küçük kasa, kullanımı kolay sensörler, piller yok… Bunu çok daha basit hale getirin ve ardından giderek daha da zorlaştırın, ancak o zaman iyi bir prototip/ürün elde edersiniz.

Önerilen: