فهرست مطالب:

MCU AVR (ATMEGA32) INFRA RED REMOTE CONTROLLED ROBOCAR با استفاده از MCU: 5 مرحله
MCU AVR (ATMEGA32) INFRA RED REMOTE CONTROLLED ROBOCAR با استفاده از MCU: 5 مرحله

تصویری: MCU AVR (ATMEGA32) INFRA RED REMOTE CONTROLLED ROBOCAR با استفاده از MCU: 5 مرحله

تصویری: MCU AVR (ATMEGA32) INFRA RED REMOTE CONTROLLED ROBOCAR با استفاده از MCU: 5 مرحله
تصویری: IR remote controlled vehicle robot with ATmega32 2024, نوامبر
Anonim
ROBOCAR کنترل از راه دور INFRA RED با استفاده از AVR (ATMEGA32) MCU
ROBOCAR کنترل از راه دور INFRA RED با استفاده از AVR (ATMEGA32) MCU

پروژه حاضر طراحی و اجرای RoboCar از راه دور مادون قرمز (IR) را توصیف می کند که می تواند برای برنامه های مختلف کنترل بدون سرنشین خودکار استفاده شود. من RoboCar از راه دور (حرکت چپ-راست/جلو-عقب) را طراحی کرده ام. کل سیستم مبتنی بر میکروکنترلر (Atmega32) است که سیستم کنترل را هوشمندتر کرده و به راحتی قابل تغییر برای سایر برنامه ها است. این امکان را به کاربر می دهد تا یک RoboCar را کنترل یا کنترل کند و سوئیچ برق اصلی را از فاصله 5 متری کار کند.

کلیدواژه ها: رمزگشای IR ، میکروکنترلر AVR (Atmega32) ، کنترل از راه دور تلویزیون ، ارتباط بی سیم

_

مرحله 1: ارتباطات درون سرخ

ارتباطات درون سرخ
ارتباطات درون سرخ

اصل ارتباطات IR:

الف) انتقال IR

فرستنده یک LED IR درون مدار خود ، که برای هر پالس الکتریکی که به آن داده می شود ، مادون قرمز ساطع می کند. این پالس با فشردن یک دکمه روی ریموت تولید می شود و بدین ترتیب مدار کامل می شود و به LED تعصب می بخشد. LED در حالت تعصب نور طول موج 940 نانومتر را به صورت مجموعه ای از پالس ها ، مربوط به دکمه فشرده ، منتشر می کند. اما از آنجا که همراه با IR IR بسیاری از منابع دیگر مادون قرمز مانند ما انسانها ، لامپها ، خورشید و غیره ، اطلاعات منتقل شده می توانند تداخل ایجاد کنند. راه حل این مشکل تعدیل است. سیگنال منتقل شده با استفاده از فرکانس حامل 38 کیلوهرتز (یا هر فرکانس دیگر بین 36 تا 46 کیلوهرتز) تعدیل می شود. LED IR در این فرکانس برای مدت زمان پالس نوسان می کند. اطلاعات یا سیگنالهای نوری دارای عرض پالس هستند و در فرکانس 38 کیلوهرتز موجود هستند. انتقال مادون قرمز به انرژی در منطقه طیف تابش الکترومغناطیسی در طول موج های طولانی تر از نورهای مرئی ، اما کوتاهتر از امواج رادیویی اطلاق می شود. به همین ترتیب ، فرکانس های مادون قرمز بیشتر از فرکانس مایکروویو ، اما کمتر از فرکانس های نور مرئی هستند. دانشمندان طیف تابش مادون قرمز (IR) را به سه ناحیه تقسیم می کنند. طول موج در میکرون (با نماد μ ، که در آن 1 µ = 10-6 متر 1) یا در نانومتر (به اختصار nm ، که در آن 1 نانومتر = 10-9 متر = 0.001 5) مشخص شده است. نوار IR نزدیک حاوی انرژی در محدوده طول موج های نزدیک به مرئی است ، از حدود 0.750 تا 1.300 5 (750 تا 1300 نانومتر). نوار IR متوسط (که باند IR میانی نیز نامیده می شود) از انرژی در محدوده 1.300 تا 3.000 5 (1300 تا 3000 نانومتر) تشکیل شده است. محدوده دور IR از 2.000 تا 14.000 5 (3000 نانومتر تا 1.4000 10 104 نانومتر) گسترش می یابد.

ب) پذیرش IR

گیرنده شامل یک آشکارساز عکس است که با برخورد نور به سیگنال الکتریکی خروجی ایجاد می کند. خروجی آشکارساز با استفاده از فیلتر باند باریک فیلتر می شود که همه فرکانس های زیر یا بالاتر از فرکانس حامل را دور می زند (در این حالت 38 کیلوهرتز). سپس خروجی فیلتر شده به دستگاه مناسب مانند میکروکنترلر یا ریزپردازنده داده می شود که دستگاه هایی مانند رایانه شخصی یا روبات را کنترل می کند. خروجی فیلترها را می توان به اسیلوسکوپ متصل کرد تا پالس ها را بخواند.

کاربردهای IR:

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

· جعبه های کنترل از راه دور سرگرمی خانگی

· بی سیم (شبکه های محلی)

· پیوند بین رایانه های نوت بوک و رایانه های رومیزی

· مودم بی سیم

· آشکارسازهای نفوذ

· آشکارسازهای حرکت

· حسگرهای آتش

· سیستم های دید در شب

· تجهیزات تشخیص پزشکی

· سیستم های هدایت موشک

· دستگاههای نظارتی زمین شناسی

انتقال داده های IR از یک دستگاه به دستگاه دیگر گاهی اوقات با عنوان beaming شناخته می شود.

مرحله 2: IR Sensor & NEC Protocol Fromat

IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat
IR Sensor & NEC Protocol Fromat

سنسورهای IR (شکل 1)

TSOP1738 ، SFH-5110-38 (38 کیلوهرتز)

ویژگی های سنسورهای TSOP:

  • پیش تقویت کننده و آشکارساز عکس هر دو در یک بسته هستند
  • فیلتر داخلی برای فرکانس PCM
  • محافظت بهتر در برابر اختلالات میدان الکتریکی
  • سازگاری با TTL و CMOS
  • خروجی فعال کم مصرف کم مصرف
  • ایمنی بالا در برابر نور محیط
  • امکان انتقال مداوم داده ها

پروتکل NEC:

پروتکل انتقال NEC IR از رمزگذاری فاصله پالس بیت های پیام استفاده می کند. طول هر انفجار پالس 562.5 میکرومتر در طول فرکانس حامل 38 کیلوهرتز (26.3 میکرومتر) است. بیت های منطقی به شرح زیر منتقل می شوند (شکل 2):

  • منطقی '0' - انفجار نبض 562.5µs به دنبال آن فضای 562.5µs ، با زمان کل انتقال 1.125ms
  • منطقی "1" - انفجار نبض 562.5µs به دنبال فضای 1.6875ms ، با زمان کل انتقال 2.25ms

پالس حامل شامل 21 چرخه در 38kHz است. برای کاهش مصرف فعلی ، معمولاً نسبت علامت/فضا 1: 4 است.

(شکل 3)

هر دنباله کد با یک پالس 9 میلی ثانیه شروع می شود که به پالس AGC معروف است. پس از آن یک سکوت 4.5 میلی متری دنبال می شود:

(شکل 4)

سپس داده ها شامل 32 بیت ، یک آدرس 16 بیتی و یک دستور 16 بیتی ، به ترتیب انتقال آنها (از چپ به راست) نشان داده می شود:

(شکل 5)

چهار بایت بیت داده هر کدام ابتدا کمترین بیت قابل توجهی ارسال می شوند. شکل 1 فرمت یک قاب انتقال NEC IR را برای آدرس 00h (00000000b) و فرمان ADh (10101101b) نشان می دهد.

در مجموع 67.5 میلی ثانیه برای ارسال یک قاب پیام مورد نیاز است. برای ارسال 16 بیت آدرس (آدرس + معکوس) و 16 بیت فرمان (فرمان + معکوس) به 27 میلی ثانیه نیاز دارد.

(شکل 6)

زمان مورد نیاز برای ارسال فریم:

