آردوینو فارسی
6.9K subscribers
758 photos
306 videos
640 files
243 links
اولین کانال تخصصی آموزش آردوینو
گروه:
https://t.me/ArduinoFarsi_G
لینک کانال یوتیوب:
https://www.youtube.com/c/ArduinoFarsi
ارتباط با ادمین و ثبت سفارش:
☎️ رضا اژدرکش: 09199117192
💲 حمایت از کانال:
شماره کارت: 6104331049714000
بانک ملت بنام رضا اژدرکش
Download Telegram
در مورد آردوینو بیشتر بدانیم :

آردوینو چیست و برای چه کارهایی مناسب است ؟

آردوینو (Arduino) یک برد متن‌باز (open source) برای نمونه‌سازی می‌باشد و بر اساس سخت‌افزار و نرم‌افزار منعطف و ساده پایه‌ریزی و طراحی شده است. آردوینو می‌تواند محیط اطراف را با استفاده از سنسورهای مختلف حس کند.

برد آردوینو arduino یک گجت قابل برنامه ریزی می باشد. با آردوینو کلی گجت های جذاب می توان ساخت. برگ برنده آردوینو به دلیل پلت فرم نرم افزاری اش می باشد. با آردوینو می توان یک پرینتر ۳ بعدی ساخت، یا یک ماشین نقاشی، یا یک ربات و یا حتی سیستم ساختمان هوشمند را توسط آن پیاده سازی کرد.

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

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

بله؛ کار با آردوینو به همین سادگی است.

چرا آردوینو ؟

ارزان
در مقایسه با سایر پلت فرم های میکروکنترلر، بردهای آردوینو نسبتاً ارزان هستند. ارزان ترین نسخه از ماژول آردوینو می تواند به صورت دستی مونتاژ شود، و حتی ماژول های آردوینو از پیش مونتاژ شده، کمتراز 50 دلار قیمت دارد.

مستقل از سیستم عامل (Cross-platform)
نرم افزار آردوینو روی سیستم های عامل ویندوز، مکینتاش OSX و لینوکس اجرا می شود. اکثر سیستم های میکروکنترلر منحصر به ویندوز شده اند.

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

نرم افزار قابل توسعه و open-source
نرم افزار آردوینو به صورت یک ابزار open-source منتشر شده است که برای توسعه توسط برنامه نویسان باتجربه موجود می باشد. این زبان می تواند از طریق کتابخانه های C++ گسترش یابد، و افرای که می خواهند جزئیات فنی را بفهمند، می توانند از آردوینو گریزی به زبان برنامه نویسی AVR C که زبان پایه ی آن است، بزنند. به طور مشابه اگر بخواهید، می توانید مستقیما کد AVR-C را درون برنامه های آردوینو خود درج کنید.

سخت افزار قابل توسعه و open-source
آردوینو بر اساس میکروکنترلرهای مختلفی از جمله ATMEGA8 و ATMEGA168 شرکت Atmel پایه ریزی شده اند و در حال حاضر تعداد زیادی از میکروکنترلرهای AVR و ARM به عنوان هسته مرکزی این بردها مورد استفاده قرار می گیرند . طرح ماژول ها تحت لیسانس Creative Commons مجوز گرفته اند، بنابراین طراحان با تجربه مدار، می توانند ماژول خود را ساخته، توسعه داده و آن را بهبود ببخشند. حتی کاربران نسبتاً بی تجربه می توانند یک نسخه بردبوردی از ماژول را جهت فهم شیوه کار آن بسازند و هزینه ای جهت آن نپردازند.

مناسب دانشجویان و فارغ التحصیلان مهندسی برق و الکترونیک ، کامپیوتر ، مکانیک ، مکاترونیک ، رباتیک و تمامی علاقمندان

https://telegram.me/ArduinoKaraneJavan
👍1
#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
ورودی آنالوگ

سلام دوستان آردوینوکار
امروز میخواهیم یک مبحث جدید رو با هم کار کنیم.
امروز در مورد نحوه خواندن اطلاعات از ورودی های آنالوگ آردوینو و نمایش آن در پورت سریال کار می کنیم و سپس در مبحث بعدی روی نمایش در LCD کاراکتری و ساخت یک ولتمتر دیجیتال صحبت خواهیم کرد و بعد از آن شروع به ساخت مدارات دزد گیر و کیبرد های تک سیمه آنالوگ و غیره که با استفاده از ورودی آنالوگ امکان پذیر می باشند، خواهیم پرداخت.

