اطلاعیه

Collapse
No announcement yet.

کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

    سلام
    دوستان من یک ربات تعقیب خط 24 زدم ما برنامه اش مشکل دارم
    این برنامه نوشتم اما خودم راضی نیستم و اینکه از چندتا سنسور بیشتر استفاده نکردم(اخه 24 سنسور میزنی که چی :icon_razz
    دوستان کمکم کنن برنامه رو حرفه ای تر کنم که روی خط ها با سرعت بیشتری حرکت کنه و مثلا روی خط چپ و راست نکنه بعدا بره جلو
    این فیلم حرکتش با این برنامه هست:
    http://uplood.ir/17G2
    اینم عکس سنسورهام :

    ضمنا سنسورهام با 74HC573 به میکرو وصل کردم
    اینم برنامه:
    کد:
    $regfile = "m16def.dat"
    $crystal = 8000000
    
    
    
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portd.4 = Output
    Config Portd.3 = Output
    Config Portd.2 = Output
    Config Portd.1 = Output
    Config Portd.0 = Output
    
    Config Portb.3 = Output
    Config Portb.4 = Output
    
    
    Config Porta = Input
    
    
    Config Portc = Input
    
    
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    Dim A As Byte , C As Byte
    
    
    
    Do
    '****JOLO***
    If Pina.6 = 1 And Pina.7 = 1 Or Pinc.6 = 1 And Pinc.7 = 1 Or Pinc.7 = 1 And Pina.7 = 1 Then
    Pwm1a = 1023
    Pwm1b = 1023
    Reset Portd.3
    Reset Portd.6
    
    Elseif Pina.7 = 1 And Pinc.7 = 1 And Pinc.6 = 1 Then
    Pwm1a = 1023
    Pwm1b = 1023
    Reset Portd.3
    Reset Portd.6
    'End If
    
    '***Left***
    Elseif Pina.5 = 1 And Pina.4 = 1 And Pina.3 = 1 And Pina.2 = 1 And Pina.1 = 1 And Pina.0 = 1 Then
    Pwm1a = 0
    Pwm1b = 0
    Reset Portd.3
    Reset Portd.6
    Waitms 20
    Pwm1a = 1023
    Pwm1b = 0
    Set Portd.3
    Reset Portd.6
    
    Elseif Pina.7 = 1 Then
    Pwm1a = 1023
    Pwm1b = 0
    Set Portd.3
    Reset Portd.6
    
    Elseif Pina.0 = 1 Or Pinb.1 = 1 Then
    Pwm1a = 1023
    Pwm1b = 0
    Set Portd.3
    Reset Portd.6
    'End If
    
    '***Right***
     Elseif Pinc.5 = 1 And Pinc.4 = 1 And Pinc.3 = 1 And Pinc.2 = 1 And Pinc.1 = 1 And Pinc.0 = 1 Then
    Pwm1a = 0
    Pwm1b = 0
    Reset Portd.3
    Reset Portd.6
    Waitms 20
    Pwm1a = 0
    Pwm1b = 1023
    Reset Portd.3
    Set Portd.6
    
    Elseif Pinc.0 = 1 Or Pind.1 = 1 Then
    Pwm1a = 0
    Pwm1b = 1023
    Reset Portd.3
    Set Portd.6
    
    End If
    
    Waitms 5
    Loop

    #2
    پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

    سلام
    اگه امکان داره این عکس پی سی بی را کوچیکش کنید.دو ساعت طول میکشه تا بیاد.
    من بسکام بلد نیستم ولی راهنمایی میتونم بکنم.
    شما از دستور waitms استفاده کردید.این دستور باعث افزایش خطا میشه.برا مرحله اول هر چی waitms دارید را حذف کنید.
    اینم بگم من تا حالا ربات اینطوری نساختم
    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

    دیدگاه


      #3
      پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

      سلام
      کمکی درباره ی برنامه نمیتونم بکنم
      به نظر من مشکل از سنسور هاست.فاصله ی هم کدوم از هم کمه.چیندمان هم به نظر من این مدل خوب نیست
      چون فاصله اش کمه بازی میکنه هی سنسور میگه چپ باز میگه راست.

      دیدگاه


        #4
        پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

        نوشته اصلی توسط pooyan-shafiei
        سلام
        اگه امکان داره این عکس پی سی بی را کوچیکش کنید.دو ساعت طول میکشه تا بیاد.
        من بسکام بلد نیستم ولی راهنمایی میتونم بکنم.
        شما از دستور waitms استفاده کردید.این دستور باعث افزایش خطا میشه.برا مرحله اول هر چی waitms دارید را حذف کنید.
        اینم بگم من تا حالا ربات اینطوری نساختم
        ممنونم
        اما صبر رو گذاشتم که سریع خطها رو رد نکنه که سنسورها ببینن خط رو

        دیدگاه


          #5
          پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

          بدون تاخیر هم امتحان کردید.فکر نمیکنم اینقدر تاخیر نیاز باشه.
          آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

          دیدگاه


            #6
            پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

            نوشته اصلی توسط pooyan-shafiei
            بدون تاخیر هم امتحان کردید.فکر نمیکنم اینقدر تاخیر نیاز باشه.
            میلی ثانیه هستااااا
            چشم بدون تاخیر هم تست میکنم نتیجه رو میگذارم
            من فقط مشکلم اینه چجور سنسورها بخونم که زمان کمتری میکرو همشو بخونه.

            دیدگاه


              #7
              پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

              میلی ثانیه تو هر حقه داره تکرار میشه.پس اهمیت پیدا میکنه.
              برای اونم یه چیزایی تو ذهنم هست،نمیدونم تا چه حد کار بکنه.
              آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

              دیدگاه


                #8
                پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                نوشته اصلی توسط pooyan-shafiei
                میلی ثانیه تو هر حقه داره تکرار میشه.پس اهمیت پیدا میکنه.
                برای اونم یه چیزایی تو ذهنم هست،نمیدونم تا چه حد کار بکنه.
                ممنونم
                الان اون صبرها همش برداشتم چسب دور چرخها هم از اول زدم شد این:
                http://uplood.ir/dYfY

                دیدگاه


                  #9
                  پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                  حالا برای حرفه ای تر شدنش من یه پیشنهاد میدم شما ببین چطوره.
                  به نظر من به جای اینکه بیاید و هی شرط بذارید که اگه کدوم سنسور رو خط بود چه اتفاقی بیفته.بیاید و به هر سنسور یه عدد نسبت بدید،به این نحو که هر چی سنسور ها به وسط ربات نزدیکه میشند عدد شون هم نزدیکه به صفر میشه و هر چی از وسط ربات فاصله میگیرن اعداد هم بزرگ تر میشند.
                  همه ی این اعداد بین 0 تا 1023 هستند.
                  بعد بگید اگه سنسور فلان روی خط بود به اندازه ی عددش دیوتی سایکل موتور ها هم تغییر کنه.
                  مثلا اگه سنسور سومی از راست رو خط بود پس ربات باید به چپ بره در نتیجه دیوتی سایکل موتور راست به اندازه ی عدد سنسور زیاد بشه و دیوتی سایکل موتور سمت چپ به اندازه عدد سنسور کم بشه.
                  این اعداد را هم با سعی و خطا بهینه کنید.
                  اینجوری از همه ی سنسور ها هم استفاده کردیم.
                  نظرتون چیه؟
                  آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                  دیدگاه


                    #10
                    پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                    نوشته اصلی توسط pooyan-shafiei
                    حالا برای حرفه ای تر شدنش من یه پیشنهاد میدم شما ببین چطوره.
                    به نظر من به جای اینکه بیاید و هی شرط بذارید که اگه کدوم سنسور رو خط بود چه اتفاقی بیفته.بیاید و به هر سنسور یه عدد نسبت بدید،به این نحو که هر چی سنسور ها به وسط ربات نزدیکه میشند عدد شون هم نزدیکه به صفر میشه و هر چی از وسط ربات فاصله میگیرن اعداد هم بزرگ تر میشند.
                    همه ی این اعداد بین 0 تا 1023 هستند.
                    بعد بگید اگه سنسور فلان روی خط بود به اندازه ی عددش دیوتی سایکل موتور ها هم تغییر کنه.
                    مثلا اگه سنسور سومی از راست رو خط بود پس ربات باید به چپ بره در نتیجه دیوتی سایکل موتور راست به اندازه ی عدد سنسور زیاد بشه و دیوتی سایکل موتور سمت چپ به اندازه عدد سنسور کم بشه.
                    این اعداد را هم با سعی و خطا بهینه کنید.
                    اینجوری از همه ی سنسور ها هم استفاده کردیم.
                    نظرتون چیه؟
                    خوبه
                    اما چجور به هر سنسور عدد بدم؟
                    یکم واضح تر اگر بگی ممنون میشم

                    دیدگاه


                      #11
                      پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                      برای سادگی فرض کنیم سنسورها تو یه ردیف با آرایش هشتی باشند.
                      حالا یه متغیر تعریف میکنیم مثلا a.
                      بعد یه شرط میذاریم که اگه سنسور وسطی رو خط بود a را برابر صفر قرار بده.اگه سنسور راستیش رو خط بود a را برار 40 قرار بده اگه سمت راست تریش رو خط بود a را برابر 80 قرار بده و این کار را ادامه میدیم تا به آخرین سنسور برسیم.
                      خوب حالا انتهای کار میگیم که چون سنسور های سمت راست رو خط بودن پس باید ربات به سمت چپ هدایت بشه.پس باید ocr موتور سمت راست به اندازهی a زیاد وocr موتور سمت چپ به اندازه ی a کم بشه.
                      برای سنسور های سمت چپ را هم همین کار را تکرار میکنیم با این تفاوت که اینبار a را به منفی a تبدیل میکنیم.
                      آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                      دیدگاه


                        #12
                        پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                        نوشته اصلی توسط pooyan-shafiei
                        برای سادگی فرض کنیم سنسورها تو یه ردیف با آرایش هشتی باشند.
                        حالا یه متغیر تعریف میکنیم مثلا a.
                        بعد یه شرط میذاریم که اگه سنسور وسطی رو خط بود a را برابر صفر قرار بده.اگه سنسور راستیش رو خط بود a را برار 40 قرار بده اگه سمت راست تریش رو خط بود a را برابر 80 قرار بده و این کار را ادامه میدیم تا به آخرین سنسور برسیم.
                        خوب حالا انتهای کار میگیم که چون سنسور های سمت راست رو خط بودن پس باید ربات به سمت چپ هدایت بشه.پس باید ocr موتور سمت راست به اندازهی a زیاد وocr موتور سمت چپ به اندازه ی a کم بشه.
                        برای سنسور های سمت چپ را هم همین کار را تکرار میکنیم با این تفاوت که اینبار a را به منفی a تبدیل میکنیم.
                        آقا مرسی واسه راهنماییت
                        من اینو تست میکنم نتیجه اش میگذارم
                        خودمم فکر میکنم این روش بشه

                        دیدگاه


                          #13
                          پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 س

                          سلام
                          برای این که این تعداد سنسوری که گذاشتید بلا استفاده نباشه یکم روی PID کاز کنید
                          به این تزتیب که اون 16 تا سنسوری که جلو نصب شده رو بخونید و توی یه متغر ذخیره کنید
                          یعد یه مقایسه انجام بدید و اگر از عددی بیشتر بود بایه نسبت مقدار PWM یه سمت رو زیاد و
                          طرف دیگه رو کم کنید
                          اول اینکار رو به صورت خطی و با کنترلر P انجام بدی و بعد روی PID کار کنید

                          در مورد کنترلر هم باید اول توی هر دفه اجرای حلقه مقدار 8 تا سنسور سمت راست رو توی
                          یه متغییر و سمت دیگه رو هم توی یه متغر ذخیره کنید به فرض یکی a و یکی دیگه رو b بذازیم
                          بعد این دوتا رو مقایسه میکنیم c=a-b و اگر c منفی باشه یعنی باید سرعت موتور سمت a
                          سرعتش بیشتر بشه و اگر مثبت بود بلعکس
                          کد:
                          a=PINB;
                          b=PINC;
                          c=a-b;
                          if (c<0){
                          PWMa=120+a/5;
                          PWMb=120-a/5;}
                          
                          
                          if (c>0){
                          PWMa=120-a/5;
                          PWMb=120+a/5;}
                          
                          if(c==0){
                          PWMa=PWMb=120;}
                          این اعداد که توی مسئله هست رو باید تجربی بدست بیارید
                          روی این برنامه کار کنید تا یه ایده گرفنه باشید و بعد یه کم در مورد PID تحقیق کنید
                          اگر به نتیجه نرسیدید اعلام کنید تا در صورت داشتن وقت آزاد کمکتون کنم
                          البته من بیسیک یادم رفته و برنامه رو با زبان c نوشتم به شما هم پیشنهاد میدم با c
                          بنویسید

                          دیدگاه


                            #14
                            پاسخ : پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 س

                            نوشته اصلی توسط ehsanbagheri
                            سلام
                            برای این که این تعداد سنسوری که گذاشتید بلا استفاده نباشه یکم روی PID کاز کنید
                            به این تزتیب که اون 16 تا سنسوری که جلو نصب شده رو بخونید و توی یه متغر ذخیره کنید
                            یعد یه مقایسه انجام بدید و اگر از عددی بیشتر بود بایه نسبت مقدار PWM یه سمت رو زیاد و
                            طرف دیگه رو کم کنید
                            اول اینکار رو به صورت خطی و با کنترلر P انجام بدی و بعد روی PID کار کنید

                            در مورد کنترلر هم باید اول توی هر دفه اجرای حلقه مقدار 8 تا سنسور سمت راست رو توی
                            یه متغییر و سمت دیگه رو هم توی یه متغر ذخیره کنید به فرض یکی a و یکی دیگه رو b بذازیم
                            بعد این دوتا رو مقایسه میکنیم c=a-b و اگر c منفی باشه یعنی باید سرعت موتور سمت a
                            سرعتش بیشتر بشه و اگر مثبت بود بلعکس
                            کد:
                            a=PINB;
                            b=PINC;
                            c=a-b;
                            if (c<0){
                            PWMa=120+a/5;
                            PWMb=120-a/5;}
                            
                            
                            if (c>0){
                            PWMa=120-a/5;
                            PWMb=120+a/5;}
                            
                            if(c==0){
                            PWMa=PWMb=120;}
                            این اعداد که توی مسئله هست رو باید تجربی بدست بیارید
                            روی این برنامه کار کنید تا یه ایده گرفنه باشید و بعد یه کم در مورد PID تحقیق کنید
                            اگر به نتیجه نرسیدید اعلام کنید تا در صورت داشتن وقت آزاد کمکتون کنم
                            البته من بیسیک یادم رفته و برنامه رو با زبان c نوشتم به شما هم پیشنهاد میدم با c
                            بنویسید
                            سلام
                            آقا خیلی مرسی و ممنون و تشکر
                            من خیلی دنیال روش pid بودم.
                            اگر لطف کنی یکم برام توضیح بدی واقعا ممنون میشم. م
                            خیلی تو اینترنت گشتم چیزی ندیدم.
                            من به بیسیک همین چند خط رو میگذارم ببینید درست هست یا نه.(میدونم گفتید بیسیک رو فراموش کردید اما خب شاید یادتون اومد)
                            بازم تشکر ازدوستانی که لطف میکنند راهنمایی میکنند

                            دیدگاه


                              #15
                              پاسخ : کمک برای نوشتن برنامه ربات تعقیب خط 24 سنسوره

                              من PID رو واسه کنترل یرعت موتور با فیدبک از شفت اینکودر استفاده کردم و خیلی نتیجه خوبی داد
                              برای کار شما میتونم کمک کنم ولی من فقط روش و مسیر رو میگم کد نویسیش با خودتون البته تا جایی
                              که وقت داشته باشم کمک میکنم
                              شما اول همین فسمت که گفتم رو انجام بده قسمت P از PID رو پیاده کردی بعد از اون میریم یراغ قسمت
                              I و بعد D که دیگه تموم میشه
                              البته شما باید یه تایم سمپلینگ هم درست کنید که یه تایمر رو فعال کنید و با اسفاده از وقفه این کارو بکنید
                              البته در مرحله اول این کارو انجام ندید و با همون تاخیر کارتئن رو انجام بدید

                              من فردا ساعت 19 به بعد آنلاین میشم

                              دیدگاه

                              لطفا صبر کنید...
                              X