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

کنترل دات ماتریس Dot Matrix 8×8 با ماژول ولوم کشویی Slide Pot آردوینو

Arduino-Slide Potentiometer-dotmatrix-8x8-digispark
نوشته شده توسط پریسا پوربلورچیان

پتانسیومتر یا همان مقاومت متغیر، قطعه‌ای الکترونیکی است. در زندگی روزمره یکی از پرکاربردترین لوازم است. از یک ولوم صدای رادیو گرفته تا ولوم تنظیم برودت به صورت دیجیتالی، در تمامی این موارد مقاومت متغییر در حال انجام وظیفه است. بسته به ظرفیت اهمی، کاربرد آن و دامنه ایجاد تغییرات آن هم متفاوت خواهد بود. یکی از مهم‌ترین پتانسیومترها یا ولوم‌ها، ماژول ولوم کشویی یا Slide Potentiometer است. در ادامه آموزش های ماژول ولوم کشویی Slide Pot به بخش سوم رسیدیم. در این آموزش توسط ماژول ولوم کشویی Slide Pot آرایه های دات ماتریس Dot Matrix را کنترل خواهیم کرد. در ادامه این آموزش جذاب با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

 

پیش نیاز آموزش

آموزش کار با ماژول ولوم کشویی ۱۰ کیلو اهم Slide Potentiometer و آردوینو بخش اول

آموزش کار با ماژول ولوم کشویی ۱۰ کیلو اهم Slide Potentiometer و آردوینو بخش اول

 


۱ – دات ماتریس Dot Matrix


ماژول دات ماتریس ۸*۸  Dot Matrix

دات ماتریس Dot Matrix استفاده شده در این پروژه از تراشه MAX7219 تشکیل شده است. دارای ۶۴ آرایه میباشد. نمایشگرهای دات ماتریس Dot matrix همانند سون سگمنت از شبکه ی LED ها تشکیل شده است. این شبکه از LED به صورت آند مشترک یعنی اتصال کلیه‌ی پایه‌های مثبت و کاند مشترک یعنی اتصال پایه‌های منفی وجود دارند. ولتاژ مورد نیاز برای راه اندازی ماژول دات ماتریس ۵ ولت DC است. ماژول دات ماترس از ۵ پایه تشکیل شده است. برای اطلاعات بیشتر به آموزش ساخت تابلو روان متحرک با آردوینو مراجعه کنید.

 

ماژول ولوم کشویی Slide Potentiometer

ماژول ولوم کشویی Slide Potentiometer شامل یک مقاومت متغیر خطی با حداکثر ۱۰ کیلو اهم است. ساختار ماژول ولوم همانند یک کلید کشویی است. هنگامی که اسلاید کشویی ماژول ولوم را از یک طرف به طرف دیگر می‌کشید، ولتاژ از ۰ ولت تا ولتاژ Vcc تعیین شده، تغییر خواهد کرد. ماژول ولوم کشویی Slide Pot دارای خروجی آنالوگ دو کاناله بین ۰ تا Vcc است. ولوم قرار گرفته بر روی ماژول حدودا در طول ۶٫۵ سانتی‌متر جا به جا شده و روان حرکت خواهد کرد. نوع ماژول به صورت خطی Linear است. ولتاژ کاری ولوم کشویی ۳٫۳ تا ۵ ولت DC است. این ماژول قابلیت راه اندازی با آردوینو  Arduino، MCU و AVR را خواهد داشت. ماژول ولوم کشویی دارای ۶ پایه است. دارای ۲ پایه Vcc و ۲ GND و دو کانال OTA و OTB است.

راه اندازی ماژول دات ماتریس Slide pot با آردوینو - دیجی اسپارک

 

اتصالات

  • پایه CLK ماژول دات ماتریس Dot Matrix را به پایه ۱۱ دیجیتال آردوینو Arduino اتصال دهید.
  • پایه CS ماژول دات ماتریس Dot Matrix را به پایه ۱۰ دیجیتال آردوینو Arduino اتصال دهید.
  • پایه DIN ماژول دات ماتریس Dot Matrix را به پایه ۱۲ دیجیتال آردوینو Arduino اتصال دهید.
  • پایه OTA ماژول ولوم کشویی Slide Pot را به پایه A0 آنالوگ آردوینو Arduino اتصال دهید.

 

 


