Android Kontrollü Dengede Duran Robot Yapımı

137 2.683

Kendi Robotunu Yap projelerimizin bu bölümünde arduino ile kendini dengeleyen robot yapacağız.Yapacağımız denge robotunu android cihazdan da kontrol edebileceğiz.Robotumuzun kontrol sisteminden bahsedecek olursak dengede durması için gyro sensörden gelen açı analiz edilir ve PID kontrol sistemiyle açıya göre motorlara ivmelenme vererek dengeyi sağlar.Kullanacağımız motorların enkoderli olması avantaj sağlayacaktır.

Malzemeler:

  1. Arduino Uno
  2. Hc-05 Bluetooth Modül
  3. MPU6050 6 Eksen İvme ve Gyro Sensörü
  4. L293D Motor Sürücü
  5. IC7805 Voltaj Regülatörü
  6. Lipo Pil
  7. 2Adet  500 Rpm Motor
  8. 2 Adet Motor Vidalama Kıskacı

Mekanik Kısım:

Mekanik malzemesi için pleksi kullanabilirsiniz.

Elektronik Devre Şeması:

MPU6050 Gyro Sensör Bağlantı Pinleri:

SDA => Analog 4

SCL => Analog 5

INT => Dijital 2

Bluetooth Bağlantı Pinleri:

rxpin = > D4
txpin = > D11
VCC = > 5V
GND = > GND

L293D Motor Sürücü Bağlantı Pinleri:

1.Motor İleri => Dijital 5.Pin
1.Motor Geri => Dijital 8.Pin
2.Motor İleri => Dijital 6.Pin
2.Motor Geri => Dijital 12.Pin
1.Motor Hız Kontrol => Dijital 9.Pin
2.Motor Hız Kontrol => Dijital 10.Pin

Yazılım Kısmı:

Arduino Yazılımı:

#define version_0.67
 
//#define DEBUGING 
#define BLUE 
 
#include <EEPROMex.h> 
#include <I2Cdev.h>
#include <Wire.h>
#include <MPU6050_6Axis_MotionApps20.h>
#include <helper_3dmath.h>
#include <PID_v1.h> 
#include <digitalIOPerformance.h> 
#define DIGITALIO_NO_INTERRUPT_SAFETY
#define DIGITALIO_NO_MIX_ANALOGWRITE
 
//Bluetooth Stuff
#include<SoftwareSerial.h>
 
const int rxpin = 11; 
const int txpin = 4; 
 
SoftwareSerial blue(rxpin, txpin); 
 
#define RESTRICT_PITCH
 
MPU6050 mpu;
 
// MPU control/status vars
bool dmpReady = false; 
uint8_t mpuIntStatus; 
uint8_t devStatus; 
uint16_t packetSize; 
uint16_t fifoCount; 
uint8_t fifoBuffer[64]; 
// orientation/motion vars
Quaternion q; 
VectorFloat gravity; 
float ypr[3]; 
 
volatile bool mpuInterrupt = false; 
void dmpDataReady() {
 mpuInterrupt = true;
}
// Balance PID controller Definitions
#define BALANCE_KP 15 
#define BALANCE_KI 90
#define BALANCE_KD 0.8
#define BALANCE_PID_MIN -255 
#define BALANCE_PID_MAX 255
 
#define ROTATION_KP 50
#define ROTATION_KI 300
#define ROTATION_KD 4
 
#define MOTOR_A_DIR 5 
#define MOTOR_A_BRAKE 8 
#define MOTOR_B_DIR 6 
#define MOTOR_B_BRAKE 12 
#define MOTOR_A_PWM 9 
#define MOTOR_B_PWM 10 
 
// Motor Misc
#define PWM_MIN 0
#define PWM_MAX 255
float MOTORSLACK_A=32; 
float MOTORSLACK_B=39; 
#define MOTOR_A_PWM_MAX 255 
#define MOTOR_B_PWM_MAX 255 
 
int MotorAspeed, MotorBspeed, MotorSlack,moveState=0,d_speed,d_dir;
 
double yaw,input,out,setpoint,originalSetpoint,Buffer[3];
double yinput,yout,ysetpoint,yoriginalSetpoint;
//uint32_t timer,timer1;
 
double bal_kp,bal_ki,bal_kd,rot_kp,rot_ki,rot_kd;
int addressFloat=0;
 
PID pid(&input,&out,&setpoint,BALANCE_KP,BALANCE_KI,BALANCE_KD,DIRECT);
PID rot(&yinput,&yout,&ysetpoint,ROTATION_KP,ROTATION_KI,ROTATION_KD,DIRECT);
 
String content = "";
 char character;
//String d;
 
void setup()
{
 #ifdef DEBUGING
 Serial.begin(9600);
 #endif
 
 #ifdef BLUE
 blue.begin(9600);
 blue.setTimeout(10);
 #endif
 
 init_imu();
 initmot();
 
pid.SetMode(AUTOMATIC); 
pid.SetOutputLimits(-210, 210);
pid.SetSampleTime(10);
rot.SetMode(AUTOMATIC);
rot.SetOutputLimits(-20, 20);
rot.SetSampleTime(10);
 
setpoint = 0;
originalSetpoint = setpoint;
ysetpoint = 0;
yoriginalSetpoint = ysetpoint;
 
addressFloat = EEPROM.getAddress(sizeof(float)); 
bal_kp=EEPROM.readFloat(addressFloat);
bal_ki=EEPROM.readFloat((addressFloat+=sizeof(float)));
bal_kd=EEPROM.readFloat((addressFloat+=sizeof(float)));
rot_kp=EEPROM.readFloat((addressFloat+=sizeof(float)));
rot_ki=EEPROM.readFloat((addressFloat+=sizeof(float)));
rot_kd=EEPROM.readFloat((addressFloat+=sizeof(float)));
 
pid.SetTunings(bal_kp,bal_ki,bal_kd); 
rot.SetTunings(rot_kp,rot_ki,rot_kd);
}
 
void loop() 
{
 getvalues(); 
 new_pid(); 
 
#ifdef BLUE
Bt_control(); 
#endif
 
#ifdef DEBUGING
 printval();
#endif
 
}
 
