ITG3200 project with avr wizzard

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

0

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

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

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

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

 

مقدمه:

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

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

 

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

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

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

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

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

 #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; 
     
 }  

نتیجه:

Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com