۲ – کتابخانه دات ماتریس آردوینو


فراخوانی کتابخانه

در این پروژه از کتابخانه Ledcontrol جهت کنترل آرایه های دات ماتریس استفاده میکنیم:

 

کتابخانه Ledcontrol

کتابخانه Ledcontrol برای تراشه های MAX7219 و MAX7221 استفاده میشود. از این کتابخانه جهت کنترل ۶۴ آرایه از دات ماتریس، سون سگمنت ۷ و ۸ دیجیت استفاده میشود. نمونه کد فراخوانی کتابخانه Ledcontrol در زیر قرار گرفته شده است:

/* 
 * Now we create a new LedControl. 
 * We use pins 12,11 and 10 on the Arduino for the SPI interface
 * Pin 12 is connected to the DATA IN-pin of the first MAX7221
 * Pin 11 is connected to the CLK-pin of the first MAX7221
 * Pin 10 is connected to the LOAD(/CS)-pin of the first MAX7221 	
 * There will only be a single MAX7221 attached to the arduino 
 */
LedControl lc1=LedControl(12,11,10,1); 

 

نحوه ی معرفی پین ها در کتابخانه Ledcontrol

به طور یک تابع برای فراخوانی کتابخانه Ledcontrol وجود دارد که در آن پایه های Data, Clk, Cs و تعداد ماژول های مورد استفاده، درج شده است. این تابع به صورت زیر در کد برنامه تعریف میشود:

LedControl(dataPin,clockPin,csPin,numDevices)

که به ترتیب تعریف پایه به صورت زیر است:

* Params :
 * int dataPin    The pin on the Arduino where data gets shifted out
 * int clockPin   The pin for the clock
 * int csPin      The pin for selecting the device when data is to be sent
 * int numDevices The maximum number of devices that can be controlled
*/
LedControl(int dataPin, int clkPin, int csPin, int numDevices);

 

نکته مهم

دقت داشته باشید برای تعریف بیش از ۱ دات ماتریس در کتابخانه باید تغییراتی اعمال کنید. بسته به تعداد ماژول های مورد استفاده باید از چند تابع Ledcontrol در کد برنامه استفاده کنید. دقت داشته باشید باید پین های متفاوتی از آردوینو را به آن اختصاص دهید.

 


۳ – کدنویسی دات ماتریس آردوینو


کد آردوینو Arduino

#include "LedControl.h"

const int potInPin = A0; // تعریف پایه ماژول ولوم
int rawSensorValue = 0; // خواندن دیتا از سنسور
int correctedValue = 0; // خواندن دیتا آرایه ها بین ۰ تا ۶۳

