ورکشاپ آموزشی - آیسی مدار
رفتن به محتوا

زیرلیوانی هوشمند و یادآور آب خوردن با ESP32

ابزار و گجت
۰ نظر
۹۳ نفر
کد ۴۳۱۷

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

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

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

  1. وزن لیوانت رو با دقت اندازه‌گیری می‌کنه.
  2. مقدار آبی که تو طول روز می‌خوری رو ردیابی و ثبت می‌کنه.
  3. دقیقا می‌فهمه کی لیوان رو دوباره پر کردی.
  4. اگه بهش بی‌توجهی کنی و آب نخوری، حسابی عصبانی میشه.
  5. با چشمک زدن چراغ‌ها سعی می‌کنه از نظر روانی مجبورت کنه آب بخوری.
  6. اگه بدنت کم‌آب بشه، مثل یه سنسور دود که قاطی کرده باشه، برات بوق می‌زنه.
مرحله ۱

مکانیسم تشخیص وزن چطوری کار می‌کنه؟

داخل این زیرلیوانی از سنسورهای وزن (لودسل) استفاده شده. این سنسورها در واقع تیکه‌های فلزی هستن که وقتی وزنی روشون قرار می‌گیره، یه کوچولو خم میشن. وقتی فلز خم میشه، مقاومت‌های خیلی ریزی که روش چسبیدن، به مقدار خیلی ناچیزی کشیده یا فشرده میشن.

این سنسورها با یه روش خاص به اسم پل وتستون به هم وصل میشن؛ یه روش خفن برای اینکه اون تغییرات خیلی ناچیز رو به یه سیگنال قابل اندازه‌گیری تبدیل کنن. این سیگنال‌ها بعدش وارد یه ماژول به اسم HX711 میشن تا حسابی تقویت بشن و به اعدادی تبدیل بشن که میکروکنترلر ESP32 بتونه اونا رو بخونه و بفهمه.

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

اما امان از وقتی که نادیده‌اش بگیری... چراغش قرمز میشه و یه صدای بوق خیلی رو اعصاب تولید می‌کنه!

مرحله ۲

سیم‌کشی حساس سنسورهای وزن (لودسل)

اینجا همون جاییه که خیلی‌ها گیر می‌کنن. هر سنسور وزنی که تو این پروژه استفاده می‌کنیم، سه تا سیم داره:

  1. قرمز
  2. مشکی
  3. زرد

این سنسورها در واقع نیم‌پل هستن، نه لودسل کامل. یعنی حتما باید از چهار تا از این سنسورها استفاده کنی و اونا رو دقیقا به شکل یه پل وتستون کامل به هم ببندی. ایده اصلی سیم‌کشی اینه:

  1. سیم‌های قرمز و مشکی بین سنسورها با هم جفت میشن.
  2. سیم‌های زرد می‌رن به پایه‌های ورودی ماژول HX711 (یعنی پایه‌های E+، E-، A+ و A-).

اگه اینا رو اشتباه وصل کنی، یکی از این اتفاقا میفته:

  1. اعداد کاملا رندوم و چرت‌وپرت تحویل می‌گیری.
  2. یه عدد ثابت و قفل‌شده مثل 0x7FFFFF می‌بینی.
  3. یا کلا هیچ عددی نشون نمیده.

نپرس از کجا می‌دونم... بهتره اینجا حسابی وقت بذاری و مقاومت سیم‌ها رو با مولتی‌متر اندازه بگیری تا از سیم‌های سیگنال مطمئن بشی. سیم‌هایی که کنار هم هستن مقاومت 1 کیلواهم نشون میدن، پس سیم‌های بیرونی باید مقاومت 2 کیلواهم داشته باشن.

اگه همه‌چیز رو درست سیم‌کشی کرده باشی، وقتی روی سنسورها فشار میاری، باید اعداد نرم و پایداری رو ببینی که متناسب با فشار تغییر می‌کنن.

مرحله ۳

طراحی و چاپ قاب سه‌بعدی

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

  1. میکروکنترلر اصلی
  2. برد تقویت‌کننده HX711
  3. سنسورهای لودسل
  4. ال‌ای‌دی RGB
  5. بازر (بوق)
  6. سیم‌کشی‌ها (فضایی که می‌برن از چیزی که فکر می‌کنی بیشتره)

نکاتی که تو طراحی قاب باید رعایت کنی:

  1. صفحه بالایی باید طوری باشه که وزن لیوان رو مستقیما و تمیز به لودسل منتقل کنه.
  2. لودسل برای کار کردن باید یه مقدار خیلی کم خم بشه؛ پس نباید اون رو خیلی سفت و محکم پرس کنی.
  3. یه برش تمیز برای قرار گرفتن نمایشگر OLED در نظر بگیر.
  4. حواست باشه برای پورت USB و کابل شارژ فضای کافی بذاری.
  5. مرکز ثقل فشار رو دقیقا با مرکز لودسل هماهنگ کن.

