ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 9 از 9
  1. #1
    2012/08/26
    10
    0

    کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    سلام من براي پروژه کارشناسي يه ربات ميکروموس انتخاب کردم که از صفر خوذم شروع کردم به ساختنش ، از سه تا سنسور التراسونيک اسنفاده کردم که مي تونيد نحوه چينش اونارو در عکساي زير ببينيد ،
    الان مشکل من تو نوشتن برنامه ربات که متاسفانه زياد رو برنامه نويسي تصلت ندارم ، مشکلم اينجاست که مثلا وقتي شرط مي زارم که ربات سمت راستش بازه وارد پيچ بشه در حين چرخش يه لحظه از شرط خارج مي شه چون فاصله ها به هم مي ريزه من الان به دستوري نياز دارم که شرطو که چک کرد يک عمليو کامل انجام بده ديگه شرط اوليشو چک نکنه ، برنامه ايم که تا اينجا نوشتم مي زارم خواهشا اگه کسي مي تونه يکم وقت بزاره کمکم کنه چون تا 3شنبه بيشتر وقت ندارم.
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 5/19/2014
    Author : IBM-Lenovo
    Company : 
    Comments: 
    
    
    Chip type        : ATmega16A
    Program type      : Application
    AVR Core Clock frequency: 16.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega16a.h>
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>
    #include <math.h>
    
    
    #define trig_f PORTD.0
    #define echo_f PIND.1
    #define echo_l PIND.2
    #define trig_l PORTD.3
    #define trig_r PORTC.0
    #define echo_r PINC.1
    #define movf_r PORTB.1
    #define movb_r PORTB.4
    #define movf_l PORTB.5
    #define movb_l PORTB.0
    #define pwm_r OCR1A
    #define pwm_l OCR2 
    int i=0,a=0,sum = 0,x=0,y=0 ;
    unsigned char lcd_buff[16];
    unsigned int d_f,d_l,d_r;
    unsigned long int timer_v;
    float timer_dis,distance,u;
    void turn(void);
    
    
    unsigned int check(void)
    {
        
        timer_v = TCNT0;
        timer_dis=timer_v*0.000064;
        distance=timer_dis*343.0;
        u=(float)distance*50;
        d_f=u;
     
       
       
       
       
       
       lcd_gotoxy(0,0);
       lcd_putsf("distance");
       lcd_gotoxy(0,1);
       sprintf(lcd_buff,"%u cm ",d_f);
       lcd_puts(lcd_buff);
       return d_f;
        
    
      
    
    }
    
    unsigned int check2(void)
    {
    
        timer_v = TCNT0;
        timer_dis=timer_v*0.000064;
        distance=timer_dis*343.0;
        u=(float)distance*50;
        d_r=u;
     
       
       
       
       
       
    
       lcd_gotoxy(6,1);
       sprintf(lcd_buff,"%u cm ",d_r);
       lcd_puts(lcd_buff);
       return d_r;
        
    
      
    
    }
    
    unsigned int check3(void)
    {
    
        timer_v = TCNT0;
        timer_dis=timer_v*0.000064;
        distance=timer_dis*343.0;
        u=(float)distance*50;
        d_l=u;
     
       
       
       
       
       
    
       lcd_gotoxy(12,1);
       sprintf(lcd_buff,"%u cm ",d_l);
       lcd_puts(lcd_buff);
       return d_l;
        
    
      
    
    }
    
    
    void calib(void)
    {
    if(d_r < 12)
       {
       pwm_r = 150;
       pwm_l = 80;
       movf_r = 1;
       movb_r = 0;
       movf_l = 1;
       movb_l = 0;
       
       }
       if(d_r < 10 )
       {
       pwm_r = 90;
       pwm_l = 0;
       movf_r = 1;
       movb_r = 0;
       movf_l = 0;
       movb_l = 0;   
       
       }
       if(d_l < 12)
       {
       
       pwm_r = 80;
       pwm_l = 150;
       movf_r = 1;
       movb_r = 0;
       movf_l = 1;
       movb_l = 0;
       
       }
       
       if(d_l < 10 )
       {
       pwm_l = 90;
       pwm_r = 0;
       movf_l = 1;
       movb_r = 0;
       movf_r = 0;
       movb_l = 0; 
       
       } 
       
    }
    
    void move_f()
    {
    
    pwm_l = 100;
    pwm_r = 100;
    movb_r = 0;
    movf_l = 1;
    movf_r = 1;
    movb_l = 0;
    
    
    }
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTA=0x00;
    DDRA=0xFF;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x80;
    DDRB=0x37;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x02;
    DDRC=0x01;
    
    // Port D initialization
    // Func7=Out Func6=In Func5=Out Func4=In Func3=Out Func2=In Func1=In Func0=Out 
    // State7=0 State6=T State5=0 State4=T State3=0 State2=P State1=P State0=0 
    PORTD=0x06;
    DDRD=0xA9;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: Fast PWM top=0x00FF
    // OC1A output: Non-Inv.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x81;
    TCCR1B=0x0D;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: Fast PWM top=0xFF
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x6F;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    
    // USART initialization
    // USART disabled
    UCSRB=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    
    
    while (1)
       {
       
       
       
       if(PINB.7 == 1)
       {
       
       lcd_gotoxy(0,0);
       lcd_putsf("Press The Start");
       lcd_gotoxy(5,1);
       lcd_putsf("Button");
       delay_ms(1000);
       lcd_clear();
    
       }
        
       
    
     if(PINB.7 == 0)
     {
    
       
       
       TCCR0 = 0x00;
       TIMSK = 0x00;
       TCNT0 = 0x00;
       trig_f = 1;
       delay_us(20);
       trig_f = 0;
       while(echo_f == 0);
       TCCR0=0x05;
       while(echo_f == 1);
       TCCR0 = 0x00;
       check();
       
       TIMSK = 0x00;
       TCNT0 = 0x00;
       trig_r = 1;
       delay_us(20);
       trig_r = 0;
       while(echo_r == 0);
       TCCR0 = 0x05;
       while(echo_r == 1);
       TCCR0 = 0x00;
       check2();
       
       TIMSK = 0x00;
       TCNT0 = 0x00;
       trig_l = 1;
       delay_us(20);
       trig_l = 0;
       while(echo_l == 0);
       TCCR0 = 0x05;
       while(echo_l == 1);
       TCCR0 = 0x00;
       check3();
       delay_ms(200); 
       
       sum = (d_l + d_r)/2 ; 
       x= (d_l * d_l)+(d_f * d_f);
       x = sqrt(x);
       y = (d_r * d_r)+(d_f * d_f);
       y = sqrt(y);
       
       
       
       if(d_f>30)
       {
       if(d_r<10) i = 0;
       if(d_l<10) i = 1; 
       }
       
       
       if ( d_f >= 25)
       {
       delay_ms(200);
       if(d_f >= 25)
       {
    
       
       move_f();
       
       
        if( d_r > sum+2)
          {
          
          pwm_r = 80;
          pwm_l = 140;
          movb_r = 0;
          movf_l = 1;
          movf_r = 1;
          movb_l = 0;
          
          }
          if(d_l > sum+2)
          {
          pwm_r = 140;
          pwm_l = 80;
          movb_r = 0;
          movf_l = 1;
          movf_r = 1;
          movb_l = 0;
          
          }
          
          if(d_r-6 > 2*d_l)
          {
          pwm_r = 120;
          pwm_l = 190;
          movb_r = 1;
          movf_l = 1;
          movf_r = 0;
          movb_l = 0;
          delay_ms(600);
          move_f();
          delay_ms(800);
          
          }
          
    
           
       
       
       }
       }      
       
       
       
         
    
        
       
    
    
       
       if( d_f < 25)
       {
       delay_ms(200);
       if( d_f < 25)
       {
       
    
       
    //    if( d_r > sum+2)
    //      {
    //      
    //      pwm_r = 80;
    //      pwm_l = 140;
    //      movb_r = 0;
    //      movf_l = 1;
    //      movf_r = 1;
    //      movb_l = 0;
    //      
    //      }
    //      if(d_l > sum+2)
    //      {
    //      pwm_r = 140;
    //      pwm_l = 80;
    //      movb_r = 0;
    //      movf_l = 1;
    //      movf_r = 1;
    //      movb_l = 0;
    //      
    //      }
    //   
    //   
    //         if(d_r<8||d_l<8)
    //   {
    //   if(d_l<8)
    //   {
    //   pwm_l = 100;
    //   pwm_r = 0;
    //   movb_r = 0;
    //   movf_l = 1;
    //   movf_r = 0;
    //   movb_l = 0;
    //   }
    //   if(d_r<8)
    //   {
    //   pwm_l = 0;
    //   pwm_r = 100;
    //   movb_r = 0;
    //   movf_l = 0;
    //   movf_r = 1;
    //   movb_l = 0;
    //   }
    //   
    //   
    //   }
    
       
       
       switch (i)
       {
       
       case 0 : 
       if(d_l - d_r >= 2 || d_r - d_l >= 2)
       {
       
       pwm_l = 160;
       pwm_r = 180;
       movb_r = 0;
       movf_l = 0;
       movf_r = 1;
       movb_l = 1;
       };
       break;
       case 1 :
       if(d_l - d_r >= 2 || d_r - d_l >= 2)
       {
       
       pwm_l = 180;
       pwm_r = 160;
       movb_r = 1;
       movf_l = 1;
       movf_r = 0;
       movb_l = 0;
       }; 
       break;
       }
       } 
       }
       
    
       
       
       
       
    }
     
       
       
    
        
       
    
       }
       
       
       
       
    
    }

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  2. #2
    2013/08/20
    سبزوار
    315
    46

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    والا من زیاد سی بلد نیستم ولی اگه بیسک بود می تونستم کمک کنم
    ولی همین قدر بهت بگم که شما باید یه لحقه و زیر مجموعه ایجاد کنید
    زیر مجموعه ی اول راست و دومی چپ
    و دستورات حرکتی است و چپ رو تو اون ها قرار بدید
    تو حلقه
    دستورات حرکتی جلو
    اگه التراسونیک راست بود برو به زیر مجومه راست
    اگه التراسونیک چپ بود برو به زیر مجموعه چپ
    و داخل زیر مجموعه راست
    دستورات حرکت راست
    .......
    .....
    ....
    اگه التراسونیک جلو بود پرش که به حلقه اصلی
    و داخل زیر مجموعه چپ
    دستورات حرکت چپ
    .......
    .....
    ....
    اگه التراسونیک جلو بود پرش که به حلقه اصلی

    دیگه زحمت تبدیل حرف ها ی ما به سی با خودت :mrgreen:
    مقاله کامل پردازش تصویر با متلب(دانلود رایگان)
    http://uploadboy.com/pzxg0x4csgwt.html
    ساخت کواد (صفر تا صد)
    http://www.eca.ir/forum2/index.php?topic=96496.0
  3. #3
    2012/08/26
    10
    0

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    نقل قول نوشته اصلی توسط avr68
    والا من زياد سي بلد نيستم ولي اگه بيسک بود مي تونستم کمک کنم
    ولي همين قدر بهت بگم که شما بايد يه لحقه و زير مجموعه ايجاد کنيد
    زير مجموعه ي اول راست و دومي چپ
    و دستورات حرکتي است و چپ رو تو اون ها قرار بديد
    تو حلقه
    دستورات حرکتي جلو
    اگه التراسونيک راست بود برو به زير مجومه راست
    اگه التراسونيک چپ بود برو به زير مجموعه چپ
    و داخل زير مجموعه راست
    دستورات حرکت راست
    .......
    .....
    ....
    اگه التراسونيک جلو بود پرش که به حلقه اصلي
    و داخل زير مجموعه چپ
    دستورات حرکت چپ
    .......
    .....
    ....
    اگه التراسونيک جلو بود پرش که به حلقه اصلي

    ديگه زحمت تبديل حرف ها ي ما به سي با خودت :mrgreen:
    مرسي ولي مشکل من همين اگه است چون من مي خوام بگم مثلا اگه سمت راست بيشتر از 25cm بود يعني بازه و بايد دور بزنه ولي وقتي مي نويسم
    (if(d_r >25 هنگامه چرخش فاضله ي راست بهم مي ريزه مثلا يه لحظه مي شه 100cm چون التراسونيک تا زاويه 45 درجه با سطح اندازه ي درست مي ده ديگه ربات ميره جلو همهچي بهم مي ربزه .
  4. #4
    2013/08/20
    سبزوار
    315
    46

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    والا من زیاد متوجه نشدم چی میگی ولی
    باید اول کامل بچرخی بعد التراسونیک رو چک کنید
    مقاله کامل پردازش تصویر با متلب(دانلود رایگان)
    http://uploadboy.com/pzxg0x4csgwt.html
    ساخت کواد (صفر تا صد)
    http://www.eca.ir/forum2/index.php?topic=96496.0
  5. #5
    2012/08/26
    10
    0

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    نقل قول نوشته اصلی توسط avr68
    والا من زياد متوجه نشدم چي ميگي ولي
    بايد اول کامل بچرخي بعد التراسونيک رو چک کنيد
    الان توي C من برنامم توي يه حلقه کلي دائم دارن فاصله ها چک مي شن نمي دونم چجوري چک کنم بد وقني داره مي چرخه بگم ديگه چک نکن تا چرخش کامل بشه .
  6. #6
    2013/08/20
    سبزوار
    315
    46

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    اره دقیقا
    امیدوارم کمکم مفید بوده باشه
    مقاله کامل پردازش تصویر با متلب(دانلود رایگان)
    http://uploadboy.com/pzxg0x4csgwt.html
    ساخت کواد (صفر تا صد)
    http://www.eca.ir/forum2/index.php?topic=96496.0
  7. #7
    2012/08/26
    10
    0

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    اگه کسي که c بلده يه نگاه به برنامم بندازه و راهنمايي کنه خيلي ممنون ميشم.
  8. #8
    2013/01/02
    12
    0

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    سلام دوست عزيز فکر کنم اگه يک متغيير بيت تعريف کني که تا زماني که در روتين گردش هست و تموم نشده از حلقه خارج نشه بعد که گردش تموم شد بيت و دوباره مقدار بدي تا برنامه جريان پيدا کنه .موفق باشي/
  9. #9
    2011/12/30
    421
    20

    پاسخ : کمک در برنامه ربات ميکروموس با 3 سنسور التراسونيک

    سلام.

    مشکلتون يه مورد عاديه و با حرف درست نميشه. بايد خودتون دست به کار بشيد. مثلا چند جا delay اضافه کنيد يا مثلا يک سري شرط ديگه بنويسيد.

    کلا من مخالفم که برنامه ميکروموس را اينطوري بنويسيد. اگه مي خوايد درست و حسابي باشه بايد حرکات ربات به صورت خانه به خانه باشه. يعني از يه خونه بره تو خونه ديگه و اونجا تصميم بگيره. اينطوري جا براي الگوريتم نويسي هم باز ميشه.
نمایش نتایج: از 1 به 9 از 9

موضوعات مشابه

  1. برنامه نویسی ربات با 5 سنسور
    توسط emad470 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/04/20, 16:23
  2. ربات ميکروموس
    توسط mohsen.s.h در انجمن رباتيك و مكاترونيك
    پاسخ: 3
    آخرين نوشته: 2015/01/01, 15:28
  3. کسي اطلاعاتي از اين سنسور التراسونيک داره ؟؟
    توسط ahmad.e.c.m در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 1
    آخرين نوشته: 2014/12/26, 20:55
  4. کمک در راه اندازي سنسور التراسونيک
    توسط mamal_7153 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2014/01/13, 18:34
  5. تست سنسور التراسونيک
    توسط vahidx در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 1
    آخرين نوشته: 2013/04/25, 14:03

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •