رفقای مهندس بهتر نیست الگوریتم ربات رو ادامه بدیم؟
اتفاقا مبحث تغذیه خیلی مهمه و من هیچی ازش نمیدونم. ولی فکر میکنم بعد از این که الگوریتم و کد و حدود مدار مشخص شد بریم سراغ تغذیه! من که اصلا از این چندتا پست مربوط به تغذیه هیچی نفهمیدم !!
سلام
خوب شما سوالهای خودت را بپرس، بقیه هم سوالهای خودشون رو می پرسن.
فکر کنم اینجوری بهتر باشه
ببخشید این 324 و 358 چه نوع آیسی ای هستن؟ من فکر می کنم همون آپ امپه. درسته؟
نقل قول: ضمناً من با سری کردن چند تا دیود برای کاهش ولتاژ که تو اکثر مدارهای توی نت هم به چشم میخوره موافق نیستم.چون آپ امپای ما بصورت سوئیچ قراره عمل کنن(نه تقویت کننده) بهتره حداکثر مقدار خروجیو پیشبینی کنیم و براش تقسیم ولتاژ مقاومتی بذاریم.
سری کردنه دیود مگه که مشکلی ایجاد میکنه؟ میشه بیشتر توضیح بدین؟
اگه مشکل فقط سره سوئیچ کردن با سرعته بالاست و دیود تو این زمینه کم میاره، خوب از دیودهای با سرعته بالا مثله 4148 استفاده کنیم.( البته من فقط همین دیود را به عنوانه سرعت بالا میشناسم.)
اینکه میگین : آپ امپای ما بصورت سوئیچ قراره عمل کنن(نه تقویت کننده)
یعنی چطوری؟ برای چی آپ امپ باید به عنوانه سوئیچ کننده استفاده بشه؟ اصلا آپ امپ توی کجا مدار و برای چه منظوری استفاده میشه؟
با سپاس فراوان
بله 324 و 358 آپ امپ هستن ولی 358 از نظر نویزپذیری بهتره
در باره سری کردن دیودها:
اولاً هرچقدر بشه تو مدار از نیمه هادیها کمتر استفاده کرد، بهتره یه دلیل مهمش نویزه . واینکه با دیودها 0.7 ،0.7 میشه پیش رفت و دقتش نسبتاً کمه (دیودهای شاتکی هم از نظر قیمت به این کار نمیصرفه) وباز اینکه تو نیمه هادی ها با سیگنالهای کامل نمیشه کار کرد و تو نیم سیکل ها معتبرن
منظورم از حالت سوئیچ حالت قطع و وصل یا همون 0 و 1 هستش. وحالت تقویت کنندگی مربوط به بحث آنالوگ میشه.
اون مداری که اشتباه نکنم اسم فایلش b بود که تو صفحات اول این تاپیک گذاشتن نقش آپمپا رو نشون میده
به زودی مطالب جدیدو ادامه میدیم
سنسورها که گفتیم تعدادش5 تا باشه ، بهتره بصورت شکل عدد 8 بصورت فارسی مطابق شکل قرار بگیرن.این مدل هم تو پیچها کمک میکنه و هم باعث میشه عرض روبات کمتر بشه.فاصله افقی مرکز دوتا سنسور بهتره کمی بیشتر از پهنای خطی باشه که قراره ربات روش حرکت کنه.
همونطوری که قبلاً اشاره شد ارزش 0 یا 1 بودن خروجی سنسورها مهم نیست بلکه تفاوت ارزش خروجیها مهمه.ربات باید همیشه مثل شکل 1 به حرکتش ادامه بده و در برنامه نویسی باید در نظر گرفت اگر فقر یک سنسور باشه که با 4 تا بعدی فرق کنه اون باید سنسور وسطی باشه . یعنی اگه اوضاع بصورت شکل 2 بود باید ربات با چرخش سنسور وسط رو روی خط بندازه.
در شکل 3 دوباره با یکی بودن ارزش منطقی سنسور وسطی و کناری اون مشخصه ربات به سمت راست متمایل شده و باید دوباره به حالت اصلی یصنی سنسور وسطی متفاوت با بقیه برگرده. برای این کار باید حرکتش متمایل به راست باشه. در شکل 4 هم که مشخصه ربات انقدر از مسیر منحرف شده که سنسور اول و دوم از سمت چپ ارزششون یکیه و با بقیه متفاوته و این یعنی ربات باید به سمت چپ حرکت داشته باشه تا جایی که به حالت تعادل ( سنسور وسط روی خط ) برسه.
در شکل 5 هم رسیدیم به پیچ. اگه پیچ تند نباشه مثل شکل 5 چون یه سنسور روی خطه و باید اون سنسور وسطی باشه و باید چرخش داشته باشیم و اگه پیچ تند باشه ممکنه بصورت شکل 6 در بیاد که باز ارزشها باید اسکن بشن و برنامه نویسی طوری باشه که ربات به حالت تعادل (سنسور وسطی روی خط مثل شکل 1)برسه.
در حقیقت طرز برخورد برنامه با شکلهای 4 و 6 یکی خواهد بود.
نکته:با توجه به پهنای خط، ارزش منطقی فقط یک یا دو سنسور با بقیه می تواند متفاوت باشد.
ممنونم از توضیحاتتون.
ببخشید.
من معنیه سوئیچ کردن و تقویت کردن را بلدم، فکر کنم درست متوجه سوالم نشدید.
من میخواستم بدونم که از سوئیچینگ در کجای مدار می خواهید استفاده کنید؟
برای سنسورها؟ کجا؟ چی را می خواین روی چی سوئیچ کنین؟
چرا با آچ امپ؟ با مولتی پلکسر بهتر نیست ، که کار سوئیچ کردن را انجام داد؟
بله ظاهراً منظورتونو متوجه نشده بودم.
شاید بهتر بود من کلمه سوئیچینگو بکار نمی بردم. منظور من از سوئیچینگ تولید 0 و 1 از خروجی آنالوگ آپ امپا بود
فکر کنم اون مفهومی که شما از سوئیچینگ دارین تو ساخت این ربات کاربرد نداشته باشه.
ما چرا باید از مالتی پلکسر استفاده کنیم؟ از آپ امپ برای آشکار سازی سطوح ولتاژ 0 و 1 برای سنسورها استفاده کردیم.
ما 5 تا سنسور داریم که 5 تا پایه از میکروی ما رو میگیره. برای 5 تا سنسور کوچکترین مالتی پلکسری که می تونیم استفاده کنیم،8 به 1 میتونه باشه که اگه از سه تا خط آدرسش و یه خروجیش استفاده کنیم میشه 4 پایه. و فقط یه پایه صرفه جویی میکنه که نمیارزه چون اولاً برنامه پیچیده تر میشه.دوماً یه آیسی بیشتر استفاده میشه که جرم، حجم و هزینه رباتو بالاتر میبره خودش هم که نیمه هادیه و احتمال نویزو بالاتر میبره و تازه برای این کار دوباره باز هم اون آشکارسازی توسط آپ امپ باید صورت بگیره
امیدوارم اینبار منظورتونو درست متوجه شده باشم
حق با شماست.
اون تصوری که شما از سوئیچینگ داشتین با تصوره من فرق داشت. برای همین من مالتی پلکسر پیشنهاد دادم.
این جور که من فهمیدم ، دلیله استفاده از آپ امپ هم اینه که مثلا اگه سنسور داره ولتاژه 2.7 را خروجی میده ما این ولتاژ را با آپ امپ به 5 ولت برسونیم که دقیقا سطح منطقی 1 باشه و برعکس. مثلا اگه سنسور داره 1 ولت خروجی میده، آپ امپ این سطح ولتاژ را به صفر برسونه که بشه همون صفره منطقی.
امیدوارم که درست متوجه شده باشم.
با سپاسه فراوان
من خیلی فکر کردم!
بنظرم به همین راحتیا هم نیست!
گردشی که شما میگید چطوریه ؟ یه چرخ ثابت و چرخ دیگه بگرده ؟ یا دو چرخ خلاف هم بگردن ؟
ممکنه بخواین تو حالتی یه چرخ با سرعت بیشتر و یه چرخ با سرعت یکم کمتر از چرخ دیگه بگرده تا ربات با تمایل به چپ یا راست جلو بره ؟ یا نه تو هرکدوم از حالت ها ربات باید بایسته و بگرده تا فقط سنسور وسط رو خط باشه ؟ این حالت بنظر بی دردسره ولی حرکت ربات خیلی جاها زیگ زاگی میشه و ضربه میخوره. و سرعتش هم کمتره . . . فکر میکنم برای شروع همین بهتره! آخه چندتا ایده دیگه هم تو ذهن من اومد (مثلا یه سنسور هم پشت سنسور وسط بذاریم) ولی دیدم خیلی مشکل میشه! نتونستم تا آخرش برم!
پس یکم بیشتر در مورد الگوریتم توضیح میدین ؟ ربات تو هیچ حالتی جز اینکه فقط سنسور وسط رو خط باشه حرکت رو به جلو نداره؟
راستی نگفتین چرا استپ موتور استفاده شده ؟! دی سی بهتر نیست ؟
من اینو نوشتم . . .
البته بی اجازه استپ موتور رو حذف کردم به جاش دی سی با pwm گذاشتم . . .
کد:
#include <mega32.h>
#include <delay.h>
char s; //sensor
void main()
{
DDRA = 0x0F; //Motor output
PORTA.0 = 1;
PORTA.1 = 0;
PORTA.2 = 1;
PORTA.3 = 0;
DDRB = 0x08; //PWM - left (PORTB.3)
DDRD = 0x80; //PWM - right (PORTD.7) //input of sensors (PIN0-4)
//Timer0 //PWM - left (PORTB.3)
TCCR0=0x6C;
TCNT0=0x00;
OCR0=0x00;
//Timer2 //PWM - right (PORTD.7)
ASSR=0x00;
TCCR2=0x6E;
TCNT2=0x00;
OCR2=0x00;
while (1)
{
s = PINA;
s = s & 0b00011111;
if ((s = 0b00000001) || (s = 0b00011110))
{
OCR0 = 200;
OCR2 = 200;
}else
if ((s = 0b00000011) || (s = 0b00011100))
{//turn right
OCR0 = 200;
OCR2 = 0;
}else
if ((s = 0b00000010) || (s = 0b00011101))
{//turn right
OCR0 = 200;
OCR2 = 0;
}else
if ((s = 0b00000101) || (s = 0b00011010))
{//turn left
OCR0 = 0;
OCR2 = 200;
}else
if ((s = 0b00000100) || (s = 0b00011011))
{//turn left
OCR0 = 0;
OCR2 = 200;
}else
if ((s = 0b00001010) || (s = 0b00010101))
{//turn right
OCR0 = 200;
OCR2 = 0;
}else
if ((s = 0b00001000) || (s = 0b00010111))
{//turn right
OCR0 = 200;
OCR2 = 0;
}else
if ((s = 0b00010100) || (s = 0b00001011))
{//turn left
OCR0 = 0;
OCR2 = 200;
}else
if ((s = 0b00010000) || (s = 0b00001111))
{//turn left
OCR0 = 0;
OCR2 = 200;
}
}
}
ربات وقتی از مسیر منحرف شده بهتره طوری نباشه که فقط یکی از چرخا بچرخه و اونیکی ثابت بمونه . اونموقع وقتی سنسور وسطی رو خط قرار میگیره و بعد شروع به حرکت مستقیم میکنه که جهت رو به جلوی ربات با خط هم راستا نیست. البته انقدر ورجه وورجه میکنه تا رو خط بیفته ولی ریپلش زیاد میشه. بهتره چرخها با سرعتهای متفاوت بچرخن . البنه یه کاریش هم میشه کرد. واسه شکلای 2و5 چون یکی از سنسورهای کناری با بقیه متفاوته بهتره چرخا با سرعتهای متفاوت بچرخن ولی برای شکلهای 3 و 4 و 6 که دو تا سنسور کناری با بقیه متفاوته یعنی یه جورایی انحراف از مسیر خیلی زیاده میشه زیر تابعی نوشت که توش یکی از سنسورا ثابت بمونه و اونیکی که لازمه حرکت کنه. البته به نظرمن این مسائل بعد ساخت روبات به روش آزمون خطا بهتر مشخص میشه. در باره برنامتون هم بگم که خوندن برنامه برام خیلی مشکل تر از نوشتن اونه مخصوصاً که به زبان C باشه. اگه از دوستان نظری در باره برنامه دارن مطرح کنن.در این مورد شرمنده! میدونم که مشکل از طرف منه.
سعی میکنم بزودی یه شماتیک کلی از سخت افزار ربات بکشم و بذارم بعد نظراتونو در موردش بدین بعد برنامشو یه کارایی میکنیم.