هر برد مبتنی بر میکروکنترلر AVR که از شماتیک استاندارد آردوینو پیروی می کند و با بوت لودر آردوینو فلش می شود را می توان برد آردوینو نامید. آردوینو به عنوان سختافزار منبع باز نامیده میشود و آردوینو IDE نیز منبع باز است و هر کسی میتواند کتابخانههای خود را به آردوینو کمک کند. همه بردهای آردوینو باید با آردوینو IDE سازگار باشند که میتواند برای برنامهریزی بردهای آردوینو استفاده شود. از آنجایی که برد آردوینو میتواند به عنوان یک سیستم مستقل عمل کند، باید این قابلیت را داشته باشد که ورودیها را پردازش کند و سپس خروجی مربوطه را تولید کند. از طریق این ورودی ها و خروجی ها است که آردوینو به عنوان یک سیستم می تواند با محیط ارتباط برقرار کند. بردهای آردوینو می توانند با سایر دستگاه ها با استفاده از پورت های ارتباطی استاندارد ورودی/خروجی آنالوگ ورودی/خروجی مانند USART، IIC، و USB و غیره ارتباط برقرار کنند.
یک سیستم مبتنی بر میکروکنترلر گاهی اوقات با تولید پالس هایی با فرکانس های خاص و چرخه وظیفه، سایر دستگاه ها را کنترل می کند. این معمولاً زمانی اتفاق میافتد که دستگاه متصل هیچ پردازندهای در داخل خود نداشته باشد، مانند سیستم نمایشگر LED یا سیستم رانندگی موتور با استفاده از مدارهای مبتنی بر PWM یا هر نوع سیستم سوئیچینگ. این پروژه خاص نشان می دهد که کدگذاری برد آردوینو برای تولید امواج مربعی با هر فرکانس مورد نیاز چقدر ساده است.
نحوه کار این پروژه بر اساس برد آردوینو پرو مینی و IDE نسخه 1.0.3 برای ویندوز توضیح داده شده است. مزیت این برد این است که اندازه آن بسیار کوچک است. هر نوع اتصال دهنده را می توان بر اساس نیازهای ما در حاشیه آن لحیم کرد. این تخته نان بسیار سازگار است و فضای بسیار کمتری را نسبت به یک تخته نان معمولی اشغال می کند.
تصویر برد arduino pro-mini و arduino IDE در زیر نشان داده شده است.
از آنجایی که برد arduino pro-mini مداری برای اتصال آن با پورت سریال یا پورت USB رایانه شخصی ندارد، برای اتصال آن به رایانه شخصی به یک برد تبدیل USB به TTL خارجی نیاز است. این سخت افزار به برنامه نویسی برد آردوینو کمک می کند و همچنین به ارتباط سریال با پورت USB کامپیوتر کمک می کند.
طی کرده و تمام مواردی را که در آنجا مورد بحث قرار گرفته است را امتحان کرده است. Arduino IDE دو تابع به نامهای tone() و noTone() را برای شروع تولید موج مربعی در یک مکان خاص ارائه میکند. فرکانس و به ترتیب برای توقف موج مربعی. جزئیات توابع در بخش زیر مورد بحث قرار گرفته است.
تون تابع برای تولید موج مربعی در فرکانس مورد نیاز و همچنین برای مدت زمان مورد نیاز استفاده می شود. تابع اساساً دارای سه پارامتر است که اولی نشاندهنده شماره پینی است که در آن موج میتواند تولید شود، دومی فرکانس موج مربعی و پارامتر سوم مدت زمانی است که تا آن موج باید ادامه یابد. نمونه اولیه تابع به شرح زیر است.
تن (شماره پین، فرکانس، مدت زمان)؛
پارامتر pin_number باید با تعداد پایه ای که موج مربعی در آن تولید می شود ارائه شود. به عنوان مثال برای تولید موج مربعی در پین شماره 8، اولین پارامتر ارائه شده در فراخوانی تابع باید 8 باشد.
پارامتر دوم تابع فرکانس است که باید با فرکانس مورد نیاز بر حسب هرتز ارائه شود. به عنوان مثال برای تولید موج مربعی 1 کیلوهرتز، پارامتر دوم در فراخوانی تابع باید برابر با 1000 باشد.
هنگامی که موج مربعی فقط برای یک مدت زمان خاص تولید شود، مدت زمان مورد نیاز بر حسب میلی ثانیه باید به عنوان پارامتر سوم ارائه شود. اگر موج مربعی نیاز داشته باشد تا زمانی که توسط تابع ()noTone متوقف شود، می توان از پارامتر سوم در فراخوانی تابع اجتناب کرد. به عنوان مثال برای تولید موج مربعی در پین شماره 8، با فرکانس 1KHz و مدت زمان 5 ثانیه می توان از عبارت زیر استفاده کرد.
تن (8، 1000، 5000)؛
هنگامی که موج مورد نیاز است که در پین خاص ارائه شود تا زمانی که توسط تابع noTone() متوقف شود، می توان از عبارت زیر استفاده کرد.
تن ( 8, 1000 );
تابع noTone را می توان برای متوقف کردن موج مربعی موجود در شماره پینی که در آن توسط فراخوانی تابع tone() آغاز شده است استفاده کرد. تابع دارای یک پارامتر است که شماره پینی است که در آن موج باید متوقف شود. به عنوان مثال می توان از تابع برای متوقف کردن موج تولید شده در پین شماره 8 همانطور که در زیر نشان داده شده است استفاده کرد.
noTone (8);
کد نوشته شده برای این پروژه خاص ال سی دی را در حالت 4 بیتی اولیه می کند و با کمک توابع ارائه شده توسط کتابخانه <LiquidCrystal.h> مقداری متن اولیه را در آن نمایش می دهد. عملکردهایی که می توان برای دسترسی به LCD مورد استفاده قرار داد قبلاً در پروژه های قبلی در مورد نحوه اتصال LCD ، نحوه نمایش مقدار سنسور در LCD ، نحوه اتصال LCD به رایانه شخصی و نحوه ساخت یک صفحه نمایش اسکرول ال سی دی بحث شده است .
سپس کد سه فرکانس مختلف 10 هرتز، 100 هرتز و 1 کیلوهرتز را با استفاده از تابع tone() برای مدت 10 ثانیه تولید می کند. مدت زمان در واقع با کمک تابع delay() تولید می شود و پس از بازگشت delay() موج با استفاده از تابع noTone() متوقف می شود. این کد همچنین یک LED متصل به پین شماره 8 را با استفاده از توابع pinMode() و digitalWrite() می درخشد. جزئیات توابع pinMode()، digitalWrite() و delay() قبلاً در پروژه های قبلی در مورد نحوه شروع کار با برد آردوینو و نحوه استفاده از ورودی و خروجی دیجیتال برد آردوینو بحث شده است.
هنگامی که کدنویسی به پایان رسید، میتوانید کد را تأیید کرده و روی برد آردوینو آپلود کنید، همانطور که در پروژه توضیح داده شده است که چگونه با آردوینو شروع کنید . شکل موج را می توان با استفاده از یک CRO که به پین شماره 8 متصل است مشاهده کرد.
کد منبع پروژه
### /*============================ EG LABS ===================================// Demonstration on how to generate square wave using Arduino The circuit: The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * 10K resistor: * ends to +5V and ground * wiper to LCD pin 3 * LED anode attached to digital output 6 * LED cathode attached to ground through a 1K resistor //============================ EG LABS ===================================*/ // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // give the LED pin a name: int led = 6; void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("ENGINEERS GARAGE"); lcd.setCursor(0,1); lcd.print("PULSE GENERATION"); // initialize the digital pin as an output. pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); tone(8, 10); // generate square wave at 10Hz delay(10000); digitalWrite(led, LOW); noTone(8); // stop the wave delay(3000); digitalWrite(led, HIGH); tone(8, 100); // generate square wave at 100 HZ delay(10000); digitalWrite(led, LOW); noTone(8); // stop the wave delay(3000); digitalWrite(led, HIGH); tone(8, 1000); // generate square wave at 1Khz delay(10000); digitalWrite(led, LOW); noTone(8); // stop the wave delay(3000); } ###
نمودارهای مدار