آموزش آردوینوپروژه های آردوینو

راهنمای کامل اتصال ماژول MAX7219 به آردوینو

برای پروژه هایی مثل تایمر شمارش معکوس، نمایش امتیاز، داشبورد سنسورها یا نمایش دمای محیط به روشی ساده و قابل خواندن برای نمایش اعداد نیاز دارید. ماژول 4 رقمی TM1637 یکی از گزینه های رایج است، اما وقتی بخواهید بیش از 4 رقم نمایش دهید، ماژول MAX7219 8-Digit 7-Segment به کار می آید. این ماژول هشت رقم را در اختیار شما می گذارد و فقط به سه پین دیجیتال از آردوینو نیاز دارد. علاوه بر این، امکان دایسی چین کردن چند ماژول وجود دارد تا بتوانید نمایشگرهای بسیار بزرگتری بسازید در حالی که همچنان فقط از سه سیم داده استفاده می کنید.

در این راهنما نحوه عملکرد ماژول MAX7219، طرز اتصال به آردوینو و چند مثال کدنویسی ساده برای نمایش عدد، متن و کاراکترهای مجزا را بررسی می کنیم.

مرور سخت افزار

این ماژول مبتنی بر آی سی درایور MAX7219 است که دو ماژول 4 رقمی 0.36 اینچی 7 سگمنت را با هم ترکیب کرده است. چنین ترکیبی برای نمایش مقادیر عددی مثل تایمرها، کانترها، خوانش سنسورها یا دما مناسب است.

دوره آموزش آردوینو دوره آموزش ESP32 دوره آموزش اینترنت اشیا حرفه ای دوره آموزش AVR
ماژول MAX7219 با دو نمایشگر 4 رقمی 7 سگمنت
نمای جانبی ماژول MAX7219 و نمایشگرها

ارتباط با ماژول از طریق SPI انجام می شود و شما می توانید تمام هشت رقم را تنها با سه پین SPI میکروکنترلر کنترل کنید.

یکی از مزایای مهم MAX7219 این است که فرایند رفرش نمایشگر را خودش انجام می دهد. کافی است دستورالعمل های سریالی را از طریق SPI بفرستید؛ آی سی پس از دریافت داده ها تا 800 بار در ثانیه نمایشگر را رفرش می کند و روشنایی LED ها را ثابت نگه می دارد. بدین ترتیب میکروکنترلر شما آزاد می ماند تا کارهای دیگری انجام دهد.

قابلیت های مهم آی سی MAX7219 شامل موارد زیر است:

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

تنظیم روشنایی و جریان

MAX7219 دو روش برای تنظیم روشنایی ارائه می دهد: از طریق سخت افزار و از طریق نرم افزار. هر دو روش را در ادامه بررسی می کنیم.

کنترل روشنایی از طریق سخت افزار

روی برد ماژول مقاومت R1 قرار دارد که جریان عبوری از هر سگمنت را تنظیم می کند و به همین ترتیب روشنایی کلی نمایشگر تغییر می کند.

مقاومت R1 روی برد برای تنظیم جریان LED

مقادیر مقاومت مناسب بسته به ولتاژ روی LED (Vf) و جریان هدف سگمنت متفاوت است. جدول زیر مقادیر پیشنهادی R1 را برای جریان های مختلف و ولتاژهای Vf نشان می دهد.

Target Peak Segment Current (ISEG) Required R1 at Vf=1.5V Required R1 at Vf=2.0V Required R1 at Vf=2.5V Required R1 at Vf=3.0V Required R1 at Vf=3.5V
40 mA 12.2 11.8 11.0 10.6 9.69
30 mA 17.8 17.1 15.8 15.0 14.0
20 mA 29.8 28.0 25.9 24.5 22.6
10 mA 66.7 63.7 59.3 55.4 51.2

به طور معمول R1 روی ماژول از قبل نصب شده و معمولا یک مقاومت SMD با مقدار حدود 10 kΩ نیست، اما اگر بخواهید محدودیت جریان پیک هر سگمنت را تغییر دهید باید R1 را تعویض کنید.

کنترل روشنایی از طریق نرم افزار

آی سی MAX7219 یک رجیستر داخلی برای تنظیم شدت روشنایی (intensity) دارد که از طریق دستورات سریالی قابل تنظیم است. اکثر کتابخانه های موجود این کار را با یک فرمان ساده انجام می دهند. در بخش کدنویسی مثال عملی نحوه فراخوانی این تابع را نشان می دهیم.