16 بیت برای آدرس (آدرس + معکوس) برای ارسال زمان به 27ms نیاز دارد. و 16 بیت برای فرمان (دستور + معکوس) نیز برای ارسال زمان به 27ms نیاز دارد. زیرا (آدرس + آدرس معکوس) یا (فرمان + دستور معکوس) همیشه شامل 8 '0 و' 1 '8 است بنابراین (8 * 1.125 میلی ثانیه) + (8 * 2.25 میلی ثانیه) == 27 میلی ثانیه. با توجه به کل زمان مورد نیاز برای ارسال فریم (9ms +4.5ms +27ms +27ms) = 67.5 ms.

کدهای تکرار: اگر کلید کنترل از راه دور فشرده نگه داشته شود ، یک کد تکراری صادر می شود ، معمولاً حدود 40 میلی ثانیه پس از ترکیدن پالس که نشان دهنده پایان پیام است. ارسال مجدد کد با فواصل 108 میلی ثانیه ادامه می یابد ، تا زمانی که کلید در نهایت آزاد شود. کد تکرار به ترتیب شامل موارد زیر است:

  • پالس منجر 9 میلی ثانیه
  • فضای 2.25 میلی متر
  • یک نبض 562.5 میکرومتر برای نشان دادن انتهای فضا (و در نتیجه انتهای کد تکراری منتقل شده) ترکید.

(شکل 7)

محاسبه تاخیر (1 میلی ثانیه):

فرکانس ساعت = 11.0592 مگاهرتز

چرخه ماشین = 12

تاخیر = 1 میلی ثانیه