void init_imu()
{
 Wire.begin();
 mpu.initialize();
 devStatus = mpu.dmpInitialize();
 
 mpu.setXGyroOffset(-9);
 mpu.setYGyroOffset(-3);
 mpu.setZGyroOffset(61);
 mpu.setXAccelOffset(-449);
 mpu.setYAccelOffset(2580);
 mpu.setZAccelOffset(1259);
 // make sure it worked (returns 0 if so)
 if (devStatus == 0) {
 
 mpu.setDMPEnabled(true);
 
 attachInterrupt(0, dmpDataReady, RISING);
 mpuIntStatus = mpu.getIntStatus();
 dmpReady = true;
 // get expected DMP packet size for later comparison
 packetSize = mpu.dmpGetFIFOPacketSize();
 }
}
 
void getvalues()
{
 
 if (!dmpReady) return;
 while (!mpuInterrupt && fifoCount < packetSize) {
 }
 mpuInterrupt = false;
 mpuIntStatus = mpu.getIntStatus();
 
 fifoCount = mpu.getFIFOCount();
 
 if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
 
 mpu.resetFIFO();
 } 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);
 
 } 
 yinput = ypr[0]* 180/M_PI;
 input = -ypr[1] * 180/M_PI; //change sign if negative
}
 
void printval()
{
 Serial.print(yinput);Serial.print("\t"); 
 Serial.print(yoriginalSetpoint); Serial.print("\t");
 Serial.print(ysetpoint); Serial.print("\t");
 Serial.print(yout); Serial.print("\t");Serial.print("\t"); 
 Serial.print(input);Serial.print("\t");
 Serial.print(originalSetpoint); Serial.print("\t");
 Serial.print(setpoint); Serial.print("\t");
 Serial.print(out); Serial.print("\t");Serial.print("\t");
 Serial.print(MotorAspeed); Serial.print("\t");
 Serial.print(MotorBspeed); Serial.println("\t");
 
}
 
void Bt_control()
{
if(blue.available())
 {
 content=blue.readString();
 if(content[0]=='F')
 setpoint = originalSetpoint - d_speed;//Serial.println(setpoint);} 
 else if(content[0]=='B')
 setpoint = originalSetpoint + d_speed;//Serial.println(setpoint);} 
 else if(content[0]=='L')
 ysetpoint = constrain((ysetpoint + yoriginalSetpoint - d_dir),-180,180);//Serial.println(ysetpoint);} 
 else if(content[0]=='R')
 ysetpoint = constrain(ysetpoint + yoriginalSetpoint + d_dir,-180,180);//Serial.println(ysetpoint);} 
 else if(content[0]=='S')
 d_speed = (content.substring(2)).toInt();//Serial.println(d_speed);} 
 else if(content[0]=='D')
 d_dir = content.substring(2).toInt();//Serial.println(d_dir);} 
 else if(content[0]=='P')
 {
 if(content[1]=='S')
 {
 if(content[2]=='B')
 save_pid(1); 
 else
 save_pid(0); 
 } else if(content[1]=='C')
 {
 if(content[2]=='B')
 {
 change_pid(1); 
 }
 else
 change_pid(0); 
 }
 }
 if(content=="updateb") 
 return_pid(1); 
 else if(content=="updater")
 return_pid(0); 
 
 }
}
 
void return_pid(bool b) 
{
 char charVal[10];
 String sent = "";
 if(b)
 {
 sent.concat("OP");dtostrf(bal_kp, 5, 3, charVal);sent.concat(charVal);
 sent.concat("OI");dtostrf(bal_ki, 5, 3, charVal);sent.concat(charVal);
 sent.concat("OD");dtostrf(bal_kd, 5, 3, charVal);sent.concat(charVal);
 sent.concat("e");
 // Serial.println(sent);
 }
 else
 {
 sent.concat("OP");dtostrf(rot_kp, 5, 3, charVal);sent.concat(charVal);
 sent.concat("OI");dtostrf(rot_ki, 5, 3, charVal);sent.concat(charVal);
 sent.concat("OD");dtostrf(rot_kd, 5, 3, charVal);sent.concat(charVal);
 sent.concat("e");Serial.println(sent);
 }
 blue.print(sent);
}
 
void change_pid(bool b) 
{
 blue.print("O");
 while(!blue.available());
 for(int i=0;i<3;i++) { Buffer[i]=blue.parseFloat(); } if(b) { bal_kp=Buffer[0];bal_ki=Buffer[1],bal_kd=Buffer[2]; } else { rot_kp=Buffer[0];rot_ki=Buffer[1],rot_kd=Buffer[2]; } } void save_pid(bool pid) { addressFloat = 0; if(pid) { EEPROM.updateFloat(addressFloat,bal_kp); EEPROM.updateFloat((addressFloat+=sizeof(float)),bal_ki); EEPROM.updateFloat((addressFloat+=sizeof(float)),bal_kd); } else { EEPROM.updateFloat(addressFloat,rot_kp); EEPROM.updateFloat((addressFloat+=sizeof(float)),rot_ki); EEPROM.updateFloat((addressFloat+=sizeof(float)),rot_kd); } } double compensate_slack(double yOutput,double Output,bool A) { if(A) { if (Output >= 0) 
 Output = Output + MOTORSLACK_A - yOutput;
 if (Output < 0) Output = Output - MOTORSLACK_A - yOutput; } else { if (Output >= 0) 
 Output = Output + MOTORSLACK_B + yOutput;
 if (Output < 0) Output = Output - MOTORSLACK_B + yOutput; } Output = constrain(Output, BALANCE_PID_MIN, BALANCE_PID_MAX); return Output; } void new_pid() { //Compute error pid.Compute(); rot.Compute(); MotorAspeed = compensate_slack(yout,out,1); MotorBspeed = compensate_slack(yout,out,0); motorspeed(MotorAspeed, MotorBspeed); } void initmot() { pinMode(MOTOR_A_DIR, OUTPUT); pinMode(MOTOR_A_BRAKE, OUTPUT); pinMode(MOTOR_B_DIR, OUTPUT); pinMode(MOTOR_B_BRAKE, OUTPUT); analogWrite(MOTOR_A_PWM, 0); analogWrite(MOTOR_B_PWM, 0); } void motorspeed(int MotorAspeed, int MotorBspeed) { if (MotorAspeed >= 0) 
 {
 digitalWrite(MOTOR_A_DIR,HIGH);
 digitalWrite(MOTOR_A_BRAKE,LOW);
 }
 else
{
 digitalWrite(MOTOR_A_DIR,LOW);
 digitalWrite(MOTOR_A_BRAKE,HIGH);
}
 
 analogWrite(MOTOR_A_PWM,abs(MotorAspeed));
 
 if (MotorBspeed >= 0) 
 {
 digitalWrite(MOTOR_B_DIR,HIGH);
 digitalWrite(MOTOR_B_BRAKE,LOW);
 }
 else
 {
 digitalWrite(MOTOR_B_DIR,LOW);
 digitalWrite(MOTOR_B_BRAKE,HIGH);
 }
 analogWrite(MOTOR_B_PWM, abs(MotorBspeed));
}

