پروژه راه اندازی ماژول MPU6050 توسط برد AVR Wizard

 پروژه راه اندازی ماژول MPU6050 توسط برد AVR Wizard

راهنما راه اندازی ماژول MPU6050 توسط برد AVR Wizard

هدف از این آموزش چگونگی برقراری ارتباط با یک سنسور دیجیتال و راه اندازی یک LCD می باشد

در نهایت شما قادر خواهید بود ماژول mpu6050 را، راه اندازی کرده و خروجی سنسور را بر روی LCD نمایش دهید.

لوازم مورد نیاز :

  1. برد AVR Wizard
  2. ماژول mpu6050
  3. پروگرامر MKII
  4. منبع تغذیه 6-12 ولت

مقدمه:

ماژول mpu6050 شامل شتاب سنج و ژایروسکوپ 3 محوره می‌باشد. این سنسور قادر است از طریق درگاه I2C یا SPI، تمامی اطلاعات مربوط به 6 محور را منتقل کند.

MPU6050 متشکل از 6 ADC 16 بیتی می‌باشد؛ 3 مبدل برای تبدیل داده‌های سه محور ژایروسکوپ و 3 مبدل برای تبدیل دا‌ده‌های محورهای شتاب‌سنج

توضیحات برنامه:

ابتدا در CodeVision یک پروژه جدید ایجاد کنید.

پروژه جدید در CODE VISION

سپس درگاه I2C، LCD و Sw1 را فعال می‌کنیم.

تعیین ورودی و خروجی LCD و CHIP در CODE VIsion .

پس از ذخیره و تولید فایل‌ها، وارد محیط برنامه نویسی می‌شویم.

ابتدا توابع و متغیرهای مورد نیاز را تعریف می‌کنیم:

include <stdint.h>
#include <stdlib.h>
#include <iic.h>
#include <delay.h>
#define mpu_address 0x68

uint8_t acc_data[6],gyro_data[6],temperature[2],who[2];
uint8_t who_am=0x75,user;
float temperature_c;
char lcd_data[15];
float gyro_x,gyro_y,gyro_z,acl_x,acl_y,acl_z;

سپس ارتباط با ماژول را بررسی کرده و از صحت آن مطمئن می‌شویم:

lcd_clear();
lcd_gotoxy(0,0); 
lcd_puts("  Hi! Welcome ");  
lcd_gotoxy(0,1); 
lcd_puts("www.redronic.com"); 
delay_ms(2000);
lcd_clear();

who[1]=i2c_readReg(mpu_address<<1,who_am, (uint8_t*)who, 1);
if(who[1]!=0 )
{
        lcd_gotoxy(0,0); 
        lcd_puts("   I2C Error!");
}
else if(who[0]!=104&& who[0]!=105)
{
        lcd_gotoxy(0,0); 
        lcd_puts("    It isn't ");   
        lcd_gotoxy(0,1); 
        lcd_puts("     MPU6050");
}
else
      {

        lcd_gotoxy(0,0); 
        lcd_puts("    MPU6050 ");   
        lcd_gotoxy(0,1); 
        lcd_puts("   Detected!"); 
        }

سپس ماژول را فعال می‌کنیم:

i2c_writeReg(mpu_address<<1, 0x6B, 0x00, 1);

به خاطر زیاد بودن تعداد داده‌هایی که باید بر روی LCD نمایش داده شوند، داده‌ها در چند صفحه نمایش می‌دهیم و برای تغییر صفحات، از دکمه SW1 استفاده می‌کنیم:

if(PINC.4==0)
        {
         user++;
         delay_ms(300);
         if(user==3)
         user=0;
        }

حال دیتای لازم را از سنسور دریافت کرده و به مقادیر قابل درک تبدیل می‌کنیم:

i2c_readReg(mpu_address<<1,0x3B, (uint8_t*)acc_data,6);
        i2c_readReg(mpu_address<<1,0x43, (uint8_t*)gyro_data,6);
        i2c_readReg(mpu_address<<1,0x41, (uint8_t*)temperature,2); 
        temperature_c = ((float) (temperature[0]<<8 | temperature[1])) / 333.87 + 21.0; // Gyro chip temperature in degrees Centigrade
        acl_x=((int16_t)(acc_data[0]<<8 | acc_data[1]))*.000061;                     //  converting to +-2g range
        acl_y=((int16_t)(acc_data[2]<<8 | acc_data[3]))*.000061;                    //   converting to +-2g range
        acl_z=((int16_t)(acc_data[4]<<8 | acc_data[5]))*.000061;                   //    converting to +-2g range
        gyro_x=((int16_t)(gyro_data[0]<<8 | gyro_data[1]))/131;                   //     converting to +-250dps range
        gyro_y=((int16_t)(gyro_data[2]<<8 | gyro_data[3]))/131;                  //      converting to +-250dps range
        gyro_z=((int16_t)(gyro_data[4]<<8 | gyro_data[5]))/131;                 //       converting to +-250dps range

در ادامه با توجه به صفحه انتخاب شده توسط SW1، داده‌ها را بر روی LCD نمایش می‌دهیم:

switch (user)
               {
               case 0 : 
                lcd_gotoxy(0,0); //line 0, char 0
                lcd_puts("  Temperature: ");   
                lcd_gotoxy(6,1); //line 1, char 6
                ftoa(temperature_c,2,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);

               break;

               case 1 :  
                lcd_gotoxy(0,0); //line 1, char 0
                lcd_puts(" Acc:  ");
                lcd_puts("x=");
                ftoa(acl_x,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);   
                lcd_gotoxy(0,1); //line 2, char 0 
                lcd_puts("y=");
                ftoa(acl_y,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);
                lcd_gotoxy(7,1); 
                lcd_puts("z=");
                ftoa(acl_z,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);



               break; 
               
               case 2 :
                lcd_gotoxy(0,0); //line 1, char 0
                lcd_puts("Gyro : ");
                lcd_puts("Gx=");
                ftoa(gyro_x,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data); 
                lcd_gotoxy(0,1); //line 1, char 0  
                lcd_puts("Gy=");
                ftoa(gyro_y,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);
                lcd_gotoxy(7,1); 
                lcd_puts("Gz=");
                ftoa(gyro_z,1,lcd_data); // Convert integer to string
                lcd_puts(lcd_data);

               break;
               }

نتیجه:

اجرا-کردن-mpu-6050

 

zahra_ahmadi

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

یک × 4 =