طراحی و پیاده‌سازی کنترل پنل هوشمند برق خانگی با میکروکنترلر Holtek

“`html

کنترل پنل برق هوشمند خانگی با میکروکنترلر Holtek

طراحی و پیاده‌سازی کنترل پنل هوشمند برق خانگی با میکروکنترلر Holtek

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

هدف این پروژه، ایجاد سیستمی برای کنترل رله‌ها (به عنوان مثال، برای روشن/خاموش کردن وسایل برقی یا مدارهای روشنایی) از طریق ورودی دکمه‌ها و نمایش وضعیت بر روی یک نمایشگر E-paper کم‌مصرف است. این راهنما برای افراد با مهارت متوسط در الکترونیک و برنامه‌نویسی میکروکنترلرها طراحی شده است.

A. انتخاب برد، جایگزین‌ها، مقایسه و استدلال

برای پروژه‌هایی با محوریت میکروکنترلرهای Holtek، به جای برد توسعه آماده، معمولاً از خود تراشه میکروکنترلر و یک برد مدار چاپی (PCB) سفارشی یا برد بورد برای نمونه‌سازی اولیه استفاده می‌شود. با این حال، می‌توانیم یک میکروکنترلر مناسب از خانواده Holtek را انتخاب و مشخصات آن را بررسی کنیم.

انتخاب میکروکنترلر اصلی: Holtek HT66F0185

میکروکنترلر HT66F0185 از خانواده میکروکنترلرهای 8 بیتی Flash ساخت Holtek، گزینه‌ای عالی برای این پروژه است. این میکروکنترلر دارای ویژگی‌های زیر است که آن را برای کاربرد پنل برق خانگی و نمایشگر E-paper مناسب می‌سازد:

  • حافظه فلش: 4Kx16 Flash Program Memory، برای کد برنامه و داده‌ها.
  • حافظه رم: 256×8 RAM Data Memory، برای متغیرها.
  • GPIOs کافی: تا 18 پایه ورودی/خروجی همه منظوره (GPIO)، که برای کنترل رله‌ها (مثلاً 4 یا 8 رله) و خواندن ورودی دکمه‌ها کافی است.
  • پشتیبانی SPI: دارای رابط SPI برای ارتباط با نمایشگر E-paper.
  • تایمرها: تایمرهای چندمنظوره برای زمان‌بندی دقیق.
  • نوسان‌ساز داخلی: نوسان‌ساز RC داخلی با فرکانس بالا (HIRC) و پایین (LIRC)، نیاز به کریستال خارجی را برای بسیاری از کاربردها حذف می‌کند و هزینه و پیچیدگی را کاهش می‌دهد.
  • بسته بندی (Package): در بسته‌بندی‌های مختلف از جمله 20-pin SOP/SSOP و 24-pin SSOP موجود است که برای نمونه‌سازی و تولید مناسب است.

2 جایگزین برای Holtek HT66F0185

  1. Holtek HT66F019:

    این میکروکنترلر کمی قدرتمندتر از HT66F0185 است و معمولاً دارای حافظه بیشتری است (مثلاً 8Kx16 Flash، 512×8 RAM) و تعداد GPIOs بیشتری دارد (تا 22 پایه). در صورتی که نیاز به کنترل رله‌های بیشتر یا افزودن سنسورهای اضافی باشد، گزینه مناسبی است.

  2. Holtek HT66F0025:

    این یک گزینه کوچک‌تر و ارزان‌تر است. اگر پروژه شما نیاز به تعداد کمی رله (مثلاً 2 یا 3) و تنها یک یا دو دکمه دارد و نمایشگر E-paper بسیار ساده‌ای استفاده می‌کنید، HT66F0025 با حافظه و GPIOs کمتر می‌تواند انتخاب بهینه‌تری باشد. (2Kx15 Flash, 128×8 RAM, تا 10 GPIO)

جدول مقایسه میکروکنترلرهای Holtek

ویژگی Holtek HT66F0185 (پیشنهادی) Holtek HT66F019 (جایگزین قوی‌تر) Holtek HT66F0025 (جایگزین اقتصادی)
حافظه فلش برنامه 4K x 16 8K x 16 2K x 15
حافظه رم داده 256 x 8 512 x 8 128 x 8
تعداد GPIO تا 18 تا 22 تا 10
پشتیبانی SPI بله بله بله
تایمرها چندگانه (TM) چندگانه (TM) چندگانه (TM)
ADC 8 کانال 12-بیت 10 کانال 12-بیت 4 کانال 10-بیت
نوسان‌ساز داخلی HIRC/LIRC HIRC/LIRC HIRC/LIRC
بسته‌بندی SOP/SSOP 20/24 پین SOP/SSOP 24/28 پین SOP/SSOP 16/20 پین
قیمت نسبی متوسط بالاتر پایین‌تر

استدلال انتخاب HT66F0185

Holtek HT66F0185 تعادلی عالی بین قیمت، عملکرد و تعداد منابع (حافظه و GPIOs) برای این پروژه فراهم می‌کند. حافظه فلش و رم آن برای پیاده‌سازی منطق کنترل رله‌ها، مدیریت نمایشگر E-paper و نگهداری تنظیمات کافی است. وجود رابط SPI، ارتباط با نمایشگر E-paper را ساده می‌کند و تعداد GPIOs امکان کنترل حداقل 4 تا 6 رله و چندین دکمه را فراهم می‌آورد. نوسان‌ساز داخلی آن نیز به کاهش قطعات خارجی و هزینه‌های کلی کمک می‌کند، که برای یک محصول صنعتی در بازار، یک مزیت مهم محسوب می‌شود.

B. فهرست کامل قطعات (BOM) و سطوح قیمت

این لیست شامل قطعات لازم برای پیاده‌سازی یک کنترل پنل برق خانگی با 4 رله و نمایشگر E-paper است.

فهرست قطعات (BOM)

ردیف قطعه توضیحات تعداد
1 میکروکنترلر Holtek HT66F0185 مغز سیستم، 8-بیتی، Flash MCU 1
2 ماژول نمایشگر E-paper (مثلاً 2.13 اینچ) ماژول E-paper با رابط SPI، رزولوشن 122×250، کم‌مصرف 1
3 ماژول رله 4 کاناله 5V ماژول رله با ترانزیستور درایور داخلی، برای کنترل بارهای AC (تا 250V/10A) 1
4 دکمه فشاری (Push Button) معمولاً 4 عدد برای کنترل رله‌ها و 1 عدد برای منو/حالت 5
5 رگولاتور ولتاژ DC-DC (مثلاً LM2596) یا رگولاتور خطی (LM7805) برای تبدیل 12V/24V به 5V برای تغذیه میکروکنترلر و ماژول‌ها. (DC-DC کارآمدتر است) 1
6 خازن‌های فیلتر (الکترولیت و سرامیک) برای پایداری تغذیه (مثلاً 10uF, 0.1uF) مورد نیاز
7 مقاومت‌ها برای پول‌آپ/پول‌دان دکمه‌ها، محدودکننده جریان LED و سایر کاربردها (مثلاً 10kΩ, 1kΩ, 330Ω) مورد نیاز
8 دیود محافظ (مثلاً 1N4148) برای محافظت از ورودی‌های میکروکنترلر (اختیاری) مورد نیاز
9 کانکتورها (پین هدر، ترمینال پیچی) برای اتصال سیم‌ها، تغذیه و ورودی/خروجی مورد نیاز
10 سیم‌های جامپر/کابل برای اتصالات داخلی مورد نیاز
11 برد بورد (برای نمونه‌سازی) یا PCB سفارشی پایه نصب قطعات 1
12 منبع تغذیه AC-DC ایزوله شده (5V/1A) برای تغذیه کلی مدار از برق شهر 1

سه سطح قیمت

تخمین قیمت‌ها به شدت به منطقه جغرافیایی، تأمین‌کننده، حجم خرید و برند قطعات بستگی دارد. ارقام زیر صرفاً تخمینی برای یک دستگاه واحد هستند:

1. سطح اقتصادی (Low Cost) – حدود 250,000 تا 500,000 تومان

  • میکروکنترلر: Holtek HT66F0025 یا HT66F0185 (نسخه‌های استاندارد).
  • نمایشگر E-paper: ماژول‌های ساده‌تر و کوچک‌تر (مثلاً 1.54 اینچ) از برندهای عمومی.
  • رله: ماژول‌های رله عمومی با قطعات استاندارد.
  • قطعات پسیو: مقاومت‌ها و خازن‌های عمومی و ارزان‌قیمت.
  • منبع تغذیه: آداپتورهای 5V DC ارزان‌قیمت یا ماژول‌های کاهنده ولتاژ عمومی (مانند LM2596).
  • برد: برد بورد برای نمونه‌سازی، یا PCB ساده با حداقل لایه‌ها.

2. سطح متوسط (Medium Cost) – حدود 500,000 تا 1,000,000 تومان

  • میکروکنترلر: Holtek HT66F0185 یا HT66F019.
  • نمایشگر E-paper: ماژول‌های E-paper با کیفیت‌تر (مثلاً 2.13 یا 2.9 اینچ) از برندهای شناخته‌شده‌تر مانند Waveshare.
  • رله: ماژول‌های رله با کیفیت متوسط، رله‌های Omron یا Songle.
  • قطعات پسیو: مقاومت‌ها و خازن‌های با کیفیت خوب و تحمل مناسب.
  • منبع تغذیه: منبع تغذیه AC-DC ایزوله شده با کیفیت متوسط.
  • برد: PCB سفارشی با کیفیت مناسب.

3. سطح صنعتی/بالا (High End/Industrial) – بیش از 1,000,000 تومان

  • میکروکنترلر: Holtek HT66F019 یا سایر MCUهای صنعتی Holtek با ویژگی‌های پیشرفته‌تر (مثلاً با RTC داخلی یا حفاظت بیشتر).
  • نمایشگر E-paper: ماژول‌های E-paper با گواهینامه‌های صنعتی و عمر طولانی‌تر.
  • رله: رله‌های صنعتی با دوام بالا، با قابلیت اطمینان بالا و استاندارد‌های ایمنی (مانند Finder, Omron).
  • قطعات پسیو: قطعات با درجه حرارتی بالا، تحمل دقیق، و استانداردهای صنعتی (مثلاً از TDK, Murata, Yageo).
  • منبع تغذیه: ماژول‌های تغذیه AC-DC ایزوله شده با استاندارد‌های EMC و ایمنی بالا (مانند Mean Well).
  • برد: PCB چند لایه با کیفیت بالا، دارای پوشش محافظ (Conformal Coating) و طراحی مقاوم در برابر نویز.
  • قاب: قاب صنعتی با استاندارد IP (مقاوم در برابر گرد و غبار و رطوبت).
نکته مهم: این قیمت‌ها فقط شامل قطعات خام هستند و شامل هزینه طراحی PCB، مونتاژ، برنامه‌نویسی، تست، قاب و هزینه‌های توسعه نمی‌شوند. برای تولید صنعتی، هزینه‌ها ممکن است به دلیل حجم خرید و بهینه‌سازی متفاوت باشند.

C. سیم‌بندی دقیق، جدول پین‌مپ و توضیح زمین/ولتاژ

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

سیم‌بندی کلی مدار

  1. تغذیه میکروکنترلر و ماژول‌ها:
    • یک منبع تغذیه AC-DC ایزوله شده 5V/1A (یا بالاتر) به عنوان تغذیه اصلی سیستم استفاده می‌شود.
    • پایه VDD میکروکنترلر به 5V و VSS به GND متصل می‌شود.
    • ماژول E-paper، ماژول رله و دکمه‌ها نیز از همین منبع 5V و GND تغذیه می‌شوند.
  2. نمایشگر E-paper (رابط SPI):
    • SCK (Serial Clock) E-paper به پایه SCK میکروکنترلر (مثلاً PA.0)
    • MOSI (Master Out Slave In) E-paper به پایه MOSI میکروکنترلر (مثلاً PA.1)
    • CS (Chip Select) E-paper به یک پایه GPIO میکروکنترلر (مثلاً PA.2)
    • DC (Data/Command) E-paper به یک پایه GPIO میکروکنترلر (مثلاً PA.3)
    • RST (Reset) E-paper به یک پایه GPIO میکروکنترلر (مثلاً PA.4)
    • BUSY E-paper به یک پایه GPIO میکروکنترلر (مثلاً PA.5) (برای اطمینان از آماده بودن نمایشگر)
    • VCC E-paper به 3.3V یا 5V (بسته به ماژول، اغلب 3.3V برای داده، 5V برای تغذیه. در Holtek 5V، پس مطمئن شوید ماژول E-paper شما 5V tolerant است یا از لول شیفتر استفاده کنید).
    • GND E-paper به GND مدار.
  3. ماژول رله 4 کاناله:
    • VCC ماژول رله به 5V، GND ماژول رله به GND مدار.
    • پایه‌های IN1, IN2, IN3, IN4 ماژول رله به پایه‌های GPIO میکروکنترلر (مثلاً PB.0, PB.1, PB.2, PB.3).
    • سمت قدرت رله (ترمینال‌های NO/NC/COM) برای اتصال به بارهای AC (برق شهر) استفاده می‌شود. این بخش نیاز به دانش تخصصی برق و رعایت حداکثر ایمنی دارد.
  4. دکمه‌های فشاری:
    • هر دکمه بین یک پایه GPIO میکروکنترلر (مثلاً PC.0, PC.1, PC.2, PC.3, PC.4) و GND متصل می‌شود.
    • برای هر دکمه یک مقاومت پول‌آپ (مثلاً 10kΩ) از پایه GPIO به VDD (5V) متصل می‌شود تا در حالت عادی، پایه HIGH باشد و با فشار دکمه، LOW شود. یا می‌توانید از پول‌آپ داخلی میکروکنترلر استفاده کنید.

جدول پین‌مپ (Pin Map) پیشنهادی برای Holtek HT66F0185

پایه میکروکنترلر (مثال) عملکرد اتصال به قطعه توضیحات
PA.0 (SCK) SPI Clock E-paper SCK پایه کلاک SPI برای نمایشگر E-paper.
PA.1 (MOSI) SPI Data (Master Out) E-paper MOSI پایه داده SPI از MCU به نمایشگر.
PA.2 (CS) Chip Select E-paper CS فعال‌سازی نمایشگر E-paper برای ارتباط.
PA.3 (DC) Data/Command E-paper DC تشخیص داده یا دستور برای نمایشگر E-paper.
PA.4 (RST) Reset E-paper RST بازنشانی نمایشگر E-paper.
PA.5 (BUSY) Busy Status E-paper BUSY ورودی از نمایشگر برای اعلام مشغول بودن آن.
PB.0 GPIO Output Relay 1 (IN1) کنترل رله اول.
PB.1 GPIO Output Relay 2 (IN2) کنترل رله دوم.
PB.2 GPIO Output Relay 3 (IN3) کنترل رله سوم.
PB.3 GPIO Output Relay 4 (IN4) کنترل رله چهارم.
PC.0 GPIO Input Button 1 (Relay 1 Toggle) دکمه کنترل رله 1. (با پول‌آپ داخلی/خارجی)
PC.1 GPIO Input Button 2 (Relay 2 Toggle) دکمه کنترل رله 2. (با پول‌آپ داخلی/خارجی)
PC.2 GPIO Input Button 3 (Relay 3 Toggle) دکمه کنترل رله 3. (با پول‌آپ داخلی/خارجی)
PC.3 GPIO Input Button 4 (Relay 4 Toggle) دکمه کنترل رله 4. (با پول‌آپ داخلی/خارجی)
PC.4 GPIO Input Button 5 (Menu/Mode) دکمه برای تغییر حالت یا ورود به منو. (با پول‌آپ داخلی/خارجی)
VSS Ground مدار GND پایه زمین میکروکنترلر.
VDD Power Supply +5V پایه تغذیه میکروکنترلر.

توضیح زمین (Ground) و ولتاژ (Voltage)

  • GND (زمین):

    پایه زمین (VSS) مرجع ولتاژ صفر در مدار است. تمام قطعات باید زمین مشترکی داشته باشند تا بتوانند به درستی با هم ارتباط برقرار کنند. در این پروژه، تمام GNDهای میکروکنترلر، نمایشگر E-paper، ماژول رله و سمت منفی تغذیه (5V) باید به هم متصل شوند و یک نقطه زمین مشترک ایجاد کنند. اطمینان از یک زمین مشترک و قوی برای جلوگیری از نویز و عملکرد صحیح مدار حیاتی است.

  • VCC/VDD (ولتاژ تغذیه):

    پایه VDD در میکروکنترلر Holtek HT66F0185 ولتاژ تغذیه اصلی آن است که در این پروژه 5 ولت DC است. این 5 ولت توسط یک منبع تغذیه AC-DC ایزوله تامین می‌شود. تمامی قطعاتی که با 5 ولت کار می‌کنند (میکروکنترلر، ماژول رله)، از این ولتاژ تغذیه می‌کنند. در مورد E-paper، اغلب ماژول‌ها با 3.3 ولت برای پین‌های داده کار می‌کنند، اما تغذیه اصلی آنها می‌تواند 5 ولت باشد. بررسی دقیق دیتاشیت ماژول E-paper ضروری است. اگر ورودی داده E-paper 3.3V است و Holtek با 5V کار می‌کند، باید از مبدل سطح ولتاژ (Level Shifter) استفاده شود تا به نمایشگر آسیب نرسد. برای سادگی فرض می‌شود E-paper 5V tolerant است.

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

D. کد کامل (MVP + پیشرفته) + لیست کتابخانه‌ها + نکات پیکربندی

برای میکروکنترلرهای Holtek، برنامه‌نویسی معمولاً در محیط HT-IDE3000 با استفاده از زبان C و کامپایلر اختصاصی Holtek انجام می‌شود. کتابخانه‌ها معمولاً شامل فایل‌های هدر (.h) و گاهی فایل‌های سورس (.c) ارائه شده توسط Holtek یا جامعه کاربری هستند.

لیست کتابخانه‌ها (فایل‌های هدر Holtek)

  • HT66F0185.h: فایل هدر اصلی برای تعریف رجیسترها و بیت‌های میکروکنترلر HT66F0185.
  • (احتمالاً) spi.h یا spi_driver.h: فایل هدر برای توابع مربوط به رابط SPI.
  • (احتمالاً) gpio.h: فایل هدر برای توابع مربوط به مدیریت پایه‌های GPIO.
  • (سفارشی) e_paper_driver.h و e_paper_driver.c: فایل‌های سفارشی برای درایور نمایشگر E-paper (توابع اولیه سازی، ارسال دستور/داده، refresh و نوشتن متن/تصویر).

نکات پیکربندی HT-IDE3000

  1. نوع میکروکنترلر: در تنظیمات پروژه، حتماً HT66F0185 را انتخاب کنید.
  2. تنظیمات نوسان‌ساز:

    برای استفاده از نوسان‌ساز داخلی HIRC (High-speed Internal RC Oscillator)، باید فیوزبیت‌های مربوطه را در رجیسترهای پیکربندی (Configuration Registers) تنظیم کنید. معمولاً این کار از طریق محیط HT-IDE3000 (بخش “Configuration Bits” یا “Option Bytes”) یا با کدنویسی در ابتدای برنامه انجام می‌شود. برای HT66F0185، می‌توانید HIRC را روی 8MHz, 12MHz یا 16MHz تنظیم کنید.

    // مثال تنظیم نوسان‌ساز (ممکن است بسته به نسخه کامپایلر متفاوت باشد)
    // CONFIG1 = 0xXX; // تنظیمات فیوزبیت ها برای انتخاب HIRC به عنوان منبع کلاک سیستم
    // CLKSEL = 0b000; // انتخاب HIRC به عنوان منبع کلاک
    // HIRCEN = 1;     // فعال سازی HIRC
    // WDTCR = 0b10100101; // غیرفعال کردن Watchdog Timer یا تنظیم آن
                    
  3. تنظیمات ورودی/خروجی (GPIO):

    هر پایه GPIO باید به صورت ورودی (Input) یا خروجی (Output) پیکربندی شود و در صورت نیاز، قابلیت پول‌آپ داخلی آن فعال شود. رجیسترهای DDR (Data Direction Register) برای تنظیم جهت (ورودی/خروجی) و PPU (Port Pull-up) برای فعال‌سازی پول‌آپ داخلی استفاده می‌شوند.

    // مثال تنظیم GPIO (برای پورت A به عنوان خروجی)
    // PADA = 0x00; // مقدار اولیه پورت A را صفر می‌کند
    // DDRA = 0xFF; // تمام پایه‌های پورت A را به عنوان خروجی تنظیم می‌کند
    // PPUA = 0x00; // پول‌آپ داخلی پورت A را غیرفعال می‌کند
                    
  4. تنظیمات SPI:

    رابط SPI باید با سرعت مناسب (که با نمایشگر E-paper سازگار باشد) و حالت کلاک (CPOL, CPHA) پیکربندی شود.

کد کامل (MVP – Minimum Viable Product)

این کد، عملکرد پایه را شامل می‌شود: نمایش یک پیام روی E-paper و کنترل یک رله با یک دکمه. درایور E-paper را باید خودتان پیاده‌سازی کنید یا از یک کتابخانه موجود استفاده کنید.


// --- HT66F0185_MVP_Main.c ---
#include <HT66F0185.h> // فایل هدر میکروکنترلر

// تعریف پایه‌های SPI و کنترل E-paper
#define EPAPER_SCK  _pa0
#define EPAPER_MOSI _pa1
#define EPAPER_CS   _pa2
#define EPAPER_DC   _pa3
#define EPAPER_RST  _pa4
#define EPAPER_BUSY _pa5

// تعریف پایه رله و دکمه
#define RELAY1_PIN _pb0
#define BUTTON1_PIN _pc0

// --- توابع کمکی (برای E-paper و تاخیر) ---
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 1000; j++) { // Loop تقریبی برای 1 میلی‌ثانیه، نیاز به کالیبراسیون
            _nop(); // No operation
        }
    }
}

// توابع اولیه E-paper (نیاز به پیاده‌سازی کامل)
void Epaper_Init(void);
void Epaper_Send_Command(unsigned char command);
void Epaper_Send_Data(unsigned char data);
void Epaper_Clear(void);
void Epaper_Display_String(const char* text, unsigned int x, unsigned int y);
void Epaper_Refresh(void);

// --- پیاده‌سازی توابع E-paper (نمونه بسیار ساده، برای راه اندازی اولیه) ---
// در واقعیت، این توابع بسیار پیچیده‌تر و بر اساس دیتاشیت E-paper شما خواهند بود.
// این فقط یک ساختار برای درک کلی است.
void Epaper_Init(void) {
    // تنظیم پایه‌های SPI به عنوان خروجی
    _ddra0 = 1; _ddra1 = 1; _ddra2 = 1; _ddra3 = 1; _ddra4 = 1; // SCK, MOSI, CS, DC, RST به عنوان خروجی

    // تنظیمات اولیه SPI (بسیار ساده شده)
    _spi_fs = 0; // Fsys/4
    _spi_en = 1; // فعال سازی SPI

    EPAPER_RST = 0; // Reset
    delay_ms(20);
    EPAPER_RST = 1;
    delay_ms(20);

    // ارسال دستورات اولیه E-paper (مثلاً Power On, VCOM, Display Resolution)
    // این قسمت باید با دیتاشیت ماژول E-paper شما مطابقت داشته باشد.
    Epaper_Send_Command(0x01); // Power Setting
    Epaper_Send_Data(0x03);
    Epaper_Send_Data(0x00);
    Epaper_Send_Data(0x2B);
    Epaper_Send_Data(0x2B);
    Epaper_Send_Data(0x09);
    Epaper_Send_Data(0x00);

    // ... ادامه تنظیمات بر اساس دیتاشیت E-paper
}

void Epaper_Send_Command(unsigned char command) {
    EPAPER_DC = 0; // Command mode
    EPAPER_CS = 0; // Select E-paper
    _spi_dr = command; // Send command via SPI
    while(!_spi_if); // Wait for transmission complete
    _spi_if = 0; // Clear interrupt flag
    EPAPER_CS = 1; // Deselect E-paper
}

void Epaper_Send_Data(unsigned char data) {
    EPAPER_DC = 1; // Data mode
    EPAPER_CS = 0; // Select E-paper
    _spi_dr = data; // Send data via SPI
    while(!_spi_if); // Wait for transmission complete
    _spi_if = 0; // Clear interrupt flag
    EPAPER_CS = 1; // Deselect E-paper
}

void Epaper_Clear(void) {
    // تابعی برای پاک کردن صفحه نمایش E-paper
    // پیاده‌سازی واقعی نیاز به ارسال دستورات خاص و پر کردن با داده‌های سفید دارد
}

void Epaper_Display_String(const char* text, unsigned int x, unsigned int y) {
    // تابعی برای نمایش رشته روی E-paper
    // پیاده‌سازی واقعی شامل ارسال دستورات برای موقعیت یابی و سپس داده‌های کاراکتر است.
    // این بسیار پیچیده‌تر است و نیاز به فونت و تبدیل کاراکتر به پیکسل دارد.
    // برای MVP، می‌توانیم یک پیام ثابت را در اینجا شبیه سازی کنیم.
}

void Epaper_Refresh(void) {
    // تابعی برای رفرش کردن نمایشگر E-paper (اعمال تغییرات)
    // نیاز به ارسال دستورات خاص رفرش به E-paper
    Epaper_Send_Command(0x12); // Display Refresh (بسته به E-paper)
    delay_ms(100); // منتظر بمانید تا E-paper رفرش شود
    while(EPAPER_BUSY == 0); // Wait until BUSY signal is HIGH (not busy) - بسته به E-paper، ممکن است LOW فعال باشد
}

// --- Main Program ---
void main(void) {
    // پیکربندی نوسان‌ساز (مثلاً HIRC 16MHz)
    // تنظیمات دقیق باید بر اساس دیتاشیت HT66F0185 و HT-IDE3000 انجام شود.
    // _hirc = 1; // HIRC enable
    // _scc = 0b00000000; // انتخاب HIRC به عنوان منبع کلاک
    // _wdte = 0; // Watchdog timer disable (برای سادگی)

    // تنظیم جهت پایه‌ها (Input/Output)
    _ddra = 0x3F; // PA0-PA5 به عنوان خروجی (SPI, CS, DC, RST, BUSY - اگر BUSY خروجی باشد)
    _ddrb = 0x01; // PB0 به عنوان خروجی (برای RELAY1)
    _ddrc = 0x00; // PC0 به عنوان ورودی (برای BUTTON1)

    // فعال کردن پول‌آپ داخلی برای دکمه (اختیاری، اگر مقاومت پول‌آپ خارجی ندارید)
    _ppuc0 = 1; // Pull-up برای PC0 فعال

    // مقدار اولیه رله: خاموش
    RELAY1_PIN = 0; // فرض می‌کنیم HIGH روشن می‌کند و LOW خاموش

    Epaper_Init();
    Epaper_Clear(); // پاک کردن صفحه
    Epaper_Display_String("Loading...", 10, 10); // نمایش پیام اولیه
    Epaper_Refresh(); // رفرش نمایشگر

    _pa5 = 1; // BUSY pin assumed to be HIGH when not busy, LOW when busy.
              // This line is for testing if it's connected to MCU.
              // In actual use, Epaper_BUSY should be input. If it's input, _ddra5 should be 0.
              // Let's assume for MVP _pa5 is an output controlled for testing.

    delay_ms(2000); // Wait for 2 seconds

    Epaper_Clear();
    Epaper_Display_String("Smart Panel Ready!", 10, 10);
    Epaper_Refresh();

    char relay_status_str[20];
    unsigned char relay_state = 0; // 0 for OFF, 1 for ON

    while (1) {
        if (BUTTON1_PIN == 0) { // اگر دکمه فشرده شده (با پول‌آپ، LOW فعال است)
            delay_ms(50); // Debounce
            if (BUTTON1_PIN == 0) { // بعد از دی‌باونس همچنان فشرده است
                relay_state = !relay_state; // تغییر وضعیت رله
                if (relay_state) {
                    RELAY1_PIN = 1; // روشن کردن رله
                    Epaper_Display_String("Relay 1: ON", 10, 30);
                } else {
                    RELAY1_PIN = 0; // خاموش کردن رله
                    Epaper_Display_String("Relay 1: OFF", 10, 30);
                }
                Epaper_Refresh();
                while (BUTTON1_PIN == 0); // منتظر بمانید تا دکمه رها شود
            }
        }
        delay_ms(100); // زمان تاخیر کوتاه برای کنترل حلقه
    }
}
توجه: بخش درایور E-paper در کد بالا بسیار ساده و نمادین است. پیاده‌سازی کامل آن نیاز به مطالعه دقیق دیتاشیت ماژول E-paper خاص شما، فهمیدن دستورات آن (مانند power-on, power-off, data transfer modes, update sequence) و نوشتن توابع پیچیده‌تر برای کنترل پیکسل‌ها و فونت‌ها دارد. اغلب این ماژول‌ها کتابخانه‌هایی برای Arduino/ESP دارند که می‌توانید منطق آن را به C برای Holtek منتقل کنید.

کد پیشرفته (مثال قابلیت‌ها)

برای نسخه پیشرفته، می‌توانیم قابلیت‌های زیر را اضافه کنیم:

  • کنترل چندین رله: استفاده از آرایه‌ها برای مدیریت وضعیت رله‌ها و دکمه‌ها.
  • منوی E-paper: پیاده‌سازی یک سیستم منوی ساده برای انتخاب رله، تنظیم زمان‌بندی یا مشاهده وضعیت.
  • زمان‌بندی (Scheduler): استفاده از تایمرهای میکروکنترلر برای روشن/خاموش کردن رله‌ها در زمان‌های خاص (نیاز به RTC خارجی برای دقت بالا).
  • حالت‌های مختلف: حالت دستی، حالت زمان‌بندی شده، حالت خودکار.
  • ذخیره تنظیمات: استفاده از حافظه EEPROM داخلی Holtek (در صورت وجود) یا Flash برای ذخیره تنظیمات رله و زمان‌بندی حتی پس از قطع برق.

// --- HT66F0185_Advanced_Main.c ---
#include <HT66F0185.h>
// Include custom E-paper driver, assuming it's in "epaper_driver.h"
#include "epaper_driver.h"
#include "menu_system.h" // For advanced menu navigation

// تعریف تعداد رله‌ها و دکمه‌ها
#define NUM_RELAYS 4
#define NUM_BUTTONS 5 // 4 برای رله‌ها + 1 برای منو/حالت

// آرایه برای پایه‌های رله
__sbit relay_pins[NUM_RELAYS] = {_pb0, _pb1, _pb2, _pb3};
// آرایه برای پایه‌های دکمه
__sbit button_pins[NUM_BUTTONS] = {_pc0, _pc1, _pc2, _pc3, _pc4};

unsigned char relay_states[NUM_RELAYS]; // 0=OFF, 1=ON
unsigned char current_menu_item = 0;
unsigned char current_mode = MANUAL_MODE; // MANUAL_MODE, SCHEDULE_MODE

// توابع زمان‌بندی (اگر RTC یا تایمرهای دقیق استفاده شود)
void setup_scheduler(void);
void check_schedule(void);

// --- Main Program ---
void main(void) {
    // ... تنظیمات نوسان‌ساز، WDT و ... مانند MVP ...

    // تنظیم جهت پایه‌ها
    _ddra = 0x3F; // E-paper SPI & control pins
    _ddrb = 0x0F; // PB0-PB3 برای 4 رله خروجی
    _ddrc = 0x00; // PC0-PC4 برای 5 دکمه ورودی

    // فعال کردن پول‌آپ داخلی برای تمام دکمه‌ها
    _ppuc = 0x1F; // فعال کردن پول‌آپ برای PC0 تا PC4

    // مقدار اولیه رله‌ها: همه خاموش
    for (unsigned char i = 0; i < NUM_RELAYS; i++) {
        relay_states[i] = 0;
        relay_pins[i] = 0; // خاموش کردن رله فیزیکی
    }

    Epaper_Init();
    Epaper_Clear();
    Epaper_Display_String("Smart Panel Initializing...", 10, 10);
    Epaper_Refresh();
    delay_ms(2000);

    // بارگذاری تنظیمات از EEPROM (اگر موجود باشد)
    // load_settings_from_eeprom();

    // Setup Timer for basic system events / debouncing
    // setup_timer_for_debounce();

    while (1) {
        // --- مدیریت دکمه‌ها ---
        for (unsigned char i = 0; i < NUM_BUTTONS; i++) {
            if (button_pins[i] == 0) { // اگر دکمه فشرده شده است
                delay_ms(50); // Debounce
                if (button_pins[i] == 0) {
                    if (i < NUM_RELAYS) { // اگر یکی از دکمه‌های رله است
                        relay_states[i] = !relay_states[i]; // تغییر وضعیت رله
                        relay_pins[i] = relay_states[i]; // اعمال به پایه رله
                        update_epaper_relay_status(i, relay_states[i]); // به‌روزرسانی E-paper
                    } else { // دکمه منو/حالت
                        handle_menu_button(); // تابع برای مدیریت منو
                    }
                    while (button_pins[i] == 0); // منتظر رها شدن دکمه
                }
            }
        }

        // --- به‌روزرسانی E-paper ---
        // این بخش باید با توجه به حالت فعلی (منو، نمایش وضعیت) نمایش داده‌ها را مدیریت کند
        // مثلاً: display_current_menu_or_status();
        // هر چند ثانیه یکبار یا با تغییر وضعیت E-paper را رفرش کنید (E-paper مصرف کمتری دارد اگر کمتر رفرش شود)
        // Epaper_Refresh(); // فقط زمانی که نیاز است!

        // --- اجرای زمان‌بندی (اگر فعال باشد) ---
        // check_schedule();

        delay_ms(50); // تاخیر کوتاه برای جلوگیری از مصرف بیش از حد CPU
    }
}

// توابع نمونه برای پیاده‌سازی در epaper_driver.h/c
// void epaper_init();
// void epaper_clear();
// void epaper_display_text(const char* text, int x, int y, Font_Size size, Color color);
// void epaper_draw_line(int x1, int y1, int x2, int y2, Color color);
// void epaper_refresh_partial();
// void epaper_refresh_full();

// توابع نمونه برای menu_system.h/c
// void handle_menu_button();
// void display_current_menu_or_status();
// void navigate_menu(int direction);
نکات مهم برای کدنویسی در Holtek:

  • رجیسترها: برای دسترسی به امکانات سخت‌افزاری (GPIO, SPI, Timers)، باید رجیسترهای مخصوص میکروکنترلر را مستقیماً دستکاری کنید. نام این رجیسترها در فایل HT66F0185.h تعریف شده‌اند.
  • وقفه (Interrupts): برای کاربردهای پیشرفته‌تر (مثل خواندن دکمه‌ها بدون تاخیر یا زمان‌بندی دقیق)، استفاده از وقفه‌ها توصیه می‌شود. Holtek دارای سیستم وقفه‌ی داخلی برای تایمرها، GPIOs و پریفرال‌ها است.
  • بهینه‌سازی: برای حافظه و سرعت، کدهای خود را بهینه بنویسید. Holtek MCUها منابع محدودی دارند.
  • Power Saving: برای E-paper و کاربردهای پنل خانگی، مدیریت مصرف انرژی مهم است. Holtek دارای حالت‌های کم‌مصرف (Sleep/Halt) است که می‌توانید از آنها استفاده کنید.

E. راهنمای نصب IDE و آپلود

برای برنامه‌نویسی میکروکنترلرهای Holtek، از محیط توسعه اختصاصی آنها به نام HT-IDE3000 استفاده می‌شود. برای آپلود کد نیز به یک برنامه نویس (Programmer) سخت‌افزاری نیاز دارید.

1. نصب HT-IDE3000

  1. دانلود: به وب‌سایت رسمی Holtek (www.holtek.com) مراجعه کنید. در بخش “Software” یا “Development Tools”، HT-IDE3000 را پیدا کرده و آخرین نسخه آن را دانلود کنید.
  2. اجرا: فایل نصب (.exe) را اجرا کنید. دستورالعمل‌های نصب را دنبال کنید. معمولاً نصب شامل کامپایلر C (HT-C Compiler), HT-IDE و ابزارهای جانبی است.
  3. درایورها: اطمینان حاصل کنید که در طول نصب، درایورهای مربوط به ابزارهای پروگرامینگ (مانند e-Link یا e-WriterPro) نیز نصب شوند. این درایورها برای شناسایی پروگرامر توسط کامپیوتر ضروری هستند.

2. نصب پروگرامر (مثلاً e-Link)

Holtek از پروگرامرهای سخت‌افزاری مانند e-Link یا e-WriterPro استفاده می‌کند. e-Link برای دیباگ و برنامه‌ریزی روی برد (In-Circuit Programming) مناسب است.

  1. اتصال: کابل USB پروگرامر e-Link را به کامپیوتر خود متصل کنید.
  2. تشخیص درایور: اگر درایورها به درستی در مرحله نصب HT-IDE3000 نصب شده باشند، ویندوز باید پروگرامر را شناسایی کند. در غیر این صورت، به Device Manager بروید و درایور را به صورت دستی از مسیر نصب HT-IDE3000 (معمولاً در زیر پوشه Drivers) بروزرسانی کنید.

3. آپلود کد (Program/Debug)

  1. اتصال سخت‌افزاری:
    • پروگرامر e-Link را به پورت ISP (In-System Programming) روی برد میکروکنترلر Holtek خود (یا به پایه‌های مخصوص ISP/ICP روی PCB سفارشی) متصل کنید. این پایه‌ها معمولاً شامل PCLK, PDAT, VDD, VSS و گاهی RST هستند.
    • مطمئن شوید که برد میکروکنترلر شما به درستی تغذیه می‌شود (5V).
  2. ساخت پروژه در HT-IDE3000:
    • HT-IDE3000 را باز کنید.
    • به “File” -> “New” -> “Project” بروید.
    • نوع میکروکنترلر (HT66F0185) و کامپایلر (HT-C) را انتخاب کنید.
    • فایل‌های سورس .c و .h خود را به پروژه اضافه کنید.
  3. کامپایل (Build Project):
    • پس از نوشتن کد، بر روی “Build” یا “Compile” کلیک کنید (معمولاً آیکون چکش یا از منوی “Project”).
    • مطمئن شوید که هیچ خطایی وجود ندارد و فایل .hex (یا فرمت قابل برنامه‌ریزی دیگر) با موفقیت تولید می‌شود.
  4. پروگرامینگ (Upload):
    • پس از کامپایل موفق، از منوی “Debug” گزینه “Connect” را انتخاب کنید تا IDE به پروگرامر e-Link متصل شود.
    • سپس از منوی “Debug” گزینه “Program” یا “Run” را انتخاب کنید. این کار باعث می‌شود فایل کامپایل شده (Firmware) روی میکروکنترلر آپلود شود.
    • می‌توانید از حالت “Debug” نیز استفاده کنید که به شما امکان می‌دهد کد را خط به خط اجرا کرده، رجیسترها و متغیرها را مشاهده کنید و نقاط توقف (Breakpoints) تنظیم کنید.
نکات:

  • همیشه قبل از آپلود، از اتصال صحیح سیم‌ها و تغذیه مطمئن شوید.
  • اگر میکروکنترلر شناسایی نشد، درایورهای پروگرامر را بررسی کنید یا اتصال ISP را چک کنید.
  • برخی از میکروکنترلرهای Holtek نیاز به تنظیمات خاصی در رجیسترهای پیکربندی (Configuration Options) دارند که قبل از کامپایل باید در HT-IDE3000 تنظیم شوند.

F. چک‌لیست عیب‌یابی، خطاهای رایج و تست مرحله‌ای

چک‌لیست عیب‌یابی

  1. تغذیه:
    • آیا ولتاژ 5V در پایه‌های VDD میکروکنترلر و VCC ماژول‌ها حاضر است؟
    • آیا زمین (GND) مشترک است و به درستی متصل شده است؟
    • آیا منبع تغذیه جریان کافی را برای تمام قطعات تامین می‌کند؟ (مخصوصاً برای رله‌ها هنگام فعال شدن)
  2. اتصالات سیم‌کشی:
    • آیا همه پایه‌ها طبق Pin Map به درستی متصل شده‌اند؟ (میکروکنترلر به E-paper، میکروکنترلر به رله، میکروکنترلر به دکمه‌ها)
    • آیا اتصالات محکم هستند و قطع شدگی ندارند؟
    • آیا قطبیت قطعات (مانند دیودها و خازن‌های الکترولیت) صحیح است؟
  3. میکروکنترلر:
    • آیا میکروکنترلر داغ نمی‌شود؟ (نشانه‌ای از اتصال کوتاه)
    • آیا نوسان‌ساز داخلی به درستی پیکربندی شده است؟ (اگر از کریستال خارجی استفاده می‌کنید، آیا به درستی متصل شده و کار می‌کند؟)
    • آیا رجیسترهای DDR (جهت ورودی/خروجی) و PPU (پول‌آپ داخلی) به درستی تنظیم شده‌اند؟
  4. پروگرامینگ:
    • آیا HT-IDE3000 میکروکنترلر را شناسایی می‌کند؟
    • آیا آپلود کد با موفقیت انجام می‌شود؟ (بررسی پیام‌های خطا در IDE)
    • آیا فیوزبیت‌های پیکربندی (مانند انتخاب نوسان‌ساز، WDT) به درستی تنظیم شده‌اند؟

خطاهای رایج

  • میکروکنترلر برنامه‌ریزی نمی‌شود:
    • علت: سیم‌کشی ISP اشتباه، تغذیه نامناسب، درایور پروگرامر نصب نشده، میکروکنترلر معیوب.
    • راه حل: بررسی اتصالات ISP (PCLK, PDAT, VDD, VSS, RST)، اطمینان از 5V تغذیه، نصب مجدد درایور پروگرامر، تست با میکروکنترلر دیگر.
  • E-paper چیزی نمایش نمی‌دهد:
    • علت: سیم‌کشی SPI اشتباه، پایه‌های CS, DC, RST, BUSY اشتباه متصل شده‌اند، ولتاژ تغذیه E-paper نادرست، درایور E-paper در کد اشتباه است، رفرش انجام نشده.
    • راه حل: بررسی دقیق سیم‌کشی SPI و کنترل، اطمینان از ولتاژ صحیح تغذیه E-paper، دیباگ کد درایور E-paper، فراخوانی تابع Epaper_Refresh().
  • رله فعال نمی‌شود:
    • علت: سیم‌کشی پایه IN رله اشتباه، تغذیه ماژول رله قطع است، کد میکروکنترلر سیگنال صحیح را نمی‌فرستد، رله معیوب است.
    • راه حل: بررسی سیم‌کشی IN رله به GPIO میکروکنترلر، بررسی تغذیه 5V ماژول رله، اندازه‌گیری ولتاژ روی پایه GPIO میکروکنترلر با مولتی‌متر هنگام فعال‌سازی در کد.
  • دکمه‌ها کار نمی‌کنند:
    • علت: سیم‌کشی اشتباه، مقاومت پول‌آپ/پول‌دان فراموش شده، پول‌آپ داخلی فعال نشده، کد دکمه را نمی‌خواند (مثلاً دی‌باونس اشتباه).
    • راه حل: بررسی سیم‌کشی دکمه به GPIO و GND، اطمینان از وجود مقاومت پول‌آپ خارجی یا فعال‌سازی پول‌آپ داخلی در کد، دیباگ بخش خواندن دکمه در کد.

تست مرحله‌ای

  1. تست تغذیه:

    قبل از اتصال میکروکنترلر، فقط منبع تغذیه 5V را وصل کنید و ولتاژ خروجی را با مولتی‌متر اندازه‌گیری کنید. مطمئن شوید که 5V پایدار است.

  2. تست میکروکنترلر و LED (Blink Test):

    ابتدا یک کد بسیار ساده بنویسید که یک LED را روی یکی از پایه‌های GPIO میکروکنترلر (مثلاً PB0) چشمک‌زن کند. این کار به شما اطمینان می‌دهد که میکروکنترلر برنامه‌ریزی می‌شود و نوسان‌ساز آن کار می‌کند.

  3. تست دکمه:

    یک دکمه را به میکروکنترلر متصل کنید و کد را به گونه‌ای بنویسید که وضعیت دکمه را بخواند و مثلاً یک LED را روشن/خاموش کند. (مثلاً با فشار دکمه، LED روشن شود و با رها کردن، خاموش). سپس کد را برای تست پول‌آپ و دی‌باونس گسترش دهید.

  4. تست E-paper:

    E-paper را متصل کرده و از توابع Epaper_Init() و Epaper_Clear() و Epaper_Display_String() استفاده کنید تا یک متن ساده را روی نمایشگر نشان دهید. مطمئن شوید که Epaper_Refresh() فراخوانی می‌شود.

  5. تست رله:

    ماژول رله را متصل کنید. یک LED با مقاومت را به جای بار AC به خروجی COM/NO رله متصل کنید (با تغذیه 5V) و کدی بنویسید که رله را فعال/غیرفعال کند تا عملکرد آن را بررسی کنید. در این مرحله به برق شهر وصل نکنید!

  6. یکپارچه‌سازی:

    پس از اطمینان از عملکرد هر بخش به صورت جداگانه، کد اصلی را با تمام بخش‌ها آپلود کرده و عملکرد کلی سیستم را تست کنید (دکمه‌ها، E-paper، رله‌ها). در این مرحله نیز با بار واقعی AC کار نکنید.

  7. تست با بار واقعی (با رعایت کامل ایمنی):

    پس از اطمینان کامل از صحت عملکرد مدار و کد، با رعایت حداکثر ایمنی و ایزولاسیون، رله‌ها را به بارهای AC متصل کرده و عملکرد سیستم را تست کنید.

G. توان و ایمنی (مصرف، تغذیه، ESD)

مصرف توان

  • میکروکنترلر HT66F0185: مصرف جریان در حالت فعال (Active Mode) معمولاً در حد چند میلی‌آمپر است (بسته به فرکانس کلاک). در حالت‌های کم‌مصرف (Sleep/Halt)، این مقدار به میکروآمپر یا نانوآمپر کاهش می‌یابد.
  • نمایشگر E-paper: این نوع نمایشگرها مصرف توان بسیار پایینی دارند. عمده مصرف آنها در زمان “رفرش” (Refresh) صفحه است (حدود 20-50 میلی‌آمپر برای چند ده تا چند صد میلی‌ثانیه). در حالت نمایش ثابت، مصرف آنها تقریباً صفر است.
  • ماژول رله: هر رله (کویل) در هنگام فعال شدن، بسته به نوع آن، حدود 20 تا 100 میلی‌آمپر جریان مصرف می‌کند. ماژول 4 کاناله ممکن است تا 400 میلی‌آمپر در صورت فعال بودن همزمان تمام رله‌ها مصرف کند. این بزرگترین مصرف کننده جریان در مدار خواهد بود.
  • دکمه‌ها و مقاومت‌ها: مصرف بسیار ناچیزی دارند، در حد میکروآمپر.
  • مصرف کل: در حالت عادی و بدون رفرش E-paper و با رله‌های خاموش، مصرف کل مدار می‌تواند کمتر از 20 میلی‌آمپر باشد. اما در لحظه رفرش E-paper و با فعال بودن همزمان چند رله، این مقدار می‌تواند به 500 میلی‌آمپر یا بیشتر برسد.

تغذیه

با توجه به مصرف جریان (مخصوصاً رله‌ها)، یک منبع تغذیه AC-DC ایزوله شده 5V با حداقل جریان 1 آمپر توصیه می‌شود. انتخاب منبع تغذیه ایزوله برای کاربردهای متصل به برق شهر بسیار حیاتی است تا از خطر شوک الکتریکی محافظت شود.

  • ورودی: 220V AC (برق شهری).
  • خروجی: 5V DC، حداقل 1A.
  • نوع: باید دارای ایزولاسیون مناسب بین ورودی AC و خروجی DC باشد و استانداردهای ایمنی را رعایت کند. ماژول‌های کاهنده AC-DC آماده در بازار موجود هستند.
  • فیلترینگ: استفاده از خازن‌های فیلتر مناسب (الکترولیت بزرگ در ورودی و خروجی رگولاتور، و خازن‌های سرامیکی کوچک نزدیک به هر قطعه دیجیتال) برای پایداری ولتاژ و کاهش نویز ضروری است.

ایمنی (Safety)

با توجه به سناریوی “پنل برق خانگی” که با ولتاژهای بالا (AC) سروکار دارد، رعایت ایمنی در اولویت است:

  1. ایزولاسیون:
    • تمام مدارهای ولتاژ پایین (میکروکنترلر، E-paper، دکمه‌ها) باید کاملاً از مدارهای ولتاژ بالا (سمت قدرت رله‌ها) ایزوله شوند. این ایزولاسیون توسط خود رله‌ها (بین کویل و کنتاکت‌ها) و همچنین طراحی فیزیکی برد (فاصله کافی بین ترک‌های ولتاژ بالا و پایین) تامین می‌شود.
    • استفاده از اپتوکوپلرها برای ایزوله کردن ورودی دکمه‌ها در صورت نزدیک بودن به بخش AC توصیه می‌شود.
  2. حفاظت در برابر جریان اضافی (Overcurrent Protection):
    • استفاده از فیوز مناسب در ورودی AC مدار برای محافظت در برابر اتصال کوتاه یا اضافه بار.
  3. پوشش محافظ (Enclosure):
    • قرار دادن تمام مدار در یک جعبه یا قاب مقاوم و غیررسانا (پلاستیکی) با درجه حفاظت IP مناسب، برای جلوگیری از دسترسی تصادفی به قطعات الکتریکی و محافظت در برابر گرد و غبار و رطوبت.
  4. فاصله‌گذاری (Creepage and Clearance):
    • در طراحی PCB، باید فواصل کافی بین ترک‌های ولتاژ بالا و ولتاژ پایین، و بین ترک‌های ولتاژ بالا (مثلاً فاز و نول) رعایت شود تا از بروز قوس الکتریکی و اتصال کوتاه جلوگیری شود. به استانداردهای صنعتی (مانند IEC 60950 یا UL 60950) مراجعه کنید.
  5. اتصال زمین (Grounding):
    • اگر از قاب فلزی استفاده می‌کنید، باید آن را به زمین حفاظتی (Safety Ground) متصل کنید. در این پروژه که با برق AC سروکار داریم، داشتن یک زمین مشترک و قوی بسیار مهم است.

ESD (Electrostatic Discharge) – تخلیه الکترواستاتیک

ESD می‌تواند به قطعات الکترونیکی آسیب جدی وارد کند، به خصوص در محیط‌های صنعتی یا در حین نصب و سرویس:

  • مقاومت ورودی: استفاده از مقاومت‌های سری کوچک (مثلاً 100 اهم) در ورودی پایه‌های میکروکنترلر که در معرض تماس کاربر هستند (مانند دکمه‌ها) می‌تواند جریان ESD را محدود کند.
  • دیودهای محافظ: اضافه کردن دیودهای محافظ (مانند دیودهای زنر یا TVS) در ورودی پایه‌های GPIO که به بیرون از برد می‌روند، برای تخلیه ولتاژهای بالای ناشی از ESD به زمین یا VDD. Holtek MCUها معمولاً دارای دیودهای محافظ داخلی هستند، اما برای حفاظت بیشتر در محیط‌های خشن، دیودهای خارجی توصیه می‌شوند.
  • طراحی PCB: رعایت اصول طراحی PCB برای ESD، مانند استفاده از صفحات زمین (Ground Planes)، مسیرهای کوتاه برای سیگنال‌ها و حفاظت از لبه‌های برد.
  • کنترل محیط: هنگام کار با برد، استفاده از دستبند ESD و ابزارهای آنتی‌استاتیک برای جلوگیری از آسیب ESD.

H. پیشنهاد ارتقا و جایگزین‌ها

پیشنهاد ارتقا (Upgrade Suggestions)

  1. ماژول زمان واقعی (RTC – Real-Time Clock):

    برای زمان‌بندی دقیق رله‌ها (روشن/خاموش شدن در ساعت‌های مشخص)، اضافه کردن یک ماژول RTC (مانند DS1307 یا DS3231) از طریق رابط I2C یا SPI ضروری است. RTC دارای باتری پشتیبان است و زمان را حتی پس از قطع برق اصلی حفظ می‌کند.

  2. پایش مصرف انرژی:

    اضافه کردن سنسورهای جریان و ولتاژ (مانند ACS712 برای جریان یا ماژول‌های پایش توان مانند PZEM-004T یا ATM90E26) برای اندازه‌گیری مصرف لحظه‌ای و کلی انرژی هر مدار. این اطلاعات را می‌توان روی E-paper نمایش داد یا برای تجزیه و تحلیل به یک سیستم مرکزی ارسال کرد (در صورت افزودن قابلیت اتصال).

  3. قابلیت اتصال (Connectivity):

    افزودن ماژول‌های ارتباطی مانند:

    • Wi-Fi: ماژول ESP8266 یا ESP32 (به عنوان یک co-processor متصل به Holtek از طریق UART/SPI) برای کنترل از راه دور از طریق اپلیکیشن موبایل یا وب و اتصال به سیستم‌های خانه هوشمند (مثل Home Assistant).
    • LoRa/Zigbee/Z-Wave: برای ارتباط با سایر دستگاه‌های خانه هوشمند در فواصل طولانی‌تر و مصرف انرژی کمتر.
  4. رابط کاربری پیشرفته:
    • استفاده از دکمه‌های لمسی خازنی (Capacitive Touch Buttons) به جای دکمه‌های فیزیکی برای زیبایی و دوام بیشتر. Holtek MCUها اغلب دارای ماژول‌های لمسی خازنی داخلی هستند.
    • افزودن Encoder چرخشی برای ناوبری آسان‌تر در منوهای پیچیده E-paper.
  5. سنسورهای محیطی:

    اضافه کردن سنسور دما و رطوبت (مانند DHT11/DHT22) برای پایش شرایط محیطی در پنل یا در محیط خانه و استفاده از آنها در منطق کنترل (مثلاً روشن کردن فن در دمای بالا).

  6. امنیت:

    افزودن قابلیت‌های رمزگذاری/رمزگشایی برای ارتباطات (در صورت اضافه کردن قابلیت اتصال) و حفاظت از داده‌ها.

جایگزین‌ها (Alternatives)

  1. میکروکنترلرهای خانواده Holtek با قابلیت‌های بیشتر:
    • HT6xGxx Series: اگر نیاز به کنترل LCD/LED با سگمنت‌های بیشتر دارید (البته برای E-paper، این سری مستقیماً مناسب نیست).
    • HT45Fxx Series: برخی از این میکروکنترلرها دارای ADC با دقت بالاتر یا ماژول‌های ارتباطی داخلی هستند که می‌توانند در پروژه‌های پیچیده‌تر مفید باشند.
    • HT6xLxx Series: میکروکنترلرهای کم‌مصرف Holtek که برای کاربردهایی که باتری نقش مهمی دارد، مناسب‌تر هستند.
  2. پلتفرم‌های میکروکنترلر دیگر (در صورت خروج از Holtek):
    • ESP32/ESP8266 (Espressif): اگر ارتباط بی‌سیم (Wi-Fi/Bluetooth) اولویت اصلی باشد. این میکروکنترلرها دارای توان پردازشی بالا و GPIOs کافی هستند و اکوسیستم نرم‌افزاری بسیار غنی (Arduino IDE, ESP-IDF) دارند.
    • STM32 (STMicroelectronics): برای کاربردهای صنعتی که نیاز به قدرت پردازش بالا، پریفرال‌های غنی، و قابلیت‌های زمان واقعی (Real-Time) دارند. دارای خانواده‌های متنوع و ابزارهای توسعه قدرتمند هستند.
    • ATmega (Microchip/Arduino): برای مبتدیان و پروژه‌های ساده‌تر، بردهای آردوینو (مانند Arduino Uno با ATmega328P) گزینه‌های بسیار خوبی هستند که دارای جامعه کاربری بزرگ و کتابخانه‌های فراوان هستند.
  3. تغییر نوع نمایشگر:
    • LCD کاراکتری/گرافیکی (مثلاً LCD1602/ST7920): ارزان‌تر و ساده‌تر برای درایو کردن، اما مصرف انرژی بالاتر و دید محدودتر.
    • OLED (مثلاً SSD1306): کنتراست عالی، زاویه دید بالا و مصرف انرژی نسبتاً پایین (بسته به میزان پیکسل‌های روشن)، اما معمولاً کوچک‌تر و گران‌تر از E-paper با اندازه مشابه.
این راهنما به شما کمک می‌کند تا با یک دید جامع، پروژه کنترل پنل برق هوشمند خانگی خود را با میکروکنترلر Holtek آغاز و توسعه دهید. انتخاب‌های شما در هر مرحله، بر عملکرد، هزینه و قابلیت‌های نهایی پروژه تأثیرگذار خواهد بود. موفق باشید!

“`

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

به بالا بروید