اطلاعیه

Collapse
No announcement yet.

پیشنهاد برای برنامه ربات

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

    پیشنهاد برای برنامه ربات

    با سلام
    لطفا پیشنهاد برنامه نویسی برای ربات زیر را بیان فرمایید.
    1- Atmega 8 میکروکنترلر
    2- تعداد 5 سنسور مادون قرمز در اطراف ربات که خروجی انالوگ دارد نتیجه اینکه باید از ADC میکرو به تعداد 5 تا استفاده کرد
    3-ارتباط با پورت سریال کامپیوتر
    4- تعداد 2 عدد موتور دی سی به همراه درایور L298N
    5- تعداد 2 عدد اپتوکانتر برای انکودر که پالس میدهد("صفر" اگر نور مادون قرمز فرستنده به گیرنده نرسد و "یک" اگر نور برسد)

    با توجه به مفروضات چه الگوریتمی پیشنهاد میکنید که:
    اطلاعات سنسورها و میزان حرکت ربات در کمترین زمان ممکن به کامپیوتر با پورت سریال ارسال شود؟

    با تشکر از اساتید
    >>>>> اللهم عجل لولیک الفرج <<<



    لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

    #2
    پاسخ : پیشنهاد برای برنامه ربات

    سلام
    شما یه رشته به 19 ارسال کنید که فقط عدد باشه
    حال
    3 رقم اول مال سنسور 1
    3 رقم دوم مال سنسور 2
    3 رقم سوم مال سنسور 3
    3 رقم چهارم مال سنسور 4
    3 رقم پنجم مال سنسور 5
    2 رقم 16و17 مال موتور
    2 رق اخر مال انکودر
    آدلان پایا متخصص در حوضه ربات های پرنده
    https://adlanpaya.ir/

    دیدگاه


      #3
      پاسخ : پیشنهاد برای برنامه ربات

      نوشته اصلی توسط avr68
      سلام
      شما یه رشته به 19 ارسال کنید که فقط عدد باشه
      حال
      3 رقم اول مال سنسور 1
      3 رقم دوم مال سنسور 2
      3 رقم سوم مال سنسور 3
      3 رقم چهارم مال سنسور 4
      3 رقم پنجم مال سنسور 5
      2 رقم 16و17 مال موتور
      2 رق اخر مال انکودر
      تشکر از پاسخ شما دوست عزیز.
      توضیحات تکمیلی:
      ربات باید فرامین کامپیوتر را اجرا کند، مثلا سرعت ربات و چرخش ربات را با توجه به موانع باید تنظیم کند و هر لحظه باید بداند چقدر حرکت کرده است. از میکروی روی ربات به عنوان گزارشگیری و اجرای دستورات ارسالی توسط کامپیوتر استفاده میشود. زمان پاسخگویی هرچه مشود باید کم باشد.

      با توجه به توضیحات چه الگوریتمی پیشنهاد میکنید. ایا از وقفه استفاده میکنید؟
      >>>>> اللهم عجل لولیک الفرج <<<



      لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

      دیدگاه


        #4
        پاسخ : پیشنهاد برای برنامه ربات

        نوشته اصلی توسط aghel110
        تشکر از پاسخ شما دوست عزیز.
        توضیحات تکمیلی:
        ربات باید فرامین کامپیوتر را اجرا کند، مثلا سرعت ربات و چرخش ربات را با توجه به موانع باید تنظیم کند و هر لحظه باید بداند چقدر حرکت کرده است. از میکروی روی ربات به عنوان گزارشگیری و اجرای دستورات ارسالی توسط کامپیوتر استفاده میشود. زمان پاسخگویی هرچه مشود باید کم باشد.

        با توجه به توضیحات چه الگوریتمی پیشنهاد میکنید. ایا از وقفه استفاده میکنید؟

        1-برسی وضعیت سنسور
        2-برسی انکودر
        3-ارسال داده ها
        4-دریافت داده از سوی کامپیوتر
        5-پردازش
        6-پاسخ
        7-دریافت داده از سوی ربات
        8-اجرا دستور ها
        9-رفتن به مرحله 1

        oo: :nerd:
        آدلان پایا متخصص در حوضه ربات های پرنده
        https://adlanpaya.ir/

        دیدگاه


          #5
          پاسخ : پیشنهاد برای برنامه ربات

          با سلام

          - برای ارسال دیتا به کامپیوتر از ماژول بلوتوث استفاده شده است.
          - برای فیدبک گرفتن از اپتوکانتر "GP1A53HR" استفاده کرده ام و به کانتر صفر و کانتر 2 وصل شده. اپتوکانتر موتور راست به T0 و اپتوکانتر موتور چپ به TOSC1 (کانتر 2) وصل شده است. هر دو کانتر با لبه بالا رونده تحریک میشوند. میکرو Atmeg8 با کریستال داخلی 8 مگاهرتز کار میکند. از تایمر یک برای تولید PWM استفاده شده است

          چند مشکل:
          1- هنگامیکه ربات حرکت میکند (در مسیر مستقیم) 2 تا شمارنده تعداد پالسهای شمارشی از اپتوکانتر را با اختلاف گزارش می کنند مثلا موتور سمت راست 100 پالس و موتور سمت چپ 115 پالس شمارش کرده اند) چه راه حلی برای از بین رفتن این اختلاف در مسیر مستقیم پیشنهاد میکنید

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

          3- وقتی حرف"i" را در هایپرترمینال میزنم ربات یه مقدار جلو میره و زمانی که نگه دارم ربات به جلو حرکت میکنه اما حرکت نرم و روان نداره و به اصطلاح سکته میزنه و حرکت میکنه برای حل مشکل با توجه به برنامه زیر چه باید کرد؟
          LForward و RForward توابعی که موتورهای سمت چپ و راست را به سمت جلو روشن میکنه و LBackward و RBackward برعکس به سمت عقب روشن میشن.

          کد:
          while (1)
          {
          
           k1 = getchar();
           if(k1=='i')
           { 
             printf("Front\r") ; 
             LForward(40);
             RForward(40);
             delay_ms(30);
            }
            else if(k1=='k')
            {
             printf("Back\r") ; 
             LBackward(40);
             RBackward(40);
             delay_ms(30);
            }
           
            printf("Stop\r") ; 
            PORTB.4=0;
            PORTB.5=0;
            OCR1A=0;
            PORTD.6=0;
            PORTD.7=0;
            OCR1B=0;  
           
          
          }//end while
          >>>>> اللهم عجل لولیک الفرج <<<



          لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

          دیدگاه


            #6
            پاسخ : پیشنهاد برای برنامه ربات

            نوشته اصلی توسط aghel110
            با سلام

            - برای ارسال دیتا به کامپیوتر از ماژول بلوتوث استفاده شده است.
            - برای فیدبک گرفتن از اپتوکانتر "GP1A53HR" استفاده کرده ام و به کانتر صفر و کانتر 2 وصل شده. اپتوکانتر موتور راست به T0 و اپتوکانتر موتور چپ به TOSC1 (کانتر 2) وصل شده است. هر دو کانتر با لبه بالا رونده تحریک میشوند. میکرو Atmeg8 با کریستال داخلی 8 مگاهرتز کار میکند. از تایمر یک برای تولید PWM استفاده شده است

            چند مشکل:
            1- هنگامیکه ربات حرکت میکند (در مسیر مستقیم) 2 تا شمارنده تعداد پالسهای شمارشی از اپتوکانتر را با اختلاف گزارش می کنند مثلا موتور سمت راست 100 پالس و موتور سمت چپ 115 پالس شمارش کرده اند) چه راه حلی برای از بین رفتن این اختلاف در مسیر مستقیم پیشنهاد میکنید

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

            3- وقتی حرف"i" را در هایپرترمینال میزنم ربات یه مقدار جلو میره و زمانی که نگه دارم ربات به جلو حرکت میکنه اما حرکت نرم و روان نداره و به اصطلاح سکته میزنه و حرکت میکنه برای حل مشکل با توجه به برنامه زیر چه باید کرد؟
            LForward و RForward توابعی که موتورهای سمت چپ و راست را به سمت جلو روشن میکنه و LBackward و RBackward برعکس به سمت عقب روشن میشن.

            کد:
            while (1)
            {
            
             k1 = getchar();
             if(k1=='i')
             { 
               printf("Front\r") ; 
               LForward(40);
               RForward(40);
               delay_ms(30);
              }
              else if(k1=='k')
              {
               printf("Back\r") ; 
               LBackward(40);
               RBackward(40);
               delay_ms(30);
              }
             
              printf("Stop\r") ; 
              PORTB.4=0;
              PORTB.5=0;
              OCR1A=0;
              PORTD.6=0;
              PORTD.7=0;
              OCR1B=0;  
             
            
            }//end while
            پیشنهادی نیست؟؟?
            >>>>> اللهم عجل لولیک الفرج <<<



            لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

            دیدگاه


              #7
              پاسخ : پیشنهاد برای برنامه ربات

              سلام.
              اینجر که من فهمیدم شما نیاز به یک ماشین وضعیت دارید.

              یکی از تایمر های آزاد را روی یک زمان مشخص مثلا 10 میلی ثانیه تنظیم کنید و وقفه اون رو فعال کنید. این زمان باید طوری باشه که مطمئن باشید دستورات مورد نظر انجام میشه.
              داخل وقفه تایمر باید ابتدا تمامی سنسور ها را بخونید و ذخیره کنید. و بعد از اون با یک ساختار if else تصمیم مورد نظر را بگیرید و تصمیم نهایی را داخل یه متغییر ذخیره کنید. و در نهایت با یه ساختار switch case دستور مورد نظر را اجرا کنید. فقط باید در وقفه هیچ کار تاخیری انجام ندید.
              اگر سنسور آنالوگ دارید پیشنهاد من اینه که از حالت free running مبدل آنالوگ به دیجیتال استفاده کنید.
              و در آخر در حلقه اصلی باید مدام اطلاعاتی که نیاز دارید را بفرستید.
              در ضمن عملیات دریافت هم باید در وقفه سریال انجام بگیره و صمیم گیری برای اون باید در همون وقفه تایمر نجام بگیره.

              دیدگاه


                #8
                پاسخ : پیشنهاد برای برنامه ربات

                نوشته اصلی توسط sadeghmojtabaei
                سلام.
                اینجر که من فهمیدم شما نیاز به یک ماشین وضعیت دارید.

                یکی از تایمر های آزاد را روی یک زمان مشخص مثلا 10 میلی ثانیه تنظیم کنید و وقفه اون رو فعال کنید. این زمان باید طوری باشه که مطمئن باشید دستورات مورد نظر انجام میشه.
                داخل وقفه تایمر باید ابتدا تمامی سنسور ها را بخونید و ذخیره کنید. و بعد از اون با یک ساختار if else تصمیم مورد نظر را بگیرید و تصمیم نهایی را داخل یه متغییر ذخیره کنید. و در نهایت با یه ساختار switch case دستور مورد نظر را اجرا کنید. فقط باید در وقفه هیچ کار تاخیری انجام ندید.
                اگر سنسور آنالوگ دارید پیشنهاد من اینه که از حالت free running مبدل آنالوگ به دیجیتال استفاده کنید.
                و در آخر در حلقه اصلی باید مدام اطلاعاتی که نیاز دارید را بفرستید.
                در ضمن عملیات دریافت هم باید در وقفه سریال انجام بگیره و صمیم گیری برای اون باید در همون وقفه تایمر نجام بگیره.
                تشکر از پاسخ شما دوست عزیز
                با تجربه ای که دارید پاسخ مسکلات پیش امده در پست قبلی را نیز در صورت امکان بیان فرمایید.
                توضیح: در این ربات از atmega8 استفاده شده است به همراه 5 سنسور مادون قرمز انالوگ و 2 موتور دی سی و یک ماژول بلوتوث و درایور L298N و 2 عدد اپتوکانتر.
                با تشکر
                >>>>> اللهم عجل لولیک الفرج <<<



                لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

                دیدگاه


                  #9
                  پاسخ : پیشنهاد برای برنامه ربات

                  1- مشکل اول کاملا طبیعیه.برای اینکه این خطا ها از بین بره باید از کنترلر استفاده کنید. مثلا کنترلر p یا بهتر از اون کنترلر PID .
                  2- این تصویر را ببینید : http://api.haiku-os.org/US_PC_keyboard_keycodes.png
                  3- این مشکلتون هم طبیعیه به خاطر اینکه برنامه را همین طور نوشتید. احتمالا اگر اون قسمت آخر کد را داخل یک else بنویسید این مشکل حل میشه.البته پیشنهاد می کنم از روش ماشین وضعیت که توی پست قبلی گفتم استفاده کنید. اینطوری به مشکل می خورید.

                  دیدگاه


                    #10
                    پاسخ : پیشنهاد برای برنامه ربات

                    نوشته اصلی توسط sadeghmojtabaei
                    1- مشکل اول کاملا طبیعیه.برای اینکه این خطا ها از بین بره باید از کنترلر استفاده کنید. مثلا کنترلر p یا بهتر از اون کنترلر PID .
                    2- این تصویر را ببینید : http://api.haiku-os.org/US_PC_keyboard_keycodes.png
                    3- این مشکلتون هم طبیعیه به خاطر اینکه برنامه را همین طور نوشتید. احتمالا اگر اون قسمت آخر کد را داخل یک else بنویسید این مشکل حل میشه.البته پیشنهاد می کنم از روش ماشین وضعیت که توی پست قبلی گفتم استفاده کنید. اینطوری به مشکل می خورید.
                    1- منظورتون را نفهمیدم! کنترلرP یا PID چه کمکی در تصحیح شمارش پالسها میکنه؟
                    2- تشکر
                    3-قسمت اخر را اگر داخل else قرار دهم ربات با یکبار فشردن "i" به جلو حرکت میکنه و تا زمانیکه یه کلید غیر از "i" فشرده نشه به جلو حرکت میکنه.
                    در atmega8 س تایمر داریم که تایمر صفر و دو برای شمارش استفاده شده و تایمر یک برای تولید PWM برای کنترل سرعت موتورها.

                    پیشنهاد؟ :applause:
                    >>>>> اللهم عجل لولیک الفرج <<<



                    لطفا برای تشکر از امتیاز مثبت استفاده بفرمایید

                    دیدگاه


                      #11
                      پاسخ : پیشنهاد برای برنامه ربات

                      از وقفه همون تایمر pwm می تونید استفاده کنید.

                      اگه اطلاع در مورد pid داشته باشید باید در واقع برای هر موتور یک کنترلر ایجاد کنید و وقتی می خواهید موتور ها به جلو یا عقب حرکت کنه مقدار setpoint کنترلر را زیاد یا کم کنید.

                      برای اون مشکل else هم باید حتما از وقفه سریال استفاده کنید و در صورت دریافت نکردن برای یه مدت مشخص مقدار متغیر k1 به صفر تغییر کنه. به طور کلی استفاده از getchar اصلا روش خوبی نیست. و حتما باید با اینتراپت کار کنید.

                      دیدگاه

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