فهرست مطالب:

یک ایستگاه هوای هوشمند دیگر ، اما : 6 مرحله (همراه با تصاویر)
یک ایستگاه هوای هوشمند دیگر ، اما : 6 مرحله (همراه با تصاویر)

تصویری: یک ایستگاه هوای هوشمند دیگر ، اما : 6 مرحله (همراه با تصاویر)

تصویری: یک ایستگاه هوای هوشمند دیگر ، اما : 6 مرحله (همراه با تصاویر)
تصویری: لزبازی لیلا اوتادی چه لبی میگیره (نبینی از دستت رفته) 2024, ژوئن
Anonim
Image
Image
یک ایستگاه هوای هوشمند دیگر ، اما…
یک ایستگاه هوای هوشمند دیگر ، اما…
یک ایستگاه هوای هوشمند دیگر ، اما…
یک ایستگاه هوای هوشمند دیگر ، اما…
یک ایستگاه هوای هوشمند دیگر ، اما…
یک ایستگاه هوای هوشمند دیگر ، اما…

خوب ، من می دانم که چنین ایستگاه های هواشناسی در همه جا موجود است ، اما چند دقیقه وقت بگذارید تا تفاوت را ببینید …

  • کم قدرت
  • 2 صفحه نمایش کاغذ الکترونیکی…
  • اما 10 صفحه مختلف!
  • بر اساس ESP32
  • شتاب سنج و سنسورهای دما / رطوبت
  • به روز رسانی Wifi
  • کیف چاپ سه بعدی

و بسیاری از ترفندهای مفید دیگر…

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

تدارکات

همانطور که می بینید ، سیستم شامل 2 صفحه کاغذ الکترونیکی و یک جعبه چاپ سه بعدی است. اما چیزهای زیادی در آن وجود دارد:

  • یک ESP32
  • یک شتاب سنج MPU6050
  • سنسور DHT22
  • یک باتری LiPo
  • یک PCB برای اتصال همه چیز
  • نخ های خانگی duPont

و اتصال Wi-Fi. در واقع 3 شبکه اعلام می شود ، سیستم آنها را یک به یک آزمایش می کند تا زمانی که موفق به اتصال شود.

مرحله 1: چرا یک ایستگاه هواشناسی دیگر؟

چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟
چرا ایستگاه هواشناسی دیگر؟

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

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

برای صرفه جویی در مصرف انرژی ، صفحه های کاغذ الکترونیکی را انتخاب کردم (به منابع زیر مراجعه کنید) که حتی اگر دیگر روشن نشوند ، صفحه نمایش را نگه می دارند. به طور مشابه برای ESP32 ، ماژول Lolin32 (که به دلیل صرفه اقتصادی آن مشهور است) را انتخاب کردم و باید نحوه مدیریت خواب عمیق و بیدار شدن در زمان وقفه توسط شتاب سنج را بیاموزم.

صفحه ها از طریق SPI به هم متصل هستند ، من قبل از پیدا کردن پین های مناسب برای اتصال آنها به ESP32 ، کمی جستجو کردم ، زیرا می دانستم که برای شتاب سنج به I2C ، برای خواندن DHT22 و پین برای اندازه گیری ولتاژ باتری نیز نیاز دارم. ESP32 تقریباً کاملاً شارژ شده است! با دانستن این که برخی از پین ها فقط خواندنی هستند (من از آنها برای سنسور DHT استفاده کردم) ، برخی دیگر را نمی توان همراه با Wifi استفاده کرد ، پیدا کردن پیکربندی مناسب کمی پیچیده بود.

جعبه را می توان در 4 جهت ، به علاوه مسطح قرار داد. روی هم رفته 4*2+2 = 10 نوع اطلاعات ممکن است تنها با 2 صفحه نمایش داده شود. بنابراین به شما امکان می دهد بسیاری از موارد را نمایش دهید:

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

مرحله 2: به چه چیزی نیاز دارید؟

چه چیزی نیاز دارید ؟
چه چیزی نیاز دارید ؟
چه چیزی نیاز دارید ؟
چه چیزی نیاز دارید ؟
چه چیزی نیاز دارید ؟
چه چیزی نیاز دارید ؟
  • ESP32: ماژول Lolin32 (قدرت بسیار کم ، مجهز به اتصال باتری ، می تواند باتری را از طریق USB plus شارژ کند)
  • 2 صفحه نمایش اپپر: 4.2 اینچ و 2.9 اینچ. من مدلها را از فروشگاه Good Display انتخاب کردم.
  • سنسور DHT22
  • شتاب سنج MCU6050 - حسگر ژیرومتر I2C
  • یک باتری LiPo
  • برای اندازه گیری ولتاژ باتری: 2 مقاومت 10k ، 1 مقاومت 100k ، 1 خازن 100nF ، 1 ترانزیستور MOSFET
  • لحیم کاری و لحیم کاری ، برد مدار چاپی
  • دسترسی به چاپگر سه بعدی برای مورد

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

