اطلاعیه

Collapse
No announcement yet.

مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

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

    مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

    سلام
    من ماژول GY-271 رو خریدم و با بدبختی راه اندازیش کردم
    ولی اطلاعاتی که الان بهم میده x,y,z درست نیست
    توی اینترنت گشتم نوشته بود باید با فرمول
    angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
    زاویه رو بدست بیاری که وقتی از همین فرمول استفاده می کنم زاویه رو در حدود 2200 تا 2800 نشون میده
    مشکل از کجاست؟

    اینم کد کدویژن c
    کد:
    while (1)
       {
        i2c_start();
      delay_ms(10);
      i2c_write(0x3C);  //write to HMC
      delay_ms(10);
      i2c_write(0x02);  //mode register
      delay_ms(10);
      i2c_write(0x00);  //continuous measurement mode
      delay_ms(10);
      i2c_stop();
      
      //must read all six registers plus one to move the pointer back to 0x03
      i2c_start();
      delay_ms(10);
      i2c_write(0x3D);     //read from HMC
      delay_ms(10);
      xh = i2c_read(1);  //x high byte
      delay_ms(10);
      //printf(" %d", xh);
      
      xl = i2c_read(1); //x low byte
      delay_ms(10);
      xo = xl|(xh << 8);
      //printf("x=%4ld, ", xo);
      
    
      yh = i2c_read(1);  //y high byte
      delay_ms(10);
      //printf(" %d ", yh);
      
      yl = i2c_read(1);  //y low byte
      delay_ms(10);
      yo = yl|(yh << 8);
      //printf("y=%4ld, ", yo);
      
      zh = i2c_read(1);
      delay_ms(10);         //z high byte
      //printf(" %d ", zh);
      
      zl = i2c_read(1);  //z low byte
      delay_ms(10);
      zo = zl|(zh << 8);
      //printf("z=%ld \r\n", zo);
      
      i2c_write(0x3D);     //must reach 0x09 to go back to 0x03
      delay_ms(10);
      
      i2c_stop();
    
    
      angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
      angle*=10; 
      sprintf(str,"x:%d ,y:%d,z:%d , angel:%d \r\n",xo,yo,zo,angle);
      puts(str); 
      delay_ms(300); 
     }

    #2
    پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

    نوشته اصلی توسط مرتضی محسنی
    سلام
    من ماژول GY-271 رو خریدم و با بدبختی راه اندازیش کردم
    ولی اطلاعاتی که الان بهم میده x,y,z درست نیست
    توی اینترنت گشتم نوشته بود باید با فرمول
    angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
    زاویه رو بدست بیاری که وقتی از همین فرمول استفاده می کنم زاویه رو در حدود 2200 تا 2800 نشون میده
    مشکل از کجاست؟

    اینم کد کدویژن c
    کد:
    while (1)
       {
        i2c_start();
      delay_ms(10);
      i2c_write(0x3C);  //write to HMC
      delay_ms(10);
      i2c_write(0x02);  //mode register
      delay_ms(10);
      i2c_write(0x00);  //continuous measurement mode
      delay_ms(10);
      i2c_stop();
      
      //must read all six registers plus one to move the pointer back to 0x03
      i2c_start();
      delay_ms(10);
      i2c_write(0x3D);     //read from HMC
      delay_ms(10);
      xh = i2c_read(1);  //x high byte
      delay_ms(10);
      //printf(" %d", xh);
      
      xl = i2c_read(1); //x low byte
      delay_ms(10);
      xo = xl|(xh << 8);
      //printf("x=%4ld, ", xo);
      
    
      yh = i2c_read(1);  //y high byte
      delay_ms(10);
      //printf(" %d ", yh);
      
      yl = i2c_read(1);  //y low byte
      delay_ms(10);
      yo = yl|(yh << 8);
      //printf("y=%4ld, ", yo);
      
      zh = i2c_read(1);
      delay_ms(10);         //z high byte
      //printf(" %d ", zh);
      
      zl = i2c_read(1);  //z low byte
      delay_ms(10);
      zo = zl|(zh << 8);
      //printf("z=%ld \r\n", zo);
      
      i2c_write(0x3D);     //must reach 0x09 to go back to 0x03
      delay_ms(10);
      
      i2c_stop();
    
    
      angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
      angle*=10; 
      sprintf(str,"x:%d ,y:%d,z:%d , angel:%d \r\n",xo,yo,zo,angle);
      puts(str); 
      delay_ms(300); 
     }

    سلام دوست عزیز

    من هم دقیقا همین مشکل را دارم. حتی خروجی من با این فرمول ، دارای نوسان هم هست. :cry2:

    دیدگاه


      #3
      پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

      نوشته اصلی توسط حسین وکیل زاده

      سلام دوست عزیز

      من هم دقیقا همین مشکل را دارم. حتی خروجی من با این فرمول ، دارای نوسان هم هست. :cry2:

      میشه کدی که ازش استفاده کردی رو بزاری؟

      دیدگاه


        #4
        پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

        مشکل از اون قسمت که نوشتید
        angle*=10;

        این خط به کلی زیادیه و بدون اون شاید درست جواب بده

        دیدگاه


          #5
          پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

          نوشته اصلی توسط مرتضی محسنی
          سلام
          من ماژول GY-271 رو خریدم و با بدبختی راه اندازیش کردم
          ولی اطلاعاتی که الان بهم میده x,y,z درست نیست
          توی اینترنت گشتم نوشته بود باید با فرمول
          angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
          زاویه رو بدست بیاری که وقتی از همین فرمول استفاده می کنم زاویه رو در حدود 2200 تا 2800 نشون میده
          مشکل از کجاست؟

          اینم کد کدویژن c
          کد:
          while (1)
             {
              i2c_start();
            delay_ms(10);
            i2c_write(0x3C);  //write to HMC
            delay_ms(10);
            i2c_write(0x02);  //mode register
            delay_ms(10);
            i2c_write(0x00);  //continuous measurement mode
            delay_ms(10);
            i2c_stop();
            
            //must read all six registers plus one to move the pointer back to 0x03
            i2c_start();
            delay_ms(10);
            i2c_write(0x3D);     //read from HMC
            delay_ms(10);
            xh = i2c_read(1);  //x high byte
            delay_ms(10);
            //printf(" %d", xh);
            
            xl = i2c_read(1); //x low byte
            delay_ms(10);
            xo = xl|(xh << 8);
            //printf("x=%4ld, ", xo);
            
          
            yh = i2c_read(1);  //y high byte
            delay_ms(10);
            //printf(" %d ", yh);
            
            yl = i2c_read(1);  //y low byte
            delay_ms(10);
            yo = yl|(yh << 8);
            //printf("y=%4ld, ", yo);
            
            zh = i2c_read(1);
            delay_ms(10);         //z high byte
            //printf(" %d ", zh);
            
            zl = i2c_read(1);  //z low byte
            delay_ms(10);
            zo = zl|(zh << 8);
            //printf("z=%ld \r\n", zo);
            
            i2c_write(0x3D);     //must reach 0x09 to go back to 0x03
            delay_ms(10);
            
            i2c_stop();
          
          
            angle= atan2((double)yo,(double)xo) * (180 / 3.14159265) + 180; // angle in degrees
            angle*=10; 
            sprintf(str,"x:%d ,y:%d,z:%d , angel:%d \r\n",xo,yo,zo,angle);
            puts(str); 
            delay_ms(300); 
           }

          به جای :

          کد:
          atan2((double)yo,(double)xo)
          بنویسید:
          کد:
          atan2((double)xo,(double)yo)

          دیدگاه


            #6
            پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

            میخوام تاپیک جدید نزنم. همینو جواب میدم . سوالم رو هم همین جا میپرسم .

            به جای :
            کد:
            atan2((double)yo,(double)xo)
            بنویسید:
            کد:
            atan2((double)xo,(double)yo)
            تو help کامپایلرتون سرچ کنید atan2

            من تو کدویژن سرچ کردم . اومد

            float atan2(float y, float x)
            returns the arc tangent of the floating point numbers y/x (in the range -PI to PI).

            یعنی آرگومانهاش و عددی که بر میگردونه float هستند.

            سوال : کسی کد آماده داره که جواب گرفته باشه ؟ کد من از 0 تا 360 هست. ولی خطی نیست !
            إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
            کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

            دیدگاه


              #7
              پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

              فرمول نوشته شده atan2 اشکالی نداره و کاملا درسته .
              اشکال از اینه که شما افست های سنسور رو محاسبه نکردید و حذف نکردید .
              اگر این کار رو بکنید بدون هیچ اشکالی میتونید دقت فوق العاده به دست بیارید با این سنسور

              دیدگاه


                #8
                پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

                نوشته اصلی توسط یوسف شه نهاد
                فرمول نوشته شده atan2 اشکالی نداره و کاملا درسته .
                اشکال از اینه که شما افست های سنسور رو محاسبه نکردید و حذف نکردید .
                اگر این کار رو بکنید بدون هیچ اشکالی میتونید دقت فوق العاده به دست بیارید با این سنسور
                این که فرمودید جواب من بود ؟
                help کدویژن میگه آرگومان باید float باشه .

                افست چجوری محاسبه میشه ؟
                إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
                کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

                دیدگاه


                  #9
                  پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

                  دوستان خواهشا هرکس نمونه کدی داره که جواب گرفته از gy271 بیاد بزاره یا حداقل راهنماییمون کنه برای منم همینطور تغییر میکنه :angry:

                  دیدگاه


                    #10
                    پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

                    چجوری باید آفستشو صفر کرد

                    دیدگاه


                      #11
                      پاسخ : مشکل با خروجی سنسور قطب نمای HMC5883L - ماژول GY-271

                      نحوه محاسبه و حذف آفست در gy271-hmc5883l رو کسی میدونه توضیح بده

                      دیدگاه

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