برد آردوینو UNO دارای 6 ورودی آنالوگ می باشد که با A0,A1,A2,A3,A4,A5 مشخص شده اند.
در بردهای دیگر آردوینو این تعداد متفاوت می باشد. بعنوان مثال برد آردوینو MEGA2560 دارای 16 ورودی آنالوگ است که با نام A0 الی A15 مشخص شده اند.

ما می توانیم با استفاده از دستور ()analogReaad اطلاعات ورودی آنالوگ را بخوانیم و در داخل پرانتز جلوی دستور شماره پایه آنالوگی را که می خواهیم مقدار آنرا بخوانیم قرار می دهیم.
بعنوان مثال هردو دستور زیر از ورودی آنالوگ شماره 0 یعنی A0 اطلاعات را می خوانند:
int a, b;
a = analogRead(0);
b = analogRead(A0);
لازم به ذکر است که مقدار خوانده شده از ورودی آنالوگ یک عدد است بین 0 تا 1023 بنابراین متغیری که برای ذخیره آن استفاده میکنیم باید حتماً از نوع int یا float باشد.

برای نمایش مقدار خوانده شده در پورت سریال می توانیم بصورت زیر عمل نماییم:
int Analog;
Analog = analogRead(A0);
Serial.println(Analog);
Serial.println(Analog, DEC);
Serial.println(Analog, HEX);
Serial.println(Analog, BIN);
خوب ما در خط اول یک متغیر بنام Analog از نوع int تعریف کردیم.
در خط دوم مقدار آنالوگ ورودی A0 را خواندیم و در متغیر Analog قرار دادیم.
در خط سوم مقدار خوانده شده را عیناً به پورت سریال فرستادیم تا نمایش داده شود.
در خط چهارم مقدار خوانده شده را ابتدا به مقدار دسیمال تبدیل کرده و سپس به پورت سریال فرستادیم تا نمایش داده شود.
در خط پنجم مقدار خوانده شده را ابتدا به مقدار هگزا دسیمال تبدیل کرده و سپس به پورت سریال فرستادیم تا نمایش داده شود.
در خط ششم مقدار خوانده شده را ابتدا به مقدار باینری تبدیل کرده و سپس به پورت سریال فرستادیم تا نمایش داده شود.