یادت نره این دستگاه در اصل یه ترازوی دقیقه که داره نقش زیرلیوانی رو بازی می‌کنه، پس تراز بودن و دقت مکانیکیش خیلی مهمه. اگه می‌خوای از فایل‌های من استفاده کنی، سه تا فایل برات آماده کردم:

  1. فایل coaster-body.stl ← محفظه اصلی که تمام قطعات الکترونیکی توش قرار می‌گیرن.
  2. فایل coaster-lid.stl ← صفحه بالایی که لیوان روش قرار می‌گیره.
  3. فایل coaster-front.stl ← پنل جلویی که با فشار جا میره و نمایشگر رو نگه می‌داره.

مونتاژ قطعات پرینت شده: محفظه اصلی، لودسل رو تو بخش پایینی خودش نگه می‌داره. ماژول HX711 و میکروکنترلر بالای اون قرار می‌گیرن. درپوش بالایی هم دقیقا روی بخش متحرک لودسل می‌شینه تا بتونه با وزن لیوان یه کوچولو خم بشه.

همه لودسل‌ها شبیه هم نیستن؛ مثلا من وقتی داشتم نمونه دوم رو می‌ساختم مجبور شدم یه کم لبه‌ها رو بتراشم تا درست جا بیفته. لطفا درپوش رو مستقیما به لودسل چسب نزن! لودسل برای اندازه‌گیری وزن باید بتونه در حد میکروسکوپی حرکت کنه. پنل جلویی هم با یه کلیک جا میره و نمایشگر OLED، بازر و ال‌ای‌دی رو تو خودش نگه می‌داره. برای محکم کردن قطعات الکترونیکی، حسابی از چسب حرارتی استفاده کن. چون چسب حرارتی:

  1. قطعات رو عایق می‌کنه.
  2. لرزش‌ها رو می‌گیره.
  3. جلوی کشیده شدن سیم‌ها و فشار اومدن به لودسل رو می‌گیره.
  4. بهت حس مردعنکبوتی بودن میده!

فقط حواست باشه که چسب به بخش حساس و متحرک لودسل نخوره. برای بستن نهایی قاب زیرلیوانی می‌تونی از این روش‌ها استفاده کنی:

  1. پیچ (اگه تو طراحیت براش جا گذاشتی)
  2. چسب قطره‌ای
  3. اتصال فشاری و کیپ شدن قطعات تو هم

پیشنهاد می‌کنم قاب رو طوری ببندی که بعدا بتونی بازش کنی. چون برای کالیبره کردن مجدد یا ارتقا دادن مدار حتما بهش نیاز پیدا می‌کنی. بیا با هم روراست باشیم... قطعا بعدا دوباره بازش می‌کنی!

مرحله ۴

سیم‌کشی قطعات روی برد اصلی

حالا وقتشه دل و روده الکترونیکی این زیرلیوانی رو به هم وصل کنیم. این پروژه از چیزی که در نگاه اول به نظر می‌رسه، قطعات بیشتری داره؛ پس با حوصله کار کن و سعی کن سیم‌کشی‌ها رو تمیز نگه داری. اول از همه می‌ریم سراغ اتصال لودسل و HX711 که وظیفه اصلی وزن کردن آب رو به عهده دارن.

  1. سیم‌های لودسل رو به HX711 وصل کن (معمولا رنگشون قرمز، مشکی، سفید و سبزه).
  2. پایه DT ماژول HX711 به پایه GPIO 4
  3. پایه SCK ماژول HX711 به پایه GPIO 5
  4. پایه VCC به ولتاژ 3.3 ولت برد
  5. پایه GND به پایه GND برد

مطمئن شو که سیم‌های لودسل کاملا محکم باشن؛ اگه اتصالات شل باشه، اعدادی که می‌خونی مدام پرش پیدا می‌کنن. قدم بعدی اتصال نمایشگر OLED با سایز 0.91 اینچه که میزان پیشرفت، انیمیشن‌ها و یادآوری‌ها رو نشون میده.

  1. پایه SDA به پایه GPIO 6
  2. پایه SCL به پایه GPIO 7
  3. پایه VCC به ولتاژ 3.3 ولت برد
  4. پایه GND به پایه GND برد

اگه دیدی نمایشگر روشن نمیشه، یه بار آدرس I2C نمایشگر (که معمولا 0x3C هست) رو تو کدها چک کن. برای بازخورد بصری موقع آب خوردن یا یادآوری‌ها، از یه ال‌ای‌دی RGB استفاده می‌کنیم.

  1. پایه قرمز (Red) به پایه GPIO 8
  2. پایه سبز (Green) به پایه GPIO 9
  3. پایه آبی (Blue) به پایه GPIO 10
  4. پایه مشترک گراند به پایه GND برد

(اگه ال‌ای‌دی تو مقاومت داخلی نداره، حتما سر راه پایه‌هاش مقاومت بذار تا نسوزه.) حالا نوبت بازر یا همون بوق یادآوریه که قراره وقتایی که آب خوردن یادت میره، حسابی کلافت کنه.

  1. پایه مثبت به پایه GPIO 3
  2. پایه منفی به پایه GND برد