LedControl lc = LedControl(12, 11, 10, 1); // تعریف تابع کتابخانه ledcontrol
// تعریف آرایه ۱ تا ۶۴
byte ledstates[64][8] = {
  {۰x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //1
  {۰x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //2
  {۰x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //3
  {۰xF,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //4
  {۰x1F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //5 
  {۰x3F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //6
  {۰x7F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //7
  {۰xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //8
  
  {۰xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0}, //9
  {۰xFF,0x3,0x0,0x0,0x0,0x0,0x0,0x0}, //10
  {۰xFF,0x7,0x0,0x0,0x0,0x0,0x0,0x0}, //11
  {۰xFF,0xF,0x0,0x0,0x0,0x0,0x0,0x0}, //12
  {۰xFF,0x1F,0x0,0x0,0x0,0x0,0x0,0x0}, //13
  {۰xFF,0x3F,0x0,0x0,0x0,0x0,0x0,0x0}, //14
  {۰xFF,0x7F,0x0,0x0,0x0,0x0,0x0,0x0}, //15
  {۰xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0}, //16
  
  {۰xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0}, //17
  {۰xFF,0xFF,0x3,0x0,0x0,0x0,0x0,0x0}, //18
  {۰xFF,0xFF,0x7,0x0,0x0,0x0,0x0,0x0}, //19
  {۰xFF,0xFF,0xF,0x0,0x0,0x0,0x0,0x0}, //20
  {۰xFF,0xFF,0x1F,0x0,0x0,0x0,0x0,0x0}, //21
  {۰xFF,0xFF,0x3F,0x0,0x0,0x0,0x0,0x0}, //22
  {۰xFF,0xFF,0x7F,0x0,0x0,0x0,0x0,0x0}, //23
  {۰xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0}, //24
  
  {۰xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0}, //25
  {۰xFF,0xFF,0xFF,0x3,0x0,0x0,0x0,0x0}, //26
  {۰xFF,0xFF,0xFF,0x7,0x0,0x0,0x0,0x0}, //27
  {۰xFF,0xFF,0xFF,0xF,0x0,0x0,0x0,0x0}, //28
  {۰xFF,0xFF,0xFF,0x1F,0x0,0x0,0x0,0x0}, //29
  {۰xFF,0xFF,0xFF,0x3F,0x0,0x0,0x0,0x0}, //30
  {۰xFF,0xFF,0xFF,0x7F,0x0,0x0,0x0,0x0}, //31
  {۰xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0}, //32
  
  {۰xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0}, //33
  {۰xFF,0xFF,0xFF,0xFF,0x3,0x0,0x0,0x0}, //34
  {۰xFF,0xFF,0xFF,0xFF,0x7,0x0,0x0,0x0}, //35
  {۰xFF,0xFF,0xFF,0xFF,0xF,0x0,0x0,0x0}, //36
  {۰xFF,0xFF,0xFF,0xFF,0x1F,0x0,0x0,0x0}, //37
  {۰xFF,0xFF,0xFF,0xFF,0x3F,0x0,0x0,0x0}, //38
  {۰xFF,0xFF,0xFF,0xFF,0x7F,0x0,0x0,0x0}, //39
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0}, //40
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0}, //41
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x3,0x0,0x0}, //42
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x7,0x0,0x0}, //43
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xF,0x0,0x0}, //44
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x0,0x0}, //45
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0,0x0}, //46
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0,0x0}, //47
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0}, //48
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1,0x0}, //49
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3,0x0}, //50
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7,0x0}, //51
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF,0x0}, //52
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x0}, //53
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0}, //54
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0}, //55
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0}, //56
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1}, //57
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3}, //58
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7}, //59
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF}, //60
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F}, //61
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F}, //62
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F}, //63
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //64
}; 

void setup() {
  Serial.begin(9600); // بادریت 
  lc.shutdown(0, false); // فعال شدن تابع ledcontrol
  lc.setIntensity(0, 8); 
  lc.clearDisplay(0);
}

void loop() {
  rawSensorValue = analogRead(potInPin); // خواندن دیتا از سنسور 
  correctedValue = map(rawSensorValue, 0, 1023, 0, 63); // تغییر آرایه ها با جا به جایی ماژول اسلاید
  Serial.println(correctedValue);
  for (int y = 0; y < 8; y++) { // تعریف حلقه For برای جا به جایی آرایه ها
    lc.setRow(0, y, ledstates[correctedValue][y]); 
  }
}

کد را از طریق کلید میانبری که برای انتقال کدها در نظر گرفته شده است، به نرم افزار آردوینو Arduino انتقال دهید.

 


۴ – تحلیل کد دات ماتریس آردوینو


 

تحلیل کد آردوینو Arduino

فراخوانی کتابخانه

#include "LedControl.h"

تعریف پایه ماژول ولوم کشویی

const int potInPin = A0; // تعریف پایه ماژول ولوم

تعریف تابع کتابخانه Ledcontrol

LedControl lc = LedControl(12, 11, 10, 1); // تعریف تابع کتابخانه ledcontrol

 

تعریف ۶۴ آرایه Array