پین اوت ماژول MAX7219 8-Digit

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

پین های ورودی و خروجی ماژول MAX7219

کانکتور ورودی

این پین ها را برای اتصال ماژول به میکروکنترلر مثل آردوینو استفاده می کنید:

  • VCC: تغذیه ماژول. به منبع 4V تا 5.5V متصل کنید. چون نمایشگر می تواند مصرف قابل توجهی داشته باشد، بهتر است از یک منبع تغذیه جداگانه استفاده کنید. اگر مجبورید از 5V آردوینو استفاده کنید، روشنایی را پایین نگه دارید (زیر 25%) تا رگولاتور آردوینو گرم نشود.
  • GND: زمین مشترک.
  • DIN: ورودی داده سریال از آردوینو. می توانید آن را به هر پین دیجیتال آزاد اختصاص دهید.
  • CS (یا LOAD): انتخاب تراشه برای فعال کردن ارتباط با ماژول. به یک پین دیجیتال آردوینو متصل می شود.
  • CLK: پین ساعت برای همزمان سازی انتقال داده؛ به یک پین دیجیتال آردوینو وصل می شود.

کانکتور خروجی

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

  • VCC به VCC ماژول بعدی متصل می شود.
  • GND به GND ماژول بعدی متصل می شود.
  • DOUT خروجی داده است و به DIN ماژول بعدی وصل می شود.
  • LOAD به CS ماژول بعدی وصل می شود.
  • CLK به CLK ماژول بعدی وصل می شود.

اتصال ماژول MAX7219 به آردوینو

برای راه اندازی با آردوینو ابتدا VCC ماژول را به 5V آردوینو و GND را به GND وصل کنید. سپس خطوط SPI را طبق جدول زیر متصل کنید:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
ماژول MAX7219 آردوینو
VCC 5V
GND GND
DIN 12
CS/LOAD 11
CLK 10

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

نحوه اتصال ماژول MAX7219 به آردوینو

دایسی چین کردن چند ماژول

برای ساخت نمایشگر بزرگتر، چند ماژول را پشت سر هم به هم متصل کنید. کافی است DOUT ماژول اول را به DIN ماژول بعدی وصل کنید و در عین حال VCC، GND، CLK و CS را بین همه ماژول ها مشترک کنید.

زنجیره کردن دو ماژول MAX7219 با هم

نصب کتابخانه

نوشتن تمام کدهای لازم برای کنترل MAX7219 از صفر زمان بر است، اما کتابخانه ای مفید به نام max7219 کار را ساده می کند. برای نصب آن در Arduino IDE این مراحل را انجام دهید:

  1. Arduino IDE را باز کنید و وارد Library Manager شوید.
  2. در کادر جستجو عبارت max7219 را تایپ کنید.
  3. پکیج max7219 از Jonathan Evans را پیدا کنید.
  4. روی Install کلیک کنید تا به IDE اضافه شود.
نصب کتابخانه max7219 در Library Manager آردوینو

مثال آردوینو — برنامه تست پایه

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

#include <max7219.h>

MAX7219 max7219;

void setup() {
  max7219.Begin();
}

void loop() {
  String temp;
  char temp2[8];
  int y;

  //DisplayText Demo
  max7219.DisplayText("95.67F", 1);  //1=Right justified
  delay(1000);
  max7219.Clear();
  max7219.DisplayText("95.67F", 0);  //0=Left justified
  delay(1000);
  max7219.Clear();

  //Counter with decimals
  //slow counter
  for (float x = 0; x < 1; x = x + 0.1) {
    temp = String(x);
    temp.toCharArray(temp2, temp.length());
    max7219.DisplayText(temp2, 1);
    delay(500);
  }
  //fast counter
  for (float x = 0; x < 500; x++) {
    temp = String(x);
    temp.toCharArray(temp2, temp.length());
    max7219.DisplayText(temp2, 1);
  }
  delay(500);

  //Display Char Demo
  max7219.Clear();
  max7219.DisplayChar(7, 'H', 0);  //Position 7 is on the left of the display
  delay(500);
  max7219.DisplayChar(6, 'E', 0);
  delay(500);
  max7219.DisplayChar(5, 'L', 0);
  delay(500);
  max7219.DisplayChar(4, 'L', 0);
  delay(500);
  max7219.DisplayChar(3, 'O', 0);
  delay(500);
  max7219.DisplayChar(2, '1', 0);
  delay(500);
  max7219.DisplayChar(1, '2', 0);
  delay(500);
  max7219.DisplayChar(0, '3', 0);
  delay(500);
  max7219.Clear();

  //Count front the right
  for (int x = 0; x < 8; x++) { max7219.DisplayChar(x, '0'+x, 0); delay(500); } max7219.Clear(); delay(500); //Count from the left for (int x = 7; x >= 0; x--) {
    max7219.DisplayChar(x, '7'-x, 0);
    delay(500);
  }
  max7219.Clear();

  //Count from the right
  for (int x = 0; x < 8; x++) { max7219.DisplayChar(x, '0' + x, 0); delay(500); max7219.Clear(); } delay(500); //Count front the left for (int x = 7; x >= 0; x--) {
    max7219.DisplayChar(x, '7'-x, 0);
    delay(500);
    max7219.Clear();
  }
}