برای به دست آوردن اطلاعات آب و هوا ، همچنین باید در API های آب و هوا ثبت نام کنید و کلیدهای خود را در مکان های صحیح در فایل 'Variables.h' قرار دهید (به زیر مراجعه کنید).

وب سایت های هواشناسی:

  • apixu
  • آب و هوا

مرحله 3: این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…

این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…
این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…
این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…
این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…
این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…
این پروژه باعث شد من زیاد فکر کنم و یاد بگیرم…

این سیستم قرار بود کم مصرف باشد ، بنابراین نیازی نیست هر شب باتری را شارژ کنید … برای صرفه جویی در مصرف انرژی ، صفحه های کاغذ الکترونیکی را انتخاب کردم که حتی اگر دیگر تغذیه نمی شوند ، صفحه نمایش را نگه می دارند. به طور مشابه برای ESP32 ، ماژول Lolin32 (که به دلیل صرفه اقتصادی آن مشهور است) را انتخاب کردم و باید نحوه مدیریت خواب عمیق و فراخوان بیداری هنگام قطع شدن شتاب سنج را بیاموزم.

جعبه را می توان در 4 جهت ، بیشتر مسطح کرد. در مجموع 4*2+2 = 10 نوع اطلاعات ممکن برای نمایش. بنابراین به شما امکان می دهد کارهای زیادی انجام دهید: تاریخ و قدیس روز ، زمان ، پیش بینی آب و هوا امروز ، پیش بینی آب و هوا برای ساعت ها یا روزهای آینده ، میزان شارژ باتری و نقل قول تصادفی از یک وب سایت تخصصی.

جستجو در اینترنت بسیار زیاد است و همانطور که می دانید: وای فای دشمن صرفه جویی در مصرف انرژی است…

بنابراین ما باید اتصال را مدیریت کنیم تا اطلاعات به روز را نمایش دهیم اما بدون صرف زمان زیاد برای اتصال. یک مشکل نسبتاً پیچیده دیگر: حفظ زمان نسبتاً دقیق. من به RTC احتیاج ندارم زیرا می توانم زمان را در اینترنت پیدا کنم ، اما ساعت داخلی ESP32 به خصوص در دوره های خواب بسیار تغییر می کند. من مجبور بودم راهی پیدا کنم که به اندازه کافی دقیق بمانم ، در حالی که منتظر تنظیم مجدد ساعت توسط اینترنت بودم. من هر ساعت آن را در اینترنت مجدداً همگام می کنم.

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

مشکل دیگری که باید حل شود حافظه است. هنگامی که ESP32 در خواب عمیق است ، حافظه از بین می رود ، به جز آنچه RAM RTC نامیده می شود. این حافظه 4 مگابایت عرض دارد که فقط 2 عدد از آن برای برنامه قابل استفاده است. در این حافظه ، من باید متغیرهای مختلف برنامه را که باید از یک اجرا به مرحله بعد ، بعد از مرحله خواب نگهداری شوند ، ذخیره کنم: پیش بینی آب و هوا ، زمان و تاریخ ، نام فایلهای نماد ، نقل قول ها و غیره. به

در مورد نمادها ، آنها در SPIFFS ، سیستم فایل ESP32 ذخیره می شوند. پس از بسته شدن API آب و هوا Wunderground رایگان ، مجبور شدم به دنبال ارائه دهندگان داده های آب و هوایی رایگان دیگر باشم. من دو مورد را انتخاب کردم: یکی برای آب و هوای روز جاری ، با 12 ساعت پیش بینی ، و دیگری برای پیش بینی های چند روزه. نمادها یکسان نیستند ، بنابراین دو مشکل جدید برای من ایجاد کرد:

  • مجموعه آیکون را انتخاب کنید
  • این نمادها را با کدهای پیش بینی 2 سایت مطابقت دهید

این مکاتبات همچنین در RAM RTC ذخیره شده است تا نیازی به بارگیری مجدد در هر زمان نباشد.

آخرین مشکل آیکون ها ذخیره همه آنها در SPIFFS غیرممکن است. فضا برای همه پرونده های من بسیار کوچک است. انجام فشرده سازی تصویر ضروری بود. من یک اسکریپت در پایتون نوشتم که فایلهای نماد من را می خواند و آنها را در RLE فشرده می کند ، و سپس فایل های فشرده را در SPIFFS ذخیره می کنم. آنجا برگزار شد

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

