اطلاعیه

Collapse
No announcement yet.

ساخت ریموت کنترل برای ربات

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

    ساخت ریموت کنترل برای ربات

    ساخت ریموت کنترل برای ربات
    دوستان سلام من یک فرستنده و گیرنده برای رباتم ساختم با استفاده از ماژول ماژول HMR فرکانس 433 مگاهرتر که فوق العاده ماژول نویز پذیر ی هم هست و سرعت پایینی هم داره برای اینکه این ماژول به اصلاح به حالت استند بای یا به قول خودمون نویز نگیره باید مدام دیتا بهش بفرستی و نزاری بیکار بمونه چون اگه بی کار بمونه شدید نویز میگیره خوب من هم مجبور شدم همین کار روبکنم یعنی مثلا وقتی کلید جلو رو می زنیم کد 0001 رو میفرسته و در بین اون هم دوباره دیتای 0101 و 1010 رو می فرستم که با این روش بردش بالای 300 متر رسیده اما اگه توی فیلم زیر توجه کنید نمی تونیم توی گیرنده یه مقدار کنترلش سخته و نمیشه اون دیتای خودمون رو استخراج کنیم و مدام باید موتور ها برای حرکت به جلو (مثلا) روشن و خاموش بشن متاسفانه به نظرم این ماژول با این تکنیک به درد همون ریموت کنترل لچ دار میخوره حالا دوستان فیلم زیر رو ببینید من توش توضیح دادم کسی ایده ای چیزی داشت خبر بده این هم برنامه ی بخش فرستنده و گیرنده هست
    برنامه ی گیرنده :
    کد php:
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Input
    Config Portb = Output
    Config Portc = Output
    Dim Save As Integer , A As Byte
    Rast1 Alias Portb.0
    Rast2 Alias Portb.3
    Chap1 Alias Portb.4
    Chap2 Alias Portb.5
    I1 Alias Portb.6
    I2 Alias Portb.7
    Enablea Alias Portb.1
    Enableb Alias Portb.2
    Set Portb.1
    Set Portb.2
    Do
    Waitms 400
    For A = 1 To 2
    Save = Pind
    Waitms 20
    Reset Rast1
    Reset Rast2
    Reset Chap1
    Reset Chap2
    Reset I1
    Reset I2
    Portc = Save
    If Save = &H01 Then
    Reset Rast1
    Set Rast2
    Reset Chap1
    Set Chap2
    Waitms 100
    End If
    Waitms 10
    If Save = &H02 Then
    Set Rast1
    Reset Rast2
    Set Chap1
    Reset Chap2
    Waitms 100
    End If
    If Save = &H03 Then
    Reset Rast1
    Set Rast2
    Reset Chap1
    Reset Chap2
    Waitms 100
    End If
    If Save = &H04 Then
    Reset Rast1
    Reset Rast2
    Reset Chap1
    Set Chap2
    Waitms 100
    End If
    If Save = &B00000110 Then
    Set I1
    Waitms 100
    End If
    If Save = &B00000111 Then
    Set I2
    Waitms 100
    End If
    If Save = &B00001000 Then
    Reset Rast1
    Set Rast2
    Reset Chap1
    Set Chap2
    Waitms 50
    Reset Rast1
    Set Rast2
    Reset Chap1
    Reset Chap2
    Waitms 50
    End If
    If Save = &B00001001 Then
    Reset Rast1
    Set Rast2
    Reset Chap1
    Set Chap2
    Waitms 50
    Reset Rast1
    Reset Rast2
    Reset Chap1
    Set Chap2
    Waitms 50
    End If

    If Save = &B00001100 Then
    Set Rast1
    Reset Rast2
    Set Chap1
    Reset Chap2
    Waitms 50
    Set Rast1
    Reset Rast2
    Reset Chap1
    Reset Chap2
    Waitms 50
    End If

    If Save = &B00001101 Then
    Set Rast1
    Reset Rast2
    Set Chap1
    Reset Chap2
    Waitms 50
    Reset Rast1
    Reset Rast2
    Set Chap1
    Reset Chap2
    Waitms 50
    End If
    If Save = &B00001100 Then
    Reset Rast1
    Set Rast2
    Reset Chap1
    Set Chap2
    Set I1
    Waitms 100
    End If
    Next A
    Loop


    بخش فرستنده :
    کد php:
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portc = Input
    Config Portb = Output
    Dim Save As Integer , A As Integer , Save1 As Integer , C As Byte

    Do
    Save = Pinc
    If Save = &B00000001 Then
    Portb = &B11111110
    Waitms 500
    End If
    Save = Pinc
    If Save = &B00000010 Then
    Portb = &B11111101
    Waitms 500
    Save = Pinc
    End If
    If Save = &B00000100 Then
    Portb = &B00001100
    Waitms 500
    End If
    Save = Pinc
    If Save = &B00001000 Then
    Portb = &B00001011
    Waitms 500
    End If
    If Save = &B00010000 Then
    Portb = &B00001001
    Waitms 500

    End If
    If Save = &B00100000 Then
    Portb = &B00001000
    Waitms 500

    End If
    If Save = &B00000101 Then
    Portb = &B00000111
    Waitms 500

    End If
    If Save = &B00001001 Then
    Portb = &B00000110
    Waitms 500

    End If
    If Save = &B00000110 Then
    Portb = &B00000011
    Waitms 500

    End If
    If Save = &B00001010 Then
    Portb = &B00000010
    Waitms 500

    End If
    If Save = &B00010001 Then
    Portb = &B00000001
    Waitms 500
    End If
    For C = 1 To 10 datayi ke bayad beferestam ta hang nakone
    Portb = &B00001010
    Waitms 20
    Portb = &B00000101
    Waitms 20
    Next C
    Loop
    این هم لینک فیلمش
    http://www.mediafire.com/?ejhwkew0ig4tj5t

    قم الکترونیک

    #2
    پاسخ : ساخت ریموت کنترل برای ربات

    کسی چیزی نمی دونه ؟
    قم الکترونیک

    دیدگاه


      #3
      پاسخ : ساخت ریموت کنترل برای ربات

      بیا یک کم سینوسی فکر کنیم.
      باید مشکلتو خودت حل کنی...
      یک کمک کوچولو :twisted:
      وقتی سینوسی فکر کنی بعد از هر قله ای یک دره هست، پس هر عددی رو که میفرستم برعکسش رو هم پشت سرش میفرستم.
      مثلا 0x55 برعکسش میشه 0xaa ... اینجوری خیلی بهتر میتونی کار کنی.
      موفق باشی

      دیدگاه


        #4
        پاسخ : ساخت ریموت کنترل برای ربات

        سلام برنامه شما یک مشکل اساسی داره
        اون هم این هست که باید دیتا دارای پکیج ارسالی باشه
        مثلا startbit داشته باشه stopbit و بین این دو دیتا را بفرستی
        تو این حالت نیازی به parity نداری چون کد وقتی که کلید فشرده میشه پشت سر هم ارسال میشه
        تازه نیازی به اون دیتای بیخودی که هی ارسال میکنی هم نداری و میتونی با یک فیلتر نرم افزاری نویزها رو نادیده بگیری
        وقتی ماژول داره اطلاعات میگیره نویز پذیر نیست ولی به هر حال ممکنه تو ارسال اول به اندازه ی حداکثر یکی دوتا نویز داشته باشی ولی برای پکیج دوم اصلا نویز نداری
        پس باید به این نکته هم توجه کنی که حداقل هر دیتا دوبار تکرار بشه

        مثلا اینجوری



        میتونید برای شناسایی ساده تر اطلاعاتتون start bit رو یک کمی طولانی تر کنید تا راحتتر با برنامه نویسی پیداش کنید
        مثل شکل زیر


        همه چیز دست خودتتون است
        خودتون باید صفر و یک ها رو تعریف کنید مثلا

        0= --____

        1=-------__

        start bit = ----____________________________

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

        تا اینجا فکر میکنم توضیحات کاملی بود این رو انجام بدید و خبر کنید


        وقتی تموم شد به من یک پیغام خصوصی هم بدید ممنوم میشم آخه یکمی سرم شلوغه شاید این تایپک رو فراموش کنم
        تاببینیم نتیجه کار به کجا رسید


        دیدگاه


          #5
          پاسخ : ساخت ریموت کنترل برای ربات

          سلامی دوباره سلامی به پهنای آسمانها و از این چرت و پرت ها
          بذار ضربه نهایی رو بزنیمو به قولی فوت کوزه گری این کار رو هم بگم و خلاص
          به عکس قبلی نگاه کن : میبینی یک ها خودشون از یک فرکانس حدود 38 کیلوهرتز تولید شدند
          شما هم باید این کار رو بکنید و به قولی دیتا رو سوار موج حامل کنید و بعد به ماژول بفرستید
          تاکید میکنم این موج حامل اون موج حامل ماژول که 433 مگاهرتز است نیست تا توجه کنید
          این روش صد صد تظمین شده است خودم هم چند وقت پیش این الگریتم رو روی ماژول ASK پیاده کردم و جواب گرفتم

          پس چی شد دوباره تکرار میکنم : یک ها رو روی موج حامل 38 کیلوهرتز بذار و صفر ها هم همون حالت قبلی یعنی صفر معمولی
          حالا یک سوال پیش میاد که چه جوری دیتا رو سوار موج حامل کنی
          این طوری که تایمر شماره 1 رو روی موج حامل toggle میکنی و شروع به شمارش میکنی
          و در طی زمان های دلخواه OC1 رو فعال یا غیر فعال میکنی
          وقتی OC1 رو فعال کنی دیتای (یک) روی موج حامل است و خروجی میدهی
          و وقتی خاموش است صفر خروجی میدهی

          از اون آی سی های pt هم بیخیال شو چون قابلیت چنین کاری رو ندارند

          ما رو بی خبر نذاری
          یاعلی

          دیدگاه

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