TimerValue = 65536 - ((Delay * ClockFreq)/چرخه ماشین) = 65536 - ((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

مرحله 3: کنترل موتور DC با استفاده از L293D

کنترل موتور DC با استفاده از L293D
کنترل موتور DC با استفاده از L293D

موتور DC

موتور DC انرژی الکتریکی را به انرژی مکانیکی تبدیل می کند که می تواند برای انجام بسیاری از کارهای مفید مورد استفاده قرار گیرد. این می تواند حرکت مکانیکی مانند Go Forward/Backword of RoboCar من ایجاد کند. موتورهای DC دارای درجه بندی های مختلفی مانند 6 ولت و 12 ولت هستند. دارای دو سیم یا پین است. ما می توانیم جهت چرخش را با معکوس کردن قطبیت ورودی معکوس کنیم.

در اینجا ما L293D را ترجیح می دهیم زیرا رتبه 600mA برای رانندگی موتورهای DC کوچک خوب است و دیودهای حفاظتی در خود IC موجود است. شرح هر پین به شرح زیر است: فعال کردن پین ها: اینها شماره پین هستند. 1 و شماره پین 9. شماره پین 1 برای فعال کردن درایور Half-H 1 و 2 (پل H در سمت چپ) استفاده می شود. شماره پین 9 برای فعال کردن راننده H-Bridge 3 و 4 استفاده می شود (H پل در سمت راست).

این مفهوم ساده است ، اگر می خواهید از یک پل خاص H استفاده کنید ، باید منطق بالایی را برای پین های فعال مربوطه به همراه منبع تغذیه IC ارائه دهید. این پین همچنین می تواند برای کنترل سرعت موتور با استفاده از تکنیک PWM استفاده شود. VCC1 (پین 16): پین منبع تغذیه. آن را به منبع تغذیه 5 ولت وصل کنید. VCC2 (پین 8): منبع تغذیه موتور. ولتاژ +ve را بر اساس درجه موتور به آن اعمال کنید. اگر می خواهید موتور خود را با ولتاژ 12 ولت حرکت دهید ، 12 ولت را روی این پین اعمال کنید.

همچنین می توانید موتور را مستقیماً بر روی باتری ، به غیر از منبع تغذیه مورد استفاده برای مدار ، هدایت کنید ، کافی است پایانه +باتری آن را به پین VCC2 وصل کنید و GND هر دو باتری را متداول کنید. (حداکثر ولتاژ در این پین مطابق برگه داده آن 36V است). GND (پین 4 ، 5 ، 12 ، 13): آنها را به GND مشترک مدار متصل کنید. ورودی ها (پین 2 ، 7 ، 10 ، 15):

این پین های ورودی هستند که از طریق آنها سیگنال های کنترل توسط میکروکنترلرها یا سایر مدارها/IC ها داده می شود. به عنوان مثال ، اگر در پین 2 (ورودی راننده نیمه اول H) Logic 1 (5V) بدهیم ، ولتاژ معادل VCC2 در پین خروجی مربوطه درایور نیمه اول H یعنی پین شماره دریافت می کنیم. 3. به طور مشابه برای منطق 0 (0V) در پین 2 ، 0V در پین 3 ظاهر می شود. خروجی ها (پین 3 ، 6 ، 11 ، 14): پین ها را خروجی می دهد. با توجه به سیگنال ورودی سیگنال خروجی می آید.

حرکات حرکتی A B

-----------------------------------------------------------------------------------------

…………… توقف: کم: کم

…… عقربه های ساعت: پایین: زیاد

در جهت عقربه های ساعت: زیاد: کم

……………. توقف: زیاد: زیاد

مرحله 4: نمودارهای مدار برای درایور موتور و سنسور IR

نمودارهای مدار برای راننده موتور و سنسور IR
نمودارهای مدار برای راننده موتور و سنسور IR
نمودارهای مدار برای راننده موتور و سنسور IR
نمودارهای مدار برای راننده موتور و سنسور IR
نمودارهای مدار برای راننده موتور و سنسور IR
نمودارهای مدار برای راننده موتور و سنسور IR

ATmega32 یک میکروکنترلر کم مصرف CMOS 8 بیتی است که بر اساس RISCarchitecture AVR افزایش یافته است. با اجرای دستورالعمل های قدرتمند در یک چرخه کلاک واحد ، ATmega32 به خروجی هایی نزدیک می شود که به 1 MIPS در هر مگاهرتز می رسد و به طراح سیستم اجازه می دهد تا مصرف برق را در برابر سرعت پردازش بهینه کند.

هسته AVR مجموعه دستورالعملهای غنی را با 32 رجیستر کارکرد عمومی ترکیب می کند. همه ثباتهای 32 به طور مستقیم به واحد منطق حسابی (ALU) متصل هستند و به دو ثبت مستقل اجازه می دهد در یک دستورالعمل واحد در یک چرخه ساعت اجرا شوند. معماری بدست آمده از نظر کد کارآمدتر است در حالی که خروجی ها تا ده برابر سریعتر از میکروکنترلرهای معمولی CISC است.

ATmega32 ویژگی های زیر را ارائه می دهد:

  • 32 کیلوبایت حافظه فلش قابل برنامه ریزی در سیستم با قابلیت Read-while-Writing ،
  • 1024 بایت EEPROM ، 2K بایت SRAM ،
  • 32 خط ورودی/خروجی عمومی ،
  • 32 دفتر کار عمومی ،
  • رابط JTAG برای Boundaryscan ،
  • پشتیبانی و برنامه نویسی روی تراشه ، سه تایمر/شمارنده قابل انعطاف با حالت های مقایسه ، وقفه های داخلی و خارجی ، USART قابل برنامه ریزی سریال ، رابط سریال دو سیمه بایت محور ، 8 کانالی ،
  • ADC 10 بیتی با مرحله ورودی تفاضلی اختیاری با سود قابل برنامه ریزی (فقط بسته TQFP) ،
  • یک تایمر Watchdog قابل برنامه ریزی با نوسان ساز داخلی ،
  • یک پورت سریال SPI و
  • شش حالت نرم افزاری برای صرفه جویی در مصرف برق

    • حالت آماده به کار CPU را متوقف می کند در حالی که به USART اجازه می دهد ،
    • رابط دو سیم ، مبدل A/D ،
    • SRAM ،
    • تایمر/شمارنده ،
    • پورت SPI و
    • سیستم را برای ادامه عملکرد قطع کنید.
    • حالت Power-down محتویات ثبت شده را ذخیره می کند اما Oscillator را منجمد می کند و تمام عملکردهای دیگر تراشه را تا وقفه خارجی یا بازنشانی سخت افزاری بعدی غیرفعال می کند.
    • در حالت صرفه جویی در مصرف انرژی ، تایمر ناهمزمان همچنان به کار خود ادامه می دهد و به کاربر اجازه می دهد تا زمانی که بقیه دستگاه در حالت خواب است پایه تایمر را حفظ کند.
    • حالت ADC Noise Reduction CPU و همه ماژول های ورودی/خروجی به جز تایمر ناهمزمان و ADC را متوقف می کند تا نویز سوئیچینگ را در هنگام تبدیل ADC به حداقل برساند.
    • در حالت آماده به کار ، اسیلاتور کریستال/رزوناتور کار می کند در حالی که بقیه دستگاه در خواب است. این اجازه می دهد راه اندازی بسیار سریع همراه با مصرف کم مصرف ایجاد شود.
    • در حالت آماده به کار گسترده ، هر دو نوسان ساز اصلی و تایمر ناهمزمان به کار خود ادامه می دهند.

همه مدارهای مرتبط در اینجا داده می شود و مدار اصلی (atmega32) نیز داده شده است.

مرحله 5: برنامه های Avr

برنامه های Avr
برنامه های Avr
برنامه های Avr
برنامه های Avr

1. برای "سنسور راه دور":

#شامل #شامل شود

#شامل "remote.h"

// Globals volatile unsigned int Time؛ // تایمر اصلی ، زمان را در 10us ذخیره می کند ، // به روز شده توسط ISR (TIMER0_COMP) char فرار بدون علامت BitNo ؛ // POS بعدی BIT کاراکتر فرار بدون علامت ByteNo؛ // نقاط بایت فعلی

کاراکتر فرار بدون علامت IrData [4]؛ // چهار بایت داده از بسته Ir // آدرس 2 بایت 2-بایت داده های فرار بدون علامت char IrCmdQ [QMAX] ؛ // فرمان نهایی دریافت شده (بافر)

فرار بدون امضا char PrevCmd؛ // برای تکرار استفاده می شود

// متغیرهای مورد استفاده برای شروع تکرار تنها پس از فشردن کلید برای زمان معینی

فرار بدون امضا char تکرار؛ // 1 = بله 0 = خیر RCount char بدون امضا؛ // تکرار شمارش

ذرات فرار QFront = -1 ، QEnd = -1 ؛

فرار بدون علامت char؛ // وضعیت گیرنده

فرار بدون علامت char Edge؛ // لبه وقفه [RISING = 1 OR FALLING = 0]

volatile unsigned int stop؛

/********************************************* ***************************************** / /*FUNCTIONSSTARTS* / / ********************************************* *******************************************

void RemoteInit () {

char i؛ برای (i = 0 ؛ i <4؛ i ++) IrData = 0 ؛

توقف = 0 ؛ حالت = IR_VALIDATE_LEAD_HIGH ؛ لبه = 0 ؛ تکرار = 0 ؛

// Setup Timer1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL ؛ // Set Compare Value

char بدون امضا GetRemoteCmd (char char) {unsigned char cmd؛

اگر (صبر کنید) در حالی که (QFront ==-1) ؛ در غیر این صورت (QFront ==-1) بازگشت (RC_NONE) ؛

cmd = IrCmdQ [QFront]؛

if (QFront == QEnd) QFront = QEnd = -1 ؛ else {if (QFront == (QMAX-1)) QFront = 0؛ else QFront ++؛ }

بازگشت cmd ؛

}

2. اصلی ():

int main (باطل) {

uint8_t cmd = 0؛ DDRB = 0x08 ؛

DDRD = 0x80 ؛

DDRC = 0x0f ؛ PORTC = 0x00 ؛

while (1) // حلقه بی نهایت به حسگر IR فعال {

cmd = GetRemoteCmd (1) ؛

تغییر (cmd) {

case xx: {// BOT به جلو حرکت می کند // Ch+ btn forwardmotor ()؛

زنگ تفريح؛ // هر دو موتور در جهت جلو

}

………………………………………………….

………………………………………………….

………………………………………………….

پیش فرض: PORTC = 0x00 ؛ break؛ // موتورهای چپ و راست متوقف می شوند}

}

}/*پایان اصلی*/

……………………………………………………………………………………………………………………

// این یک مدل اساسی است ، اما من می توانم آن را در حالت PWM استفاده کنم.

//……………………………………………..خوش بگذره……………………………………………………//

توصیه شده: