پین‌های GPIO دیجتیال آردوینو

مقدمه

پین‌های ورودی خروجی همه منظوره (GPIO) پین‌های دیجیتال روی یک آی‌سی می‌باشند. می‌توان از آنها برای ارتباط با دستگاه‌ها به صورت ورودی یا خروجی استفاده کرد.

اگر بخواهیم وضعیت یک سوییچ، داده‌های سنسور و … را بخوانیم باید پین را به عنوان ورودی پیکربندی کنیم. اگر هدف ما کنترل روشنایی یک LED، چرخش موتور، نمایش متن روی نمایشگر و … باشد، باید پین را به عنوان خروجی پیکربندی کرد.

پین‌های GPIO آردوینو

بورد Arduino Uno پین‌های دیجیتال I/O متنوعی دارد که می‌توان از آنها برای دستگاه‌های ورودی/خروجی استفاده کرد. تصویر زیر پین‌های دیجیتال آردوینو Uno را نشان می‌دهد.

پین‌های GPIO دیجتیال آردوینو

پین‌های آنالوگ آردوینو را همچنین می‌توان به عنوان پین ورودی/خروجی دیجیتال به کار برد. اجازه دهید ورودی خروجی آردوینو (ATmega) را ببینیم.

خروجی دیجیتال

پین‌های دیجیتال آردوینو (ATmega) را می‌توان جهت درایو کردن دستگاه‌های خروجی، به عنوان خروجی تعریف کرد. باید این پین‌ها را برای استفاده به عنوان خروجی پیکربندی کنیم.

برای پیکربندی این پین‌ها، تابع ()pinMode را به کار می‌بریم که جهت پین‌ها به عنوان ورودی یا خروجی را مشخص می‌کند.

  • pinMode(pin no, Mode)

این تابع برای پیکربندی پین GPIO به عنوان ورودی یا خروجی به کار می‌برد.

pin no: شماره پینی که می‌خواهیم جهت آن را تعیین کنیم.

Mode: به صورت INPUT ،OUTPUT یا INPUT_OUTPUT نوشته می‌شود.

مثال:

pinMode (3, OUTPUT)  //set pin 3 as output

این پین‌های آردوینو (Atmega) می‌توانند جریانی تا حدود ۴۰ میلی‌آمپر را کشیده یا تامین کنند که جریان کافی برای درایو کردن led، نمایشگر LCD می‌باشد، اما برای موتورها، رله‌ها و … کافی نیست.

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

مطلب پیشنهادی:  مدولاسیون عرض پالس یا PWM در آردوینو

این پین‌ها خروجی را در به صورت HIGH (۵ ولت یا ۳.۳ ولت) یا LOW (صفر ولت) تولید می‌کند. می‌توان از تابع ()digitalWrite برای تعیین مقدار خروجی پین استفاده کرد.

  • digitalWrite (pin no, Output value)

این تابع مقدار خروجی را به صورت HIGH (۵ ولت)  یا LOW (صفر ولت) تعیین می‌کند.

pin no: شماره پینی که قرار است مقدار آن را تعیین کنیم.

Output value: برابر با HIGH یا LOW.

مثال:

digitalWrite (3, HIGH)

ورودی دیجیتال

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

برای پیکربندی پین به عنوان ورودی دیجیتال، تابع ()pinMode استفاده می‌شود. با استفاده از تابع ()digitalRead می‌توان داده‌ها را از GPIO خواند.

  • digitalRead(pin)

این تابع برای خواندن داده از پین GPIO مشخص شده به کار می‌رود.

ورودی دیجیتال با مقاومت بالاکش

  • گاهی اوقات سوییچ کردن بین یک حالت به حالت دیگر، یا پین‌های ورودی که به هیچ جایی وصل نباشند، ممکن است منجر به وضعیت High-impedance، یا وضعیت شناور گردد. این وضعیت می‌تواند منجر به تغییرات تصادفی در وضعیت پین شود.
  • برای اجتناب از چنین وضعی، یک گزینه موجود اضافه کردن مقاومت بالاکش (به 5V+) یا پایین کش (GND) می‌باشد، که سبب می‌شود که ورودی در یک وضعیت معلوم قرار گیرد. شکل زیر وضعیت High-Impedance (تعریف نشده) و مقاومت بالاکش را نشان می‌دهد.