Gerekli Kütüphaneler:

Denge robotu kütüphaneleri

Android Uygulaması ve Arduino Kodu:

Android arayüz programımızda pid değerlerini değiştirerek yaptığınız mekanik tasarıma göre robotun denge konumunu ayarlayabilirsiniz.Android kontrol programını indirelim.

Android Denge robot kontrolü

Arduino Kodu: denge robotu

Kendi Robotunu Yap projelerimizin bu bölümünde de android kontrolllü dengede duran robotumuzu tamamladık.

 

Bunları da beğenebilirsin

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

137 Yorum

  1. Selçuk AKALİN

    Arduino:1.6.7 (Windows 10), Kart:”Arduino/Genuino Uno”

    C:\Users\seyma\Desktop\Bitirme2017\Bitirme2017.ino:11:21: fatal error: PID_v1.h: No such file or directory

    #include

    ^

    compilation terminated.

    “EEPROMex.h” için birden fazla library bulundu
    Kullanılıyor: C:\Users\seyma\Documents\Arduino\libraries\EEPROMEx
    Kullanılmıyor: C:\Program Files (x86)\Arduino\libraries\EEPROMEx
    exit status 1
    Derleme sırasında hata oluştu.

    Rapor daha fazla veri içermeli
    “Derleme sırasında ayrıntılı çıktı göster”
    Dosya > Tercihler’de etkinleştirilmiş.

  2. BELAL

    hi pro first think you for this great work and
    I need same help from you
    I have idea for my project college I start build
    arduino Bluetooth car using arduino uno
    and
    Bluetooth hc-05
    and
    l293d shield
    and
    4 dc motor
    and for controling
    I will using
    mpu6050
    and
    arduino uno
    and
    Bluetooth hc-05
    2 arduino joystick
    to controled the car by hand motion and normal driving using 2joystick can you help me in this code
    this e-mail address
    belal.alessa49540@gmail.com
    plz help me
    and think you again

  3. aze türkdoğan

    Merhaba.benim projem denge robotu ve belirttiğiniz malzeleri aldım. Yalnız okulda öğretmenim l293d motor sürücünün yanında arduıno l293 motor sürücü shield almamı söyledi. Neden devrede motor sürücü shield yok ? veya benim gerçekten kullanmam gerekiyormu? şimdiden teşekkürler.

  4. Erencan

    yazılımda hata var yardım edermisiniz

  5. Ahmet TÜMEN

    252-272 arası kodlar neyin kodları hiç görmediğim parametreler var da?

  6. Erencan

    Arduino:1.6.13 (Windows 8.1), Kart:”Arduino/Genuino Uno”

    Program ismi değiştirildi.
    Program isimleri sadece ASCII karakterlerden ve rakamlardan meydana gelebilir (ancak bir rakam ile başlayamazlar)
    Aynı zamanda program isimleri en fazla 64 karakter uzunluğunda olabilir.
    C:\Users\TOSHBA~1\AppData\Local\Temp\arduino_modified_sketch_537803\_2.ino: In function ‘void setup()’:

    _2:98: error: ‘initmot’ was not declared in this scope

    initmot();

    ^

    C:\Users\TOSHBA~1\AppData\Local\Temp\arduino_modified_sketch_537803\_2.ino: In function ‘void new_pid()’:

    _2:287: error: ‘else’ without a previous ‘if’

    else

    ^

    exit status 1
    ‘initmot’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    hatası verdi nasıl düzeltebilirim

  7. efe

    bluetooth kontollu cizgi izleyen nasıl yapılabilir ?

  8. mustafa coşkun soyluoğlu

    l293dd motor sürücü kartı kullanıyorum bağlantı şeması nasıl olmalı? m1a,m1b,m2a ve m2b gibi pin isimleri var

  9. mustafa coşkun soyluoğlu

    hata veritor kod
    Arduino:1.8.0 (Windows 7), Kart:”Arduino/Genuino Uno”

    C:\Users\ogretmen1\Desktop\Yeni klasör (3)\cizgi-izleyen-robot\cizgi-izleyen-robot\Line_Follower_01012015pda\Line_Follower_01012015pda.ino:11:21: fatal error: PID_v1.h: No such file or directory

    compilation terminated.

    exit status 1
    Arduino:1.8.0 (Windows 7), Kart:”Arduino/Genuino Uno”

    C:\Users\ogretmen1\Documents\Arduino\sketch_jan17c\sketch_jan17c.ino:11:20: fatal error: PID_v1.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    1. Sezgin GÜL

      PID_v1.h kütüphanesini yüklemediğiniz için hata almışsınız.

  10. Volkan

    Hocam malzeme list ile semanın alakası yok.ayrıca motorlarda enkoder de yok.

  11. Ali Can ÇEVRİM

    Hocam iyi günler. Biz robot için parçaları sipariş ettik lakin resimdeki voltaj regülatörü stokta kalmamış. Devre şemamızı IC 7805 voltaj regülatörü olmadan kursak herhangi bir sorunla karşılaşır mıyız?

  12. ERCAN

    Merhaba projelerinizi takip ediyorum. Denge robotunda bir problem ile karşlaştım,
    digitalIOPerformance.h:6:5: operator’%’ has no left operand
    Kodu değiştirsem bile aynı hata mesajı ile karşılaşıyorum.
    Nasıl düzeltebilirim

  13. Erdoğan

    Merhaba Sezgin Bey. Ben mekatronik mühendisliği son sınıf öğrencisiyim. Bitime projem sizin yaptığınız gibi iki tekerlekli denge robotu. Proje şu an bitmiş durumda. Ancak iki tekerlekli dengede durabilen robotlarda kontrol metodları üzerine bitirme tezi yazıyorum. Bu konuda yardımcı olabilir misiniz ?

    1. Ahmet

      Robotu modellemek için free body diagram ya da Lagrange method kullanabilirsin Lagrange öneririm. Kontrol etmek için PID kullanabilirsin ama çok hassas olmaz. PID ve LQR kullanırsan çok iyi sonuçlar çıkar ama gyro verileri durum geri beslemesi için fazla gürültülü. Bu yüzden Kalman filtresi eklemen gerekecek. Alternatif olarak olarak fuzzy pid ya da sliding mode control da kullanabilirsin

    2. Sedat

      Merhaba. Ben de mekatronik 4. sınıf öğrencisiyim ve iki tekerlekli denge robotu yapacağım bitirme ödevi için. Yapmış olduğun ödevin notlarını bana gönderebilir misin ?

  14. hasan

    s.a sezgin bey aynı projeyi bende yaptım ancak [sketch_may23a.ino: In function ‘void setup()’:
    sketch_may23a:98: error: ‘initmot’ was not declared in this scope
    sketch_may23a.ino: In function ‘void new_pid()’:
    sketch_may23a:287: error: ‘else’ without a previous ‘if’] böyle bir hata veriyo gerekli kütüpaneleri yükledim ama yinede olmuyor yardımcı olursanız sevinirim. iyi günler iyi çalışmalar

  15. yusuf akgül

    tüm bağlantılar tamam kodları da yükledim ancak hiç bir hareket yok

  16. yusuf akgül

    kodlar bir türlü derlenmiyor..tüm kütüphaneler tam olmasına rağmen initmot hata veriyor…

  17. yusuf akgül

    ‘initmot’ was not declared in this scope

  18. yusuf akgül

    LN298d’nin çıkışlarının ardunio uno bağlantı adreslerini yazabilirmisiniz yukarıdakinden anlaşılmıyor birde kodları attığımızda initmod hatası alıyorum…bir türlü çalıştıramadım

  19. yusuf akgül

    Kolay gelsin “initmot()” kısmında “was not declared in this scope” diye bir hata veriyor. Bunu nasıl çözebilirim.

  20. muhammet

    yeni pid yerine ne yazmamız gerekiyo

  21. Burak

    Merhaba Arkadaşlar burada gösterilen devrenin kurulumu ayrı beslemelerdenden mi verilmiş? tam anlayamadım şuan.

  22. Abdulkadir

    Kolay gelsin “initmot()” kısmında “was not declared in this scope” diye bir hata veriyor. Bunu nasıl çözebilirim.

  23. ahmed

    hi i want to ask a question please could i use the nrf24l01 bluetooth module instead of the hc-05 or not ?

  24. azizhan

    site çok güzel ve yararlı fakat android yazım kısmı yok bu endenle ezber oluyor. asıl amaç öğrenilmesi olması lazım bence. tam değil ama yararlı bir site. benden 5 üzerinden ***

  25. Ümit

    :\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:1:18: warning: ISO C99 requires whitespace after the macro name [enabled by default]

    #define version_0.67

    ^

    C:\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:13:0: warning: “DIGITALIO_NO_INTERRUPT_SAFETY” redefined [enabled by default]

    #define DIGITALIO_NO_INTERRUPT_SAFETY

    ^

    In file included from C:\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:12:0:

    C:\Program Files (x86)\Arduino\libraries\digitalIOPerformance/digitalIOPerformance.h:47:0: note: this is the location of the previous definition

    #define DIGITALIO_NO_INTERRUPT_SAFETY 0

    ^

    C:\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:14:0: warning: “DIGITALIO_NO_MIX_ANALOGWRITE” redefined [enabled by default]

    #define DIGITALIO_NO_MIX_ANALOGWRITE

    ^

    In file included from C:\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:12:0:

    C:\Program Files (x86)\Arduino\libraries\digitalIOPerformance/digitalIOPerformance.h:53:0: note: this is the location of the previous definition

    #define DIGITALIO_NO_MIX_ANALOGWRITE 0

    ^

    In file included from C:\Users\user\Desktop\sketch_mar24a\sketch_mar24a.ino:9:0:

    C:\Program Files (x86)\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpGetAccel(int32_t*, const uint8_t*)’:

    C:\Program Files (x86)\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:580:31: warning: left shift count >= width of type [enabled by default]

    data[0] = ((packet[28] << 24) + (packet[29] << 16) + (packet[30] <= width of type [enabled by default]

    data[0] = ((packet[28] << 24) + (packet[29] << 16) + (packet[30] <= width of type [enabled by default]

    data[1] = ((packet[32] << 24) + (packet[33] << 16) + (packet[34] <= width of type [enabled by default]

    data[1] = ((packet[32] << 24) + (packet[33] << 16) + (packet[34] <= width of type [enabled by default]

    data[2] = ((packet[36] << 24) + (packet[37] << 16) + (packet[38] <= width of type [enabled by default]

    data[2] = ((packet[36] << 24) + (packet[37] << 16) + (packet[38] <= width of type [enabled by default]

    data[0] = ((packet[0] << 24) + (packet[1] << 16) + (packet[2] <= width of type [enabled by default]

    data[0] = ((packet[0] << 24) + (packet[1] << 16) + (packet[2] <= width of type [enabled by default]

    data[1] = ((packet[4] << 24) + (packet[5] << 16) + (packet[6] <= width of type [enabled by default]

    data[1] = ((packet[4] << 24) + (packet[5] << 16) + (packet[6] <= width of type [enabled by default]

    data[2] = ((packet[8] << 24) + (packet[9] << 16) + (packet[10] <= width of type [enabled by default]

    data[2] = ((packet[8] << 24) + (packet[9] << 16) + (packet[10] <= width of type [enabled by default]

    data[3] = ((packet[12] << 24) + (packet[13] << 16) + (packet[14] <= width of type [enabled by default]

    data[3] = ((packet[12] << 24) + (packet[13] << 16) + (packet[14] <= width of type [enabled by default]

    data[0] = ((packet[16] << 24) + (packet[17] << 16) + (packet[18] <= width of type [enabled by default]

    data[0] = ((packet[16] << 24) + (packet[17] << 16) + (packet[18] <= width of type [enabled by default]

    data[1] = ((packet[20] << 24) + (packet[21] << 16) + (packet[22] <= width of type [enabled by default]

    data[1] = ((packet[20] << 24) + (packet[21] << 16) + (packet[22] <= width of type [enabled by default]

    data[2] = ((packet[24] << 24) + (packet[25] << 16) + (packet[26] <= width of type [enabled by default]

    data[2] = ((packet[24] << 24) + (packet[25] << 16) + (packet[26] << 8) + packet[27]);

    Bu hatayı veriyor kütüphaneden istediklerini istedim

    1. Ümit

      İstediklerini ekledim

    2. adem

      bendede ayni bu hatayi veriyor. Bir bilen var mi ne yapmamiz gerektigini. Yardimci olursaniz cok sevinirim

  26. ahmet

    meraba kolay gelsin projem var ve bu robotu yapıcam 12V 500 RPM 37mm Redüktörlü DC Motor yerine 6V 500Rpm Redüktörlü Mikro DC Motor kullansam herhangibi bi sorun olurmu robotun dengede durmaması gibi falan

    1. Sezgin GÜL

      torku sağlayıp dengelerse sorun yok ki sorun olacağını sanmıyorum. yine de mekanik kısma bağlı.

  27. hasan yıldırım

    merhaba, çok güzel bir paylaşım olmuş. Bir şey sormak istiyorum MPU 6050 6 eksen yerine MPU 6050 3 eksen kullansam olur mu acaba?

    1. Sezgin GÜL

      MPU 6050 zaten 3 eksen dir. 6 eksen denmesinin sebebi 3 eksen ivme ve 3 eksen gyro ölçer bulundurduğundan toplam eksen sayısı olarak ifade edilir.

      1. hasan yıldırım

        Verdiğin bilgi için çok teşekkür ederim malzeme siparişi verdim.geldiği gibi bende bir deneme yapıcam.

  28. MUHAMMED

    İYİ GÜNLER YAPMIŞ OLDUĞUNUZ ROBOTLARI SATIYOR MUSUNUZ. EĞER SATIYORSANIZ FİYAT ALABİLİR MİYİM? TEŞEKKÜRLER.

    1. Sezgin GÜL

      biz satış yapmıyoruz fakat proje hocam satış yapmakta oradan alabilirsiniz.

      1. MUHAMMED

        Teşekkür ederim.

  29. Ahmet

    Bu projenin maliyeti ne kadar

    1. Sezgin GÜL

      mekaniği hariç 250 tl ye yakın tutar. Tabi çinden alırsan çok daha ucuza yaparsın

  30. Emre

    Hocam bunun ustünde ağırlık taşiyabilirmiyiz. Taşinabilirse bu agirlik maksimum ne kadar olur

    1. Sezgin GÜL

      motorun torkuna göre ağırlık taşıma kapasitesi değişitir

  31. Mustafa

    Sezgin bey devrede hata olabilirmi birçok kez denedim ama işe yaramadı.Az çok breadboard un çalışma sistemini biliyorum ama devre şemasında + yı boş bir aralığa bağlanmış bir kontrol ederseniz çok memnun olurum.İlginiz için teşekür ederim.

    1. Sezgin GÜL

      bağlantılarda hata yok fakat android uygulama kısmında diğer arkadaşlar da sıkıntı yaşıyor. Robot cevap vermiyor olabilir o nedenle

      1. M.eren

        Ne yapmamı önerirsiniz.

        1. Sezgin GÜL

          Android kısım için herhangi bir uygulama indir o uygulamada gönderilen karakterlere göre koddaki karakterleri değiştir

          1. M.eren

            Ne yazıkki kodlama bilgim pek yok. Neyse başka bir çaresine bakıcaz artık.

  32. M.eren

    Ben devreyi kurdum ama arduino uno çok güçsüz çalışıyor.Bunun yanında Bluetooth modül dahil hiçbir cihaz çalışmadı.9v alkalin pil kullandım.Devreyi kontrol ettim.Ne yapmamı önerirsiniz

    1. Sezgin GÜL

      voltaj probleminiz var motorları ve arduinoyu ayrı pillerle besleyin

      1. M.eren

        Daha yüksek bir voltaj kullansak mesela 12 v denesem yakarmıyım acaba

        1. Sezgin GÜL

          sürücü gerilimi karşılıyorsa sorun yok kullanabilirsin

  33. Mustafa

    Tüm verdiğiniz kütüphaneyi atmama rağmen hata veriyor:

    Arduino:1.6.7 (Windows 7), Kart:”Arduino/Genuino Uno”

    C:\Users\Casper\Documents\Arduino\sketch_jan26a\sketch_jan26a.ino:6:90: fatal error: EEPROMex.h: No such file or directory

    #include //EEPROM library for storing pid values

    ^

    compilation terminated.

    exit status 1
    Derleme sırasında hata oluştu.

    1. Mustafa

      Tamam şimdi sorunu çözdüm

  34. Mustafa

    kontrol et dediğimde böyle bir hata çıkıyor:

    Arduino:1.6.4 (Windows 7), Kart:”Arduino Uno”

    sketch_jan26b.ino:6:90: fatal error: EEPROMex.h: No such file or directory
    compilation terminated.
    Derleme sırasında hata oluştu.

  35. akın

    SEZGİN bey ne zaman test edeceksiniz lütfen siz bekliyoruz….odevimiz var acilen yetiştirmemiz gerek hocaya bu tarz proje ilettik…. geri dönüşü yok lütfen en kısa zamanda test edin

  36. Eren

    Merhaba Sezgin bey benimde bir sorum olacaktı.projede balance shield yerine mpu6050 gyro sensör kullansak olurmu ? Çünkü Balance shield ı bulamıyorum.bulunan bi yer varsa linkini atarmısınız.

    1. Sezgin GÜL

      zaten devre şemasına bakarsan mpu6050 kullanıldı. balance shield türkiyede bulmak zor

      1. Eren

        Teşekkür ederim

  37. Eren

    Sezgin bey kodlar dogrumu kesin
    Bide android kontrollu yapicam bu projeyi tavsiye edermisiniz..

    1. Sezgin GÜL

      android uygulaması kısmında deneyen arkadaşların bazıları sorun yaşıyor. biz deneyince bildirim yaparız

  38. burak

    bakın o yukarıda androıd uygulamanın resmı var hemen uzerınde denge robot linki var oraya tıklayın o yazılımı yukledım ben calıstı

  39. isa

    Burak bey acaba Bluetooth kismini cikarttiginiz kodu paylasabilirmisniz?
    bendede Bluetooth yok, kodu ükledim ama hic bir fonkdiyon yok, sanirim bluetoohden komut bekliyor.
    Bluetooth kisminin cikartilmis seklini bir yere yüklemeniz mümkünmü?

  40. burak

    mrb sezgin bey dengeyi sagladık robotta ama bluetooth modulu kullandıgımzda telefondan bir baglantı saglayamadık denge robot yazmıssınız oraya tıkladık ordakı yazılımı yukledık ardunıoya ama olmadı acaba baska bı yazılımla mı olacak

    1. Sezgin GÜL

      uygulamada sorun olabilir bazı arkadaşlar da sorun yaşıyor

    2. FUAT

      Burak dengeyi nasıl sağladın ?

      1. burak

        oradakı yazılımı ardınyoya yukledım pıd degerlerını degstrdm su anda sıkınt yok dengede

        1. HAKAN

          Burak,
          Bağlantı şemanız ve hangi kodu aldınız linkteki mi yoksa yazıdaki mi ?
          Ayrıca kodda veya şemada düzenleme yaptınız mı ? Arduino ide sürümü kaç ?
          Bunları paylaşırsanız çok faydalı olur.

          1. burak

            direk linkteki yazılımı ardunıoya yukledım denge robot yazan lınkı yukledım baglantı seması da bluetooth modul kullanmadım cunku telefonda tanıtamadım normal bluetooth kullanmadan baglantıları sagladım ve denge sensorunude robot ıle paralel olacak sekılde hassas bagladım bu sekılde calısır durumda

  41. Sezgin GÜL

    Tam bağlantı şeması projede var. Android uygulamada veri gönderirken biraz bekleyin.

  42. Ahmet

    C:\Users\win7\AppData\Local\Temp\arduino_941b3aa1079d7bb9c8baad90a0973e7b\sketch_dec20b.ino:6:23: fatal error: EEPROMex.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Derleme sırasında hata oluştu.

    yardım edebilir misiniz arduinoya atamıyorum

    1. Sezgin GÜL

      kütüphaneler eksik ondan dolayı hata vermiş. Linkteki kütüphaneleri ekleyin. Ayrıca sürüm farkından dolayı da hata alabilirsiniz. Son sürüm kullanmanızı tavsiye ederim.

      1. Ahmet

        kütüphaneyi nereye çıkartacağım

      2. Ahmet

        nasıl çıkartacağım

        1. Sezgin GÜL

          rar dan çıkart arduinonun kurulu olduğu yerde libraries klasörünün içine at

          1. Ahmet

            Attm içinde devreyide kurdum da çalışmadı entegrenin tam bağlantı şemasını atabilir misiniz teşekkürler

  43. Ramazan Akdağ

    Projenin Fritzing Dosyası Mevcutmudur ?

      1. Ramazan Akdağ

        eyvallah

  44. GökhN

    F,B,L,R,S,D,P hocam bu harflendirmeler hangileri için ..yani ileri heri sağ ve sol..4 tane olması gerekmiyormu.anlamak için soruyorum..teşekkür ediyorum

    1. Sezgin GÜL

      Gökhan F B L R S bunlar yön komutları diğer komutlar ise pid değerlerini kaydetmek veya değiştirmek için kullanılıyor.

  45. Fuat

    Kod kesinlikle çalışıyor mu ? robotu çalıştıran arkadaşlar kodda düzenleme yapmışlarmı? Ayrıca malzeme listesindekileri aldım ve şemadaki gibi birleştirdim fakat kodda bluetooth pinleri değişikti onu düzelttim fakat yine birşey olmadı. bluetooth tel ile baglanıyorum bluetooth ışığı 1 sn aralıkla yanıp sönüyor pid değerlerini değiştiriyorum 35,20,5 gibi fakat yine hiç tepki yok yön tuşlarına basıyorum ama yine tık yok. Başka hatalar varmı ben pek koddan anlamıyorum da. Eger yapan arkadaşlar nasıl yaptıklarını veya ne gibi hatalar ile karşılaştıklarını yazar ise çözebilirim herhalde. sezgin facebook hesabım yok skype olurmu acaba yada emailim yazıyor yorumda. fritzing şemasındaki gibi herşeyi bağladım bluetooth pinini de düzelttim ama yine tık yok mpu ışıgı sürekli yanıyor bluetooth baglanmayınca hızlı yanıp sonuyor baglanınca da 1 sn aralıkla yanıp sönüyor fakat tekerleklerde hiç tepki yok. farklı kod yazınca l293d entegeresi çalışıyor. Umarım anlattıklarımdan hatayı bulabilirsiniz. İyi günler.

    1. Sezgin GÜL

      Robotu henüz denemedik ama yoruma bakarsan bir kişi yapmış. Biz deneyip sorun var mı yok mu yazarız.

    2. Sezgin GÜL

      Çalışıp çalışmadığını bilmiyorum denemedim. Bazı arkadaşlar da denemişler tepki alamamışlar. Biz denemedik henüz kesin bir şey söyleyemeyeceğim.

  46. Sezgin GÜL

    Fuat facebook hesabımdan iletişime geçebilirsin.>> facebook.com/sezgin.gul.08

  47. GökhN

    hocam normal denge robotu ile bunun arasındaki tek fark Hc-05 Bluetooth Modül öyle değilmi..Yani normal denge robotuna Hc-05 Bluetooth Modül ekleyerek yapılabilirmi

    1. Sezgin GÜL

      Evet Gökhan blutooth modülünü ekleyip yazılımı da değiştirirsen normal denge robotunu telefonundan kontrol edebilirsin.

  48. Fuat

    İyi günler,
    Bende bu projeyi yaptım fakat tepki yok, tüm bağlantıları kontrol ettim ama çalışmıyor. Sorun nerde olabilir. Tüm kabloları kaç defadır kontrol ettim. Acaba yazılımsal mı ?

    1. Sezgin GÜL

      Android uygulamasında pid değerlerini girin ve biraz bekleyin. gyro sensörün int kesme pinini dijital 2. pine takarak tekrar deneyin

      1. FUAT

        Dediginiz gibi yaptım olmadı. Pid kısmına sayılar falan yazdım bekledim olmadı resetledim olmadı. Android uygulamasını doğru kullandigimdan emin degilim. Resimli olarak nasıl pid ayarlanacagini paylasirsaniz çok iyi olur. Sistemin tüm bağlantıları şekildeki gibi yaptım kablolari kaç defadır kontrol ediyorum. Bluetooth ve gryo ışıkları yanıyor fakat motorlarda hiç tepki yok.

        1. Sezgin GÜL

          bluetooth rx pinini 4. pine tx pinine de 11 pine taktınız mı ? ters takmışsanız veri almaz

          1. FUAT

            Evet tüm kabloları kaç defadır kontrol ediyorum. Güç girişleri doğru, bluetooth gyro doğru bağladım. Fakat motorlarda tepki yok. Video çekip yollasam bakarmisiniz. Videoyu yollayacağım adresi bana mail atarsınız çok iyi olur.

  49. Ethem Ozer

    Hocam motor olarak ne kullanacağız step servo vs robotistanda bu şekilde bi seçenek çıktı bir haftamiz kaldı biraz detaylı paylaşım yapsanız malzeme hakkında 🙁

    1. Sezgin GÜL

      Dc motor kullanacaksın. 250 500 rpm arası idealdir. Tekerlekle birlikte satılanlardan alırsan daha kolay olur

  50. burak

    hocam ben yaptım ama 320 rpm motorla yaptım size video aatsam bı baksanız calısıyor ama sadece oldugu yerde ılerı gerı yapıyor ve tıtremeler var vıedo atsam bı baksanız olur mu

    1. Sezgin GÜL

      Fark etmez sistemin torkunu karşılaması yeterlidir.Uygulamada pid değerlerini değiştirip denemeler sonucu bulmanız gerekiyor. Videoyu atabilirsiniz bakarız. facebooktan da gönderebilirsiniz

    2. Sezgin GÜL

      facebook hesabıma videounu gönder bakalım.>> facebook.com/sezgin.gul.08

  51. GökhN

    Hocam motorlar için 500rpm gereklimi..250rpm olmazmı

    1. Sezgin GÜL

      Robotun ağırlığını tork karşılarsa olur sorun olmaz. Robotun yüksekliğini kısa yapın sıkıntı yaşamassınız

      1. GökhN

        Redüktörlü dc motor kullanılabilirmi. robotistan.com/6v-500rpm-reduktorlu-mikro-dc-motor
        burdaki motordan almayı düşünüyorum.Sizce uygunmudur..Bide Bu motorlara her tekerlek uyuyormu.

        1. Sezgin GÜL

          Kullanırsınız olur. Robotistanda tekerlekle birlikte satılan motorlardan alırsanız daha kolay olur.

  52. Ethem Özer

    Hocam okulda proje için kullanacağız bu robotu fakat pek bir bilgimiz yok. Birkaç sorum olacak izninizle;

    1.Plaket ölçüleri ne kadar olacak?
    2.Malzemeleri nereden ve kaç tlye temin edebiliriz?
    3.Robot tekerlerini nasıl ve nereden uydurabiliriz.
    malzemeler hakkında biraz daha detay paylaşırsanız çok makbule geçecek emeğinize sağlık

  53. Ethem

    Hocam merhaba. Öncelikle bu güzel paylaşımınız için teşekkür ederim. Bitirme projesi olarak bu uygulamayı yapmayı düşünüyorum. Gayet açıklayıcı bir paylaşım olmuş fakat bu ürünü sizin kurup çalıştırdınız uygulamayı yayınlama imkanınız var mı veya paylaşma ?

    1. Sezgin GÜL

      Merhaba Ethem henüz denemedik ama kısa zaman içinde videosunu çekip paylaşacağız.

  54. Gokhan

    Hocam ben bitirme projesi olarak aldım robot artı olarak geldiği noktayı bulabilecek..yanı robot ilerlemeye başladığında 0 konumuna gelerek dengede olacak.ne onerirsiniz

    1. Sezgin GÜL

      Yapmak istediğin başlangıçtaki konumuna geri dönmek ise gps kullanabilirsin. Bir başka yöntem ise bu biraz kesin olmayabilir gittiği yönleri ve ne kadar sürede gittiğini sd karta kaydettirip başlangıçtaki konumuna geri dönmesini sağlayabilirsiniz.

  55. Ethem Özer

    Lipo pil olarak ne kullanabilirz ayrıca kontrol için kullanılan kumanda olarak ne önerirsiniz.

    500rpm motor kaç voltluk 37rpm’lik yetermi?

    1. Sezgin GÜL

      7.2 volt 1050mah lipo pil yeterlidir. Kontrolünü telefondan yapıyorsunuz uygulama mevcut.Motorlar için 6v luk yeterlidir.

  56. Günışık Doğru

    iyi günler Pid_v1 kütüphaneler arasında yok.Sizde var mı acaba.tsk.

  57. Kerimhan Bilgin

    Merhaba, acaba bu denge robotu verdiğiniz android uygulaması üzerinden; ileri, geri, sağa ve sola hakeret ettirilebiliyormu? yoksa sadece işlevi dengede durması mı?

    1. Sezgin GÜL

      Telefondan kontrol edebilirsiniz ileri geri sağ sol hareketini yönetebilirsiniz.

  58. Berkay Evren

    Merhaba, iyi günler. Sitenizi daha yeni görüyorum. İyi ki görmüşüm ve keşke daha önceden görmüş olsaydım diyorum içimden. Paylaşımlarınızı çok beğendim. Sırayla tüm projeleri denemeyi planlıyorum. Emeğiniz için teşekkürler.
    Ayrıca ufak bir talebim olacak. Kodların da hangi satırın ne işe yaradığını açıklama imkanınız varsa gerçekten çok rahatlatır bizleri. Kolay gelsin, iyi çalışmalar.

    1. Sezgin GÜL

      Merhaba Berkay, sitemiz hakkındaki olumlu düşünceleriniz için teşekkürler.Projeleri oldukça açık bir şekilde sunmaya çalışıyoruz.Birkaç proje dışında yazılımlarda da açıklamalar mevcut.Bundan sonraki projelerde yazılımların açıklamalarını yapacağız.Takıldığınız noktada sorabilirsiniz.
      İyi Çalışmalar.

  59. Emrah KILIÇ

    Yalnız şöyle bir durum var sizin gösterdiğiniz EEPROMex kütüphanesini tanımadı arduino. O yüzden başka bir yerden indirdim. Ne işe yaradığını da bilmiyorum tam olarak. Sorun o olabilir mi ?

    1. Sezgin GÜL

      EEPROMex kütüphanesini tanıyor.Bu kütüphane pid kontol değişkenlerini derliyor.Telefondan pid değerlerini gönderdiğinizde onları alarak pid sistemine yazdırıyor.
      Elinizde L298N Motor sürücü shield varsa aşaıdaki kodu deneyin.fakat normal dengede duran robot kodu bu . Telefon kontrollü değil.Eğer çalışmassa devrede bi sıkıntı vardır demektir.
      http://www.robimek.com/wp-content/uploads/balance-robot.txt

      1. Emrah KILIÇ

        LMotorController.h kütüphanesini nerden indirebilirim

        1. GökhN

          Hocam doğru kodları gönderebilirmisiniz.Benim bitirme projem bu şekilde bir robot fakat arduino bilgim fazla yok .Kodları yükledim ama birçok hata var malesef ilerleyemiyorum.Yardımcı olursanız sevinirim.Teşekkür ediyorum

  60. Emrah KILIÇ

    Sezgin bey başta da yazdığım gibi tepki vermiyor . herhangi bir tepki yok yani motorlarda dönmüyor. Ayrı bir motor kontrol kodu yazdım sıkıntı yok çalışıyorlar. bluetooth bağlantısı sağlanıyor. Seri port ekranını açıyorum hiçbir yazı yok. Bende anlamadım başıma hiç gelmedi. mpu 6050 yide tek başına denedim seriport’tan okuma yapabildim ancak bu kodu atıyorum tepki yok.

    1. Sezgin GÜL

      Arduino kod dosyasını yükledim.İndirin öyle bir deneyin.

      1. Emrah KILIÇ

        Hayır olmadı malesef baştan kurup yeniden deneyeceğim. Başka ne yapmamı önerirsiniz

        1. Sezgin GÜL

          setup kısmındaki #ifdef DEBUGING, #endif, #ifdef BLUE, #endif satırlarını siin
          loop kısmındaki #ifdef BLUE
          Bt_control(); //App control
          #endif
          #ifdef BLUE ve #endif satırını silin

          1. Emrah KILIÇ

            Olmuyor nerde uyumsuzlıuk var anlamadım ki. Dediğiniz yaptım. Bağlantıları da baştan kurdum. Ama yok olmuyor tepki yok kıpırdamıyor 🙁

  61. Sezgin GÜL

    Dengede durmada mı sıkıntı var kontrol de mi?Batarya bağlantısını kontrol edin.Ayrıca motorların dönüş yönlerine bakın.Ters ise birbirlerini kilitleyebilir.

  62. Emrah KILIÇ

    Merhaba Sezgin Bey öncelikle çalışmanız için teşekkür ederim. MPU6050 yi nasıl konumlandırdınız.? Nasıl durması gerekiyor ? ilk kullanacağım .O yüzden sıkıntı çekiyorum biraz

    1. Sezgin GÜL

      Bu projede balance shield var ve içine mpu6050 gömülü.Ayrı kullanacaksanız gyro sensörün konumu yatay olmalıdır.Pinler üstte olacak şekilde.

      1. Emrah KILIÇ

        Sezgin bey şuan olması gerektiği gibi yaptığımı düşünüyorum ama tepki vermiyor .Bluetooth bağlı. ama tepki vermiyor yine de ne yapmamı önerirsiniz bağlantılarda sorun yok kontrol ettim

        1. Sezgin GÜL

          Balance shield mi kullanıdınız yoksa mpu6050 gyro sensor mü.Ayrıca kodu attıktan sonra arduino yu resetlediniz mi veya batarya çıkarıp taktınız mı ?

          1. Emrah KILIÇ

            mpu 6050 kullandım evet resetledim. batarya kablosu da arada temassızlık etti

  63. ulusoyab

    çok güzel bir proje. önümüzdeki günlerde uygulayacağım. sıkıntı çıkmaz inş. ellerine emeğine sağlık.

      1. BURAK

        KOLAY GELSİN L293D YERİNE L298N KULLANSAK OLABİLİRMİ

          1. Sinan

            Sezgin bey tüm sorulara cevap vermişssiniz sabrınızdan dolayı tebrikler

        1. speedy mustafa

          zaaaa ezik xD