ساعت هوشمند ARDUnia با نمایشگر OLED و کنترل لمسی

ساعت هوشمند ARDUnia

ARDUnia Smart Clock یک ساعت دیجیتال چندمنظوره مبتنی بر Arduino Nano یا Uno است که علاوه بر نمایش زمان، امکاناتی مانند نمایش تاریخ شمسی، اندازه‌گیری دما و رطوبت، نمایش فاز ماه، کرونومتر با دقت صدم ثانیه و نمایش تقریبی درصد باتری را ارائه می‌دهد.

سطح متوسط

معرفی پروژه

ARDUnia Smart Clock یک ساعت دیجیتال چندمنظوره مبتنی بر Arduino Nano یا Arduino Uno است. این دستگاه علاوه بر نمایش ساعت و تاریخ شمسی، امکاناتی مانند اندازه‌گیری دما و رطوبت، نمایش فاز ماه، کرونومتر دقیق و نمایش سطح تقریبی باتری را در یک نمایشگر OLED کوچک فراهم می‌کند.

کنترل دستگاه با یک ماژول لمسی TTP223 انجام می‌شود و کاربر می‌تواند با ضربه کوتاه، ضربه دوگانه و لمس طولانی میان حالت‌های مختلف جابه‌جا شود.

امکانات اصلی

  • نمایش ساعت و دقیقه با اندازه بزرگ و ثانیه با اندازه کوچک
  • نمایش تاریخ شمسی با تبدیل تاریخ میلادی به جلالی
  • نمایش دما و رطوبت محیط با حسگر DHT11
  • امکان کالیبراسیون دستی دما و رطوبت
  • نمایش فاز ماه در ۸ حالت
  • نمایش سطح تقریبی باتری به شکل نوار درصدی
  • کرونومتر با دقت صدم ثانیه
  • تغییر حالت نمایش با معکوس کردن رنگ‌های OLED
  • ریست نرم‌افزاری با نگه‌داشتن طولانی کلید لمسی
  • حفظ زمان با استفاده از ماژول RTC مدل DS1307

سخت‌افزار مورد نیاز

قطعهتعدادکاربرد
Arduino Nano یا Uno۱کنترل اصلی دستگاه
نمایشگر OLED با ابعاد 128×32 و رابط I2C۱نمایش اطلاعات
ماژول RTC مدل DS1307۱حفظ و ارائه زمان
حسگر دما و رطوبت DHT11۱اندازه‌گیری شرایط محیط
ماژول لمسی TTP223۱کنترل دستگاه با لمس
مقاومت ۱ کیلو اهم۱مطابق فهرست قطعات مخزن
مقاومت ۱۰ کیلو اهم۲تقسیم ولتاژ باتری
باتری لیتیومی ۳.۷ ولت۱منبع تغذیه قابل‌حمل، اختیاری
سیم اتصال و برد آزمایشیبه میزان لازممونتاژ مدار

نقشه اتصالات

نمایشگر OLED

پایه نمایشگرپایه Arduino Nano/Uno
VCC5V
GNDGND
SDAA4
SCLA5

ماژول ساعت DS1307

پایه RTCپایه Arduino Nano/Uno
VCC5V
GNDGND
SDAA4
SCLA5

نمایشگر OLED و ماژول RTC از باس I2C مشترک استفاده می‌کنند. این اتصال با توجه به آدرس‌های متفاوت دو ماژول امکان‌پذیر است.

حسگر DHT11

پایه حسگرپایه Arduino
DATAD12
VCC5V، مطابق نوع ماژول و مدار مورد استفاده
GNDGND

در صورت استفاده از حسگر خام DHT11، مقاومت Pull-up مناسب برای خط DATA را مطابق مدار حسگر در نظر بگیرید. مقاومت سری روی تغذیه با مقاومت Pull-up خط داده یکسان نیست؛ بنابراین پیش از مونتاژ نهایی، اتصال تغذیه را با شماتیک واقعی ماژول بررسی کنید.

ماژول لمسی TTP223

پایه ماژولپایه Arduino
VCC3.3V یا 5V، متناسب با ماژول
GNDGND
SIGD2

اندازه‌گیری ولتاژ باتری

برای خواندن ولتاژ باتری از تقسیم مقاومتی متصل به ورودی A0 استفاده می‌شود. در نمونه مستندشده، دو مقاومت ۱۰ کیلو اهم به صورت سری بین مثبت باتری و GND قرار می‌گیرند و نقطه میانی به A0 متصل می‌شود.

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

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

روش کنترل دستگاه

نوع لمسعملکرد در حالت ساعتعملکرد در حالت کرونومتر
ضربه کوتاهجابه‌جایی میان ساعت، تاریخ و دما/رطوبتشروع یا توقف
دو ضربه سریعورود به حالت کرونومتربازگشت به حالت ساعت
لمس طولانی بین ۱ تا ۵ ثانیهمعکوس کردن رنگ نمایشگرریست کرونومتر
لمس ۵ ثانیه یا بیشترریست کامل میکروکنترلرریست کامل میکروکنترلر