داده هایی که در اینترنت خوانده می شوند اغلب در قالب json هستند: داده های آب و هوا ، مقدس روز. من برای این کار از کتابخانه (عالی) arduinoJson استفاده می کنم. اما نقل قول ها اینطور نیستند. من آنها را از یک سایت اختصاصی می گیرم ، بنابراین باید آنها را با نگاه مستقیم به محتوای صفحه وب بخوانم. مجبور شدم برای آن کد خاصی بنویسم. هر روز ، حدود نیمه شب ، برنامه به این سایت می رود و حدود ده نقل قول تصادفی را می خواند و آنها را در RAM RTC ذخیره می کند. هنگامی که محفظه صفحه بزرگ به سمت بالا است ، یکی به صورت تصادفی در بین آنها نمایش داده می شود.

مشکل نمایش کاراکترهای برجسته (متاسفم ، اما نقل قول ها به زبان فرانسوی هستند) را به شما می گویم …

هنگامی که صفحه کوچک روشن است ، ولتاژ باتری نمایش داده می شود ، با ترسیم برای مشاهده بهتر سطح باقی مانده. برای خواندن ولتاژ باتری ، لازم بود یک مجموعه الکترونیکی ایجاد شود. از آنجا که اندازه گیری نباید باتری را تخلیه کند ، از نمودار موجود در اینترنت استفاده کردم ، که از ترانزیستور MOSFET به عنوان سوئیچ استفاده می کند تا فقط در هنگام اندازه گیری جریان را مصرف کند.

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

نقشه کاشت را ببینید: "منطقه ممنوعه" منطقه ای است که برای اتصال کابل USB اختصاص داده شده است. ماژول Lolin32 به شما امکان می دهد باتری را از طریق USB شارژ کنید: در صورت اتصال کابل USB ، باتری شارژ می شود و ماژول به طور همزمان کار می کند.

نکته آخر: فونت ها. در اندازه های مختلف ، پررنگ یا نه ، آنها باید ایجاد و ذخیره می شدند. کتابخانه Adafruit GFX پس از نصب فایل های فونت در فهرست مناسب ، به خوبی از آن مراقبت می کند. برای ایجاد فایل ها ، از سایت Font Converter استفاده کردم ، بسیار راحت!

مطمئن شوید که انتخاب کرده اید:

  • نمایش پیش نمایش: TFT 2.4 اینچ
  • نسخه کتابخانه: Adafruit GFX Font

بنابراین به طور خلاصه: یک پروژه بزرگ ، که به من اجازه داد تا چیزهای زیادی یاد بگیرم

مرحله 4: استفاده از صفحه نمایش کاغذ الکترونیکی

استفاده از نمایشگرهای کاغذ الکترونیکی
استفاده از نمایشگرهای کاغذ الکترونیکی

معایب اصلی این صفحه ها به وضوح در فیلم قابل مشاهده است: به روز رسانی صفحه نمایش یک یا دو ثانیه طول می کشد و با چشمک زدن (نمایش جایگزین نسخه های معمولی و معکوس دو صفحه) انجام می شود. این برای اطلاعات آب و هوا قابل قبول است زیرا من آن را اغلب به روز نمی کنم (هر ساعت به جز تغییر جهت جعبه). اما نه برای آن زمان. به همین دلیل (و برای محدود کردن مصرف) هنوز از صفحه نمایش HH: MM (نه ثانیه ها) استفاده می کنم.

بنابراین مجبور شدم به دنبال راه دیگری برای به روز رسانی صفحه نمایش باشم. این صفحات (برخی از آنها) از یک به روز رسانی جزئی پشتیبانی می کنند (اعمال شده در ناحیه ای از صفحه ، یا در کل صفحه …) اما برای من خوب نبود زیرا صفحه بزرگ من (که زمان را نشان می دهد) ارواح پیکسل ها را نگه می دارد که جایگزین می شوند به عنوان مثال ، هنگام عبور از ساعت 10:12 به 10:13 ، "2" در داخل "3" کمی قابل مشاهده است و بعد از "4" ، "5" و غیره حتی بیشتر قابل مشاهده است. من می خواهم برای اشاره به این که در مورد صفحه نمایش من چنین است: من آن را با نویسنده کتابخانه صفحه نمایش کاغذ الکترونیکی GxEPD2 بحث کردم که به من گفت که این پدیده را با صفحه نمایش خود مشاهده نمی کند. ما سعی کردیم پارامترها را بدون موفقیت در شکار ارواح تغییر دهیم.

