Mündəricat:

Yerli Hava İstasyonu: 8 addım (şəkillərlə)
Yerli Hava İstasyonu: 8 addım (şəkillərlə)

Video: Yerli Hava İstasyonu: 8 addım (şəkillərlə)

Video: Yerli Hava İstasyonu: 8 addım (şəkillərlə)
Video: Pərdə arxası #2 - Fahişə həyatı - uşaqlar baxmasın 2024, Noyabr
Anonim
Yerli Hava İstasyonu
Yerli Hava İstasyonu

İlk il məktəb proyektim üçün böyük bir layihə axtararkən nə edəcəyim haqqında bir çox fikirlərim vardı, amma heç birini çətin hesab etmədim.

Daha sonra özünəməxsus bir şeyi olan Hava İstasyonu qurmağı öyrətdim. Bütün məlumatlarımı saxlaya bilmək və daha sonra bunu statistika üçün istifadə etmək istəyirdim. Bu layihə, meteorologiyaya marağı olan və bazarda mövcud olan qiymətə uyğun olmayan evdə yaradılan bir hava stansiyası istəyən insanlar üçün xüsusi olaraq hazırlanacaq. Layihə, istənilən vaxt sensorlar əlavə etmək və ya çıxarmaq qabiliyyətini qorumaq üçün hazırlanmışdır.

Gözlədiyimdən daha yaxşı çıxan son nəticəmi görəndə həqiqətən sevindim.

Raspberry Pi 4 işləyən linuxdan hazırlanmışdır.

  • Apache Veb saytı (html css js)
  • Eventlet (arxa plan server veb saytı)
  • MariaDB (verilənlər bazası serveri)