برای تامین برق مدار:

  1. موقع تست کردن می‌تونی برد رو با کابل USB روشن کنی.
  2. وقتی همه‌چیز درست کار کرد، می‌تونی بری سراغ یه تغذیه دائمی (مثل استفاده از کابل USB، نصب باتری یا ترکیب هر دو).
  3. حتما حواست باشه که گراند (GND) تمام قطعات به هم وصل شده باشن.

چند تا نکته طلایی:

  1. لودسل قطعه حساسی هست؛ وقتی نصبش کردی، سیم‌هاش رو زیاد نکش.
  2. سیم‌ها رو تا جای ممکن کوتاه نگه دار.
  3. اگه دیدی اعدادی که می‌خونی مدام بالا پایین می‌پره، اول از همه اتصال گراند رو چک کن.
  4. چسب حرارتی بهترین دوستته؛ هم لرزش‌ها رو می‌گیره و هم نمی‌ذاره سیم‌ها کشیده بشن.
  5. قبل از اینکه قطعات رو تو قاب کیپ کنی، حتما کل مدار رو بیرون قاب تست کن.

برای اینکه کارت راحت‌تر بشه، یه نقشه سیم‌کشی خیلی حرفه‌ای هم تو این مرحله گذاشتم که می‌تونی ازش کمک بگیری.

مرحله ۵

نصب نرم‌افزار و آپلود کدهای آردوینو

تموم منطق این دستگاه تو کدهای آردوینو نوشته شده. وقتی کد رو روی میکروکنترلر آپلود کنی، این کارها رو انجام میده:

  1. راه‌اندازی نمایشگر OLED (با رزولوشن 128 در 32 و استفاده از کتابخونه‌های Adafruit)
  2. راه‌اندازی ماژول HX711، کالیبره کردن لودسل و صفر کردن ترازو
  3. خوندن مداوم وزن لیوان و نرم کردن اعداد به دست اومده با یه فیلتر میانگین‌گیر
  4. تشخیص دقیق لحظه گذاشتن یا برداشتن لیوان از روی زیرلیوانی
  5. ردیابی تغییرات وزن برای اینکه بفهمه آب خوردی یا لیوان رو پر کردی
  6. تبدیل مستقیم تغییر وزن به میلی‌لیتر آب مصرف شده
  7. جمع زدن مداوم مقدار آب مصرفی برای رسیدن به هدف روزانه
  8. نمایش زنده پیشرفت و مجموع آب مصرفی روی نمایشگر OLED
  9. اجرای انیمیشن‌ها، چشمک زدن ال‌ای‌دی RGB و بوق زدن برای حالت‌های مختلف مثل:
  10. گذاشتن لیوان روی دستگاه
  11. آب خوردن
  12. پر کردن مجدد لیوان
  13. رسیدن به هدف روزانه
  14. بررسی زمان بیکاری و بوق زدن در صورتی که لیوان برای مدت طولانی دست‌نخورده بمونه

همه این اتفاقا کاملا اتوماتیک میفته؛ نه دکمه‌ای هست، نه نیازی به تنظیم دستی. فقط لیوانت رو بذار روش و عادی آب بخور.

چطوری می‌فهمه که آب خوردی؟

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

منطق یادآوری و بوق زدن

اگه لیوان برای یه مدت مشخص روی زیرلیوانی بمونه و وزنش هیچ تغییری نکنه:

  1. ال‌ای‌دی RGB به رنگ قرمز چشمک می‌زنه.
  2. بازر شروع به بوق زدن می‌کنه تا یادت بندازه باید آب بخوری.

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

مراحل آپلود کدها روی برد

  1. نرم‌افزار Arduino IDE رو باز کن.
  2. این کتابخونه‌ها رو حتما نصب کن:
  3. Adafruit SSD1306
  4. Adafruit GFX
  5. HX711
  6. مدل دقیق بردت رو تو نرم‌افزار انتخاب کن.
  7. پورت USB درست رو انتخاب کن.
  8. برد رو با کابل به سیستم وصل کن.
  9. دکمه Upload رو بزن.

تموم شد! اگه جایی به مشکل خوردی، پنجره Serial Monitor رو باز کن. اونجا وزن دقیق، مقادیر پایه و میزان مصرف کل رو به صورت زنده برات چاپ می‌کنه تا راحت‌تر بتونی مشکل رو پیدا کنی.

مرحله ۶

نتیجه‌گیری و پایان کار

تبریک می‌گم! تو الان یه زیرلیوانی و یه آلارم رو اعصاب بر اساس وزن ساختی که نمی‌ذاره بدنت بی‌آب بمونه. مراقب سلامتیت باش و حسابی آب بخور!

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

فایل‌های پیوست

STL coaster-lid.stl
STL coaster-body.stl
STL coaster-front.stl

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

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

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!