Android Kontrollü Dengede Duran Robot Yapımı
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:
- Arduino Uno
- Hc-05 Bluetooth Modül
- MPU6050 6 Eksen İvme ve Gyro Sensörü
- L293D Motor Sürücü
- IC7805 Voltaj Regülatörü
- Lipo Pil
- 2Adet 500 Rpm Motor
- 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 DEBUGING //uncomment it to debug.It will decrease the processing speed. #define BLUE //comment if not using bluetooth //#include <EEPROMex.h> //EEPROM library for storing pid values #include <I2Cdev.h> #include <Wire.h> #include <MPU6050_6Axis_MotionApps20.h> #include <helper_3dmath.h> #include <PID_v1.h> //Arduino PID library #include <digitalIOPerformance.h> //library for faster pin R/W #define DIGITALIO_NO_INTERRUPT_SAFETY #define DIGITALIO_NO_MIX_ANALOGWRITE //Bluetooth Stuff #include<SoftwareSerial.h> const int rxpin = 11; // pin used to receive (not used in this version) const int txpin = 4; // pin used to send to LCD SoftwareSerial blue(rxpin, txpin); // new serial port on pins 2 and 3 #define RESTRICT_PITCH MPU6050 mpu; // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q; // [w, x, y, z] quaternion container VectorFloat gravity; // [x, y, z] gravity vector 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 dmpDataReady() { mpuInterrupt = true; } // Balance PID controller Definitions #define BALANCE_KP 15 // PID Constants #define BALANCE_KI 90 #define BALANCE_KD 0.8 #define BALANCE_PID_MIN -255 // Define PID limits to match PWM max in reverse and foward #define BALANCE_PID_MAX 255 #define ROTATION_KP 50 #define ROTATION_KI 300 #define ROTATION_KD 4 #define MOTOR_A_DIR 5 //M11 #define MOTOR_A_BRAKE 8 //M12 #define MOTOR_B_DIR 6 //M21 #define MOTOR_B_BRAKE 12 //M22 #define MOTOR_A_PWM 9 //M1E #define MOTOR_B_PWM 10 //M2E // Motor Misc #define PWM_MIN 0 #define PWM_MAX 255 float MOTORSLACK_A=32; // Compensate for motor slack range (low PWM values which result in no motor engagement) float MOTORSLACK_B=39; // Compensate for motor slack range (low PWM values which result in no motor engagement) #define MOTOR_A_PWM_MAX 255 // Compensate for differences in DC motor strength #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); //For info about these,see Arduino PID library 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; //first save pid values in EEPROM manually,otherwise it will give garbage values /* addressFloat = EEPROM.getAddress(sizeof(float)); //reading from EEPROM 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))); */ bal_kp=BALANCE_KP; bal_ki=BALANCE_KI; bal_kd=BALANCE_KD; rot_kp=ROTATION_KP; rot_ki=ROTATION_KI; rot_kd=ROTATION_KD; pid.SetTunings(bal_kp,bal_ki,bal_kd); //change PID values rot.SetTunings(rot_kp,rot_ki,rot_kd); } void loop() { getvalues(); //read values from imu new_pid(); //call pid #ifdef BLUE Bt_control(); //App control #endif #ifdef DEBUGING printval(); #endif } void init_imu() { // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); mpu.initialize(); devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for min sensitivity 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) { // turn on the DMP, now that it's ready mpu.setDMPEnabled(true); // enable Arduino interrupt detection // Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)...")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); } } void getvalues() { // if programming failed, don't try to do anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) 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);} //forward else if(content[0]=='B') setpoint = originalSetpoint + d_speed;//Serial.println(setpoint);} //backward else if(content[0]=='L') ysetpoint = constrain((ysetpoint + yoriginalSetpoint - d_dir),-180,180);//Serial.println(ysetpoint);} //left else if(content[0]=='R') ysetpoint = constrain(ysetpoint + yoriginalSetpoint + d_dir,-180,180);//Serial.println(ysetpoint);} //right else if(content[0]=='S') d_speed = (content.substring(2)).toInt();//Serial.println(d_speed);} //set speed slider else if(content[0]=='D') d_dir = content.substring(2).toInt();//Serial.println(d_dir);} //set direction slider else if(content[0]=='P') { if(content[1]=='S') { if(content[2]=='B') save_pid(1); //save balance pid values else save_pid(0); //save rotation pid values } else if(content[1]=='C') { if(content[2]=='B') { change_pid(1); //change balance pid values } else change_pid(0); //change rotation pid values } } if(content=="updateb") return_pid(1); //return balance pid values from eeprom else if(content=="updater") return_pid(0); //return rotation pid values from eeprom /*if(ysetpoint!=0) { di="D";di.concat(ysetpoint);di.concat("e");blue.print(di); Serial.println(di);}*/ } } void return_pid(bool b) //return values from eeprom { 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) //change pid values { 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]; // Serial.print("Bkp");Serial.print(bal_kp);Serial.print("\t"); // Serial.print("Bki");Serial.print(bal_ki);Serial.print("\t"); // Serial.print("Bkd");Serial.print(bal_kd);Serial.println("\t"); } else { rot_kp=Buffer[0];rot_ki=Buffer[1];rot_kd=Buffer[2]; // Serial.print("Rkp");Serial.print(rot_kp);Serial.print("\t"); // Serial.print("Rki");Serial.print(rot_ki);Serial.print("\t"); // Serial.print("Rkd");Serial.print(rot_kd);Serial.println("\t"); } } void save_pid(bool pid) //save pid values { /* addressFloat = 0; if(pid) { EEPROM.updateFloat(addressFloat,bal_kp); EEPROM.updateFloat((addressFloat+=sizeof(float)),bal_ki); EEPROM.updateFloat((addressFloat+=sizeof(float)),bal_kd); // Serial.println("Bupdated"); } else { EEPROM.updateFloat(addressFloat,rot_kp); EEPROM.updateFloat((addressFloat+=sizeof(float)),rot_ki); EEPROM.updateFloat((addressFloat+=sizeof(float)),rot_kd); //Serial.println("Rupdated"); }*/ } double compensate_slack(double yOutput,double Output,bool A) { // Compensate for DC motor non-linear "dead" zone around 0 where small values don't result in movement //yOutput is for left,right control 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(); // Convert PID output to motor control MotorAspeed = compensate_slack(yout,out,1); MotorBspeed = compensate_slack(yout,out,0); motorspeed(MotorAspeed, MotorBspeed); //change speed } //Fast digitalWrite is implemented void initmot() { //Pin definitions 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); } // Motor control functions void motorspeed(int MotorAspeed, int MotorBspeed) { // Motor A control 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)); // Motor B control 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:
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.
Arduino Kodu: denge robotu
Kendi Robotunu Yap projelerimizin bu bölümünde de android kontrolllü dengede duran robotumuzu tamamladık.
Boş yere deneyip zamanınızı harcamayın.Eğer bluetooth kontrollü bir denge robotu istiyorsanız encoderli motorlarla yapılan sistemlere bakın.Hazır olanlar ekipçe yapılmış projeler ve tüm detayları paylaşılmıyor.Kendiniz kodlarsanız tabiki olabilir, yazılım seviyenize güveniyorsanız…
salam alekum. hc 06 kullana bilirmiyim?
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ş.
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
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.
yazılımda hata var yardım edermisiniz
252-272 arası kodlar neyin kodları hiç görmediğim parametreler var da?
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
bluetooth kontollu cizgi izleyen nasıl yapılabilir ?
l293dd motor sürücü kartı kullanıyorum bağlantı şeması nasıl olmalı? m1a,m1b,m2a ve m2b gibi pin isimleri var
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.
PID_v1.h kütüphanesini yüklemediğiniz için hata almışsınız.
Hocam malzeme list ile semanın alakası yok.ayrıca motorlarda enkoder de yok.
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?
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
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 ?
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
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 ?
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
tüm bağlantılar tamam kodları da yükledim ancak hiç bir hareket yok
kodlar bir türlü derlenmiyor..tüm kütüphaneler tam olmasına rağmen initmot hata veriyor…
‘initmot’ was not declared in this scope
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
Kolay gelsin “initmot()” kısmında “was not declared in this scope” diye bir hata veriyor. Bunu nasıl çözebilirim.
yeni pid yerine ne yazmamız gerekiyo
Merhaba Arkadaşlar burada gösterilen devrenin kurulumu ayrı beslemelerdenden mi verilmiş? tam anlayamadım şuan.
Kolay gelsin “initmot()” kısmında “was not declared in this scope” diye bir hata veriyor. Bunu nasıl çözebilirim.
hi i want to ask a question please could i use the nrf24l01 bluetooth module instead of the hc-05 or not ?
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 ***
:\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
İstediklerini ekledim
bendede ayni bu hatayi veriyor. Bir bilen var mi ne yapmamiz gerektigini. Yardimci olursaniz cok sevinirim
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
torku sağlayıp dengelerse sorun yok ki sorun olacağını sanmıyorum. yine de mekanik kısma bağlı.
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?
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.
Verdiğin bilgi için çok teşekkür ederim malzeme siparişi verdim.geldiği gibi bende bir deneme yapıcam.
İYİ GÜNLER YAPMIŞ OLDUĞUNUZ ROBOTLARI SATIYOR MUSUNUZ. EĞER SATIYORSANIZ FİYAT ALABİLİR MİYİM? TEŞEKKÜRLER.
biz satış yapmıyoruz fakat proje hocam satış yapmakta oradan alabilirsiniz.
Teşekkür ederim.
Bu projenin maliyeti ne kadar
mekaniği hariç 250 tl ye yakın tutar. Tabi çinden alırsan çok daha ucuza yaparsın
Hocam bunun ustünde ağırlık taşiyabilirmiyiz. Taşinabilirse bu agirlik maksimum ne kadar olur
motorun torkuna göre ağırlık taşıma kapasitesi değişitir
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.
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
Ne yapmamı önerirsiniz.
Android kısım için herhangi bir uygulama indir o uygulamada gönderilen karakterlere göre koddaki karakterleri değiştir
Ne yazıkki kodlama bilgim pek yok. Neyse başka bir çaresine bakıcaz artık.
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
voltaj probleminiz var motorları ve arduinoyu ayrı pillerle besleyin
Daha yüksek bir voltaj kullansak mesela 12 v denesem yakarmıyım acaba
sürücü gerilimi karşılıyorsa sorun yok kullanabilirsin
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.
Tamam şimdi sorunu çözdüm
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.
EEPROMex.h kütüphanesini ekle
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
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.
zaten devre şemasına bakarsan mpu6050 kullanıldı. balance shield türkiyede bulmak zor
Teşekkür ederim
Sezgin bey kodlar dogrumu kesin
Bide android kontrollu yapicam bu projeyi tavsiye edermisiniz..
android uygulaması kısmında deneyen arkadaşların bazıları sorun yaşıyor. biz deneyince bildirim yaparız
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ı
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ü?
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
uygulamada sorun olabilir bazı arkadaşlar da sorun yaşıyor
Burak dengeyi nasıl sağladın ?
oradakı yazılımı ardınyoya yukledım pıd degerlerını degstrdm su anda sıkınt yok dengede
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.
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
Tam bağlantı şeması projede var. Android uygulamada veri gönderirken biraz bekleyin.
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
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.
kütüphaneyi nereye çıkartacağım
nasıl çıkartacağım
rar dan çıkart arduinonun kurulu olduğu yerde libraries klasörünün içine at
Attm içinde devreyide kurdum da çalışmadı entegrenin tam bağlantı şemasını atabilir misiniz teşekkürler
Projenin Fritzing Dosyası Mevcutmudur ?
malesef mevcut değil
eyvallah
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
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
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.
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.
Robotu henüz denemedik ama yoruma bakarsan bir kişi yapmış. Biz deneyip sorun var mı yok mu yazarız.
Ç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.
Fuat facebook hesabımdan iletişime geçebilirsin.>> facebook.com/sezgin.gul.08
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
Evet Gökhan blutooth modülünü ekleyip yazılımı da değiştirirsen normal denge robotunu telefonundan kontrol edebilirsin.
İ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ı ?
Android uygulamasında pid değerlerini girin ve biraz bekleyin. gyro sensörün int kesme pinini dijital 2. pine takarak tekrar deneyin
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.
bluetooth rx pinini 4. pine tx pinine de 11 pine taktınız mı ? ters takmışsanız veri almaz
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.
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 🙁
Dc motor kullanacaksın. 250 500 rpm arası idealdir. Tekerlekle birlikte satılanlardan alırsan daha kolay olur
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
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
facebook hesabıma videounu gönder bakalım.>> facebook.com/sezgin.gul.08
Hocam motorlar için 500rpm gereklimi..250rpm olmazmı
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
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.
Kullanırsınız olur. Robotistanda tekerlekle birlikte satılan motorlardan alırsanız daha kolay olur.
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
Mekanik Kısım boyutları için http://www.robimek.com/arduino-ile-kendini-dengeleyen-robot-yapimi/ buradaki projeye bakabilirsiniz. Bu proje videosu bize aittir.
Elektronik malzemeleri robotistandan alabilirsiniz. Motor ve tekerlekler set halinde burada bulabilirsiniz. Toplam maliyet ortalama 150 tl olur.
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 ?
Merhaba Ethem henüz denemedik ama kısa zaman içinde videosunu çekip paylaşacağız.
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
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.
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ı?
Telefondan kontrol edebilirsiniz ileri geri sağ sol hareketini yönetebilirsiniz.
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.
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.
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.
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
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.
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
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ı ?
mpu 6050 kullandım evet resetledim. batarya kablosu da arada temassızlık etti
çok güzel bir proje. önümüzdeki günlerde uygulayacağım. sıkıntı çıkmaz inş. ellerine emeğine sağlık.
Takıldığınız noktada sorabilirsiniz.
KOLAY GELSİN L293D YERİNE L298N KULLANSAK OLABİLİRMİ
tabi kullanabilirsin.
Sezgin bey tüm sorulara cevap vermişssiniz sabrınızdan dolayı tebrikler
zaaaa ezik xD