کتابخانه‌های مورد نیاز

کتابخانه‌های زیر را از بخش Library Manager در Arduino IDE نصب کنید:

  • RTClib: کتابخانه Adafruit برای ارتباط با RTC
  • U8g2: مدیریت و رسم اطلاعات روی نمایشگر OLED
  • DHT sensor library: خواندن داده‌های حسگر DHT11
  • Wire: کتابخانه ارتباط I2C که به صورت پیش‌فرض در Arduino IDE وجود دارد

راه‌اندازی

  1. Arduino IDE را نصب کنید.
  1. کتابخانه‌های مورد نیاز را از Library Manager نصب کنید.
  1. مخزن پروژه را از GitHub دریافت کنید:

دریافت کد پروژه از GitHub

  1. فایل ARDUnia_SmartClock.ino را باز کنید.
  1. برد Arduino Nano یا Uno و پورت ارتباطی مناسب را انتخاب کنید.
  1. کد را روی برد آپلود کنید.
  1. پس از راه‌اندازی، پیام خوش‌آمدگویی نمایش داده می‌شود و سپس دستگاه وارد حالت ساعت خواهد شد.

تنظیمات نرم‌افزاری

در ابتدای برنامه، تعدادی از تنظیمات سخت‌افزاری و رفتاری با دستورهای #define مشخص شده‌اند؛ از جمله پایه ماژول لمسی، پایه داده حسگر DHT11، ورودی اندازه‌گیری باتری و ضریب تقسیم ولتاژ.

همچنین می‌توان مقادیر کالیبراسیون دما و رطوبت را متناسب با اندازه‌گیری مرجع تغییر داد.

عیب‌یابی

  • نمایشگر روشن نمی‌شود: تغذیه، اتصال SDA و SCL و سازگاری ولتاژ نمایشگر را بررسی کنید.
  • زمان پس از خاموشی حفظ نمی‌شود: باتری پشتیبان ماژول RTC و تنظیم اولیه زمان را بررسی کنید.
  • دما یا رطوبت صحیح نیست: زمان لازم برای قرائت حسگر و مقادیر کالیبراسیون را بررسی کنید.
  • لمس دوگانه تشخیص داده نمی‌شود: زمان‌بندی دو لمس را بررسی کنید.
  • درصد باتری نادرست است: مقادیر واقعی مقاومت‌های تقسیم ولتاژ و ضریب تعریف‌شده در برنامه را کنترل کنید.

تصاویر برد مدار چاپی

تصاویر بخش‌های مختلف PCB در مخزن پروژه قرار دارند:

مجوز و مشارکت

این پروژه تحت مجوز MIT منتشر شده است. استفاده، تغییر و بازتوزیع کد با رعایت شرایط مجوز امکان‌پذیر است.

مخزن پروژه:

ARDUnia-Smart-Clock در GitHub

جمع‌بندی

ARDUnia Smart Clock نمونه‌ای از ترکیب میکروکنترلر، نمایشگر OLED، ساعت بلادرنگ و حسگرهای محیطی در یک ابزار کوچک و کاربردی است. کنترل لمسی تک‌کلیدی و امکانات متنوع نمایش اطلاعات، آن را به پروژه‌ای مناسب برای یادگیری و توسعه سیستم‌های مبتنی بر Arduino تبدیل می‌کند.

قطعات و تجهیزات

  • Arduino Nano یا Uno
  • نمایشگر OLED 128×32 I2C
  • ماژول RTC DS1307
  • حسگر DHT11
  • ماژول لمسی TTP223
  • یک مقاومت ۱ کیلو اهم
  • دو مقاومت ۱۰ کیلو اهم
  • باتری لیتیومی ۳.۷ ولت اختیاری
  • سیم جامپر و برد آزمایشی

اتصالات و راه اندازی

  • OLED: پایه SDA به A4، پایه SCL به A5، تغذیه 5V و GND
  • RTC DS1307: پایه SDA به A4، پایه SCL به A5، تغذیه 5V و GND
  • DHT11: پایه DATA به D12، به همراه تغذیه و اتصال زمین مناسب
  • TTP223: پایه SIG به D2 و تغذیه متناسب با ماژول
  • تقسیم ولتاژ باتری: نقطه میانی دو مقاومت ۱۰ کیلو اهم به A0

برای راه‌اندازی، کتابخانه‌های RTClib، U8g2 و DHT Sensor Library را نصب کنید، فایل ARDUnia_SmartClock.ino را در Arduino IDE باز کنید و برنامه را روی Arduino Nano یا Uno آپلود کنید.

نکته: پیش از مونتاژ نهایی، اتصالات تغذیه حسگر، محدوده ولتاژ ورودی A0 و سازگاری ولتاژ نمایشگر و ماژول‌ها را بررسی کنید.

→ بازگشت به پروژه ها