در این شبیه سازی از وقفه خارجی INT0 در اردویینو U9 جهت شمارش استفاده شده است
دستور وقفه بفرم زیر است :
attachInterrupt(interrupt, ISR, mode);
interrupt : شماره وقفه ای که میخواین ازش استفاده کنید، دو تا وقفه داریم،
وقفه ۰ و ۱ (جدول بالا)
mode : توسط این قسمت نوع تحریک شدن وقفه
رو تعیین میکنیم، مثلا به ازای هر تغییر ولتاژی(CHANGE) وقفه
رخ بده یا وقتی ولتاژ ۰ منطقی هستش(LOW) یا
وقتی که ولتاژ ۱ منطقی هستش(HIGH) یا وقتی که از ۰
منطقی میریم به ۱ منطقی(RISING) و یا برعکس(FALLING)…..این کلمات پر رنگ رو بسته به نیازتون یکیشون و در
mode قرار بدید.
ISR : نام تابع وقفه، این نام اختیاری هستش،
فقط شما این نامی که این جا میدید رو باس یه تابع تعریف کنید با این نام و کد هایی
که دوس دارید در صورت تحریک شدن وقفه اجرا بشن رو توش قرار بدید.
لازم بذکر است که LCD در این مدار I2C بوده و شکل مداری آن بفرم زیر است :
از کد زیر می توان جهت پیدا کردن آدرس تجهیز i2c استفاده کرد :
/*I2C_scanner This sketch tests standard 7-bit addresses. Devices with higher bit address might not be
seen properly.*/ #include
<Wire.h> void
setup() { Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void
loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for (address = 1; address < 127; address++
) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at
address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknown error at
address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices
found\n"); else Serial.println("done\n"); delay(5000); }
شبیه سازی با نرم افزار PROTEUS & ARDUINO
قیمت 15000 ت
بمنظور راه اندازی ماژول sim800L و ارتباط فیزیکی آن به ماژول آردویینو به مدار ابتدایی نیاز است لذا در این آموزش نحوه اتصال به همراه نحوه رفع عیوب احتمالی شرح داده شده است.
در بازار ریموت هایی تولید شده که قابلیت کپی کردن ریموت را دارد و بلحاظ کارایی ، جایگاه ویژه ای برای خود در بازار، باز کرده است. نمونه ای از این ریموت ها را در شکل زیر مشاهده می نمایید :
در این آموزش می خواهیم اساس کارکرد این کنترل ها را بررسی نماییم.
دریافت کننده ریموت کنترل
ارتباطات اینفرارد INFRARED ( IR ) به طور گسترده در صنعت کنترل تلویزیون کاربر دارد.توسط گیرنده و فرستنده IR شما می توانید پروژه های آردویینو را برنامه نویسی و نهایتا آنرا بسازید. قبل از برنامه نویسی لازمست در مورد اینفرارد توضیحاتی بدهیم :
اینفرارد چیست ؟
تابش اینفرارد فرمی از نور است همانند آن نوری که در محیط اطراف ماست.تنها تفاوت بین نور IR و نور مرئی در فرکانس و طول موج است. تابش مادون قرمز خارج از محدوده نور مرئی قرار دارد، بنابراین انسان نمی تواند آن را ببیند
از آنجایی که IR یک نوع نور است، ارتباط IR نیاز به یک خط دید مستقیم از گیرنده به فرستنده دارد. نمی تواند از طریق دیوارها یا سایر مواد مانند WiFi یا بلوتوث منتقل شود.
نحوه عملکرد ریموت ها و گیرنده های IR
یک سیستم ارتباطی معمولی مادون قرمز به یک فرستنده IR و یک گیرنده IR نیاز دارد. فرستنده دقیقاً مانند یک LED استاندارد به نظر می رسد، با این تفاوت که به جای طیف مرئی، نور را در طیف IR تولید می کند. اگر نگاهی به جلوی کنترل از راه دور تلویزیون بیندازید، LED فرستنده IR را خواهید دید:
از همین نوع LED در بردهای شکست فرستنده IR برای آردوینو استفاده می شود. می توانید آن را در جلوی این فرستنده IR Keyes ببینید:
گیرنده IR یک فتودیود و پیش تقویت کننده است که نور مادون قرمز را به سیگنال الکتریکی تبدیل می کند. دیودهای گیرنده IR معمولاً به شکل زیر هستند:
مدولاسیون سیگنال IR
نور مادون قرمز توسط خورشید، لامپ ها و هر چیز دیگری که گرما تولید می کند ساطع می شود. این بدان معناست که نویز نور IR زیادی در اطراف ما وجود دارد. برای جلوگیری از تداخل این نویز با سیگنال IR، از تکنیک مدولاسیون سیگنال استفاده می شود. در مدولاسیون سیگنال IR، یک رمزگذار روی کنترل از راه دور IR یک سیگنال باینری را به یک سیگنال الکتریکی مدوله شده تبدیل می کند. این سیگنال الکتریکی به LED فرستنده ارسال می شود. LED فرستنده سیگنال الکتریکی مدوله شده را به سیگنال نور مادون قرمز مدوله شده تبدیل می کند. سپس گیرنده IR سیگنال نور مادون قرمز را دمدوله می کند و قبل از اینکه اطلاعات را به یک میکروکنترلر ارسال کند، آن را به باینری تبدیل می کند:
سیگنال IR مدوله شده مجموعه ای از پالس های نور مادون قرمز است که با فرکانس بالا به نام فرکانس حامل روشن و خاموش می شوند. فرکانس حامل استفاده شده توسط اکثر فرستنده ها 38 کیلوهرتز است، زیرا در طبیعت نادر است و بنابراین می توان آن را از نویز محیط متمایز کرد. به این ترتیب گیرنده IR متوجه خواهد شد که سیگنال 38 کیلوهرتز از فرستنده ارسال شده و از محیط اطراف دریافت نشده است. دیود گیرنده تمام فرکانس های نور IR را تشخیص می دهد، اما دارای یک فیلتر باند گذر است و فقط در فرکانس 38 کیلوهرتز از IR عبور می کند. سپس سیگنال مدوله شده را با یک پیش تقویت کننده تقویت می کند و قبل از ارسال آن به میکروکنترلر، آن را به سیگنال باینری تبدیل می کند.
الگویی که در آن سیگنال IR مدوله شده به باینری تبدیل می شود توسط یک پروتکل انتقال تعریف می شود. پروتکل های انتقال IR زیادی وجود دارد. سونی، ماتسوشیتا، NEC و RC5 برخی از پروتکل های رایج هستند. پروتکل NEC نیز رایج ترین نوع در پروژه های آردوینو است، بنابراین من از آن به عنوان مثال استفاده می کنم تا به شما نشان دهم که چگونه گیرنده سیگنال مادون قرمز مدوله شده را به یک باینری تبدیل می کند. «1» منطقی با یک پالس IR به طول 562.5 میکروثانیه با فرکانس IR 38 کیلوهرتز و سپس یک پالس LOW با طول 1687.5 میکرو ثانیه شروع میشود. "0" منطقی با یک پالس HIGH 562.5 میکروثانیه و به دنبال یک پالس LOW با طول 562.5 µs ارسال می شود:
به این صورت است که پروتکل NEC داده های باینری را به یک سیگنال مدوله شده رمزگذاری و رمزگشایی می کند. پروتکل های دیگر فقط در مدت زمان تک تک پالس های HIGH و LOW متفاوت هستند. کدهای IR هر بار که دکمه ای را بر روی کنترل از راه دور فشار می دهید، یک کد هگزادسیمال منحصر به فرد ایجاد می شود. این اطلاعاتی است که مدوله شده و از طریق IR به گیرنده ارسال می شود. برای اینکه بفهمد کدام کلید فشرده شده است، میکروکنترلر گیرنده باید بداند کدام کد مربوط به هر کلید روی کنترل از راه دور است. ریموتهای مختلف کدهای متفاوتی را برای فشار دادن کلیدها ارسال میکنند، بنابراین باید کد تولید شده برای هر کلید را روی کنترل از راه دور خاص خود تعیین کنید. اگر می توانید دیتاشیت را پیدا کنید، کدهای کلید IR باید فهرست شوند. اگر نه، یک طرح ساده آردوینو وجود دارد که اکثر کنترل های از راه دور محبوب را می خواند و با فشار دادن یک کلید، کدهای هگزا دسیمال را روی نمایشگر سریال چاپ می کند. من به شما نشان خواهم داد که چگونه آن را در یک دقیقه تنظیم کنید، اما ابتدا باید گیرنده را به آردوینو وصل کنیم… نحوه اتصال گیرنده IR به آردوینو انواع مختلفی از گیرنده های IR وجود دارد، برخی به صورت مستقل هستند و برخی بر روی یک برد شکسته نصب می شوند. برگه اطلاعات گیرنده IR خاص خود را بررسی کنید زیرا ممکن است پین ها متفاوت از گیرنده IR HX1838 و مجموعه راه دوری که من در اینجا استفاده می کنم ترتیب داده شوند.
با این حال، تمام گیرنده های IR دارای سه پایه هستند: سیگنال، زمین و Vcc. بیایید با اتصالات سخت افزاری شروع کنیم. چیدمان پین در اکثر تابلوهای شکست مانند این است:
پین اوت اکثر دیودهای مستقل به شرح زیر است:
برای اتصال گیرنده مادون قرمز برروی برد، آن را به صورت زیر به آردوینو متصل کنید:
برنامه نویسی گیرنده IR
هنگامی که گیرنده را وصل کردید، می توانیم کتابخانه آردوینو را نصب کرده و برنامه نویسی را شروع کنیم. در مثالهای زیر به شما نشان میدهم که چگونه کدهای ارسال شده توسط ریموت خود را پیدا کنید، چگونه پروتکل IR مورد استفاده توسط ریموت خود را پیدا کنید، چگونه فشارهای کلیدی را روی نمایشگر سریال یا LCD چاپ کنید و در نهایت، چگونه کنترل کنید. پین های خروجی آردوینو با ریموت.
کتابخانه IRremote را نصب کنید
ما از کتابخانه IRremote برای همه نمونه کدهای زیر استفاده خواهیم کرد. شما می توانید فایل ZIP کتابخانه را از اینجا دانلود کنید.
برای نصب کتابخانه از فایل ZIP، Arduino IDE را باز کنید، سپس به Sketch > Include Library > Add .ZIP Library بروید، سپس فایل ZIP IRremote را که از لینک بالا دانلود کرده اید انتخاب کنید. کدهای مربوط به ریموت خود را پیدا کنید برای پیدا کردن کدهای کلیدی برای کنترل از راه دور، این کد را در آردوینو خود آپلود کنید و مانیتور سریال را باز کنید:
|
با استفاده از برنامه بالا، جدولی از کلیدها و کدهای مربوط به آنها را از کنترلی که با گیرنده مادون قرمز و مجموعه راه دور HX1838 ارائه شده بود، استخراج کردم. توجه داشته باشید که با فشار دادن مداوم یک کلید، یک کد 0XFFFFFFFF دریافت خواهید کرد.
Key | Code |
CH- | 0xFFA25D |
CH | 0xFF629D |
CH+ | 0xFFE21D |
<< | 0xFF22DD |
>> | 0xFF02FD |
>|| | 0xFFC23D |
– | 0xFFE01F |
+ | 0xFFA857 |
EQ | 0xFF906F |
100+ | 0xFF9867 |
200+ | 0xFFB04F |
0 | 0XFF6897 |
1 | 0xFF30CF |
2 | 0xFF18E7 |
3 | 0xFF7A85 |
4 | 0xFF10EF |
5 | 0xFF38C7 |
6 | 0xFF5AA5 |
7 | 0xFF42BD |
8 | 0xFF4AB5 |
9 | 0xFF52AD |
پروتکل مورد استفاده توسط ریموت خود را پیدا کنید
اگر میخواهید روی پروژههای پیشرفتهتری کار کنید، دانستن اینکه ریموت شما از کدام پروتکل استفاده میکند میتواند مفید باشد. یا ممکن است فقط کنجکاو باشید. برنامه زیر پروتکل مورد استفاده توسط ریموت شما را شناسایی می کند. حتی باید روی اکثر کنترل های از راه دور خانه شما کار کند.
|
کلیدهای مانیتور سریال را چاپ کنید
من کد بالا را گسترش دادم تا مقدار کلید را به جای کد هگزادسیمال چاپ کنم:
|
اگر ریموت شما کدهای متفاوتی با کدهای جدول بالا ارسال می کند، کافی است کد هگز را در هر خطی که می گوید:
|
|
اگر 0XFFFFFFFF را از ریموت دریافت کنیم به معنای تکرار کلید قبلی است. بنابراین برای مدیریت الگوی کلید تکرار، هر بار که یک کد دریافت میشود، کد هگز را در یک متغیر جهانی key_value ذخیره میکنم: key_value = results.value; هنگامی که یک الگوی تکرار دریافت می کنید، سپس مقدار ذخیره شده قبلی به عنوان فشار کلید فعلی استفاده می شود. در انتهای بخش void loop() irrecv.resume() را فراخوانی می کنیم تا گیرنده ریست شود و برای دریافت کد بعدی آماده شود.
|
کد زیر با فشردن دکمه «5» به مدت 2 ثانیه پین دیجیتال 10 HIGH و با فشار دادن دکمه «2» پین دیجیتال 11 HIGH را به مدت 2 ثانیه می نویسد:
|
منابع :
از سری ای سی های استفاده شده در بازار نصب شده روی ریموت های تلویزیون و دیگر دستگاه ها می توان به مدل زیر اشاه کرد :
GW6122
در سنسور های اولتراسونیک یک کریستال پیزوالکتریک وجود دارد که این کریستال در داخل ترانسدیوسر، یک سیگنال الکتریکی را به پالس اولتراسونیک تبدیل خواهد کرد. پالس های اولتراسونیک به سمت بیرون ( سطح مایع ) ارسال و پس از برخورد با سطح سیال، منعکس خواهد شد و دوباره توسط سنسور دریافت می شود. فاصله بین سنسور التراسونیک و سطح سیال را می توان با اندازه گیری این مدت (زمان پرواز ) بدست آورد.
سنسور اولتراسونیک MICROSONIC بسته به مسافت اندازه گیری در 5 مدل ساخته شده است :
DISTANCE |
MODEL |
3 cm : 35 cm |
MIC+25 |
6.5 cm : 60 cm |
MIC+35 |
20 cm : 2 m |
MIC+130 |
35 cm : 5 m |
MIC+340 |
60 cm:6 m |
MIC+600 |
خروجی این سنسور ها معمولا هم ولتاژی است و هم جریانی
لذا با یک برنامه نویسی ساده می توان مقادیر نمایشی بر روی 7SEGMENT خود سنسور را بر روی نمایشگر دیگری نمایش داد.
همانگونه که می دانید سنسور های مختلفی جهت نمایش دما در بازار موجود هستند که سنسور Lm35 به دلیل نسبت کیفیت به قیمت در جایگاه ویژه ای قرار دارد لذا در این شبیه سازی از این سنسور بمنظور نمایش دما استفاده شده است.
همانگونه که در عکس میبینید ، این شبیه سازی دارای ویژگی های زیر است :
استفاده از برد َArduino
استفاده از سنسورLm35
برنامه نویسی با زبان Arduino
شبیه سازی در محیط نرم افزار Proteus
شبیه سازی با نرم افزار Proteus
مبلغ : 350,000 R
در این آموزش نحوه کار با 7SEGMRNT و نحوه برنامه نویسی آن با میکرو کنترلرAVR آموزش داده شده است :