byte ledstates[64][8] = {
  {۰x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //1
  {۰x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //2
  {۰x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //3
  {۰xF,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //4
  {۰x1F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //5 
  {۰x3F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //6
  {۰x7F,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //7
  {۰xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //8
  
  {۰xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0}, //9
  {۰xFF,0x3,0x0,0x0,0x0,0x0,0x0,0x0}, //10
  {۰xFF,0x7,0x0,0x0,0x0,0x0,0x0,0x0}, //11
  {۰xFF,0xF,0x0,0x0,0x0,0x0,0x0,0x0}, //12
  {۰xFF,0x1F,0x0,0x0,0x0,0x0,0x0,0x0}, //13
  {۰xFF,0x3F,0x0,0x0,0x0,0x0,0x0,0x0}, //14
  {۰xFF,0x7F,0x0,0x0,0x0,0x0,0x0,0x0}, //15
  {۰xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0}, //16
  
  {۰xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0}, //17
  {۰xFF,0xFF,0x3,0x0,0x0,0x0,0x0,0x0}, //18
  {۰xFF,0xFF,0x7,0x0,0x0,0x0,0x0,0x0}, //19
  {۰xFF,0xFF,0xF,0x0,0x0,0x0,0x0,0x0}, //20
  {۰xFF,0xFF,0x1F,0x0,0x0,0x0,0x0,0x0}, //21
  {۰xFF,0xFF,0x3F,0x0,0x0,0x0,0x0,0x0}, //22
  {۰xFF,0xFF,0x7F,0x0,0x0,0x0,0x0,0x0}, //23
  {۰xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0}, //24
  
  {۰xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0}, //25
  {۰xFF,0xFF,0xFF,0x3,0x0,0x0,0x0,0x0}, //26
  {۰xFF,0xFF,0xFF,0x7,0x0,0x0,0x0,0x0}, //27
  {۰xFF,0xFF,0xFF,0xF,0x0,0x0,0x0,0x0}, //28
  {۰xFF,0xFF,0xFF,0x1F,0x0,0x0,0x0,0x0}, //29
  {۰xFF,0xFF,0xFF,0x3F,0x0,0x0,0x0,0x0}, //30
  {۰xFF,0xFF,0xFF,0x7F,0x0,0x0,0x0,0x0}, //31
  {۰xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0}, //32
  
  {۰xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0}, //33
  {۰xFF,0xFF,0xFF,0xFF,0x3,0x0,0x0,0x0}, //34
  {۰xFF,0xFF,0xFF,0xFF,0x7,0x0,0x0,0x0}, //35
  {۰xFF,0xFF,0xFF,0xFF,0xF,0x0,0x0,0x0}, //36
  {۰xFF,0xFF,0xFF,0xFF,0x1F,0x0,0x0,0x0}, //37
  {۰xFF,0xFF,0xFF,0xFF,0x3F,0x0,0x0,0x0}, //38
  {۰xFF,0xFF,0xFF,0xFF,0x7F,0x0,0x0,0x0}, //39
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0}, //40
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0}, //41
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x3,0x0,0x0}, //42
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x7,0x0,0x0}, //43
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xF,0x0,0x0}, //44
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x0,0x0}, //45
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0,0x0}, //46
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0,0x0}, //47
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0}, //48
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1,0x0}, //49
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3,0x0}, //50
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7,0x0}, //51
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF,0x0}, //52
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x0}, //53
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0}, //54
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0}, //55
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0}, //56
  
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1}, //57
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3}, //58
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7}, //59
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF}, //60
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F}, //61
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F}, //62
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F}, //63
  {۰xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //64
}; 

 تابع فراخوانی کتابخانه ledcontrol

 lc.shutdown(0, false); // فعال شدن تابع ledcontrol
  lc.setIntensity(0, 8); 
  lc.clearDisplay(0);

خواندن دیتا سنسور و دات ماتریس

  rawSensorValue = analogRead(potInPin); // خواندن دیتا از سنسور 
  correctedValue = map(rawSensorValue, 0, 1023, 0, 63); // تغییر آرایه ها با جا به جایی ماژول اسلاید

تعریف حلقه برای جا به جایی آرایه ها

for (int y = 0; y < 8; y++) { // تعریف حلقه For برای جا به جایی آرایه ها
    lc.setRow(0, y, ledstates[correctedValue][y]);

 

دات ماتریس Dot matrix و ماژول ولوم کشویی با آردوینو - دیجی اسپارک

 


وسایل مورد نیاز


برد آردوینو Arduino UNO به همراه کیس مخصوص شفاف

ماژول دات ماتریس ۸×۸ با تراشه MAX7219 و رابط SPI

ماژول ولوم کشویی ۱۰ کیلو اهم دو کانال ۱۰K Slide Pot

برد برد مخصوص آردوینو Arduino

کابل فلت نری به مادگی 

 

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک و دانشجوکیت  و digispark  و  daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۶ دیدگاه