بنابراین ما مجبور شدیم راه حل دیگری را بیابیم: من پیشنهاد کردم که یک نوشیدنی جزئی را انجام دهم که مشکل را حل کرد (حداقل برای من رضایت بخش است). ساعت ها بدون چشمک زدن صفحه می گذرد و هیچ روح وجود ندارد. با این حال ، تغییر فوری نیست: تغییر زمان کمی بیشتر از یک ثانیه طول می کشد.

مرحله 5: تهیه آن

ساختنش
ساختنش
ساختنش
ساختنش
ساختنش
ساختنش
ساختنش
ساختنش

برای اطمینان از این که هنگام تغییر جهت هیچ چیز در داخل حرکت نمی کند ، اجزای مختلف (صفحه نمایش ، ماژول های الکترونیکی ، PCB ، باتری) با یک تفنگ چسب چسبانده می شوند. برای هدایت سیم ها زیر PCB ، آن را روی پایه های ساخته شده با اسپیسر نصب کردم ، همین امر در مورد باتری نیز صدق می کند.

به زودی کانکتور میکروفون USB خارجی را نصب می کنم تا مجبور نباشم قاب را برای شارژ مجدد باتری باز کنم.

شاید من نیز علاقه مند باشم که توسط OTA به روز کنم تا همه چیز کامل شود….

مرحله 6: کد و فایل ها

Image
Image

سه فایل بایگانی ارائه شده است:

  • آب و هوا station.zip: کد Arduino ، برای بارگذاری با استفاده از Arduino IDE
  • Boite ecran.zip: فایل های CAD و چاپگر سه بعدی برای مورد
  • data.zip: فایل هایی که باید در SPIFFS ESP32 بارگذاری شوند.

اگر نمی دانید چگونه فایل ها را در SPIFFS ESP32 بارگذاری کنید ، فقط این آموزش را بخوانید ، که یک افزونه بسیار مفید و نحوه استفاده از آن در Arduino IDE است.

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

برخی از مراحل اولیه سازی باید فقط یک بار در اولین اجرا (مانند گرفتن زمان ، داده های آب و هوا ، نقل قول ها و غیره) اجرا شود ، بنابراین ESP32 باید بداند که بیدار شدن فعلی اولین مرحله است یا نه: برای این کار ، راه حل این است که یک متغیر در RAM RTC (که حتی در مراحل خواب عمیق نیز فعال است) ذخیره شود که در هر بیدار شدن افزایش می یابد. اگر برابر 1 باشد ، اولین اجرا است و ESP32 مرحله راه اندازی را اجرا می کند ، در غیر این صورت این مرحله حذف می شود.

برای بیدار کردن ESP32 ، چندین امکان وجود دارد:

  • بیدارشدن تایمر: کد مدت زمان خواب عمیق را قبل از خواب محاسبه می کند. این برای به روز رسانی زمان (هر 1 ، 2 ، 3 یا 5 دقیقه) یا داده های آب و هوا (هر 3 یا 4 ساعت) نقل قول ها و قدیس روز (هر 24 ساعت) استفاده می شود.
  • بیدار شدن را قطع کنید: شتاب سنج سیگنالی ارسال می کند که برای بیدار کردن ESP32 استفاده می شود. این برای تشخیص تغییر جهت و به روز رسانی نمایشگرها استفاده می شود
  • بیدار شدن از طریق حسگر لمسی: ESP32 مجهز به چندین پین است که به عنوان سنسور لمسی عمل می کنند ، اما نمی توان آنها را با بیدار شدن با تایمر استفاده کرد ، بنابراین من از این استفاده نکردم.

ترفندهای برنامه نویسی دیگری در جاهای دیگر کد وجود دارد که می تواند زمان را در زمان صرفه جویی در مصرف انرژی حفظ کند (یعنی هر دقیقه سرور NTP را متصل نکنید) ، برای حذف لهجه هایی که توسط کتابخانه Adafruit GFX پشتیبانی نمی شوند ، برای جلوگیری از به روزرسانی صفحه نمایش در صورت لازم نیست ، برای تنظیم پارامترهای شتاب سنج مخصوص بیدار شدن از خواب ، زمان دقیق خواب را در هنگام بیدار شدن تایمر محاسبه کنید ، در صورت عدم اتصال به IDE (برای صرفه جویی مجدد در مصرف انرژی) از استفاده از کنسول سریال اجتناب کنید. وای فای در صورت عدم نیاز ، و غیره … و کد مملو از نظراتی است که به درک عملکردها کمک می کند.

با تشکر از شما برای خواندن این دستورالعمل (اولین مورد من). امیدوارم از آن لذت ببرید و از ساخت این ایستگاه هواشناسی لذت ببرید

مسابقه حسگرها
مسابقه حسگرها

نفر دوم در مسابقه سنسورها

توصیه شده: