امتیاز موضوع:
  • 3 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
PCB ربات مسیر یاب
#31
فکر میکنم بخش الکترونیک کاملا تمام شد .
وارد بخش برنامه نویسی میشیم . من تسلط در زبان سی دارم . اگر کسی می تونه پا به پای من به زبان بیسیک هم پست بزاره خوبه .

بهتر است در ابتدای کار یکسری توابع تعریف کنیم.
برای مثال پیچیدن به راست . پیچیدن به سمت چپ و مستقیم رفتن .
همچنین باید تنظیمات pwm هم انجام بشه .

توجه پایه بندی رو به شکل زیر در نظر می گیریم
پایه in1 و in2 درایور موتور به ترتیب portd.0 , portd.1 هستند . پایه in3 و in4 درایور موتور به ترتیب portd.3 , portd.2 هستند .
پس برای جلو رفتن باید به شکل زیر پایه ها مقدار دهی شوند .
کد php:
void forward()
{
 
PORTD.0=0;
 
PORTD.1=1;
 
PORTD.2=0;
 
PORTD.3=1;

برای پیچیدن به سمت راست
کد php:
void right_l()
{
  
PORTD.0=1;
  
PORTD.1=1;
  
PORTD.2=0;
  
PORTD.3=1;

پیچیدن به سمت چپ :
کد php:
void left_l()
{
 
PORTD.0=0;
 
PORTD.1=1;
 
PORTD.2=1;
 
PORTD.3=1;
 } 
پیچیدن شدید چپ ( هنگامیکه یک چرخ به سمت راست می چرخد و دیگری به سمت چپ (دور در جا))
کد php:
void left_h()
{
 
PORTD.0=0;
 
PORTD.1=1;
 
PORTD.2=1;
 
PORTD.3=0;


پیچیدن شدید راست :
کد php:
void right_h()
{
 
PORTD.0=1;
 
PORTD.1=0;
 
PORTD.2=0;
 
PORTD.3=1;

اگر همان کاری را انجام دهید که همیشه انجام می دادید، همان نتیجه ای را می گیرید که همیشه می گرفتید .
افراد موفق کارهای متفاوت انجام نمی دهند، بلکه کارها را بگونه ای متفاوت انجام می دهند.
پاسخ
 سپاس شده توسط artd179
#32
با سلام،من برنامه نویسی زبان بیسیک رو انجام میدم البته اگه اشکالی بود حتما دوستان تذکر بدن.
این هم برنامه ای که آقای امیرحسین نوشتن البته به زبان بیسیک:
1.تعیین پورت D به عنوان خروجی:
کد php:
config portd=output 

2.جلو رفتن ربات:
کد php:
Reset Portd.0 
Set Portd.1 
Reset Portd.2 
Set Portd.3 

3.چرخش به سمت راست:
کد php:
Set Portd.0 
Set Portd.1 
Reset Portd.2 
Set Portd.3 

4.چرخش به سمت چپ:
کد php:
Reset Portd.0 
Set Portd.1 
Set Portd.2 
Set Portd.3 

5.چرخش شدید به سمت چپ:
کد php:
Reset Portd.0 
Set Portd.1 
Set Portd.2 
Reset Portd.3 

6.چرخش شدید به سمت راست:
کد php:
Set Portd.0 
Reset Portd.1 
Reset Portd.2 
Set Portd.3 
پاسخ
 سپاس شده توسط امیرحسین ، artd179
#33
پست های اضافی تا اینجا مجددا حذف گردیدند

خوب کمی به برنامه بشتر پر و بال می دهیم
می خواهم تو این پست خواندن صحیح سنسور ها رو آموزش بدهم
در زبان سی برای چک کردن شروط با تعداد کم از دستور if استفاده می کنند . ولی وقتی شروط خیلی زیاد باشند مثل حالات مختلف سنسور ها استفاده از if راه حل مناسبی نخواهد بود .
دستور جایگزین در این حالت استفاده از switch و case است .
ابتدا توضیحی در مورد ساختار سوئیچ کیس می دهم .
این دستور به شکل زیر نوشته می شود :
کد php:
switch(X)
{

case 
1:    
.
.
break;


case 
2:    
.
.
break;


case 
3:    
.
.
break;



به جای X مقدار متغیر را وارد می کنند حالات مختلف را روبروی کلمه Case می نویسند
در اینجا ما بجای X مقداری را که از پورت سنسور ها می خوانیم قرار می دهیم
به مثال زیر توجه کنید :
با فرض اینکه 8 سنسور به پورت A متصل شده باشند حالات مختلف سنسور ها را بدست آورید .
کد php:
in=PINA;

 switch(
in)
{


case 
0b00001111:
OCR1B=40;
OCR1A=40;
forward();
break;

case 
0b01101111:
OCR1B=40;
OCR1A=40;
left();
break;

case 
0b10011111
OCR1B=40;
OCR1A=40;
right();
break; 

همانطور که می بیند مقدار پورت A را در متغیر in ذخیره کردیم و چک کردیم که در آن لحظه کدام سنسور روشن بوده و کدام خاموش بوده است . برای مثال در حالتیکه سنسور ها وضعیت 01101111 دارند دستور پیچیدن به سمت چپ را با سرعت 40 بر روی هر دو موتور داده است .
توجه کنید OCR ها برای تنظیم مقدار PWM هستند .
اگر جایی از مطلب گنگ است بفرمایید .
اگر همان کاری را انجام دهید که همیشه انجام می دادید، همان نتیجه ای را می گیرید که همیشه می گرفتید .
افراد موفق کارهای متفاوت انجام نمی دهند، بلکه کارها را بگونه ای متفاوت انجام می دهند.
پاسخ
 سپاس شده توسط artd179
#34
خب اگر میشه یه پست رو هم به PWM و تنظیماتش اختصاص بدید!
پاسخ
 سپاس شده توسط artd179
#35
با سلام،همونطور که میدونید میکروهای avr دارای تایمرهای مختلفی است که در میکروی atmega16 از تایمر1 میکرو میتوان به عنوان pwm استفاده کرد.کاربرد pwm برای تنظیم سرعت موتور هست.یعنی با 0 و 1 کردن سریع پین های OC1A و OC1B باعث میشه که موتور با سرعت مشخصی نسبت به حداکثر سرعتش حرکت بکنه.
برای استفاده از این امکان در نرم افزار Bascom از دستور زیر استفاده میشود:
کد php:
Config Timer1 Pwm Pwm 8|9|10 Compare A Pwm Clear Up|Clear Down Compare B Pwm Clear Up|Clear Down Prescale 1|8|64|256|1024 

pwm و Prescale برای تعیین فرکانس خروجی روی پایه های OC1A و OC1B استفاده میشن.
اگر pwm=8 باشد یعنی pwm هشت بیتی است و برای تعیین سرعت موتور از عددی بین 0 تا 255 استفاده میشه.
اگر pwm=9 باشد یعنی pwm نه بیتی است و برای تعیین سرعت موتور از عددی بین 0 تا 511 استفاده میشه.
اگر pwm=10 باشد یعنی pwm ده بیتی است و برای تعیین سرعت موتور از عددی بین 0 تا 1023 استفاده میشه.
برای مثال اگر در حالت pwm=8 بخواهید از %30 حداکثر سرعت موتور استفاده کنید باید عدد 255 را در عدد 0.3 ضرب کنید و به صورت زیر در بسکام وارد کنید:
کد php:
Pwm1a 
Pwm1b 


که در دستور بالا به جای X و Y باید عدد به دست آمده رو قرار بدید تا بتوانید سرعت موتور رو تغییر بدید.
راجع به دستور های Compare A و Compare B اطلاعات زیادی ندارم ولی برای راحتی میتوانید هر دو را Clear Down یا هر دو را Clear up قرار دهید و مقادیر X و Y را هم یکسان قرار بدید.
پاسخ
 سپاس شده توسط امیرحسین ، Soheil ، artd179
#36
ممنون از توضیحاتت!
یه سوال اون پایه های OC1B و OC1A رو باید به ENA و ENB وصل کرد؟
یکی لطف کنه pwm در کدویژن هم بزاره!!
پیشاپیش ممنون!
پاسخ
#37
بله،درسته.آقای امیرحسین توی پست مربوط به راه اندازی موتورها توی همین تاپیک راجع به این موضوع توضیح دادن.
پاسخ
#38
آقا سهیل شما چقدر عجله دارید !!!!
روزی 5 تا پست که نمی تونیم بدیم شما هم کمی همراهی کنید Smile
تنظیمات مربوط به PWM در کدویژن که خیلی ساده است . مانند شکل زیر عمل کنید



همچنین همانطور که دوست خوبم آقا آرش توضیح دادند در این حالت برای کنترل سرعت کافی است عددی بین 0-255 به موتور ها بدهید تا سرعت موتور ها بین 0- ماکزیمم تغییر کند .
برای گرفتن خروجی هم باید از پایه های مربوط به OC1A , OC1B که خروجی PWM در آنها وجود دارد استفاده کنید در میکرو ATmega16 این پایه ها پایه 18-19 می باشند . که باید به ورودی ENBA , ENBB درایور متصل شوند .
پس برای مقدار دهی سرعت در برنامه نویسی به راحتی به شکل زیر می توانید عمل کنید :
کد:
OCR1B=80;
OCR1A=40;
اگر همان کاری را انجام دهید که همیشه انجام می دادید، همان نتیجه ای را می گیرید که همیشه می گرفتید .
افراد موفق کارهای متفاوت انجام نمی دهند، بلکه کارها را بگونه ای متفاوت انجام می دهند.
پاسخ
#39
شما اگر فروم های دیگه رو دیده باشید میبینید که در یه تاپیک روزی 30-40تا پست میزنن!ضمنا تندوتند هم پست هارو پاک نمیکنند!
اگر یه مبتدی وارد سایت بشه میاد همه ی پست هارو میخونه چه محتوا داشته باشه چه نه!
بگذریم!
نمیشه بجای PWM از یه ولوم برای کنترل موتور ها بصورت دستی استفاده کرد؟
پاسخ
#40
پاک کردن پست های اضافی با نظر همه اعضا بود - ضمنا اکثر پست هایی که پاک می شوند نظر سنجی هستند . شما هم اگر پست مفید داده باشید پستتون پاک نمی شود .
نقل قول: نمیشه بجای PWM از یه ولوم برای کنترل موتور ها بصورت دستی استفاده کرد؟


چطور می خوای برای کنترل موتور با ولوم کنترل کنید ؟ . شما وقتی ربات رو گذاشتید روی پیست که نمی تونید سر هر پیچ ربات رو بردارید و سرعتش رو با ولوم کم کنید . ربات خودش باید زاویه پیچ ها را تشخیص دهد و سرعت را کم و زیاد کند .
اگر همان کاری را انجام دهید که همیشه انجام می دادید، همان نتیجه ای را می گیرید که همیشه می گرفتید .
افراد موفق کارهای متفاوت انجام نمی دهند، بلکه کارها را بگونه ای متفاوت انجام می دهند.
پاسخ
 سپاس شده توسط artd179


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  کمک برای ساخت ربات مسیریاب با قابلیت تشخیص فلز ehsan922 0 304 22-9-1394، 12:52 صبح
آخرین ارسال: ehsan922
  كمك در مورد ساخت يك ربات مسير ياب soheyl111 16 3,753 4-4-1392، 06:56 عصر
آخرین ارسال: morteza90
  ساده ترین ربات نوریاب ali zade 4 1,703 21-1-1392، 07:33 عصر
آخرین ارسال: ali zade
Smile ربات مسیر یاب se2010 22 8,571 20-12-1391، 04:12 صبح
آخرین ارسال: گلینی
  کمک در برنامه نویسی مسیر یاب maykel 0 902 8-11-1391، 02:58 صبح
آخرین ارسال: maykel
  دزخواست کمک در مورد ربات مسیر یاب amateur92 14 4,365 8-9-1391، 02:00 عصر
آخرین ارسال: karaneha
  نیاز فوری به شماتیک یک رباط مسیر یاب maykel 6 2,082 8-8-1391، 07:47 عصر
آخرین ارسال: maykel
  عکس از ربات مسیریاب fanta 2 1,745 30-7-1391، 12:39 صبح
آخرین ارسال: fanta
  احتیاج به یک ربات مسیر یاب با مشخصات زیر maykel 2 1,085 28-7-1391، 11:21 عصر
آخرین ارسال: maykel
  سوال : اضافه کردن سنسور به ربات مسیریاب AzhidahakA 23 7,412 13-7-1391، 02:40 عصر
آخرین ارسال: navidtion

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان