خیلی ممنوم...وقت شما هم گرفتم
نمیدونم مشکل چیه؟؟چندمرتبه تست کردم
حتی ولتاژ خروجی پایه 3دیجیتال هم چک کردم...درسته 5ولت
شماره پایه هم تغییردادم...بازم رله روشن نشد
حتی کد هم بصورت if(accel_y_scalled<90 عوض کردم.... تا زاویه های کمتر از 90درجه جواب بده.... ولی رله روشن نمیشه!
با جایرو چجوری میتونم سروو را کنترل کنم؟؟ که مثلا وقتی زاویه کمتر از 90 میشه...حرکت کنه!
مرسی
من این قسمت را اضافه کردم
int relaypin=3;
if(accel_y_scalled<90) digitalWrite (relaypin,LOW);
else digitalWrite (relaypin,HIGH);
اینم کد:
/* Author = helscream (Omer Ikram ul Haq)
Last edit date = 2014-10-08
Website: Arduino with MPU6050 and angle calculation – HobbyLogs
Location: Pakistan
Ver: 0.1 beta --- Start
Ver: 0.2 beta --- Bug fixed for calculating "angle_y_accel" and "angle_x_accel" in "Gyro_header.ino" file
*/
#include <Wire.h>
#include "gyro_accel.h"
// Defining constants
#define dt 20 // time difference in milli seconds
#define rad2degree 57.3 // Radian to degree conversion
#define Filter_gain 0.95 // e.g. angle = angle_gyro*Filter_gain + angle_accel*(1-Filter_gain)
// ************************************************** *******************
// Global Variables
// ************************************************** *******************
unsigned long t=0; // Time Variables
float angle_x_gyro=0,angle_y_gyro=0,angle_z_gyro=0,angle _x_accel=0,angle_y_accel=0,angle_z_accel=0,angle_x =0,angle_y=0,angle_z=0;
// ************************************************** *******************
// Main Code
void setup(){
Serial.begin(115200);
Wire.begin();
MPU6050_ResetWake();
MPU6050_SetGains(0,1);// Setting the lows scale
MPU6050_SetDLPF(0); // Setting the DLPF to inf Bandwidth for calibration
MPU6050_OffsetCal();
MPU6050_SetDLPF(6); // Setting the DLPF to lowest Bandwidth
Serial.print("gyro_x_scalled");
Serial.print("\tgyro_y_scalled");
Serial.print("\tgyro_z_scalled");
Serial.print("\taccel_x_scalled");
Serial.print("\taccel_y_scalled");
Serial.print("\taccel_z_scalled");
Serial.print("\tangle_x_gyro");
Serial.print("\tangle_y_gyro");
Serial.print("\tangle_z_gyro");
Serial.print("\tangle_x_accel");
Serial.print("\tangle_y_accel");
Serial.print("\tangle_z_accel");
Serial.print("\tangle_x");
Serial.print("\tangle_y");
Serial.print("\tangle_z");
Serial.println("\tLoad");
t=millis();
}
void loop(){
t=millis();
MPU6050_ReadData();
angle_x_gyro = (gyro_x_scalled*((float)dt/1000)+angle_x);
angle_y_gyro = (gyro_y_scalled*((float)dt/1000)+angle_y);
int relaypin=3;
if(accel_y_scalled<90) digitalWrite (relaypin,LOW);
else digitalWrite (relaypin,HIGH);
angle_z_gyro = (gyro_z_scalled*((float)dt/1000)+angle_z);
angle_z_accel = atan(accel_z_scalled/(sqrt(accel_y_scalled*accel_y_scalled+accel_x_scal led*accel_x_scalled)))*(float)rad2degree;
angle_y_accel = -atan(accel_y_scalled/(sqrt(accel_y_scalled*accel_y_scalled+accel_z_scal led*accel_z_scalled)))*(float)rad2degree;
angle_x_accel = atan(accel_x_scalled/(sqrt(accel_x_scalled*accel_x_scalled+accel_z_scal led*accel_z_scalled)))*(float)rad2degree;
angle_x = Filter_gain*angle_x_gyro+(1-Filter_gain)*angle_x_accel;
angle_y = Filter_gain*angle_y_gyro+(1-Filter_gain)*angle_y_accel;
angle_z = Filter_gain*angle_z_gyro+(1-Filter_gain)*angle_z_accel;
Serial.print(gyro_x_scalled);
Serial.print("\t");
Serial.print(gyro_y_scalled);
Serial.print("\t");
Serial.print(gyro_z_scalled);
Serial.print("\t");
Serial.print(accel_x_scalled);
Serial.print("\t");
Serial.print(accel_y_scalled);
Serial.print("\t");
Serial.print(accel_z_scalled);
Serial.print("\t");
Serial.print(angle_x_gyro);
Serial.print("\t");
Serial.print(angle_y_gyro);
Serial.print("\t");
Serial.print(angle_z_gyro);
Serial.print("\t");
Serial.print(angle_x_accel);
Serial.print("\t");
Serial.print(angle_y_accel);
Serial.print("\t");
Serial.print(angle_z_accel);
Serial.print("\t");
Serial.print(angle_x);
Serial.print("\t");
Serial.print(angle_y);
Serial.print("\t");
Serial.print(angle_z);
Serial.print("\t");
Serial.println(((float)(millis()-t)/(float)dt)*100);
while((millis()-t) < dt){ // Making sure the cycle time is equal to dt
// Do nothing
}
}
اینو تست کن :
کد:/* Author = helscream (Omer Ikram ul Haq) Last edit date = 2014-10-08 Website: Arduino with MPU6050 and angle calculation – HobbyLogs Location: Pakistan Ver: 0.1 beta --- Start Ver: 0.2 beta --- Bug fixed for calculating "angle_y_accel" and "angle_x_accel" in "Gyro_header.ino" file */ #include <Wire.h> #include "gyro_accel.h" // Defining constants #define dt 20 // time difference in milli seconds #define rad2degree 57.3 // Radian to degree conversion #define Filter_gain 0.95 // e.g. angle = angle_gyro*Filter_gain + angle_accel*(1-Filter_gain) // ************************************************** ******************* // Global Variables // ************************************************** ******************* unsigned long t = 0; // Time Variables float angle_x_gyro = 0, angle_y_gyro = 0, angle_z_gyro = 0, angle _x_accel = 0, angle_y_accel = 0, angle_z_accel = 0, angle_x = 0, angle_y = 0, angle_z = 0; // ************************************************** ******************* // Main Code void setup() { Serial.begin(115200); Wire.begin(); MPU6050_ResetWake(); MPU6050_SetGains(0, 1); // Setting the lows scale MPU6050_SetDLPF(0); // Setting the DLPF to inf Bandwidth for calibration MPU6050_OffsetCal(); MPU6050_SetDLPF(6); // Setting the DLPF to lowest Bandwidth Serial.print("gyro_x_scalled"); Serial.print("\tgyro_y_scalled"); Serial.print("\tgyro_z_scalled"); Serial.print("\taccel_x_scalled"); Serial.print("\taccel_y_scalled"); Serial.print("\taccel_z_scalled"); Serial.print("\tangle_x_gyro"); Serial.print("\tangle_y_gyro"); Serial.print("\tangle_z_gyro"); Serial.print("\tangle_x_accel"); Serial.print("\tangle_y_accel"); Serial.print("\tangle_z_accel"); Serial.print("\tangle_x"); Serial.print("\tangle_y"); Serial.print("\tangle_z"); Serial.println("\tLoad"); t = millis(); } void loop() { int relaypin = 3; t = millis(); MPU6050_ReadData(); angle_x_gyro = (gyro_x_scalled * ((float)dt / 1000) + angle_x); angle_y_gyro = (gyro_y_scalled * ((float)dt / 1000) + angle_y); if (angle_y_gyro < 90) digitalWrite (relaypin, LOW); else digitalWrite (relaypin, HIGH); angle_z_gyro = (gyro_z_scalled * ((float)dt / 1000) + angle_z); angle_z_accel = atan(accel_z_scalled / (sqrt(accel_y_scalled * accel_y_scalled + accel_x_scal led * accel_x_scalled))) * (float)rad2degree; angle_y_accel = -atan(accel_y_scalled / (sqrt(accel_y_scalled * accel_y_scalled + accel_z_scal led * accel_z_scalled))) * (float)rad2degree; angle_x_accel = atan(accel_x_scalled / (sqrt(accel_x_scalled * accel_x_scalled + accel_z_scal led * accel_z_scalled))) * (float)rad2degree; angle_x = Filter_gain * angle_x_gyro + (1 - Filter_gain) * angle_x_accel; angle_y = Filter_gain * angle_y_gyro + (1 - Filter_gain) * angle_y_accel; angle_z = Filter_gain * angle_z_gyro + (1 - Filter_gain) * angle_z_accel; Serial.print(gyro_x_scalled); Serial.print("\t"); Serial.print(gyro_y_scalled); Serial.print("\t"); Serial.print(gyro_z_scalled); Serial.print("\t"); Serial.print(accel_x_scalled); Serial.print("\t"); Serial.print(accel_y_scalled); Serial.print("\t"); Serial.print(accel_z_scalled); Serial.print("\t"); Serial.print(angle_x_gyro); Serial.print("\t"); Serial.print(angle_y_gyro); Serial.print("\t"); Serial.print(angle_z_gyro); Serial.print("\t"); Serial.print(angle_x_accel); Serial.print("\t"); Serial.print(angle_y_accel); Serial.print("\t"); Serial.print(angle_z_accel); Serial.print("\t"); Serial.print(angle_x); Serial.print("\t"); Serial.print(angle_y); Serial.print("\t"); Serial.print(angle_z); Serial.print("\t"); Serial.println(((float)(millis() - t) / (float)dt) * 100); while ((millis() - t) < dt) { // Making sure the cycle time is equal to dt // Do nothing } }
تست کردم....
این خطا را داد
Arduino: 1.6.6 Hourly Build 2015/10/22 05:42 (Windows 7), Board: "Arduino/Genuino Uno"
F:\My circuits\gyro\omega-gyroXXX\omega-gyroXXX.ino:13:24: fatal error: gyro_accel.h: No such file or directory
#include "gyro_accel.h"
^
compilation terminated.
exit status 1
Error compiling.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.