آردوینو آردوینو Arduino Uno آموزش آردوینو شتاب و ژایرو پروژه های آردوینو

آموزش کنترل ال ای دی با سنسور شتاب و ژایرو MPU6050 و برد آردوینو Nano

Arduino-nano-and-mpu6050-with-led-digispark
نوشته شده توسط پریسا پوربلورچیان

برای تشخیص جهت و شتاب نیاز به سنسور منحصر به فردی داریم. سنسورهای شتاب و ژایرو دو عملکرد مهم دارند. یکی برای تشخیص پارامترهای یک جسم در حال حرکت و دوم تشخیص حرکت‌های یک جسم ثابت می‌باشد. انواع مختلفی از سنسورهای شتاب و ژایرو با قابلیت سنجش پارامترهای مختلف از ۳ محور تا ۹ محور وجود دارند. حتی بر اساس دقت و حساسیت هم دسته بندی می‌شوند. در این پست آموزش با استفاده از یک ماژول شتاب و ژایرو با تراشه MPU6050 به ال ای دی ها فرمان می‌دهیم. به عبارتی با چرخش این ماژول در جهت‌های مختلف، ال ای دی ها تغییر وضعیت می‌دهند. در ادامه این آموزش جذاب با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

 


سنسور شتاب و ژایرو MPU6050


سنسور شتاب و ژایرو از تراشه MPU6050 تشکیل شده است. سنسور بسیار دقیق ۱۶ بیتی که برای هر کانال تعریف شده است. این سنسور هر سه محور X , Y و Z را در یک زمان دربرمی‌گیرد. ولتاژ کاری سنسور شتاب و ژایرو MPU6050 بین ۳٫۳ تا ۵ ولت DC می‌باشد. همچنین این سنسور از پروتکل I2C جهت ارتباط با میکروکنترلر آردوینو بهره می‌برد. سنسور شتاب ژایرو MPU6050 دارای حساسیت  ۱۳۱ LSBs/dps  و در محدوده  ±۲۵۰, ±۵۰۰, ±۱۰۰۰,  ±۲۰۰۰dps می‌باشد. ماژول شتاب و ژایرو MPU6050 از یک چیپ سیلیکونی با قابلیت پردازش دیجیتالی بهره می‌برد و همچنین توانایی ترسیم الگوریتم های پیچیده ۹ محوری را دارد. سنسور MPU6050 جریان مصرفی بسیار ناچیز در محدوده ۵ میکروآمپر تا ۳٫۶ میلی آمپر دارد. این سنسور دارای ۸ پایه VCC, GND, SCL, SDA, XDA, XCL, ADD, INT می‌باشد. دیتاشیت کامل سنسور در صفحه محصول سنسور شتاب و ژایرو MPU6050 در داشنجوکیت قرار گرفته شده است. آن را دانلود و  مطالعه نمایید.

 

 


برد آردوینو Arduino Nano


