فهرست مطالب:

ایستگاه هواشناسی محلی: 8 مرحله (همراه با تصاویر)
ایستگاه هواشناسی محلی: 8 مرحله (همراه با تصاویر)

تصویری: ایستگاه هواشناسی محلی: 8 مرحله (همراه با تصاویر)

تصویری: ایستگاه هواشناسی محلی: 8 مرحله (همراه با تصاویر)
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, نوامبر
Anonim
ایستگاه هواشناسی محلی
ایستگاه هواشناسی محلی

همانطور که من به دنبال یک پروژه عالی برای ساختن پروژه سال اول مدرسه بودم ، ایده های زیادی در مورد آنچه که باید انجام دهم داشتم ، اما هیچ یک از آنها را چالش برانگیز ندانستم.

بعداً فکر کردم یک ایستگاه هواشناسی بسازم که چیز خاصی برای آن داشته باشد. من می خواستم بتوانم همه داده هایم را ذخیره کنم و بعداً از آنها برای آمار استفاده کنم. این پروژه مخصوص افرادی است که به هواشناسی علاقه دارند و می خواهند ایستگاه هواشناسی خانگی ایجاد کنند که به اندازه هزینه های موجود در بازار هزینه نداشته باشد. این پروژه همچنین برای حفظ توانایی اضافه یا حذف سنسورها در هر زمان ساخته شده است.

وقتی نتیجه نهایی خود را دیدم که بهتر از آنچه انتظار می رفت ، واقعاً خوشحال شدم.

این دستگاه از Raspberry Pi 4 لینوکس در حال اجرا ساخته شده است.

  • وب سایت آپاچی (html css js)
  • Eventlet (وب سایت سرور باطن)
  • MariaDB (سرور پایگاه داده)

