اطلاعیه

Collapse
No announcement yet.

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

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

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

    آقا فکر میکنیم 4تا سنسور داریم چهارتاش از پایه pina.1 تا pina.4 هست
    pina.1 و pina.2 و pwm1a سمت راست.
    pina.3 و pina.4 و pwm1b سمت چپ.
    من بعد از متغییر تعریف کردنها مینویسم

    do
    A=pina.1
    B=pina.2
    C=pina.3
    D=pina.4
    A=a-b
    B=b-c
    C=c-d

    DO

    IF A>0 THEN
    100 + PWM1A
    PWM1B - 50

    ELSEIF A<0 THEN
    100 - PWM1A=PWM1A
    PWM1B = 50 + PWM1B

    ELSEIF B<0 THEN
    PWM1A=1023
    PWM1B=1023

    ELSEIF C>0 THEN
    PWM1A=PWM1A-300
    PWM1B=PWM1B-400

    ELSEIF C<0 THEN
    PWM1A=PWM1A+300
    PWM1B=PWM1B+400
    END IF

    LOOP

    فقط نمیدونم جمع و تفریق ها در حالتی که مثلا A بزرگتر و کوچتر از صفر هست باید چجوری بشه

    دیدگاه


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

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

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

      دیدگاه


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

        اونa b c d چی هستند.منظورم حروف کوچیکه.
        منظور من طبق فرضیات شما اینجوری بود
        کد:
        dim a as integer
        do
        a=0
        if pina.1==1 then
        a=a+100
        end if
        if pina.2==1 then
        a=a+200
        end if
        if pina.3==1 then
        a=a-100
        end if
        if pina.4==1 then
        a=a-200
        end if
        pwm1a=pwm1a+a
        pwm1b=pwm1b-a
        loop
        آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

        دیدگاه


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

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

          دیدگاه


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

            نوشته اصلی توسط ehsanbagheri
            سلام
            شما کل سنسور های جلو اونا که هشتا سمت راست و هشتا سمت چپ هست رو در نظر بگیر
            بعد با یه بیت نباید کار کنی
            میتونی کل شماتیک رو بزاری یا روی عکسی که قبلا پ کردی بنویسی که کدوم سنسور به کجا وصل شده؟
            برنامه که نوشتی صحیح نیست چون شما باید کل سنسورهای سمت راست رو توی یه متغیر و سمت چپ رو هم توی یه متغیر
            ذخیره کنی حالا با مقایسه این دوتا میتونی بفهمی که چقدر رباط از مسیر منحرف شده و این مقدار مهمه بعد از بدست اوردن مقدار
            انحراف باید تصمیم بگیری که موتورها چقدر سرعتشون فرق کنه و با چهارتا سنور نمیشه PID رو طرحی کرد
            سلام
            ممنونم از راهنماییتون
            سنسورها بصورت واضح هستند اینجوری:
            از وسط هشتای سمت چپ به ترتیب از وسط pina.7 الی pina.0
            از وسط هشتای سمت راست به ترتیب از وسط pinc.7 الی pinc.0
            چهارتای سمت چپ به ترتیب از بالا pinb.0 الی pinb.3
            چهارتای سمت راست از بالا به ترتیب pind.7 و pind.0 و pind.5 و pind.0

            دیدگاه


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

              خیلی خوب
              شما کل پورت رو توی متغیر ذخیره کن یه متغییر ار نوع بایت
              کد:
              char a,c ;
              a=PINA;
              c=PINC;
              این کدها رو معادل کن توی بیسیک اینجری کل پورت رو دخیره کردی

              دیدگاه


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

                نوشته اصلی توسط ehsanbagheri
                خیلی خوب
                شما کل پورت رو توی متغیر ذخیره کن یه متغییر ار نوع بایت
                کد:
                char a,c ;
                a=PINA;
                c=PINC;
                این کدها رو معادل کن توی بیسیک اینجری کل پورت رو دخیره کردی
                مرسی
                کد بیسیک:
                dim a as byte
                dim b as byte
                dim c as byte
                dim d as byte

                a=porta
                b=portb
                c=portc
                d=portd
                ______________________
                خب حالا یه مشکلی هست!
                من از پورت d پایه های pwm و دوتا ورودی درایورم رو گرفتم.
                حالا کل پورت d بریزم تو یک متغییر بعدا روی اونها اثر میگذاره؟
                بعد شما توی برنامه که نوشتید pin تعریف کردید ، یعنی پین رو ریختید داخل1 متغییر.مگر نفرمودید که کل 1 پورت رو بریزیم توی متغییر؟
                البته به زبان سی شاید اون درست باشه!!ممنون میشم راهنمایی کنید

                دیدگاه


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

                  سلام
                  تو زبون c برای خوندن از دستور PIN وبرای نوشتن از دستور PORT استفاده میشه
                  شما گفتی که سنسورها به PORTA,C وصل شده و اگر منظورتون اون سنسور های کناری هست
                  فعلا از اونا صرف نظر کنید
                  برنامه رو بنویسید و تست کنید و نتیجش رو اینجا بنوسید

                  دیدگاه


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

                    نوشته اصلی توسط ehsanbagheri
                    سلام
                    تو زبون c برای خوندن از دستور PIN وبرای نوشتن از دستور PORT استفاده میشه
                    شما گفتی که سنسورها به PORTA,C وصل شده و اگر منظورتون اون سنسور های کناری هست
                    فعلا از اونا صرف نظر کنید
                    برنامه رو بنویسید و تست کنید و نتیجش رو اینجا بنوسید
                    سلام
                    من اینو نوشتم اما اصلا تغییری نداره موتورهام.فقط به سمت جلو حرکت میکنه
                    کد:
                    $regfile = "m16def.dat"
                    $crystal = 8000000
                    
                    Config Porta = Input
                    Config Portb = Input
                    Config Portc = Input
                    Config Pind.0 = Input
                    Config Pind.1 = Input
                    Config Pind.2 = Input
                    Config Pind.7 = Input
                    
                    Config Portd.3 = Output
                    Config Portd.4 = Output
                    Config Portd.5 = Output
                    Config Portd.6 = Output
                    
                    
                    
                    
                    Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
                    Dim A As Byte , B As Byte , C As Integer
                    A = Porta
                    B = Portc
                    Do
                    
                    
                    C = A - b
                    
                    If C > 0 Then
                    Pwm1a = 500 + A
                    Pwm1b = 500 - A
                    Set Portd.3
                    Reset Portd.6
                    
                    Elseif C < 0 Then
                    Pwm1a = 500 - A
                    Pwm1b = 500 + A
                    Reset Portd.3
                    Set Portd.6
                    
                    Elseif C = 0 Then
                    Pwm1a = 1023
                    Pwm1b = 1023
                    Set Portd.3
                    set Portd.6
                    
                    End If
                    Loop

                    دیدگاه


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

                      سلام
                      واسه اینه که شما باید داخل loop وضعیت سنسور ها رو بخونی
                      دو تا دستور خوندن پورت رو بیار داخل لوپ و دوباره چک کن

                      دیدگاه


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

                        نوشته اصلی توسط ehsanbagheri
                        سلام
                        واسه اینه که شما باید داخل loop وضعیت سنسور ها رو بخونی
                        دو تا دستور خوندن پورت رو بیار داخل لوپ و دوباره چک کن
                        سلام
                        دوست عزیز ممنونم
                        مشکل این بود-باید مینوشتم:
                        A=PINA
                        B=PINC
                        _________
                        حالا یه سوال:
                        اگر چهارتا سنسوره وسط روی خط باشند پس حاصل تفریق ما صفر هست که PWM های ما بیشترین مقدار رو باید بگیرند(ربات به جلو حرکت کنه)
                        حالا اگر سنسور های دیگه بیان روی خط حاصل چی میشه؟و باید بگم بزرگتر یا کوچکتر یا مساوی چه عددی بشن؟
                        ایا اعداد باینری منها میشن یا دسیمال؟
                        خوبه گفتم یه سوالاااا :biggrin:

                        دیدگاه


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

                          جهت چرخش کوتور ها رو عوض نکن
                          رباط همواره به سمت جلو حرکت کنه فقط سر پیچ ها یه موتور از یه موتور دیگه باید
                          سریعتر باشه تا از پیچ عبور کنه واسه همین شما PWM یکی رو کم کنید و دیگری
                          رو زیاد
                          الان توی کدهاتون تغییر جهت رو خذف کنید در ضمن شما باید یه شرط داخل شرط های دیگه بزارید که
                          اگر PWM بیشتر از 1023 شد روی همین 1023 محدود بشه و اگر از صفر کمتر شد صفر بمونه
                          کد:
                          if (pwm>1023){
                          pwm=1023;}
                          else if(pwm<0){
                          pwm=0;}
                          وقتی زباط راه افتاد باید اعداد رو کم و زیاد کنی تا بهترین نتسجه رو بگیری و همچنین
                          یه ضریب هم میتونه برای متغیر c بزاری و داخل if ها از متغیر c (تو مبحث کنترل بهش میگن
                          خطا) استفاده کن و a,b رو کلا حذف کن

                          دیدگاه


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

                            نوشته اصلی توسط ehsanbagheri
                            جهت چرخش کوتور ها رو عوض نکن
                            رباط همواره به سمت جلو حرکت کنه فقط سر پیچ ها یه موتور از یه موتور دیگه باید
                            سریعتر باشه تا از پیچ عبور کنه واسه همین شما PWM یکی رو کم کنید و دیگری
                            رو زیاد
                            الان توی کدهاتون تغییر جهت رو خذف کنید در ضمن شما باید یه شرط داخل شرط های دیگه بزارید که
                            اگر PWM بیشتر از 1023 شد روی همین 1023 محدود بشه و اگر از صفر کمتر شد صفر بمونه
                            کد:
                            if (pwm>1023){
                            pwm=1023;}
                            else if(pwm<0){
                            pwm=0;}
                            وقتی زباط راه افتاد باید اعداد رو کم و زیاد کنی تا بهترین نتسجه رو بگیری و همچنین
                            یه ضریب هم میتونه برای متغیر c بزاری و داخل if ها از متغیر c (تو مبحث کنترل بهش میگن
                            خطا) استفاده کن و a,b رو کلا حذف کن
                            من متوجه نشدم.
                            ممکنه برام بیشتر توضیح بدی؟
                            اگر زحمتت نیست با مثال باشه.
                            متشکرم

                            دیدگاه


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

                              Set Portd.3
                              set Portd.6


                              Do
                              A = Porta
                              B = Portc

                              error= A -B

                              If error > 0 Then
                              Pwm1a = 500 + error
                              Pwm1b = 500 - error
                              if(Pwm1a >1023) then
                              Pwm1a =1023
                              end if

                              if(Pwm1b <0) then
                              Pwm1b =0
                              end if

                              Elseif error < 0 Then
                              Pwm1a = 500 - error
                              Pwm1b = 500 + error
                              if(Pwm1b >1023) then
                              Pwm1b =1023
                              end if

                              if(Pwm1a <0) then
                              Pwm1a =0
                              end if

                              Elseif C = 0 Then
                              Pwm1a = 1023
                              Pwm1b = 1023


                              End If
                              Loop

                              دیدگاه


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

                                نوشته اصلی توسط ehsanbagheri
                                Set Portd.3
                                set Portd.6


                                Do
                                A = Porta
                                B = Portc

                                error= A -B

                                If error > 0 Then
                                Pwm1a = 500 + error
                                Pwm1b = 500 - error
                                if(Pwm1a >1023) then
                                Pwm1a =1023
                                end if

                                if(Pwm1b <0) then
                                Pwm1b =0
                                end if

                                Elseif error < 0 Then
                                Pwm1a = 500 - error
                                Pwm1b = 500 + error
                                if(Pwm1b >1023) then
                                Pwm1b =1023
                                end if

                                if(Pwm1a <0) then
                                Pwm1a =0
                                end if

                                Elseif C = 0 Then
                                Pwm1a = 1023
                                Pwm1b = 1023


                                End If
                                Loop
                                ممنونم
                                تست میکنم خبر میدم
                                اخر برنامه نوشتید C.
                                متغییر C چی هستش؟
                                و اینکه جنس متغییرها باید INTEGER بگیرم که اعداد منفی هم بگیره درسته؟

                                دیدگاه

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