برد آردوینو نانو Arduino NANO با تراشه CH340G یک برد کوچک بر پایه آی سی ATmega328 می باشد. برد آردوینو دارای ۳۰ پایه می‌باشد. پایه D0 تا D13 پایه ورودی و خروجی دیجیتال است. پایه ۳ و ۲۸  ریست RESET، پایه ۴ و ۲۹ زمین GND، پایه ۱۷ تعذیه ۳٫۳ ولت DC، پایه ۱۸ (AREF ( ADC، پایه ۱۹ تا ۲۶ ورودی آنالوگ A0 – A7، پایه ۲۷ تغذیه ۵ ولت DC و پایه ۳۰ تغذیه پاور VIN می‌باشد. ابعاد برد آردوینو نانو Arduino Nano در حدود ۱٫۷۰ * ۰٫۷۳ اینچ می‌باشد. نوع کانکتور آردوینو نانو Mini USB است. فرکانس کاری آردوینو نانو ۱۶ مگاهرتز MHz می‌باشد. ولتاژ مورد نیاز ۵ ولت DC و جریان آن در حدود ۴۰ میلی آمپر برای هر پین ورودی و خروجی است. اطلاعات بیشتر به همراه دیتاشیت کالا در صفحه محصول آردوینو نانو Arduino Nano در دانشجوکیت قرار گرفته شده است که می‌توانید مطالعه کنید.

 

پروژه کنترل ال ای دی با سنسور شتاب و ژایرو MPU6050 - دیجی اسپارک

 


هدف از آموزش آردوینو


توسط سنسور شتاب و ژایرو MPU6050 به ۴ ال ای دی در جهت محور X , Y فرمان می‌دهیم. در ادامه آموزش به بررسی اتصالات، وسایل مورد نیاز جهت اجرای پروژه و در نهایت کد آردوینو آن خواهیم پرداخت. از آنجایی که هر جهت دارای قسمت مثبت و منفی است، در خروجی شاهد چهار جهت خواهیم بود.

 


ال ای دی اوال Oval LED


ال ای دی Oval در مقایسه با سایر ال ای دی‌های نور بسیار واضح و شفاف با زوایه دید بیشتری دارد. همچنین ظاهر این نوع ال ای دی ها متفاوت است. اوال Oval در انگلیسی به معنای بیضی می‌باشد. ولتاژ مورد نیاز برای ال ای دی اوال Oval از ۳ تا ۳٫۲ ولت DC است. این ال ای دی دارای طول موج ۴۲۶ تا ۴۶۵ نانومتر است. همچنین دارای شدت نور ۶۰۰ تا ۸۰۰ MCD می‌باشد. جریان کاری این ال ای دی ۱۵ تا ۲۰ میلی متر است.

 

 


فراخوانی کتابخانه در آردوینو


جهت اجرای این کد نیاز به فراخوانی ۳ کتابخانه خواهیم داشت. چنانچه شیوه نصب کتابخانه در آردوینو را نمی‌دانید. به پستآموزش نصب کتابخانه در نرم افزار آردوینو مراجعه کنید. اگر هم شیوه نصب و راه اندازی نرم افزار آردوینو را نمی‌دانید. به آموزش کار با برد آردوینو و نصب نرم افزار آردوینو Arduino IDE مراجعه کنید.

  • کتابخانه I2Cdev

کتابخانه I2Cdev برای ارتباط پروتکل I2C با میکروکنترل ها فراخوانی می‌شود. لینک دانلود کتابخانه در صفحه محصول سنسور شتاب و ژایرو MPU6050 قرار گرفته شده است. آن را دانلود و سپس فراخوانی کنید.

  • کتابخانه MPU6050_6Axis_MotionApps20

کتابخانه MPU6050_6Axis_MotionApps20 جهت عملکرد سنسور شتاب و ژایرو MPU6050 فراخوانی می‌شود. لینک دانلود کتابخانه در صفحه محصول سنسور شتاب و ژایرو MPU6050 قرار گرفته شده است. آن را دانلود و سپس فراخوانی کنید.

  • کتابخانه Wire

کتابخانه wire به صورت پیش فرض در لیست کتابخانه های آردوینو قرار گرفته شده است. آن را فراخوانی کنید.

 

 


اتصال سنسور شتاب و ژایرو MPU


  • پایه VCC سنسور شتاب و ژایرو MPU6050 را به پایه ۳٫۳ ولت آردوینو نانو Arduino Nano اتصال دهید.
  • پایه GND سنسور شتاب و ژایرو MPU6050 را به پایه GND آردوینو نانو Arduino Nano اتصال دهید.
  • پایه SCL سنسور شتاب و ژایرو MPU6050 را به پایه آنالوگ A5 آردوینو نانو Arduino Nano اتصال دهید.
  • پایه SDA سنسور شتاب و ژایرو MPU6050 را به پایه آنالوگ A4 آردوینو نانو Arduino Nano اتصال دهید.
  • پایه INT سنسور شتاب و ژایرو MPU6050 را به پایه دیجیتال D2 آردوینو نانو Arduino Nano اتصال دهید.

اتصال ماژول شتاب و ژایرو به برد آردوینو نانو Nano - دیجی اسپارک

 


اتصال ال ای دی LED


  • ال ای دی LED اول را به پایه دیجیتال D3 آردوینو نانو Arduino Nano اتصال دهید.
  • ال ای دی LED دوم را به پایه دیجیتال D5 آردوینو نانو Arduino Nano اتصال دهید.
  • ال ای دی LED سوم را به پایه دیجیتال D6 آردوینو نانو Arduino Nano اتصال دهید.
  • ال ای دی LED چهارم را به پایه دیجیتال D9 آردوینو نانو Arduino Nano اتصال دهید.

 


کد برنامه آردوینو


 

#include <I2Cdev.h> // فراخوانی کتابخانه  
#include "MPU6050_6Axis_MotionApps20.h" // فراخوانی کتابخانه
#define SIMPLE_IMPLEMENTATION false

const int frontLed = 3; // تعریف ال ای دی 
const int bottomLed = 5; // تعریف ال ای دی
const int rightLed = 10; // تعریف ال ای دی 


const int leftLed = 9;

long int lastPrintTime;

typedef struct 
{
    byte pin;
    byte positionInsideGroup;    
    char thePosition; // Left, Right, Up, Down
    byte minAngle;
    byte maxAngle;    
} ledConfig;

ledConfig leds[] = {
    {۳, ۱, 'u', 31, 45},  
    {۱۲, ۲, 'u', 16, 30},
    {۱۱, ۳, 'u', 5, 15},  
    {۵, ۱, 'd', 5, 15},  
    {۶, ۲, 'd', 16, 30},
    {۷, ۳, 'd', 31, 45},  
    {۸ , ۱, 'r', 5, 23},  
    {۹, ۲, 'r', 24, 45},
    {۱۰, ۱, 'l', 5, 23},  
    {۴, ۲, 'l', 24, 45},
};



#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    #include "Wire.h"
#endif

MPU6050 mpu; // فرخوانی MPU6050

bool dmpReady = false;  // در صورتیکه سنسور عمل کند 
uint8_t mpuIntStatus;   // ذخیره بایت ۸ بیتی 
uint8_t devStatus;      // تغییر وضعیت بعد از اجرای هر عملکرد
uint16_t packetSize;    
uint16_t fifoCount;     
uint8_t fifoBuffer[64];

// تعیین جهت و حرکت سنسور شتاب و ژایرو 
Quaternion q;           // [w, x, y, z]         quaternion container
VectorInt16 aa;         // [x, y, z]            accel sensor measurements
VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
VectorFloat gravity;    // [x, y, z]            gravity vector
float euler[3];         // [psi, theta, phi]    Euler angle container
float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector
volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high

void setup() 
{
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
        TWBR = 24; 
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif

    Serial.begin(9600);
    while (!Serial); 
    Serial.println(F("Initializing I2C devices..."));
    mpu.initialize();
    Serial.println(F("Testing device connections..."));
    Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
    Serial.println(F("Initializing DMP..."));
    devStatus = mpu.dmpInitialize();
    mpu.setXGyroOffset(101);
    mpu.setYGyroOffset(41);
    mpu.setZGyroOffset(6);
    mpu.setZAccelOffset(1273); 
    if (devStatus == 0) {
        // فعال شدن DMP
        Serial.println(F("Enabling DMP..."));
        mpu.setDMPEnabled(true);
        Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
        attachInterrupt(0, dmpDataReady, RISING);
        mpuIntStatus = mpu.getIntStatus();
        Serial.println(F("DMP ready! Waiting for first interrupt..."));
        dmpReady = true;
        packetSize = mpu.dmpGetFIFOPacketSize();
    } else {
        Serial.print(F("DMP Initialization failed (code "));
        Serial.print(devStatus);
        Serial.println(F(")"));
    }
    if (SIMPLE_IMPLEMENTATION) { 
        initializeLEDsSimple();
    } else {
        initializeLEDsMultiple();
    }
    lastPrintTime = millis();    
}

void loop() 
{
    if (!dmpReady) return;
    mpuInterrupt = false;
    mpuIntStatus = mpu.getIntStatus();
    fifoCount = mpu.getFIFOCount();
    if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
        mpu.resetFIFO();
        Serial.println(F("FIFO overflow!"));
    } else if (mpuIntStatus & 0x02) {
        while (fifoCount < packetSize) {
          fifoCount = mpu.getFIFOCount();
        }
        mpu.getFIFOBytes(fifoBuffer, packetSize);        
        fifoCount -= packetSize;
        mpu.dmpGetQuaternion(&q, fifoBuffer);
        mpu.dmpGetGravity(&gravity, &q);
        mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
        int x = ypr[0] * 180/M_PI;
        int y = ypr[1] * 180/M_PI;
        int z = ypr[2] * 180/M_PI;
        Serial.print(y);Serial.print("\t");Serial.println(z);   
        if (SIMPLE_IMPLEMENTATION) {        
            flashLEDsSimple(x, y, z);
        } else {
            flashLEDsMultiple(x, y, z);
        }
    }
}

void initializeLEDsSimple() 
{
    pinMode(frontLed, OUTPUT);
    pinMode(bottomLed, OUTPUT);    
    pinMode(rightLed, OUTPUT);
    pinMode(leftLed, OUTPUT); 
}

void initializeLEDsMultiple() 
{ 
    for (int i=0; i<10; i++) {
        Serial.println(leds[i].pin);
        pinMode(leds[i].pin, OUTPUT);
    }
    delay(3000);
}

void flashLEDsSimple(int x, int y, int z)
{
    if (y > 0) {
        analogWrite(rightLed, y*4);
        analogWrite(leftLed, 0);           
    } else {
        analogWrite(leftLed, y*4*-1);      
        analogWrite(rightLed, 0);      
    }
    if (z > 0) {
        analogWrite(bottomLed, z*4);
        analogWrite(frontLed, 0);          
    } else {
        analogWrite(frontLed, z*4*-1);      
        analogWrite(bottomLed, 0);      
    }     
}

void flashLEDsMultiple(int x, int y, int z)
{
    for (int i=0; i<10; i++) {
        
        bool modified = false;
        if (z < 0 && leds[i].thePosition == 'u' && abs(z) > leds[i].minAngle) {
            digitalWrite(leds[i].pin, HIGH);
            modified = true;
        }
        if (z > 0 && leds[i].thePosition == 'd' && abs(z) > leds[i].minAngle) {
            digitalWrite(leds[i].pin, HIGH);
            modified = true;
        }
        if (y < 0 && leds[i].thePosition == 'l' && abs(y) > leds[i].minAngle) {
            digitalWrite(leds[i].pin, HIGH);
            modified = true;
        }
        if (y > 0 && leds[i].thePosition == 'r' && abs(y) > leds[i].minAngle) {
            digitalWrite(leds[i].pin, HIGH);
            modified = true;
        } 
        if (!modified) {
            digitalWrite(leds[i].pin, LOW);
        }
    }
}

void dmpDataReady() 
{
    mpuInterrupt = true;
}

 


تحلیل کد آردوینو


از طریق کلیدهای میانبری که برای انتقال کدها در نظر گرفته شده است، کد را به نرم افزار آردوینو منتقل کنید. سپس کامپایل کنید. طبق اتصالات گفته شده در متن آموزش اتصالات را انجام دهید. نکته مهم، بسیاری از سنسور ها برای نمایش دقیق مقادیر اندازه گیری شده و تعیین صحت و دقت نیاز به کالبیراسیون دارند. پیشنهاد می‌شود برای اندازه گیری دقیق تر محور X,Y,Z سنسور را کالیبره کنید.

 


تحلیل مدار MPU6050


با قرار گرفتن سنسور در زاویه افقی Horizental، طبق تعریف کدها با جا به جا کردن سنسور به سمت بالا، پایین، چپ و راست به ترتیب ۴ ال ای دی LED به عنوان خروجی فعال می‌شود. به این صورت که با کج کردن سنسور به سمت بالا ال ای دی متصل به پایه ۳ دیجیتال، به سمت پایین ال ای دی متصل به پایه ۵ دیجیتال ، به سمت چپ ال ای دی متصل به سمت ۹ دیجیتال و در نهایت به سمت راست ال ای دی متصل به پایه ۱۰ دیجیتال روشن خواهد شد.

پروژه کنترل LED با آردوینو نانو و ماژول شتاب و ژایرو MPU6050 - دیجی اسپارک

 


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


برد آردوینو نانو Arduino Nano

ُسنسور شتاب و ژایرو MPU6050

ال ای دی Oval 

بردبورد 

۶۰ رشته کابل مخصوص بردبورد

 

 

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

 

پروژه

طی چند قسمت قبلی که طرح پروژه را پیاده سازی کردیم، با استقبال شما کاربران مواجه شدیم. در این سری برای اینکه گستره بیشتری از افراد بتوانند فرصت استفاده از بن خرید را داشته باشند؛ روال دیگری را در پیش گرفتیم. در این روش تصمیم گرفته‌ایم به ۱۰ نفر از کاربران بن خرید ارایه شود. برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و بسته به خلاقیت، مدار جدیدی ایجاد کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ «#دیجی_اسپارک» و «#دانشجوکیت» و «#digispark» و «#daneshjookit» منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۸۳ دیدگاه

  • سرکار خانم مهندسس محبت کنید در پروژه هاتون از اسم درست قطعات و ماژولها استفاده کنید. در این پروژه شما از اسم ژایرو استفاده کردید که باید بگم این اسم درست نیست و حال انکه این پروژه جنبه آموزشی هم داره. اسم درست این ماژول Gayro و اسم کاملشم Gayroscope هستش و نه ژایرو. بسیار پسندیده هست اگه از اسم قطعه ای اطمینان نداری لطفا تو گوگل یه سرچ کنی بد نیست. درضمن من بشما زیاد ایراد نمیگیرم ممکن هست شما هم از مثلا استاد خودتون آموخته باشید و او هم همچنین الا آخر. موفق و پایدار باشید.

    • سلام
      از توجه شما ممنونم، لطفا اسم این موضوع را ایراد گرفتن نگذارید و آزادانه هر موضوعی که از نظر جنابعالی نیاز به اصلاح دارد را بیان بفرمایید. هدف بنده و همکارانم در دیجی اسپارک، رشد و‌ توسعه مداوم می‌باشد.

      • pinMode(frontLed, OUTPUT);
        pinMode(bottomLed, OUTPUT);
        pinMode(rightLed, OUTPUT);
        pinMode(leftLed, OUTPUT);
        سلام و خسته نباشید خدمت خانم پوربلورچیان
        میخواستم بدونم این قسمت به دلخواه باید عدد پین ها رو معرفی کنیم ؟ یا تغییری ندهیم؟
        .
        ارور این قسمت چیه؟ ارور شناسایی نشد if (SIMPLE_IMPLEMENTATION) {
        flashLEDsSimple(x, y, z);
        } else {
        flashLEDsMultiple(x, y, z);
        }
        آیا قبل از آپلود کد و کتاب خانه باید ماژول mpu6050به برد آردینو متصل باشه یا خیر؟

        • با سلام
          در خط های زیر پین های دیجیتال را به دلخواه میتوانید تغییر دهید.
          const int frontLed = 3; // تعریف ال ای دی
          const int bottomLed = 5; // تعریف ال ای دی
          const int rightLed = 10; // تعریف ال ای دی

          همچنین ارور دریافتی را کامل ارسال کنید.
          نصب کتابخانه ارتباطی با ماژول ندارد.

          • سلام خانم پوربلورچیان روز خوبی داشته باشید…میخواستم در سال جدید خواهشی از شما داشته باشم ،اول تشکر میکنم بابت مطالب مفید و راهنمایی هاتون، دوم اینکه تا اینترنت ملی نشده اگر میشه لایبری های زیر خرید ماژول ها در سایت دانشجو کیت رو به روز رسانی کنید چون هیچ کدام از لایبری ها بر روی ورژن جدید نرم افزار آردینو جواب نمیده و نمایان نمیشه و سوم که با توجه به این که نرم افزار آردینو ورژن جدید اومده منو ها و….هم تغییراتی یافته و لذا اگر شما از نرم افزار قدیمی استفاده و با توجه به همان راهنمایی کنید نه تنها موجب راهنمایی نمیشه بلکه موجب سر در گمی نیز میشود…
            با تشکر از شما و تیم دیجی اسپارک

            • با سلام
              کاربر گرامی، ضمن تبریک سال جدید از پیشنهاد شما ممنونم.
              بسیاری از کتابخانه ها در طی سالیان گذشته آپدیت شده است و در نرم افزار آردوینو این مورد قابل مشاهده است. در صورتیکه در دستورات تغییری ایجاد شده باشد، در متن پیام های ارور نمایش داده می‌شود و رفع عیب ساده است. حتما درخواست شما را پیگیری و در صورت امکان تغییرات اعمال خواهد شد.

      • سلام من وقتی از آردینو نانوR3 استفاده میکنم…قسمت port نمایان نمیشه….لپ تاپم میشناسه ولی توی قسمت port که Com3یا شناسایی میکنه کم رنگه

  • آموزشی خوب و کاربردی بود و خسته نباشید میگم
    شاید بشه این پروژه رو کمی توسعه و داد و این ماژول شتاب سنج رو داخل یک ریموت کنترل گذاشت، بعد با چرخش ریموت در زوایای مختلف، لامپی خاص روشن بشه، مثلا وقتی که ریموت رو حول محور x چرخوندیم، یک تعداد از لامپها روشن بشن و اگر حول محور y چرخش داشتیم، یک تعداد دیگه روشن بشن

    • سلام
      از توجه شما ممنونم. اگر منظورتان از ریموت، ارسال فرمان به صورت بیسیم می‌باشد. در این حالت نیاز به دو برد میکرو و دو ماژول فرستنده گیرنده می‌باشد.
      در ضمن فوتبال هم ببینید!! 🙂

    • سلام
      کاربر گرامی دقت کنید باید یک ویدیو از خودتان منتشر کنید. به عنوان مثال یکی از پروژه های دیجی اسپارک را انجام داده و از نحوه ی عملکرد آن ویدیو بگیرید.

  • سلام و خسته نباشید به شما و همکارانت می خواستم از شما در خواست اموزش ماژول GY_68 رایاد بدید ممنون

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

  • با عرض سلام وخسته نباشید،معذرت میخام میشه همین کدهارو روی آردینو مینی هم آپلود کرد واستفاده بشه یا نیاز به تغییراتی هم هست؟؟اگر بله چه تغییراتی؟؟

    • سلام
      بله می‌توانید آپلود کنید.
      تنها باید نرم افزار را بر روی برد آردوینو مینی تنظیم کنید.

  • سلام و ممنون از سایت و آموزش های خوبتون ،
    من یه mpu6050 به صورت ماژول gy521 دارم برنامش درسته ولی تغییر مقادیر خروجی خیلی غیر منطقیه (یعنی خیلی زیاده) به نظرتون مشکل از کجا میتونه باشه ؟
    و سوال دوم اینکه ماژول gy521 امکان کالیبره شدن داره ؟
    خیلی ممنون

    • سلام
      باید سنسور کالیبره شود. در این خصوص به دیتاشیت کالا مراجعه نمایید.

  • Salam
    in emkan vojood dare ke az Timer1 interrupt estefade kard ta masalan har 50 msec mpu6050 ro fara hkhond va etelaat jadidesho gereft?
    Midoonam ke khode mpu pin INT dare vase interrupt ama in vaghti karbord dare ke ma bekhaim vaghti dadehaye jadid darim una ro daryaft konim. Ama man mikham tooy frequency khasi masalan 20 Hz dade begiram.

      • سلام،
        متاسفانه روی لپ تاپم کیبور فارسی نداشتم به همین خاطر فارسی تایپ‌نکردم.
        سوالم این بود چطور میشه با استفاده از اینتراپت اطلاعات سنسور mpu رو خوند؟
        خود سنسور پین اینتراپت داره اما وقتی بدرد میخوره که بخوایم هربار اطلاعات تازه ای داریم سنسور بهمون بگه و اونو دریافت کنیم. محیطی که من میخوام تست کنم سنسور رو روی موتور هست و چون همیشه لرزش هست این ویژگی بدرد من نمیخوره. تا اونجایی که مطالعه کردم نمیشه از اینتراپت زمان Timer1 استفاده کرد واسه درخواست اطلاعات از طریق کانکشن wire.h و در عمل هم نتونستم این کار رو کنم. راهی وجود داره واسه این کار؟ مثلا من نیاز دارم هر ۵۰ میلی ثانیه یکبار اطلاعات mpu رو بخونم و توی بافر ذخیره کنم.
        با تشکر

        • سلام
          این مورد زمانبر می‌باشد و در حال پیگیری هستم که نیازمند صبر و شکیبایی شما خواهد بود.
          از همین طریق اطلاع رسانی خواهد شد.

          • سلام چطور میتونم لایبری هایی که خودم نصب کردم رو حذف کنم؟؟من از طریق درایو cرفتم به مسیر برنامه و پوشه لایبری رو هم دیدم اما داخل این پوشه لایبری های خود آردینو هست و نسخه نصبی من نبود..چندین بار نر افزار آردینو رو پاک کردم و دوباره نصب کردم اما هنوزم لایبری های نصبی داخل لیست وجود داشت…ممنون میشم اگر کامل و شفاف درباره این مسئله راهنمایی فرمایید….

            • با سلام
              کاربر گرامی در این خصوص از محل نصب آردوینو بر روی پوشه LIBRARIES کلیک کرده و سپس تمامی کتابخانه های نصب شده را میتوانید مشاهده و حذف کنید. همچنین در مسیر نرم افزار آردوینو بخش INCLUD LIBRRAY میتوانید نام کتابخانه مورد نظر را جست و جو و سپس UNISTALL کنید.

      • با سلام
        سوالم این بود که چطور میتونم اطلاعات این سنسور رو از طریق اینتراپت تایمر۱ بگیرم. مثلا هر ۵۰میلی ثانیه یکبار
        اتصال ‌آی۲سی خودش از طریق اینتراپت کار میکنه و اولویت پایین تری نسبت به تایمر۱ داره به همین دلیل اجازه نمیده سنسور رو از طریق اینتراپت کنترل کنم.
        اینتراپت پین خود سنسور مورد استفاده من نیست چونکه من بر حسب بازه زمانی میخوام و اون برحسب بودن اطلاعات جدید بمن داده میده.
        با سپاس

        • با سلام مجدد
          متاسفانه بنده هم موردی را در این خصوص پیدا نکردم. از آنجایی که پروژه شما خاص و شرایطی متفاوت دارد، امکان شبیه سازی هم برای بنده وجود ندارد. از اینرو از دیگر کاربران که در این خصوص تجربه کافی دارند، تقاضا دارم تا در این بحث شرکت کنند.

      • با سلام

        من دوبار سوالم رو به فارسی پرسیدم اما نه جواب گرفتم نه سوالم رو دیدم در قسمت نظرات.
        حداقل میتونید بگید اطلاع ندارید تا یک پاسخ کوتاه داده باشید.

      • سلام خانم مهندس، مرسی ازبابت اموزش هاتون، خیلی مفید بود، میشه کدها را واسه AVRدر کدویژن یا بیسکام هم بنویسید

      • OUTPUT);
        pinMode(bottomLed, OUTPUT);
        pinMode(rightLed, OUTPUT);
        pinMode(leftLed, OUTPUT);
        سلام و خسته نباشید
        میخواستم بدونم این قسمت به دلخواه باید عدد پین ها رو معرفی کنیم ؟ یا تغییری ندهیم؟
        .
        ارور این قسمت چیه؟ ارور شناسایی نشد if (SIMPLE_IMPLEMENTATION) {
        flashLEDsSimple(x, y, z);
        } else {
        flashLEDsMultiple(x, y, z);
        }
        .
        آیا قبل از آپلود کد و کتاب خانه باید ماژول mpu6050به برد آردینو متصل باشه یا خیر؟

        • با سلام
          در خط های زیر پین های دیجیتال را به دلخواه میتوانید تغییر دهید.
          const int frontLed = 3; // تعریف ال ای دی
          const int bottomLed = 5; // تعریف ال ای دی
          const int rightLed = 10; // تعریف ال ای دی

          همچنین ارور دریافتی را کامل ارسال کنید.
          نصب کتابخانه ارتباطی با ماژول ندارد.

  • سلام من به کد‌های این برنامه نیاز دارم اکانت‌هم خریداری کردم ولی ایمیله تایید واسم نمیاد. چکارکنم؟لطفا راهنمایی کنید.

  • سلام خسته نباشین من قصد دارم از این روش برای درست کردن گیمبال استفاده کنم یعنی به جای تحریک ال ای دی دو تا سروو موتور رو کنترل کنم میتونین کمکم کنین

    • با سلام
      کتابخانه و دستورات سرو موتور را به کدها اضافه نمایید.
      در این خصوص به آموزش راه اندازی سرو موتور مراجعه کرده و کدها را تعمیم دهید. بررسی و سوالات خود را از همین طریق بپرسید.

  • با عر ض سلام ،من میخوام یک ربات قایق که داخل حوض ۲*۲ جرکت میکنه درست کنم که به یک مختصات دلخواه تعین شده حرکت کند واگر مانعی در مسیر بود اون رو دور بزنه و باز هم به همون مقصد بره ، واسه سیستم مختصات دهی و ناوبریش میتونم از سنسور mpu6050 استفاده کنم ؟ و ایا میتونم سه عدد التراسونیک به همراه دو تا موتور و سنسور بالا رو با اردویینو uno راه اندازی کنم ؟

    • با سلام
      در این خصوص بایستی دیتاشیت ماژول mpu6050 را بررسی نمایید. همچنین ماژول های شتاب و ژایرو با ویژگی و پارامترهای اندازه گیری متفاوت در سایت موجود است که بایستی بر اساس نیاز پروژه خود ماژول دقیق را انتخاب نمایید. جهت دریافت اطلاعات بیشتر می‌توانید از طریق ارسال تیکت در فروشگاه از تیم فنی راهنمایی دریافت نمایید.

  • سلام
    ببخشید انتقاد و سوال داشتم
    من تازه عضو شدم و این اولین آموزشی هست که میبینم انتقادم اینجاس که این توضیحات به همراه کداش به صورت رایگان تو سایتهای فارسی زبان وغیره هست ! قبل از خرید اکانت فکر میکردم روی کدها آموزش میدین طوری که بتونم کدها رو یاد بگیرم و بنویسم ولی متاسفاده اینطور نیست !
    حال سوالم ، چطور میتونم از دو سنسور روی یک برد آردوینو استفاده کنم ؟
    لطفا پاسخ بدین
    متشکرم خانم مهندس

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

      • از برد آردینو انو استفاده میکنم و دو تا ماژول gy521
        میخوام از هر ماژول به صورت جداگانه و ریل تایم خروجی یک محورو دریافت کنم ؟ سیم بندی رو انجام دادم .
        لطفا راهنمایی کنید چطور میتونم آدرس ماژول دوم رو از طریق پرتکل I2C به کد اضافه کنم
        سپاس

  • سلام
    وقت بخیر
    بنده پروژه کنترلledها با mpu6050رو بستم و جواب گرفتم.فقط یه مشکلی‌که هست بعد چند ثانیه ledها هر وضعیتی داشته باشند می مانند، داخل سریال مانیتورهم بعد چند ثانیه اول مقادیرثابت می مانند و دیگر مقداری رو نشان نمی دهد.

    • با سلام
      در این خصوص ابتدا ال ای دی ها را از مدار جدا کرده و خروجی سنسور شتاب را بررسی نمایید. نیتجه را از همین طریق اعلام کنید.

    • با سلام
      بله تفاوتی در مدل بردهای آردوینو وجود ندارد و میتوانید با آردوینو UNO اجرا کنید.

  • من از سایت https://daneshjookit.com/به این صفحه منتقل شدم تا راهنمایی های پایه برای کار با arduino nano یاد بگیرم.
    راستش من مشکلی در مورد کد زدنش ندارم اصلا.
    سایت دانشجوکیت این بورد رو با دو تا تراشه ی r3 و CH340 به فروش میرسونه. من ch340 رو خریدم و انتظار داشتم که مثل arduino nanoاصل کار کنه ولی به مشکلی برخورد کردم. یک نمونه کد خیلی ساده آپلود کردم :

    void setup() {
    // put your setup code here, to run once:

    Serial.begin(1);
    Serial.println(“start Setup()”);

    Serial.println(“start Setup()”);

    }

    void loop() {
    // put your main code here, to run repeatedly:

    Serial.println(“start Loop()”);

    Serial.println(“end Loop()”);

    }
    در ابتدا با انتخاب برد arduino nano و پروسسور atmega328p دچار چند تا error message شدم و پروسسور رو به atmega328p(old bootloader) عوض کردم :
    ولی بادوباره ران کردن و باز کردن serial monitor چیزی که پرینت میشود چند تا علامت سوال. اگرچه این دفعه ران شد.
    با جست و جویی که کردم دیدم که این به خاطر تراشه ی بورد.
    حالا درایور های که توی سایت دیجیکالا بود برای windows رو دانلود کردم اما windowsبه من اجازه ی نصبشون رو نمیده.
    لطفا در قسمت نصب درایور کمک کنید.

  • if (SIMPLE_IMPLEMENTATION) {
    flashLEDsSimple(x, y, z);
    } else {
    flashLEDsMultiple(x, y, z);
    }
    }سلام و خسته نباشید خدمت خانم پوربلورچیان این خط ارور میزنه ومیگه شناسایی نشد! به نظرتون مشکل از کجاست؟
    آیا برای نصب کتاب خانه حتما باید ماژول MPU6050 به برد اردینو متصل باشه؟

      • سلام وقتتون بخیر…چطور میتونم لایبری هایی که به لیست آردینو کردم رو حذف کنم…من به پوشه آردینو توی درایو Cسر زدم اما فقط لایبری های خود آردینو بود …اونایی که من نصبشون کردم ندیدم که حذف کنم…چطور میتونم ؟

  • سلام وقتتون بخیر…چطور میتونم لایبری هایی که به لیست آردینو کردم رو حذف کنم…من به پوشه آردینو توی درایو Cسر زدم اما فقط لایبری های خود آردینو بود …اونایی که من نصبشون کردم ندیدم که حذف کنم…چطور میتونم ؟

      • معمولا مسیر نصب آردینو در درایو c هست..یه پوشه که library هم داخلش بود اما داخل این پوشه library خود آردینو بود و نسخه های نصبی من نبود!
        ممنون میشم واضع تر راهنمایی کنید …

        • با سلام
          نام کتابخانه را در نرم افزار آردوینو در بخش TOOLS, INCLUDE LIBRARIES وارد کرده و سپس UNISTALL کنید.

  • سلام ممنون عالی بود …فقط چطور میتونم مقدار زاویه خم شدن محور XYرو کم کنم تا حساسیتش بیشتر بشه الان تو محور Xروی ۳۲ ال ای دی روشن میشه میخوام روی ۵ال ای دی روشن بشه

  • با سلام خدمت اساتید و همکاران پرتلاش الخصوص سرکار خانم پوربلورچیان
    سوالی داشتم در رابط با MPU6050; چگونه میتوان حرکت شتابی به سمت جهات رو مثلا تشخیص حرکت ماژول(ربات) به سمت جلو(یا هر جهتی) رو نشون داد ،به عبارت دیگه آیا میشه تداوم حرکت رو شناسایی و یا مقادیرش رو دریافت کرد؟

    • با سلام
      در این خصوص بایستی با توجه به دستورات کتابخانه محاسبات ریاضی انجام دهید. این مورد توسط بنده تست نشده است.

  • Arduino: 1.8.15 (Windows 7), Board: “Arduino Nano, ATmega328P (Old Bootloader)”

    In file included from C:\Users\Danial\Desktop\sketch_jun20a\sketch_jun20a.ino:2:0:

    C:\Users\Danial\Documents\Arduino\libraries\MPU6050\src/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpGetGravity(int16_t*, const uint8_t*)’:

    C:\Users\Danial\Documents\Arduino\libraries\MPU6050\src/MPU6050_6Axis_MotionApps20.h:524:65: warning: integer overflow in expression [-Woverflow]

    – (int32_t)qI[2] * qI[2] + (int32_t)qI[3] * qI[3]) / (2 * 16384);

    ~~^~~~~~~

    C:\Program Files (x86)\Arduino\libraries\I2Cdev\I2Cdev.cpp:64:14: warning: #warning Using current Arduino IDE with Wire library is functionally limiting. [-Wcpp]

    #warning Using current Arduino IDE with Wire library is functionally limiting.

    ^~~~~~~

    C:\Program Files (x86)\Arduino\libraries\I2Cdev\I2Cdev.cpp:65:14: warning: #warning Arduino IDE v1.0.1+ with I2CDEV_BUILTIN_FASTWIRE implementation is recommended. [-Wcpp]

    #warning Arduino IDE v1.0.1+ with I2CDEV_BUILTIN_FASTWIRE implementation is recommended.

    ^~~~~~~

    C:\Program Files (x86)\Arduino\libraries\I2Cdev\I2Cdev.cpp:66:14: warning: #warning This I2Cdev implementation does not support: [-Wcpp]

    #warning This I2Cdev implementation does not support:

    ^~~~~~~

    C:\Program Files (x86)\Arduino\libraries\I2Cdev\I2Cdev.cpp:67:14: warning: #warning – Timeout detection (some Wire requests block forever) [-Wcpp]

    #warning – Timeout detection (some Wire requests block forever)

    ^~~~~~~

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::I2Cdev()’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::I2Cdev()’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeBytes(unsigned char, unsigned char, unsigned char, unsigned char*)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeByte(unsigned char, unsigned char, unsigned char)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeWords(unsigned char, unsigned char, unsigned char, unsigned int*)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeWord(unsigned char, unsigned char, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readBytes(unsigned char, unsigned char, unsigned char, unsigned char*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readByte(unsigned char, unsigned char, unsigned char*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readBit(unsigned char, unsigned char, unsigned char, unsigned char*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readBits(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeBit(unsigned char, unsigned char, unsigned char, unsigned char)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readTimeout’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeBits(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readWords(unsigned char, unsigned char, unsigned char, unsigned int*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readWord(unsigned char, unsigned char, unsigned int*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readBitW(unsigned char, unsigned char, unsigned char, unsigned int*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::readBitsW(unsigned char, unsigned char, unsigned char, unsigned char, unsigned int*, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeBitW(unsigned char, unsigned char, unsigned char, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\MPU6050\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()’:

    (.text+0x0): multiple definition of `I2Cdev::writeBitsW(unsigned char, unsigned char, unsigned char, unsigned char, unsigned int)’

    libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin):(.text+0x0): first defined here

    C:\Users\Danial\Documents\Arduino\libraries\MPU6050\src/MPU6050.h:438:7: warning: type ‘struct MPU6050’ violates the C++ One Definition Rule [-Wodr]

    class MPU6050 {

    ^

    C:\Users\Danial\Documents\Arduino\libraries\MPU6050\src\MPU6050.cpp:49:1: note: code may be misoptimized unless -fno-strict-aliasing is used

    collect2.exe: error: ld returned 1 exit status

    exit status 1

    Error compiling for board Arduino Nano.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    سلام این کد رو کامپایل میکنم این خطا برای من میاد ممنون از توجهتون

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

  • سلام خانم مهندس وقت شما بخیر
    میشه ۶ تا سنسور رو به برد مگا نصب کرد و اطلاعات این ۶ سنسور را در لحظه اطلاعاتش را در رم ذخیره کرد به طوری که اطلاعات این شش سنسور به شکل ستونی خروجی بگیریم

  • Arduino: 1.8.15 (Windows 8.1), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”

    با سلام …عذرخواهی میکنم…من تمام کتابخونه هارو نصب کردم اما زمانی که مثال های امادخmpu6050 و همچنین کدی رو که شما قرا دادین کامپایل میکنم این خطارو میده…. میشه راهنمایی کنید چیکار کنم؟

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp: In static member function ‘static int8_t I2Cdev::readBytes(uint8_t, uint8_t, uint8_t, uint8_t*, uint16_t)’:

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:276:75: error: no matching function for call to ‘min(uint8_t&, int)’

    ۲۷۶ | for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) {

    | ^

    In file included from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\algorithm:62,

    from C:\Users\narges 1374\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:225,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.h:80,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:46:

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algo.h:3479:5: note: candidate: 'template constexpr _Tp std::min(std::initializer_list, _Compare)’

    ۳۴۷۹ | min(initializer_list __l, _Compare __comp)

    | ^~~

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algo.h:3479:5: note: template argument deduction/substitution failed:

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:276:75: note: mismatched types ‘std::initializer_list’ and ‘unsigned char’

    ۲۷۶ | for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) {

    | ^

    In file included from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\algorithm:62,

    from C:\Users\narges 1374\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:225,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.h:80,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:46:

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algo.h:3473:5: note: candidate: 'template constexpr _Tp std::min(std::initializer_list)’

    ۳۴۷۳ | min(initializer_list __l)

    | ^~~

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algo.h:3473:5: note: template argument deduction/substitution failed:

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:276:75: note: mismatched types ‘std::initializer_list’ and ‘unsigned char’

    ۲۷۶ | for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) {

    | ^

    In file included from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\specfun.h:45,

    from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\cmath:1927,

    from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\math.h:36,

    from C:\Users\narges 1374\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:34,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.h:80,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:46:

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algobase.h:278:5: note: candidate: 'template constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)’

    ۲۷۸ | min(const _Tp& __a, const _Tp& __b, _Compare __comp)

    | ^~~

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algobase.h:278:5: note: template argument deduction/substitution failed:

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:276:75: note: deduced conflicting types for parameter ‘const _Tp’ (‘unsigned char’ and ‘int’)

    ۲۷۶ | for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) {

    | ^

    In file included from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\specfun.h:45,

    from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\cmath:1927,

    from c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\math.h:36,

    from C:\Users\narges 1374\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:34,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.h:80,

    from C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:46:

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algobase.h:230:5: note: candidate: 'template constexpr const _Tp& std::min(const _Tp&, const _Tp&)’

    ۲۳۰ | min(const _Tp& __a, const _Tp& __b)

    | ^~~

    c:\users\narges 1374\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\stl_algobase.h:230:5: note: template argument deduction/substitution failed:

    C:\Users\narges 1374\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:276:75: note: deduced conflicting types for parameter ‘const _Tp’ (‘unsigned char’ and ‘int’)

    ۲۷۶ | for (uint8_t k = 0; k Preferences.

    • با سلام
      تداخل در کپی کردن کدها دارید، یک بار تمامی کدها را پاک کرده و یک تب حدید باز کنید. سپس کد را کپی و انتقال دهید. مطمئن باشید که تمامی کتابخانه ها دقیقا با همان اسم نصب شده باشد.