پین‌های GPIO دیجتیال آردوینو

  • آردوینو (ATmega) دارای یک مقاومت بالاکش داخلی با قابلیت پیکربندی است. این مقاومت‌ها با استفاده از تابع ()pinMode و تعیین مد INPUT_PULLUP فعال می‌شوند. وقتی یک دستگاه یا سنسور را به یک پین که به صورت ورودی با مقاومت بالاکش تنظیم شده، وصل می‌کنیم، سر دیگر آن به زمین وصل می‌شود.
مطلب پیشنهادی:  توابع پایه مربوط به زمان و وقفه در آردوینو

مثال:

pinMode (3, INPUT_PULLUP).
  • می‌توان ورودی بالاکش را به روش دیگری نیز پیکربندی کنیم. اگر جهت یک پین را به صورت ورودی تنظیم کنیم و مقدار HIGH را در آن بنویسیم، پین مقاومت بالاکش را روشن می‌کند. در حالت دیگر، اگر در یک پین پیکربندی شده به صورت OUTPUT مقدار HIGH را بنویسیم و سپس آن پین را به صورت ورودی پیکربندی کنیم، مقاومت بالاکش فعال می‌شود.

مثال

e.g. pinMode (3, INPUT)        //set pin as input
digitalWrite (3, HIGH)            //setting high on input pin enables pullup

LED چشمک‌زن با آردوینو

اجازه دهید یک برنامه برای آردوینو Uno برای چشمک‌زدن یک LED بنویسیم. در اینجا، ما LED رو بوردی آردوینو Uno را که به پین دیجیتال ۱۳ متصل است را روشن و خاموش می‌کنیم.

اسکچ LED چشمک‌زن برای آردوینو

void setup()
{
  pinMode(13, OUTPUT);          // sets the digital pin 13 as output
}
 
void loop()
{
  digitalWrite(13, HIGH);       // sets the digital pin 13 on
  delay(1000);                  // waits for a second
  digitalWrite(13, LOW);        // sets the digital pin 13 off
  delay(1000);                  // waits for a second
}

خروجی LED چشمک‌زن

پین‌های GPIO دیجتیال آردوینو

خاموش و روشن کردن LED‌های متوالی با استفاده از آردوینو

اجازه دهید LED‌ها را به صورت متوالی خاموش و روشن کنیم. در اینجا، ابتدا چهار LED را یک به یک روشن می‌کنیم، یعنی ابتدا LED1 روشن می‌شود سپس LED1 و LED2 روشن می‌شوند و الی آخر. وقتی که همه چهار LED روشن شدند، همه آنها را در جهت عکس یک به یک خاموش می‌کنیم. یعنی ابتدا LED4 خاموش می‌شود و سپس LED3 خاموش می‌شود و الی آخر.

مطلب پیشنهادی:  PWM در آردوینو

چهار LED به پین‌های ۰-۳ آردوینو Uno وصل هستند.

نکته: هنگام آپلود کردن برنامه به آردوینو، اتصالات پین‌های ۰ و ۱ را جدا کنید، زیرا این پین‌ها، پین‌های RXD و TXD هستند که هنگام فرآیند آپلود برای ارتباط سریال استفاده می‌شوند. وقتی که آپلود به پایان رسید، مجددا اتصالات ۰ و ۱ را برقرار کنید.

اسکچ خاموش و روشن کردن LEDهای متوالی

void setup() {
 
//set gpio pin {0,1,2,3} as output
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}

void loop() {
  //turn LED ON one by one
  for(int i=0;i<4;i++){
    digitalWrite(i, HIGH);
    delay(1000);
  }
  
  //turn LED OFF one by one
  for(int i=3;i>=0;i--){
    digitalWrite(i, LOW);
    delay(1000);
  }
}

خروجی ویدئو

کنترل LED با کلید با استفاده از آردوینو

می‌خواهیم با یک سوئیچ متصل به آردوینو Uno، خاموش و روشن کردن LED را کنترل کنیم.

دیاگرام اتصالات

پین‌های GPIO دیجتیال آردوینو

اسکچ کنترل LED با سوئیچ

int pushButton = 2;
int LED = 13;

void setup() {
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT_PULLUP);  //configure pin as input with pullup enabled   
  pinMode(LED, OUTPUT);               //configure pin as output
}

void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
 
  digitalWrite(LED, (!(buttonState))); //turn len on when switch pressed
  
  delay(1);        // delay in between reads for stability
}

ویدئو

کامنت یادتون نره:)

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

2 دیدگاه

  1. سلام خسته نباشید.
    باتشکر از محتوایه ساده و مفیدتون.
    من رو uno کد led چشمک زن اپلود کردم و الان میخوام کد بمار بعدی بریزم .قبلیو چه جوری پاک کنم