Bu projede MPU6050 ivmeölçer ile dc motorun hız kontrolünü yapacağız. Fakat ek olarak hız seviyesine göre uyarı veren sistem ekleyeceğiz. Peki bu sistem ne işimize yarayabilir? Örneğin robotun üzerine ivme ölçeri koyarak eğime göre robotun motorlarının hızını otonom ayarlayabilir. Eğim fazla ise motorlara daha çok güç vererek eğimi çıkmasını sağlar.
Malzemeler:
Öncelikle MPU6050 gyro sensör kullanımını bilmeyen arkadaşlar bu yazımda detaylıca anlattım buradan bakabilirler.
Yukardaki bağlantıları yaptıktan sonra yazılım kısmına geçebiliriz.
Yazılımda sadece x eksenindeki açısal ivmelenme ölçülerek algoritma oluşturuldu.
Malzemeler:
- Arduino
- Mpu6050 gyro sensör
- Dc Motor
- Buzzer
- Jumper Kablo
Öncelikle MPU6050 gyro sensör kullanımını bilmeyen arkadaşlar bu yazımda detaylıca anlattım buradan bakabilirler.
Yukardaki bağlantıları yaptıktan sonra yazılım kısmına geçebiliriz.
//Yazılım Geliştirme By Çağlar GÜL - 2016
//Yazılım Lisans By Çağlar GÜL
//www.caglargul.com
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int speed_value = 9;
int gyro_value;
int buzzerpin = 12;
int motor_value;
void setup()
{
Wire.begin();
Serial.begin(38400);
pinMode(buzzerpin, OUTPUT);
digitalWrite(buzzerpin,HIGH);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Bağlandi" : "Bağlanmadi");
}
void loop()
{
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
gyro_value = map(ax, 0, 17000, 0,255);
motor_value=abs(gyro_value);
Serial.println(motor_value);
analogWrite(speed_value,motor_value);
if(motor_value <75 buzzerpin="" digitalwrite="" high="" if="" motor_value="">=75 && motor_value <100 beep="" buzzerpin="" digitalwrite="" if="" low="" motor_value="">=100 && motor_value <150 beep="" buzzerpin="" digitalwrite="" if="" low="" motor_value="">=150 && motor_value <200 beep="" buzzerpin="" digitalwrite="" if="" low="" motor_value="">=200)
{
digitalWrite(buzzerpin, LOW);
beep(10);
}
delay(100);
}
void beep(unsigned char delayms)
{
analogWrite(12, 255);
delay(delayms);
analogWrite(12, 0);
delay(delayms);
}200>150>100>75>
Yazılımda sadece x eksenindeki açısal ivmelenme ölçülerek algoritma oluşturuldu.