در قسمت چهارم از آموزش آردوینو به بررسی چگونگی ساخت یک آردوینو اسکچ با استفاده از IDE و نکات مربوط به ساخت و ذخیره فایلهای اسکچ پرداختیم. در این قسمت قصد داریم به بررسی انجام یک پروژه آردوینو ساده، بپردازیم.
خلاصه کلی
در این قسمت میخواهیم یک پروژه آردوینو ساده و درعینحال، جذاب را همراه شما بررسی کنیم. پس تا پایان این مطلب سیسوگ را همراهی کنید.
این اسکچ بر اساس کد چشمکزن LED پست قبلی (قسمت چهارم) است، با این تفاوت که سرعت چشمک زدن LED بسته به شدت نور محیط متغییر خواهد بود. نرخ چشمک زن توسط یک سنسور حساس به نور به نام فوتوسل تعیین میشود. فوتوسل در واقع photo resistor (فتورزیستور) است، مقاومت وابسته به نور (light-dependent resistor) به اختصار LDR نیز گفته میشود. فوتوسل را همانطور که در شکل 1 نشاندادهشده است، سیمکشی کنید.
✅نکته
فوتوسلها دارای ترکیب شیمیایی سولفید کادمیوم هستند که مادهای خطرناک است. اگر نتوانستید فوتوسل را تهیه کنید و یا کلاً ترجیح میدهید که از فوتوسل استفاده نکنید، میتوانید بهجای آن از فتوترانزیستور استفاده کنید.
فتوترانزیستور دارای یکپایه بلند و یکپایه کوتاه است، مانند LED. شما میتوانید آن را دقیقاً مانند شکل 1، سیمکشی کنید، اما باید پایه بلند را به ولتاژ 5 ولت و پایه کوتاه را به مقاومت و پین 0 متصل کنید. همچنین، سعی کنید یک فتوترانزیستور مثل Adafruit part number 2831 تهیه کنید که بتواند نور قابلمشاهده را از نور معمولی تشخیص دهد.
اسکچ زیر سطح نور یک فوتوسل متصل به پین آنالوگ را نشان میدهد. میزان نوری که به مقاومت نوری برخورد میکند، تأخیر چشمکزدن LED را تغییر میدهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* * Blink with photoresistor sketch */ const int sensorPin = A0; // connect sensor to analog input 0 void setup() { pinMode(LED_BUILTIN, OUTPUT); // enable output on the led pin } void loop() { int delayval = analogRead(sensorPin); // read the analog input digitalWrite(LED_BUILTIN, HIGH); // set the LED on delay(delayval); // delay is dependent on light level digitalWrite(LED_BUILTIN, LOW); // set the LED off delay(delayval); } |
در واقع، مقدار مقاومت نشاندادهشده در شکل 1 به محدوده فوتوسل شما بستگی دارد: شما به یک مقاومت نیاز دارید که در حدود مقاومت ماکزیمم (بیشترین مقدار فوتوسل زمانی اتفاق میافتد که نوری به این مقاومت نتابد.) فوتوسل باشد. شما میتوانید این مقدار را با پوشاندن فوتوسل در حالی که مقاومت آن را با یک مولتیمتر اندازهگیری میکنید، پیدا کنید. بنابراین، اگر فوتوسل شما در ناحیه 10K اهم باشد، از یک مقاومت 10K استفاده کنید. اگر از یک فتوترانزیستور استفاده میکنید، مقداری بین 1K و 10K مناسب خواهد بود.
تغییر میزان نور بر روی سنسور باعث تغییر در مقدار ولتاژ در پین آنالوگ 0 میشود. دستور analogRead در تاریکی حدود 200 و در روشنی حدود 800 را برمیگرداند. (حساسیت به نوع فوتوسل و مقاومتی که استفاده میکنید، بستگی دارد و اگر به جای فوتوسل از فتوترانزیستور استفاده شود، نتیجه متفاوت خواهد بود). خواندن ولتاژ آنالوگ مدت زمان روشن و خاموش بودن LED را تعیین میکند؛ بنابراین تاخیر چشمک زدن با افزایش نور افزایش مییابد.
شما میتوانید نرخ چشمکزدن LED را با استفاده از تابع Arduino map بهصورت زیر تغییر دهید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /* * Blink with photoresistor (scaled) sketch */ const int sensorPin = A0; // connect sensor to analog input 0 // low and high values for the sensor readings; you may need to adjust these const int low = 200; const int high = 800; // The next two lines set the min and max delay between blinks. const int minDuration = 100; // minimum wait between blinks const int maxDuration = 1000; // maximum wait between blinks void setup() { pinMode(LED_BUILTIN, OUTPUT); // enable output on the LED pin } void loop() { int delayval = analogRead(sensorPin); // read the analog input // the next line scales the delay value between the min and max values delayval = map(delayval, low, high, minDuration, maxDuration); delayval = constrain(delayval, minDuration, maxDuration); digitalWrite(LED_BUILTIN, HIGH); // set the LED on delay(delayval); // delay is dependent on light level digitalWrite(LED_BUILTIN, LOW); // set the LED off delay(delayval); } |
✅نکته
اگر در زمان تغییر شدت نور، تغییری در مقادیر مشاهده نمیکنید، باید پیوسته مقادیر low و high را تغییر دهید. اگر از یک فتوترانزیستور استفاده میکنید و تغییری در نرخ چشمکزدن مشاهده نمیشود، مقدار 10 را برای low امتحان کنید.
اگر به هر دلیلی مقدار تأخیر شما خارج از محدوده بین low و high باشد، مقدار تابع map مقداری خارج از محدوده بین minDuration و maxDuration خواهد شد. اگر بعد از تابع map، از تابع constrain استفاده کنید، مشکل مقادیر خارج از محدوده (out-of-range) برطرف میشود.
اگر میخواهید مقدار متغیر delayval را در کامپیوتر خود مشاهده کنید، میتوانید این مقادیر را در سریال مانیتور آردوینو پرینت کنید. این اسکچ، کد مقدار تأخیر را در سریال مانیتور نمایش میدهد. شما میتوانید در نرمافزار Arduino IDE، با کلیک بر روی آیکون سمت راست نوار بالا، پنجره مانیتور سریال را باز کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* * Blink sketch with photoresistor (scaled with serial output) */ const int sensorPin = A0; // connect sensor to analog input 0 // Low and high values for the sensor readings. You may need to adjust these. const int low = 200; const int high = 800; // the next two lines set the min and max delay between blinks const int minDuration = 100; // minimum wait between blinks const int maxDuration = 1000; // maximum wait between blinks void setup() { pinMode(LED_BUILTIN, OUTPUT); // enable output on the led pin Serial.begin(9600); // initialize Serial } void loop() { int delayval = analogRead(sensorPin); // read the analog input // the next line scales the delay value between the min and max values delayval = map(delayval, low, high, minDuration, maxDuration); delayval = constrain(delayval, minDuration, maxDuration); Serial.println(delayval); // print delay value to serial monitor digitalWrite(LED_BUILTIN, HIGH); // set the LED on delay(delayval); // delay is dependent on light level digitalWrite(LED_BUILTIN, LOW); // set the LED off delay(delayval); } |
تغییر فرکانس صدا متناسب با تغییرات نور
مانند شکل زیر شما میتوانید با اتصال یک بلندگو کوچک به پین ۹، از سنسور نوری برای کنترل فرکانس صدا استفاده کرد.
برای تنظیم نرخ روشن و خاموششدن پین ۹ و ایجاد فرکانس در طیف صدا قابل شنود، باید مقادیر حداقل و حداکثر تأخیر را کاهش دهید. بهعنوانمثال، میتوانید از کد زیر استفاده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * Speaker sketch with photoresistor */ const int outputPin = 9; // Speaker connected to digital pin 9 const int sensorPin = A0; // connect sensor to analog input 0 const int low = 200; const int high = 800; const int minDuration = 1; // 1 ms on, 1 ms off (500 Hz) const int maxDuration = 10; // 10 ms on, 10 ms off (50 Hz) void setup() { pinMode(outputPin, OUTPUT); // enable output on the led pin } void loop() { int sensorReading = analogRead(sensorPin); // read the analog input int delayval = map(sensorReading, low, high, minDuration, maxDuration); delayval = constrain(delayval, minDuration, maxDuration); digitalWrite(outputPin, HIGH); // set the pin on delay(delayval); // delay is dependent on light level digitalWrite(outputPin, LOW); // set the pin off delay(delayval); } |
در ادامه مقالات آموزش آردوینو سیسوگ را همراهی کنید. در قسمت بعدی به بررسی آموزش پروگرام بردهایی که در لیست IDE نیستند می پردازیم، با ما همراه باشید.