Təchizat

  • Raspberry Pi 4:

    sd-kart (minimum 16 gb)

  • Sensorlar:

    1. QS-FS külək sürəti sensoru
    2. Külək Sensoru Bağ Siqnal Çıxış Alüminium Alaşımlı Külək İstiqamət Sensoru Külək Qanadının Sürət Ölçmə Aləti https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Ölçmə-Aləti-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (rütubət)
    4. BMP280 (hava təzyiqi)
    5. DS18B20 (temperatur)
  • Enerji təchizatı

    • 5V enerji təchizatı (RPi)
    • 9v enerji təchizatı (xarici çörək taxtasında enerji təchizatı)
  • Çörək paneli (x2)

    RPi 4 üçün T-cobbler plus

  • tullanan tellər
  • IC -lər

    • MCP3008
    • PCF8574AN
  • LCD ekran 16x2
  • LED (qırmızı
  • Korpus (optinal)

    • şərab qutuları
    • taxta dirək (2 m)
    • taxta taxta (1 m)

Addım 1: İşlərin Hazırlanması

Bir addım atmağa başlamazdan əvvəl ehtiyacınız olan bütün əşyaları əldə etmək həmişə böyük əhəmiyyət kəsb edir. Bu, işləyərkən çox vaxtınıza qənaət edəcək.

Beləliklə, əvvəlcə, Nə lazımdır:

  • Raspberry Pi 4:

    sd-kart (minimum 16 gb)

  • Sensorlar:

    1. QS-FS külək sürəti sensoru
    2. Külək Sensoru Bağ Siqnal Çıxış Alüminium Xəlitəli Külək İstiqamət Sensoru Külək Qanadının Sürət Ölçmə Aləti
    3. DHT22 (rütubət)
    4. BMP280 (hava təzyiqi)
    5. DS18B20 (temperatur)
  • Enerji təchizatı

    • 5V enerji təchizatı (RPi)
    • 9v enerji təchizatı (xarici çörək taxtasında enerji təchizatı)
  • Çörək paneli (x2)
  • RPi 4 üçün T-cobbler plus
  • tullanan tellər
  • IC -lər

    • MCP3008
    • PCF8574AN
  • LCD ekran 16x2
  • LED (qırmızı)
  • Korpus (optinal)

    • ağacdan hazırlanmış şərab qabları
    • taxta taxta (1 m)
    • dirək (2 m)

Satın aldığım bütün bağlantıları girişin altındakı təchizat bölməsində tapa bilərsiniz.

Addım 2: RPi qurmaq

RPi qurulması
RPi qurulması

Layihəmiz üçün bu proqramın quraşdırıldığı bir RPi -yə ehtiyacımız var.

  • Apache Veb saytı (html css js)
  • Flask Socket-IO (backend server veb saytı)
  • MariaDB (verilənlər bazası serveri)

Quraşdırmadan əvvəl RPi -də ən son proqramın quraşdırıldığından əmin olmaq həmişə əlverişlidir. Bunu etmək üçün aşağıdakı əmri yerinə yetirin:

sudo apt yeniləmə

Apache:

Əvvəlcə Apache haqqında danışaq. Apache, bütün dünyada istifadə olunan bir veb serveridir. Veb saytınızı qüsursuz idarə edir. Etməyiniz lazım olan tək şey onu quraşdırmaq və veb saytınızı doğru qovluğa qoymaqdır və oradadır.

sudo apt install apache2 -y

Bu belədir!

Hər şeyin düzgün qurulduğundan əmin olmaq üçün brauzerinizdə moruq pi Ip ünvanınıza daxil olun və standart veb saytı əldə edib-etmədiyinizə baxın. Bu addımla bağlı hər hansı bir probleminiz varsa, RPi veb saytına buradan baxa bilərsiniz.

Hadisə:

İndi Eventlet quraq. Arxa serverimizi işlədəcək və sensorlarımızdan veb saytımıza keçid edəcək. Bunun üçün bir neçə paketə ehtiyacımız var.

Şüşə-priz

pip3 flask-socketio qurun

Hadisə:

pip3 hadisə kitabçası quraşdırın

Gevent:

pip3 gevent quraşdırın

Mariadb:

Mariadb, əlaqəli verilənlər bazası hazırlayan MySQL əsaslı bir verilənlər bazasıdır. Tez -tez RPi -də istifadə olunur və buna görə də internetdə tapa biləcəyiniz çox kömək var. Ətraflı məlumat üçün bu linkə daxil ola bilərsiniz.

aari quraşdırma mariadb-server

Addım 3: Sensorları bağlayın və Kod əlavə edin

Sensorları birləşdirmək və kod əlavə etmək
Sensorları birləşdirmək və kod əlavə etmək
Sensorları birləşdirmək və kod əlavə etmək
Sensorları birləşdirmək və kod əlavə etmək
Sensorları birləşdirmək və kod əlavə etmək
Sensorları birləşdirmək və kod əlavə etmək

Sensorları RPi-yə bağlamaq üçün T-Cobbler plus istifadə edə bilərik. Bu, RPi üzərindəki bütün sancaqlarınızı çörək taxtasında istifadə etməyə imkan verən lazımlı kiçik bir vasitədir.

Layihəmdə 5 sensor var:

  1. QS-FS külək sürəti sensoru
  2. Külək Sensoru Bağ Siqnal Çıxış Alüminium Xəlitəli Külək İstiqamət Sensoru Külək Qanadının Sürət Ölçmə Aləti
  3. DHT22 (rütubət)
  4. BMP280 (hava təzyiqi)
  5. DS18B20 (temperatur)

Külək sürəti sensoru:

Əvvəlcə külək sürəti sensoru ilə başladım, çünki bu sensordan çox həyəcanlandım. 0-5v çıxış analoq siqnalına malik olan bir sensordur və işləmək üçün minimum 7 volt gərginliyə ehtiyac var. Gücləndirmək üçün 9 voltluq adapteri seçirəm.

Bu sensorda oxumaq üçün Analog siqnallarda oxumaq üçün IC olan MCP3008 istifadə etdim. IC 3.3V və ya 5V -də işləyə bilər, amma onu RPi ilə uyğunlaşdırmaq üçün 3.3V seçirəm. Bu, çıxış gərginliyini 5V -dan 3.3V -ə dəyişdirməyim lazım olduğunu ifadə etdi, bunu 2 rezistor (2k və 1k ohm) tərəfindən yaradılan bir gərginlik bölücü əlavə edərək etdim.

Külək İstiqamət Sensoru:

Küləyin istiqaməti küləyin sürəti qədər önəmlidir, buna görə də bunu bir daha bağlayacağam.

Bu sensor külək sürəti sensoru ilə eyni xüsusiyyətə malikdir. Həm də 9V -də işləyəcək və 5 volt çıxış gərginliyinə malikdir. Həm də bu sensoru MCP3008 -ə bir gərginlik bölücü vasitəsi ilə bağlayacağıq.

DHT22 (rütubət):

DHT22 rütubəti oxuyur. Sizə faizlə bir dəyər verir və dəyəri RPi üzərindəki I2C protokolundan istifadə edərək oxuna bilər. Buna görə Raspi-config-də I2C portlarını aktiv etməlisiniz. Ətraflı məlumat burada.

BMP280 (hava təzyiqi):

BMP280 hava təzyiqini oxumaq üçün istifadə olunur. Onun dəyəri RPi üzərindəki SPI avtobusu vasitəsilə oxunur. Bu protokolun Raspi-konfiqurasiyasında da aktivləşdirilməsi lazımdır. Kodum üçün Adafruit kitabxanasından istifadə etdim.

DS18B20 (temperatur):

Sonuncu sensor temperaturu ölçür. bu sensor Dallasdandır və Dallasla bir az təcrübəniz varsa, yəqin ki, 1Wire-avtobusdan istifadə etdiklərini bilməlisiniz. Bu protokolun Raspi-config-də də aktivləşdirilməsi lazım olduğunu söyləsəm təəccüblənməyin.

Sensorları necə bağladım:

Pdf olaraq bir az asanlaşdırmaq üçün elektrik və çörək taxtası sxemini yüklədim.

Sensorları uğurla bağlaya bildikdən və bütün sensorları oxumaq üçün lazım olan kodu əlavə etdikdən sonra irəli gedə və növbəti addıma keçə bilərsiniz. Bir sensoru geridə buraxmaq və ya daha çox əlavə etmək istəyirsinizsə, bunu edə bilərsiniz.

Addım 4: Veb Ui Dizaynı

Veb UI dizaynı
Veb UI dizaynı
Veb UI dizaynı
Veb UI dizaynı
Veb UI dizaynı
Veb UI dizaynı

İndi veb saytımız üçün dizaynına ehtiyac duyduğumuz sensorları bağladıq.

Veb saytın sensorların bütün real vaxt məlumatlarını göstərərkən asan bir görünüş yaratmasını istəyirik.

Həm də bu ölçülmüş dəyərlərin tarixini hər zaman aralığında görmək istəyərik.

Buna görə əvvəlcə bir az ilham almaq üçün internetdə axtarmağa başladım. Ən çox axtardığım dizaynı olmayan yalnız məlumatlı saytlar. Artıq satışda olan hava stansiyalarının böyük ehtimalla bir ekranı vardı. Və bu ekrandan ilhamım gəldi. Əksər ekranlar ızgara görünüşlü bir dizayna malikdir. Bu mənə bütün sensorların göstəriləcəyi ana səhifə yaratmaq fikrini verdi.

Ancaq mən də dedim ki, hər bir sensorun tarixini dəyərlərini görə biləcəyiniz bir səhifə etmək istəyirəm.

Bu səbəbdən dizaynımda bunu ehtiva edən 2 -ci bir səhifə hazırladım. Bu səhifədə sensor səhifəmlə bağlı ön səhifədə və tarix hissəsində göstərilməyəcək əlavə məlumatları görə bildim.

Bir neçə saatdan sonra tam dizaynımı hazırladım!

Dizayn Adobe XD istifadə edərək hazırlanmışdır.

Addım 5: Verilənlər bazasının yaradılması

Verilənlər bazasının yaradılması
Verilənlər bazasının yaradılması

Dizayn hissəsinə ara vermək üçün verilənlər bazamda başladım.

Bu verilənlər bazasında bütün sensorlar (5), bütün aktuatorlar (2) və həmin sensorların malik olduğu dəyərlər olacaq.

Verilənlər bazası olduqca asandır və bir neçə əlaqəyə malikdir.

Verilənlər bazası modelini fotoda görə bilərsiniz.

Addım 6: Veb saytının kodlaşdırılması: Frontend (html Css)

Veb sayta qayıdın!

İndi həqiqətən istifadə etmək üçün html css olaraq kodlaşdırmağa başlaya biləcəyim bir dizaynım var.

Ana səhifədə:

Hər sensoru veb saytımda bir element hesab edərək işə başladım. Daha sonra bu hissənin Javascript kodumla yaradılmasına icazə verə bildim.

Elementlərə təsadüfi JS sahibi sinifləri də daxil etdim. Bunlar elementin məzmununu dəyişdirməyi mümkün edərdi

Bu çox vaxt apardı, çünki bu dildə o qədər də yaxşı deyiləm.

Ana səhifəni hazırladıqdan sonra tarix səhifəsindən başlamağın vaxtı gəldi.

Tarix səhifəsində:

Bu səhifəni yenidən yaratmaq daha asan idi. Bu səhifədə sensor haqqında məlumat əldə etmək, real vaxt dəyər yuvası və ölçülmüş dəyərləri olan cədvəli göstərmək üçün js sahibləri də var idi.

Cədvəl və ya Qrafik arasında seçim etmək üçün veb saytımda bir nişan seçimi yaratmaq üçün elementlərin göstərilməməsi və ya göstərilməməsi üçün bir az Javascript əlavə etməliyəm.

İndi heyrətamiz bir veb saytımız var, amma heç nə göstərə bilmirik? Gəlin bunu düzəldək.

Kodumu github depomda tapa bilərsiniz:

Addım 7: Veb saytın kodlaşdırılması: Arxa plan (hadisə başlığı) + Ön Uçun Kodlaşdırılması (javascript)

Arxa tərəf:

Arxa server artıq quraşdırılmış olsa da, bunu hələ də layihəmizdə tətbiq etməliyik. Hər şeyin düzgün işləməsi üçün əvvəlcə bir az idxal etməliyik.

balon idxalından Şüşə, istək, jsonify flask_socketio idxalından SocketIO flask_cors idxalı CORS

Serverin işə salınması üçün aşağıdakıları əlavə etməliyik:

socketio.run (app, debug = False, host = '0.0.0.0')

İndi server onlayndır, lakin cəbhə ilə danışa bilməyəcək.

Heç nə almır və geri qaytarmır. Bunu dəyişək.

Verilənlər bazasındakı bütün sensorları istəmək üçün marşrut əlavə edəcək:

@app.route (son nöqtə + '/sensorlar', üsullar = ['GET']) def get_sensors (): request.method == 'GET': s = DataRepository.get_sensors () jsonify (sensorlar = s), 200

Bu kod DataRepository adlı bir sinifdən istifadə edir və verilənlər bazası ilə danışır. Burada bizə istədiyimiz sensorları geri qaytarır.

Verilmiş bir sensorun dəyərləri üçün 1 xüsusi sensor haqqında məlumat istəmək üçün bir marşruta ehtiyacımız var.

Bunlar hamısı marşrutlardır, ancaq real vaxt məlumatlarını mümkün etmək üçün. Sensorların oxuduğu məlumatları hər fasiləyə göndərməliyik. Bunun üçün Socket-IO bağlantısından istifadə edirik. Kimsə veb saytı JS ilə yüklədiyi andan etibarən qurulan bir əlaqədir və bu əlaqəni açıq saxlayır. Bu, tam iki tərəfli bir əlaqədir, yəni eyni anda hər iki şəkildə işləyən bir əlaqədir (göndərir və alır). Bunu istifadə etmək üçün aşağıdakı kodu əlavə etməliyik.

@socketio.on ('connect') def initial_connection (): print ('Yeni müştəri əlaqə') socketio.send ("U bent geconnecteerd") # # Müştəriyə göndər!

Bir müştəri bağlandıqda bu kod sülhü işə düşür.

Cəbhədən hər hansı bir mesaj almaq üçün bu kodu istifadə edə bilərsiniz.

@socketio.on ('mesaj') def message_recieved (): keçin

Mesaj göndərə bilərsiniz. Bu aşağıdakılarla edilir.

socketio.emit ('Update_RTD', dict_results, yayım = Doğru)

Verilən ilk arqument istədiyiniz bir şey ola bilər, ancaq JS -ə qoyduğunuz şeyə uyğun olacaq və onunla da obyektlər göndərə bilərsiniz. Bu isteğe bağlıdır.

Javascript:

Cari məlumatları göstərmək və verilənlər bazasından məlumat əldə etmək üçün arxa serverlə əlaqəli serveri əldə etmək üçün bir az JS əlavə etmək vacibdir.

Məlumat almaq və göndərmək üçün etdiyimiz socketIO funksiyalarını çağıracağıq.

Json Obyekti olaraq məlumat əldə etdikdə, istədiyimiz məlumatı əldə etmək üçün onu söküb veb saytımıza qoyduğumuz JS sahiblərinə yerləşdirəcəyik.

Kodumu github depomda tapa bilərsiniz:

Addım 8: Qutunun hazırlanması

Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək
Kassa düzəltmək

Kassa çox iş aldı və istədiyiniz şəkildə edilə bilər. Mən bunu belə etdim.

Şərab sandıqlarını götürdüm.

Onlardan birini RPi -ni və əksər sensorlarımı saxlamaq üçün qutu kimi istifadə etdim.

Külək sürəti sensoru və külək istiqaməti sensoru, əlbəttə ki, içəriyə deyil, dirəyə qoyulmuş bir çubuğun üstünə qoyulmuşdur. Bu dirəyə o şərab sandığını asdım ki, orada da qapı düzəltdim.

Şəkillərə baxaraq layihəmi necə bitirdiyimi görə bilərsiniz.

Əlbəttə ki, bunu necə edə biləcəyinizə bir nümunədir. Bununla istədiyinizi edə bilərsiniz.

Tövsiyə: