مدار مربوط به درس 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
کالیبراسیون
سلام دوستان امروز میخواهیم روش کالیبره کردن را با هم آموزش دیده و انجام دهیم.
برای این منظور مدار شکل بالا را ببندید تا با هم به تست و آزمایش بپردازیم.
برنامه زیر را در نظر بگیرید:
// ثابتها:
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
ورودی آنالوگ (ادامه...)
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
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
✅ اولین کانال آموزش آردوینو در تلگرام
✅ اتوماسیون خانگی و صنعتی
✅ برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 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
از ورودی های آنالوگ نیز میتوان بعنوان ورودی و خروجی دیجیتال استفاده کرد.
برای این منظور میتوان از روش زیر پایه آنالوگ را بعنوان خروجی دیجیتال پیکره بندی نمود:
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
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
برای انسان های موفق
در هفته، هفت "امروز" وجود دارد؛
و برای انسان های ناموفق، هفت "فردا"
آردینو کاران جوان👍❤️
https://telegram.me/ArduinoKaraneJavan
در هفته، هفت "امروز" وجود دارد؛
و برای انسان های ناموفق، هفت "فردا"
آردینو کاران جوان👍❤️
https://telegram.me/ArduinoKaraneJavan
This media is not supported in your browser
VIEW IN TELEGRAM
#آردوینو کاران جوان
✅ اولین کانال آموزش آردوینو در تلگرام
✅ اتوماسیون خانگی و صنعتی
✅ برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
✅ اولین کانال آموزش آردوینو در تلگرام
✅ اتوماسیون خانگی و صنعتی
✅ برای عضویت کلیک کنید 👇🏻👇🏻👇🏻 https://telegram.me/ArduinoKaraneJavan
سلام بر آردوینو کاران جوان
امروز میخواهیم یک پروژه با ماژول PING یا همون ماژول آلتراسونیک که تصویر اون رو در گیف بالا می بینید براتون آموزش بدهیم.
اما نه دقیقاً همون پروژه. بلکه میخواهیم با استفاده از ماژول PING یک متر دیجیتالی بسازیم و فاصله اجسام از سنسور رو برحسب سانتیمتر روی پورت سریال نشون بدیم و در پروژه بعدی که می خواهیم کار با LCD های کاراکتری رو یاد بگیریم بجای پورت سریال متراژ خوانده شده را روی LCD نمایش دهیم.
ماژول PING چیست؟
اساس کار ماژول آلتراسونیک (فراصوت) مشابه رادار یا ردیاب صوتی، تشخیص ویژگی های هدف از طریق تحلیل بازتاب امواج رادیویی یا صوتی می باشد. این ماژول امواج صوتی را با فرکانس بالا ایجاد کرده و موج بازتاب شده را دریافت و تحلیل می نماید.
این حسگر با محاسبه ی زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصلهٔ جسم را محاسبه می کند.
در این ماژول سنجش مسافت، فرستنده آلتراسونیک و حسگر بر روی یک برد قرار داده شده و مدار الکترونیکی واسط، کار را برای استفاده از این ماژول بسیار ساده می نماید.
به طور کلی این ماژول با همه میکرو کنترلر ها سازگار می باشد؛ اما چنانچه از آردوینو برای به کارگیری این ماژول استفاده می نمایید با استفاده از توابع NewPing در چند خط کد می توانید آن را راه اندازی نمایید.
قیمت ارزان و به کارگیری آسان، این ماژول را تبدیل به یکی از ماژول های معروف و پرکاربرد در حوزه سنسورهای آلتراسونیک سنجش مسافت تبدیل کرده است.
قبل از ارائه توضیحات در مورد طرح برنامه بهتر است که یک نکته را یاد آوری نمایم که برای کار با هر نوع ماژولی که می خواهیم به آردوینو متصل نماییم باید ابتدا کتابخانه های آنرا از اینترنت دریافت کرده و با استفاده از روشهایی که قبلاً توضیح داده شده اند به نرم افزار آردوینو اضافه نماییم. که در این مثال ما از کتابخانه NewPing.h که مربوط به ماژول PING یا همان آلتراسونیک می باشد استفاده خواهیم کرد بنابراین ابتدا باید این کتابخانه را به نرم افزار آردوینو اضافه نماییم تا برنامه نوشته شده کار کند. البته من کتابخانه NewPing.h را در زیر جهت دانلود قرار خواهم داد.
پس از اضافه نمودن کتابخانه به برنامه شما باید یک متغیر از نوع کلاس کتابخانه مورد نظر بسازید و آرگومانهایی را که لازم دارد به آن بدهید.
خوب به نظرم بهتر است که به برنامه اصلی بپردازیم و نحوه کارکرد آنرا با هم برسی کنیم:
#include <NewPing.h>
// پین آردوینو که به پین trigger بر روی سنسور اولتراسونیک متصل می شود. //
#define TRIGGER_PIN 7
// پین آردوینو که به پین echo بر روی سنسور اولتراسونیک متصل می شود. //
#define ECHO_PIN 8
// حداکثر مسافتی که ما می خواهیم PING کنیم (بر حسب سانتی متر). حداکثر فاصله سنسور بین 400 تا 500 سانتی متر است //
#define MAX_DISTANCE 200
// یک متغیر برای ذخیره فاصله اندازه گیری شده تعریف می کنیم. //
int temp = 0;
// تعریف یک متغیر به نام sonar از نوع کلاس NewPing و همچنین //
// تنظیم پایه های آردوینو و حداکثر فاصله برای کتابخانه NewPing //
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
// تاخیر 100 میلی ثانیه بین PING ها(حدود 10 عدد PING در ثانیه) حداقل تاخیر بین PING ها باید 29 میلی ثانیه باشد. //
delay(100);
// ارسال PING و دریافت زمان PING برحسب میکروثانیه //
// دستور ()ping یک سیگنال مافوق صوت از پایه trigger ارسال میکند و انعکاس آنرا در پایه echo دریافت میکند //
// و با استفاده از رابطه زیر میتوانیم زمان رفت و برگشت آنرا بر حسب میکروثانیه بدست آوریم و به سانتیمتر تبدیل کنیم. //
// چون زمان نمی تواند منفی باشد، یک متغیر از نوع int بدون علامت تعریف کرده و زمان اندازه گیری شده را در آن قرار می دهیم. //
unsigned int uS = sonar.ping() / US_ROUNDTRIP_CM;
// اگر فاصله اندازه گیری شده با مقدار قبلی متفاوت است //
if (uS != temp)
{
// مقدار جدید را ذخیره کن. //
temp = uS;
Serial.print("The distance is : ");
// چاپ مقدار اندازه گیری شده در خروجی. (مقدار 0 یعنی خارج از فاصله تعریف شده) //
Serial.print(temp);
Serial.println("cm");
}
}
خوب دیدید که کار با ماژول ها در آردوینو بخاطر وجود کتابخانه های قدرتمند آن چقدر ساده است؟
حالا شما میتوانید که به راحتی با ماژول PING کار کنید و یک متر دیجیتالی برای خود بسازید. و یا با استفاده از دستور IF در برنامه شرط تعیین کنید که مثلاً اگر جسمی با فاصله 120 سانتی متر از ماژول قرار گرفت چه عملی انجام گیرد و غیره...
https://telegram.me/ArduinoKaraneJavan
امروز میخواهیم یک پروژه با ماژول PING یا همون ماژول آلتراسونیک که تصویر اون رو در گیف بالا می بینید براتون آموزش بدهیم.
اما نه دقیقاً همون پروژه. بلکه میخواهیم با استفاده از ماژول PING یک متر دیجیتالی بسازیم و فاصله اجسام از سنسور رو برحسب سانتیمتر روی پورت سریال نشون بدیم و در پروژه بعدی که می خواهیم کار با LCD های کاراکتری رو یاد بگیریم بجای پورت سریال متراژ خوانده شده را روی LCD نمایش دهیم.
ماژول PING چیست؟
اساس کار ماژول آلتراسونیک (فراصوت) مشابه رادار یا ردیاب صوتی، تشخیص ویژگی های هدف از طریق تحلیل بازتاب امواج رادیویی یا صوتی می باشد. این ماژول امواج صوتی را با فرکانس بالا ایجاد کرده و موج بازتاب شده را دریافت و تحلیل می نماید.
این حسگر با محاسبه ی زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصلهٔ جسم را محاسبه می کند.
در این ماژول سنجش مسافت، فرستنده آلتراسونیک و حسگر بر روی یک برد قرار داده شده و مدار الکترونیکی واسط، کار را برای استفاده از این ماژول بسیار ساده می نماید.
به طور کلی این ماژول با همه میکرو کنترلر ها سازگار می باشد؛ اما چنانچه از آردوینو برای به کارگیری این ماژول استفاده می نمایید با استفاده از توابع NewPing در چند خط کد می توانید آن را راه اندازی نمایید.
قیمت ارزان و به کارگیری آسان، این ماژول را تبدیل به یکی از ماژول های معروف و پرکاربرد در حوزه سنسورهای آلتراسونیک سنجش مسافت تبدیل کرده است.
قبل از ارائه توضیحات در مورد طرح برنامه بهتر است که یک نکته را یاد آوری نمایم که برای کار با هر نوع ماژولی که می خواهیم به آردوینو متصل نماییم باید ابتدا کتابخانه های آنرا از اینترنت دریافت کرده و با استفاده از روشهایی که قبلاً توضیح داده شده اند به نرم افزار آردوینو اضافه نماییم. که در این مثال ما از کتابخانه NewPing.h که مربوط به ماژول PING یا همان آلتراسونیک می باشد استفاده خواهیم کرد بنابراین ابتدا باید این کتابخانه را به نرم افزار آردوینو اضافه نماییم تا برنامه نوشته شده کار کند. البته من کتابخانه NewPing.h را در زیر جهت دانلود قرار خواهم داد.
پس از اضافه نمودن کتابخانه به برنامه شما باید یک متغیر از نوع کلاس کتابخانه مورد نظر بسازید و آرگومانهایی را که لازم دارد به آن بدهید.
خوب به نظرم بهتر است که به برنامه اصلی بپردازیم و نحوه کارکرد آنرا با هم برسی کنیم:
#include <NewPing.h>
// پین آردوینو که به پین trigger بر روی سنسور اولتراسونیک متصل می شود. //
#define TRIGGER_PIN 7
// پین آردوینو که به پین echo بر روی سنسور اولتراسونیک متصل می شود. //
#define ECHO_PIN 8
// حداکثر مسافتی که ما می خواهیم PING کنیم (بر حسب سانتی متر). حداکثر فاصله سنسور بین 400 تا 500 سانتی متر است //
#define MAX_DISTANCE 200
// یک متغیر برای ذخیره فاصله اندازه گیری شده تعریف می کنیم. //
int temp = 0;
// تعریف یک متغیر به نام sonar از نوع کلاس NewPing و همچنین //
// تنظیم پایه های آردوینو و حداکثر فاصله برای کتابخانه NewPing //
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
// تاخیر 100 میلی ثانیه بین PING ها(حدود 10 عدد PING در ثانیه) حداقل تاخیر بین PING ها باید 29 میلی ثانیه باشد. //
delay(100);
// ارسال PING و دریافت زمان PING برحسب میکروثانیه //
// دستور ()ping یک سیگنال مافوق صوت از پایه trigger ارسال میکند و انعکاس آنرا در پایه echo دریافت میکند //
// و با استفاده از رابطه زیر میتوانیم زمان رفت و برگشت آنرا بر حسب میکروثانیه بدست آوریم و به سانتیمتر تبدیل کنیم. //
// چون زمان نمی تواند منفی باشد، یک متغیر از نوع int بدون علامت تعریف کرده و زمان اندازه گیری شده را در آن قرار می دهیم. //
unsigned int uS = sonar.ping() / US_ROUNDTRIP_CM;
// اگر فاصله اندازه گیری شده با مقدار قبلی متفاوت است //
if (uS != temp)
{
// مقدار جدید را ذخیره کن. //
temp = uS;
Serial.print("The distance is : ");
// چاپ مقدار اندازه گیری شده در خروجی. (مقدار 0 یعنی خارج از فاصله تعریف شده) //
Serial.print(temp);
Serial.println("cm");
}
}
خوب دیدید که کار با ماژول ها در آردوینو بخاطر وجود کتابخانه های قدرتمند آن چقدر ساده است؟
حالا شما میتوانید که به راحتی با ماژول PING کار کنید و یک متر دیجیتالی برای خود بسازید. و یا با استفاده از دستور IF در برنامه شرط تعیین کنید که مثلاً اگر جسمی با فاصله 120 سانتی متر از ماژول قرار گرفت چه عملی انجام گیرد و غیره...
https://telegram.me/ArduinoKaraneJavan
شماتیک مدار متر دیجیتالی مربوط به درس 8 https://telegram.me/ArduinoKaraneJavan
NewPing.zip
8.1 KB
کتابخانه NewPing.h https://telegram.me/ArduinoKaraneJavan
HC-SR04-datasheet-version-2.pdf
526 KB
دیتاشیت ماژول PING https://telegram.me/ArduinoKaraneJavan
Lesson_8.ino
2.5 KB
#درس 8: ساخت متر دیجیتالی https://telegram.me/ArduinoKaraneJavan
ماژول آلتراسونیک یا PING مدل HC-SR04 https://telegram.me/ArduinoKaraneJavan