خروجی و مشاهده

پس از آپلود اسکچ باید رفتارهای زیر را روی نمایشگر ببینید: نمایش متن های راست چین و چپ چین، شمارنده های کند و سریع، نمایش تدریجی کاراکترها برای تشکیل “HELLO123” و انیمیشن های شمارش و عبور یک رقم روی نمایشگر.

توضیح کد

اسکچ با اضافه کردن هدر کتابخانه شروع می شود:

#include <max7219.h>

سپس یک شی به نام max7219 ساخته می شود که تمام فراخوانی های مرتبط با نمایشگر از طریق آن انجام می شود:

MAX7219 max7219;

درون setup() با Begin() آی سی بیدار و آماده گرفتن دستورات می شود:

void setup() {
  max7219.Begin();
}

در ابتدای loop() دو متغیر تعریف می شوند: temp برای نگهداری مقدار عددی به صورت رشته و temp2 آرایه ای از کاراکترها چون توابع نمایشگر متن را به صورت آرایه کاراکتر می خواهند.

String temp;
char temp2[8];

تابع اصلی نمایش متن DisplayText(Text, Justification) است. این تابع می تواند حداکثر تا 8 کاراکتر (به علاوه نقطه های اعشار) را دریافت کند و با ارسال پارامتر دوم مشخص می کنید متن به راست چسبیده شود (1) یا به چپ (0). مثال:

max7219.DisplayText("95.67F", 1);  // Right justified
max7219.Clear();
max7219.DisplayText("95.67F", 0);  // Left justified

برای شمارنده های عددی ابتدا عدد تبدیل به String می شود و سپس با toCharArray به آرایه کاراکتر تبدیل می گردد تا DisplayText بتواند آن را بپذیرد.

for (float x = 0; x < 1; x = x + 0.1) {
  temp = String(x);
  temp.toCharArray(temp2, temp.length());
  max7219.DisplayText(temp2, 1);
  delay(500);
}

برای نوشتن کاراکتر مستقل در یک رقم از DisplayChar(Digit, Char, Decimal) استفاده می شود. پارامتر اول شماره موقعیت است که 7 سمت چپ و 0 سمت راست را نشان می دهد، پارامتر دوم کاراکتر مورد نظر و پارامتر سوم سوئیچ نقطه اعشار (0 خاموش، 1 روشن) است.

max7219.DisplayChar(7, 'H', 0);
max7219.DisplayChar(6, 'E', 0);
// ... و به همین ترتیب

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

جمع بندی و توصیه ها

  • برای نمایش های ساده تا متوسط از این ماژول می توانید فقط با سه سیم داده استفاده کنید و در صورت نیاز آن را دایسی چین کنید.
  • برای جلوگیری از گرم شدن رگولاتور آردوینو در صورت تغذیه از 5V برد، روشنایی را کمتر از 25 درصد نگه دارید یا از تغذیه جداگانه استفاده کنید.
  • برای تنظیم محدودیت جریان LED از تعویض مقاومت R1 استفاده کنید و برای تغییر روشنایی در زمان اجرا از رجیستر شدت داخلی آی سی بهره ببرید.
  • کتابخانه max7219 کار با نمایشگر را بسیار ساده می کند و توابعی مثل DisplayText و DisplayChar نیازهای معمول را پوشش می دهند.

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

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

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