هدف از این آموزش یادگیری نحوه خواندن اطلاعات از ورودی های آنالوگ و نحوه تبدیل به مبناهای عددی دیگر جهت نمایش بود. حالا می خواهیم عدد خوانده شده را که در بازه 0 تا 1023 است به بازه مورد نظر خودمان تبدیل نماییم.
بعنوان مثال می خواهیم یک ولتمتر دیجیتالی بسازیم که از صفر تا 5 ولت را اندازه گیری نماید، اگر ما یک پتانسیومتر برداریم و به دو سر کناری آن به ترتیب 5v+ و GND متصل نماییم و سر وسط آنرا به ورودی آنالوگ A0 متصل کنیم با تغییر مقدار پتانسیومتر ما مقداری بین 0 تا 5 ولت در ورودی A0 خواهیم داشت. ولی مقداری که با دستور (analogRead(A0 میخوانیم مقداری بین 0 تا 1023 خواهد بود در حالیکه ما می خواهیم عددی بین 0 تا 5 ولت را در خروجی به ما نشان دهد.

چاره کار استفاده از دستور map است. map یک دستور بسیار قدرتمند است که ما را از بسیاری از فرمول های پیچیده جهت تبدیلات بی نیاز می کند.
int Ain, Volt;
Ain = analogRead(A0);
Volt = map(Ain, 0, 1023, 0, 5);
Serial.println(Volt);
در خط اول ما دو متغیر از نوع int تعریف کردیم.
در خط دوم مقدار ولتاژ پتانسیومتر را می خوانیم و در متغیر Ain قرار می دهیم که مقداری بین 0 تا 1023 است.
در خط سوم دستور map مقدار خوانده شده از ورودی A0 را به همراه بازه آن و بازه جدید که ما تعریف می کنیم و در این مثال 0 تا 5 است از ما می گیرد و خروجی مطلوب را در متغیر Volt فرار میدهد.
در خط چهارم مقدار خوانده شده را به پورت سریال ارسال می کنیم.

ادامه دارد...

#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
👍3
ورودی آنالوگ (ادامه)

حال اگر این مثال را انجام دهید متوجه می شوید که دستور map زاویه چرخش پتانسیومتر را که 270 درجه است به 6 قسمت مساوی تقسیم نموده است. و زمانیکه پتانسیومتر کاملاً به سمت چپ چزخانده شود مقدار 0 را به ما نشان میدهد و کمی بالاتر از آن تا یک قسمت خاصی مربوط به عدد 1 است و بعد تا یک محدوده به همان اندازه مربوط به عدد 2 است و... و در نهایت در انتهای زاویه چرخش پتانسیومتر عدد 5 را نشان می دهد.

حال اگر ما بخواهیم مقدار قراعت شده عدد دقیق تری باشد، و مثلاً اعداد را بصورت 3.49 نشان دهد چکاری انجام دهیم؟

چاره کار کلک رشتی است. ما در تعریف متغیر بجای int از float استفاده می کنیم تا اعداد اعشاری را نشان دهد و بازه تبدیل ولتاژ در دستور map را بجای 0 تا 5 به صفر تا 500 تغییر می دهیم و در نهایت بعد از تبدیل و قبل از نمایش مقدار آنرا بر 100 تقسیم می کنیم تا باز هم حداکثر مقدار نمایش داده شده 5.00 باشد.

float Ain, Volt;
Ain = analogRead(A0);
Volt = map(Ain, 0, 1023, 0, 500);
Volt = Volt/100.0;
Serial.print("Volt = ");
Serial.print(Volt, 2);
Serial.println(" V");

خط 1 تعریف دو متغیر از نوع ممیز شناور.
خط 2 خواندن مقدار پتانسیومتر.
خط 3 تبدیل مقدار خوانده شده به عددی بین 0 تا 500
نکته: با این کار زاویه چرخش پتانسیومتر توسط دستور map به 500 قسمت مساوی تقسیم می شود. و هر قسمت 1/500 از 5 ولت می شود. یعنی هر قسمت 0.01 ولت می شود.
خط 4 تقسیم عدد بدست آمده به 100 جهت تبدیل بازه بین 0.00 تا 5.00
نکته: چون مقدار داخل متغیر Volt از نوع float است عددی که به آن تقسیم میکنیم نیز باید از نوع float باشد بنابراین مقدار 100 را بصورت 100.0 نوشته ایم.
خط 5 عبارت " = Volt" را در پورت سریال نمایش میدهد ولی به خط بعدی نمی رود.
خط 6 عبارت مقدار ولتاژ خوانده شده را تا 2 رقم اعشار در پورت سریال نمایش میدهد و باز هم به خط بعدی نمی رود.
نکته: وقتی یک مقدار اعشاری از نوع float را میخواهیم در خروجی چاپ کنیم میتوانیم به این روش تعداد ارقام اعشار آنرا تعیین کنیم.
خط 7 عبارت " v " را در پورت سریال نمایش میدهد و بعد به خط بعدی می رود.

ادامه دارد...

#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
مدار مربوط به درس 6

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
ورودی آنالوگ (ادامه)
کالیبراسیون

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

بعضی از سنسورهای آنالوگ دارای 3 رشته سیم بوده و خروجی آنها بصورت مقاومت متغیر می باشد. و دقیقاً مانند درس 6 می توانیم خروجی آنها را بخوانیم و کنترل نماییم. مانند سنسور ارتفاع، سنسور ولوم دیجیتالی و غیره...

اکثر سنسورهای آنالوگ دیگر نیز بصورت خروجی مقاومتی می باشند، ولی 2 رشته سیم دارند. مانند: فتوسل، NTC ، PTC ، LDR و غیره...

جهت اندازه گیری مقدار سنسور های دو سیمه مقاومتی باید توسط سری نمودن سنسور با یک مقاومت، یک مدار مقسم ولتاژ درست کنیم و سپس ولتاژ خروجی آنرا اندازه گیری نماییم.

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

پس چاره کار چیست؟ آیا باز هم باید کلک رشتی بزنیم؟ نه! اینبار باید از کالیبراسیون استفاده نماییم.

ادامه دارد...

https://telegram.me/ArduinoKaraneJavan
مدار مربوط به درس 7: اتصال فتوسل به ورودی آنالوگ و خواندن مقدار آن https://telegram.me/ArduinoKaraneJavan
ورودی آنالوگ (ادامه)
کالیبراسیون

سلام دوستان امروز میخواهیم روش کالیبره کردن را با هم آموزش دیده و انجام دهیم.
برای این منظور مدار شکل بالا را ببندید تا با هم به تست و آزمایش بپردازیم.

برنامه زیر را در نظر بگیرید:
// ثابتها:
const int sensorPin = A0; // پینی که سنسور به آن وصل میشود
const int ledPin = 9; // به آن وصل می شود LED پینی که

// متغیر ها:
int sensorValue = 0; // مقدار خوانده شده سنسور
int sensorMin = 1023; // حداقل مقدار سنسور
int sensorMax = 0; // حداکثر مقدار سنسور


void setup() {
// روشن کردن LED تا پایان کالیبره شدن دستگاه:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

// کالیبره کردن دستگاه در 5 ثانیه اولیه روشن شدن:
// دستور ()millis مدت زمان سپری شده از لحظه روشن شدن دستگاه یا ریست شدن آن تا حالا را بر حسب میلی ثانیه به ما نشان میدهد و پس از گذشت 50 روز صفر می شود و دوباره شروع به شمارش میکند.
// دستور while تا زمانیکه شرط مقابل آن درست باشد دستورات داخل{} را اجرا می کند.
// در طی این 5 ثانیه باید بیشترین نور را به سنسور بتابانیم و همچنین آنرا در تاریکترین محیط نیز قرار دهیم.

while (millis() < 5000) {
sensorValue = analogRead(sensorPin);

// ذخیره بیشترین مقداری که سنسور نشان میدهد.
// در ابتدای برنامه آنرا 0 گذاشتیم تا اکنون بتواند بیشترین مقدار را به خود بگیرد.
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}

// ذخیره کمترین مقداری که سنسور نشان میدهد.
// در ابتدای برنامه آنرا 1023 گذاشتیم تا اکنون بتواند کمترین مقدار را به خود بگیرد.
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}

// خاموش شدن LED به منظور نمایش اتمام کالیبراسیون
digitalWrite(13, LOW);
}

void loop() {
// خواندن مقدار سنسور:
sensorValue = analogRead(sensorPin);

// اعمال کالیبراسیون روی مقدار خوانده شده از سنسور و تبدیل آن به عددی بین 0 تا 255

sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

// دستور constrain سه تا مقدار می گیرد و یکی را برمی گرداند:
// اگر مقدار اولی از لحاظ عددی بین مقدار دوم و سوم باشد، همان مقدار اولی برمیگردد.
// اگر مقدار اولی از لحاظ عددی کوچکتر از مقدار دوم باشد مقدار دومی برمی گردد.
// اگر مفدار اولی از لحاظ عددی بزرگتر از مقدار سوم باشد مقدار سومی برمیگردد.
// به این صورت مطمئن می شویم که مقداری که خوانده ایم همیشه در بازه مورد نظر ما است و اگر نویز روی آن افتاده باشد با این روش حذف میگردد.

sensorValue = constrain(sensorValue, 0, 255);

// خالا اگر مقدار خوانده شده از سنسور بین 0 و 255 باشد همان مقدار باقی می ماند.
// اگر مقدار خوانده شده کمتر از 0 باشد مقدار خوانده شده برابر 0 می شود.
// اگر مقدار خوانده شده بیشتر از 255 باشد. مقدار خوانده شده برابر 255 می شود.

// تنظیم نور LED بر اساس نور محیط
// دستور analogWrite یک ولتاژ PWM روی پایه مشخص شده تولید می کند که در آینده بطور کلی در این مورد صحبت خواهیم نمود.
analogWrite(ledPin, sensorValue);
}

ادامه دارد...

https://telegram.me/ArduinoKaraneJavan
Lesson_7.ino
640 B
#درس 7: طرح اتصال LDR به آردوینو و کالبراسیون آن
https://telegram.me/ArduinoKaraneJavan
1
کیک مهندسی الکترونیک
ورودی آنالوگ (ادامه...)
analogReference()

سلام دوستان

در ادامه درس ورودی های آنالوگ باید متدکر شویم که ولتاژ ورودی آنالوگ بصورت پیشفرض در آردوینو های 5 ولتی حداکثر 5 ولت و در آردوینو های 3.3 ولتی جداکثر 3.3 ولت است.

به عبارت دیگر آردوینو های 5 ولتی برای ورودی 5 ولت عدد 1023 را به ما میدهند و آردوینوهای 3.3 ولتی نیز به ازاء 3.3 ولت عدد 1023 را به ما می دهند.

آیا این مقدار ثابت است؟
خیر، این مقدار بصورت پیشفرض اینچنین است ولی ما میتوانیم با استفاده از دستور ()analogReference آنرا تغییر دهیم.
این دستور میتواند 5 مقدار به خود بگیرد که در زیر به آن اشاره می نماییم:

اولین مقدار DEFAULT: با وارد کردن این پارامتر بعنوان ورودی دستور ()analogReference ولتاژ رفرنس در آردوینو های 5 ولتی برابر 5 و در آردوینو های 3.3 ولتی برابر 3.3 ولت می شود.

دومین مقدار INTERNAL: با وارد کردن این پارامتر بعنوان ورودی دستور ()analogReference یک ولتاژ رفرنس 1.1 ولتی داخلی در آردوینو های با میکرو کنترلر ATmega168 و ATmega328 و یا یک ولتاژ رفرنس 2.56 ولتی داخلی در آردوینو های مبتنی بر ATmega8 تولید می شود. این دستور در آردوینوهای MEGA کار نمیکند.

سومین مقدار INTERNAL1V1: با وارد کردن این پارامتر بعنوان ورودی دستور ()analogReference یک ولتاژ رفرنس 1.1 ولتی داخلی فعال می گردد. این دستور مختص آردوینو مگا می باشد.

چهارمین مقدار INTERNAL2V56: با وارد کردن این پارامتر بعنوان ورودی دستور ()analogReference یک ولتاژ رفرنس 2.56 ولتی داخلی فعال می گردد. این دستور مختص آردوینو مگا می باشد.

پنجمین مقدار EXTERNAL: با وارد کردن این پارامتر بعنوان ورودی دستور ()analogReference ولتاژ رفرنس یا مرجع دلخواه بین 0 تا 5 ولت را خودمان تولید کرده و به پایه AREF در آردوینو متصل می کنیم.

نکته: پس از تغییر ولتاژ مرجع توسط این دستور اولین مقدار خوانده شده توسط دستور ()analogRead یک مقدار صحیح نمی باشد و قابل استفاده نیست.

هشدار!
هیچگاه ولتاژ مرجع کمتر از 0 یا بیشتر از 5 ولت در حالت EXTERNAL به پایه AREF در آردوینو متصل نکنید.
همچنین هیچگاه در حالتی که ولتاژ مرجع INTERNAL از هر نوعی را انتخاب کرده اید هیچ ولتاژی را به پایه AREF در آردوینو متصل نکنید. چرا که باعث صدمه دیدن میکروکنترلر موجود روی برد آردوینوی شما خواهد شد.

نکته: در صورتی که می خواهید در داخل برنامه از ولتاژ مرجع INTERNAL به EXTERNAL مرتباً سوئیچ کنید و لازم است که ولتاژ مرجع EXTERNAL بصورت دائمی به مدار متصل باشد، میتوانید ولتاژ مرجع EXTERNAL را با یک مقاومت 5K به پایه AREF در آردوینو متصل کنید تا به میکروکنترلر آسیبی نرسد. نگران افت ولتاژ روی مقاومت 5K نباشید زیرا امپدانس ورودی پایه AREF در آردوینو 32K میباشد. بنابراین با سری شدن مقاومت 5K و متصل نمودن ولتاژ مرجع EXTERNAL به میزان 2.56 ولت ولتاژی که به پایه AREF می رسد تقریباً 2.2 ولت می شود.
2.5 * 32 / (32 + 5) = ~2.2V

ادامه دارد...


https://telegram.me/ArduinoKaraneJavan
#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
ورودی آنالوگ (ادامه...)

از ورودی های آنالوگ نیز میتوان بعنوان ورودی و خروجی دیجیتال استفاده کرد.
برای این منظور میتوان از روش زیر پایه آنالوگ را بعنوان خروجی دیجیتال پیکره بندی نمود:
pinMode(A0, OUTPUT);
وبرای ارسال اطلاعات به آن نیز به این صورت عمل میکنیم:
digitalWrite(A0, HIGH);
digitalWrite(A0, LOW);
برای تعریف کردن ورودی آنالوگ بعنوان ورودی دیجیتال می توان بصورت زیر عمل نمود:
pinMode(A0, INPUT);
برای فعال کردن مقاومت pullup در حالت ورودی دیجیتال باید پس از انتخاب حالت ورودی یک مقدار HIGH در آن پایه بنویسیم. مثلاً:
pinMode(A0, INPUT);
digitalWrite(A0, HIGH);
در این مثال پایه آنالوگ A0 به عنوان ورودی دیجیتال تعریف شده و مقاومت pullup آن نیز فعال شد.

نکته: اگر یک پایه آنالوگ را قبلاً بعنوان خروجی دیجیتال تعریف کرده اید و اکنون از آن بعنوان ورودی آنالوگ استفاده می کنید دستور analogRead به درستی کار نخواهد کرد. مگر اینکه به عقب برگردید و قبل از استفاده از دستور analogRead آن پین را بعنوان ورودی تعریف کنید.
همچنین با توجه به دیتاشیت ATMEGA استفاده از یک پین آنالوگ بعنوان ورودی یا خروجی دیجیتال میتواند باعث ایجاد نویز در قراعت سایر پین های آنالوگ گردد. بنابراین ایجاد یک تاخیر بسیار کوتاه قبل از خواندن مقدار آنالوگ بسیار مفید است.

ادامه دارد...


#آردوینو کاران جوان

اولین کانال آموزش آردوینو در تلگرام
اتوماسیون خانگی و صنعتی
برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
ورودی آنالوگ (ادامه...)
analogReadResolution()

رزولیشن مبدل آنالوگ به دیجیتال در تمامی بردهای آردوینو مبتنی بر میکروکنترلر های AVR ده بیتی (10 بیتی) است. ولی در بردهای آردوینو مبتنی بر میکروکنترلر های ARM مانند Due و Zero این مقدار میتواند 10 بیتی یا 12 بیتی باشد که با استفاده از دستور analogReadResolution می توانیم مقدار آنرا تعیین نماییم.

در حالت 12 بیتی دستور analogRead مقداری بین 0 تا 4095 را بجای 0 تا 1023 برمیگرداند و این یعنی 4 برابر دقت بیشتر.
4096 / 1024 = 4
سینتکس دستور به شکل زیر می باشد:
analogReadResolution(bits)
که بجای bits میتوانید عددی بین 1 تا 32 قرار دهید.
رزولیشن ورودی آنالوگ در بعضی از آردوینو ها 8 بیتی و در بعضی دیگر 10 یا 12 یا 16 بیتی است.
اگر شما با این دستور عددی کمتر از حداقل رزولیشن آردوینوی خود انتخاب نمایید بصورت اتوماتیک حداقل رزولیشن آردوینو انتخاب می شود. همچنین اگر شما با این دستور عددی بیشتر از حداکثر رزولیشن آردوینوی خود انتخاب نمایید بصورت اتوماتیک حداکثر رزولیشن آردوینو انتخاب می شود. اینگونه میتوانید مطمئن شوید که ورودی آنالوگ آردوینو در حداکثر دقت خود کار می کند.
برای اینکه بدانید رزولیش آردوینوی شما از چه اعدادی پشتیبانی می کند ورودی A0 را به VCC متصل کرده و برنامه زیر را اجرا کنید و نتیجه را ببینید که دستور analogRead چه عددی به شما برمیگرداند.

void setup() {
// باز کردن یک ارتباط سریال
Serial.begin(9600);
}

void loop() {
// خواندن مقدار ورودی A0 با رزولیشن پیشفرض (10 bits)
// و نمایش مقدار خوانده شده در پورت سریال
analogReadResolution(10);
Serial.print("ADC 10-bit (default) : ");
Serial.print(analogRead(A0));

// تغییر رزولیشن به حالت 12 بیتی و خواندن A0
analogReadResolution(12);
Serial.print(", 12-bit : ");
Serial.print(analogRead(A0));

// تغییر رزولیشن به حالت 16 بیتی و خواندن A0
analogReadResolution(16);
Serial.print(", 16-bit : ");
Serial.print(analogRead(A0));

// تغییر رزولیشن به حالت 8 بیتی و خواندن A0
analogReadResolution(8);
Serial.print(", 8-bit : ");
Serial.println(analogRead(A0));

//یک تاخیر کوچک برای اینکه serial monitor هنگ نکند.
delay(100);
}


https://telegram.me/ArduinoKaraneJavan
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
👍1