تدارکات

  • رزبری پای 4:

    کارت SD (حداقل 16 گیگابایت)

  • سنسورها:

    1. سنسور سرعت باد QS-FS
    2. سنسور باد خروجی سیگنال باغ آلیاژ آلومینیوم سنسور باد سنسور سرعت ابزار اندازه گیری سرعت پره Window -Measuring-Instrument-p-1624988.html؟ rmmds = myorder & cur_warehouse = CN
    3. DHT22 (رطوبت)
    4. BMP280 (فشار هوا)
    5. DS18B20 (دما)
  • منبع تغذیه

    • منبع تغذیه 5 ولت (RPi)
    • منبع تغذیه 9 ولت (در منبع تغذیه ورق خارجی)
  • تخته نان (x2)

    T-cobbler plus برای RPi 4

  • سیم های جهنده
  • آی سی ها

    • MCP3008
    • PCF8574AN
  • صفحه نمایش LCD 16x2
  • LED (قرمز
  • بدنه (اپتیکال)

    • جعبه های شراب
    • تیر چوبی (2 متر)
    • تخته چوبی (1 متر)

مرحله 1: آماده سازی امور

همیشه مهم است که همه اقلام مورد نیاز خود را قبل از شروع به کار روی یک مرحله تهیه کنید. با این کار در زمان کار در طول زمان صرفه جویی می کنید.

بنابراین ابتدا ،

چه چیزی نیاز دارید:

  • رزبری پای 4:

    کارت SD (حداقل 16 گیگابایت)

  • سنسورها:

    1. سنسور سرعت باد QS-FS
    2. سنسور باد خروجی سیگنال باغ آلیاژ آلومینیوم جهت سنسور باد سنسور سرعت ابزار اندازه گیری سرعت
    3. DHT22 (رطوبت)
    4. BMP280 (فشار هوا)
    5. DS18B20 (دما)
  • منبع تغذیه

    • منبع تغذیه 5 ولت (RPi)
    • منبع تغذیه 9 ولت (در منبع تغذیه ورق خارجی)
  • تخته نان (x2)
  • T-cobbler plus برای RPi 4
  • سیم های جهنده
  • آی سی ها

    • MCP3008
    • PCF8574AN
  • صفحه نمایش LCD 16x2
  • LED (قرمز)
  • بدنه (اپتیکال)

    • جعبه چوبی شراب
    • تخته چوبی (1 متر)
    • قطب (2 متر)

همه پیوندهایی را که من اینها را خریداری کرده ام می توانید در قسمت لوازم جانبی در قسمت مقدمه پیدا کنید.

مرحله 2: راه اندازی RPi

راه اندازی RPi
راه اندازی RPi

برای پروژه ما به RPi با نرم افزار داده شده نیاز داریم.

  • وب سایت آپاچی (html css js)
  • Flask Socket-IO (وب سایت سرور پشت سر)
  • MariaDB (سرور پایگاه داده)

قبل از نصب همیشه مطمئن باشید که آخرین نرم افزار را روی RPi خود نصب کرده اید. برای این کار کافی است دستور زیر را اجرا کنید:

به روز رسانی sudo apt

آپاچی:

ابتدا اجازه دهید در مورد آپاچی صحبت کنیم. Apache یک وب سرور است که در سراسر جهان استفاده می شود. وب سایت شما را بدون نقص اجرا می کند. تنها کاری که باید انجام دهید این است که آن را نصب کرده و وب سایت خود را در پوشه مناسب قرار دهید.

sudo apt install apache2 -y

خودشه!

برای اطمینان از اینکه همه چیز به درستی نصب شده است ، به آدرس IP تمشک pi خود در مرورگر خود سر بزنید و ببینید آیا وب سایت پیش فرض را دریافت می کنید یا خیر. اگر در این مرحله مشکلی دارید می توانید وب سایت RPi را در اینجا بررسی کنید.

رویداد:

حالا بگذارید Eventlet را نصب کنیم. این سرور پشتیبان ما را اجرا می کند و از سنسورهای ما به وب سایت ما ارتباط می یابد. برای این کار ما به چند بسته نیاز داریم.

Flask-socketIO:

pip3 flask-socketio را نصب کنید

رویداد:

رویداد کوچک pip3 را نصب کنید

Gevent:

pip3 gevent را نصب کنید

ماریادب:

Mariadb یک پایگاه داده مبتنی بر MySQL است که پایگاه داده های رابطه ای ایجاد می کند. اغلب در RPi استفاده می شود و بنابراین می توانید کمک های زیادی در اینترنت پیدا کنید. برای اطلاعات بیشتر می توانید به این پیوند بروید.

apt install mariadb-server

مرحله 3: اتصال سنسورها و افزودن کد

اتصال سنسورها و افزودن کد
اتصال سنسورها و افزودن کد
اتصال سنسورها و افزودن کد
اتصال سنسورها و افزودن کد
اتصال سنسورها و افزودن کد
اتصال سنسورها و افزودن کد

برای اتصال سنسورها به RPi ما می توانیم از T-Cobbler plus استفاده کنیم. این یک ابزار کوچک مفید است که به شما امکان می دهد از تمام پین های خود در RPi خود روی یک تخته نان استفاده کنید.

در پروژه من 5 سنسور دارم:

  1. سنسور سرعت باد QS-FS
  2. سنسور باد خروجی سیگنال باغ آلومینیوم آلومینیوم جهت سنسور باد سنسور سرعت ابزار اندازه گیری سرعت
  3. DHT22 (رطوبت)
  4. BMP280 (فشار هوا)
  5. DS18B20 (دما)

سنسور سرعت باد:

اول از همه با سنسور سرعت باد شروع کردم زیرا بیشتر در مورد این سنسور هیجان زده بودم. این سنسور دارای سیگنال آنالوگ خروجی 0-5V است و برای کار به ولتاژ حداقل 7 ولت نیاز دارد. من برای تغذیه آداپتور 9 ولت را انتخاب می کنم.

برای خواندن این سنسور از MCP3008 استفاده کردم که یک IC برای خواندن در سیگنالهای آنالوگ است. IC می تواند روی 3.3 ولت یا 5 ولت کار کند اما من 3.3 ولت را برای سازگاری با RPi انتخاب می کنم. این بدان معناست که من نیاز به تغییر ولتاژ خروجی از 5 ولت به 3.3 ولت دارم. این کار را با افزودن تقسیم کننده ولتاژ ایجاد شده توسط 2 مقاومت (2k و 1k اهم) انجام دادم.

سنسور جهت باد:

جهت وزش باد به اندازه سرعت باد اهمیت دارد ، بنابراین این مورد را بعداً وصل می کنم.

این سنسور دارای مشخصات مشابه سنسور سرعت باد است. همچنین روی 9 ولت کار می کند و ولتاژ خروجی آن 5 ولت است. همچنین این سنسور را از طریق تقسیم ولتاژ به MCP3008 متصل می کنیم.

DHT22 (رطوبت):

DHT22 رطوبت را می خواند. مقدار را در درصد به شما می دهد و می توانید مقدار آن را با استفاده از پروتکل I2C در RPi بخوانید. بنابراین باید پورت های I2C را در Raspi-config فعال کنید. اطلاعات بیشتر اینجا

BMP280 (فشار هوا):

BMP280 برای خواندن فشار هوا استفاده می شود. مقدار آن از طریق گذرگاه SPI در RPi خوانده می شود. این پروتکل همچنین باید در پیکربندی Raspi فعال شود. برای کد من از کتابخانه Adafruit استفاده کردم.

DS18B20 (دما):

آخرین سنسور دما را اندازه گیری می کند. این سنسور از دالاس است و اگر تجربه کمی با دالاس داشته اید ، احتمالاً باید از قبل بدانید که آنها از گذرگاه 1Wire استفاده می کنند. تعجب نکنید اگر بگویم که این پروتکل نیز باید در پیکربندی Raspi فعال شود.

نحوه اتصال سنسورها:

به عنوان pdf من یک طرح برقی و ورق را بارگذاری کردم تا کمی راحت تر شود.

بعد از اینکه توانستید سنسورها را با موفقیت متصل کنید و کد مورد نیاز برای خواندن همه سنسورها را اضافه کنید ، می توانید پیش بروید و به مرحله بعدی بروید. اگر دوست دارید سنسور را پشت سر بگذارید یا مایل به افزودن سنسور دیگری هستید ، می توانید این کار را انجام دهید.

مرحله 4: طراحی رابط وب

طراحی رابط وب
طراحی رابط وب
طراحی رابط وب
طراحی رابط وب
طراحی رابط وب
طراحی رابط وب

اکنون ما سنسورهای مورد نیاز خود را برای طراحی وب سایت خود متصل کردیم.

ما می خواهیم وب سایت هنگام نمایش تمام داده های حسگرها در زمان واقعی ، ظاهری آسان ایجاد کند.

همچنین ما می خواهیم بتوانیم تاریخچه این مقادیر اندازه گیری شده را در بازه زمانی مشاهده کنیم.

بنابراین ابتدا برای جستجوی الهام در وب شروع به جستجوی وب کردم. بیشتر از همه ، سایتهای اطلاعات آب شیرین بدون واقعاً طراحی مورد نظر من. ایستگاه های هواشناسی که قبلاً در بازار بودند به احتمال زیاد نمایشگر داشتند. و از آن صفحه الهام من بیرون آمد. اکثر نمایشگرها دارای طرحی با ظاهر مشبک هستند. این به من ایده ایجاد صفحه اصلی را داد که در آن همه سنسورها نمایش داده شوند.

اما ، من همچنین گفتم که می خواهم صفحه ای بسازم که در آن می توانید تاریخچه هر سنسور را مشاهده کنید.

به همین دلیل ، من یک صفحه دوم در طراحی خود ایجاد کردم که حاوی این بود. در این صفحه می توانم اطلاعات اضافی در مورد سنسور خود را مشاهده کنم که در صفحه اول و خارج از قسمت تاریخ نمایش داده نمی شود.

بعد از چند ساعت طراحی کامل من کامل شد!

طراحی با استفاده از Adobe XD انجام شده است.

مرحله 5: ایجاد پایگاه داده

ایجاد پایگاه داده
ایجاد پایگاه داده

برای استراحت از قسمت طراحی ، من در پایگاه داده خود شروع کردم.

این پایگاه داده شامل همه سنسورها (5) ، همه محرک ها (2) و مقادیری است که آن سنسورها داشتند.

پایگاه داده بسیار آسان است و روابط کمی دارد.

می توانید مدل پایگاه داده را در عکس مشاهده کنید.

مرحله 6: کدگذاری وب سایت: Frontend (html Css)

بازگشت به وب سایت!

اکنون من طرحی دارم که می توانم آن را به صورت html css شروع کنم تا واقعاً از آن استفاده کنم.

در صفحه اصلی:

من با در نظر گرفتن هر سنسور به عنوان یک عنصر در وب سایت خود شروع کردم. به طوری که بعداً می توانم اجازه دهم این قسمت با کد Javascript من تولید شود.

همچنین کلاسهای تصادفی JS-holder را در عناصر قرار دادم. با این کار می توان محتوای آن عنصر را تغییر داد

این کار زمان زیادی را از من گرفت زیرا من در این زبان خاص خوب نیستم.

پس از انجام صفحه اصلی ، زمان شروع به کار در صفحه تاریخ فرا رسیده بود.

در صفحه تاریخ:

بازسازی این صفحه کمی راحت تر بود. در این صفحه همچنین js-holders برای دریافت اطلاعات مربوط به سنسور ، یک شکاف مقدار در زمان واقعی و نمایش جدول با مقادیر اندازه گیری شده وجود داشت.

برای ایجاد یک برگه در وب سایت من برای انتخاب بین Table یا Chart ، باید کمی جاوا اسکریپت اضافه کنم تا عناصر نمایش داده نشوند یا نمایش داده نشوند.

اکنون ما یک وب سایت خیره کننده داریم اما نمی توانیم چیزی در آن نشان دهیم؟ بیایید آن را برطرف کنیم.

می توانید کد من را در مخزن github من پیدا کنید:

مرحله 7: کدگذاری وب سایت: Backend (eventlet) + Coding Frontend (javascript)

پس زمینه:

در حالی که سرور پشت سر نصب شده است ، ما هنوز باید این را در پروژه خود پیاده سازی کنیم. ابتدا باید برخی از واردات را اضافه کنیم تا همه چیز به درستی کار کند.

from import flask فلاسک ، درخواست ، jsonify از flask_socketio واردات SocketIO از flask_cors import CORS

برای راه اندازی سرور باید موارد زیر را اضافه کنیم:

socketio.run (برنامه ، اشکال زدایی = نادرست ، میزبان = '0.0.0.0')

در حال حاضر سرور آنلاین است اما نمی تواند با frontend صحبت کند.

چیزی دریافت نمی کند یا بر نمی گرداند. اجازه دهید آن را تغییر دهیم.

برای درخواست همه سنسورهای موجود در پایگاه داده ، یک مسیر اضافه می شود:

@app.route (نقطه پایانی + '/حسگرها ، روشها = [' GET ']) def get_sensors (): if request.method ==' GET ': s = DataRepository.get_sensors () jsonify (sensors = s) ، 200

این کد از کلاسی به نام DataRepository استفاده می کند و با پایگاه داده صحبت می کند. در اینجا سنسورهایی را که درخواست کرده ایم به ما باز می گرداند.

ما همچنین به مسیری نیاز داریم که اطلاعات مربوط به 1 سنسور خاص و دیگری را برای مقادیر یک سنسور مشخص بپرسد.

اینها همه مسیرها هستند اما برای امکان پذیر کردن داده های بلادرنگ است. ما باید هر فاصله داده هایی را که سنسورها می خوانند ارسال کنیم. برای این کار از اتصال Socket-IO استفاده می کنیم. این ارتباطی است که از زمانی که شخصی وب سایت را با JS بارگذاری می کند ایجاد می شود و این اتصال را باز نگه می دارد. این یک اتصال کامل دوطرفه است به این معنی که یک اتصال است که به طور همزمان از هر دو طریق (ارسال و دریافت) کار می کند. برای استفاده از این کد باید کد زیر را اضافه کنیم.

@socketio.on ('connect') def initial_connection (): print ('Connect a new client connect') socketio.send ("U bended geconnecteerd") # # ارسال به مشتری!

هنگامی که مشتری متصل می شود ، این آرامش کد اجرا می شود.

برای دریافت هرگونه پیام از پیشخوان می توانید از این کد استفاده کنید.

@socketio.on ('message') def message_recived (): pass

همچنین می توانید پیام ارسال کنید. این کار با موارد زیر انجام می شود.

socketio.emit ('Update_RTD'، dict_results، broadcast = True)

اولین آرگومان داده شده می تواند هر چیزی باشد که شما می خواهید اما با آنچه در JS خود قرار داده اید مطابقت داشته باشد و همچنین می توانید اشیاء را با آن ارسال کنید. این اختیاری است.

جاوا اسکریپت:

افزودن کمی JS برای اتصال سرور به سرور پشتیبان برای نمایش داده های فعلی و دریافت اطلاعات از پایگاه داده بسیار مهم است.

ما توابع socketIO را که برای دریافت و ارسال داده ایجاد کرده ایم ، فراخوانی می کنیم.

هنگامی که ما داده ها را به عنوان یک شیء Json دریافت می کنیم ، آن را برچیده و اطلاعات مورد نظر خود را بدست می آوریم و سپس آن را در دارندگان JS که در وب سایت خود قرار داده ایم قرار می دهیم.

می توانید کد من را در مخزن github من پیدا کنید:

مرحله هشتم: ساخت یک قاب

ساخت Case
ساخت Case
ساخت Case
ساخت Case
ساخت Case
ساخت Case
ساخت Case
ساخت Case

روکش بسیار کار می برد و می توان آن را به هر روشی که می خواهید انجام دهید. این طوری من این کار را کردم.

من چند جعبه شراب گرفتم.

یکی از آنها را به عنوان جعبه برای قرار دادن RPi و بیشتر سنسورهایم استفاده کردم.

سنسور سرعت باد و سنسور جهت باد البته در داخل قرار نگرفته اند بلکه در بالای یک تیر عرضی قرار گرفته بر روی یک تیر قرار گرفته اند. روی این میله آن جعبه شراب را آویزان کردم که در آن نیز در را برای آن ساخته بودم.

با مشاهده عکسها می توانید نحوه انجام پروژه خود را مشاهده کنید.

این البته نمونه ای از نحوه انجام این کار است. شما می توانید با آن هر کاری که می خواهید انجام دهید.

توصیه شده: