Bu hafta sonu projesi olarak bitirme projemde de temeli oluşturan bir çalışma yapacağım. Step motor kontrolü. Step motor nedir ? Step motor çalışma mantığı ? ile ilgili wikipedia üzerinden ön bir bilgi alabilirsiniz. Genel olarak dım adım kontrol edilen motor olarak denebilir. Her adım (ör; motor 200 adım - devir ise 360/200 = 1.8) belirli derece ile döndüğü için adım sayılarını ve yönlerini belirleyerek motoru istediğimiz açıya getirebiliriz. Bu adım aralıkları değişik tekniklerle bir adımı 2,4,8,16 ya bölerek çok daha hasas bir şekilde kontrol yapılabiliyor. Ben bu çalışmada güç kaynağım çok iyi olmadığı için tam adım olan (bir tam deviri 200 adımda dönüyor) yöntemi kullacağım.
Projede kullanıdığım motor sürücü A4988. Özelliklerine buradan bakabilrsiniz. Projede kullandığım step motor ise hybrid bipolar bir step motor. Nema 14 şafta sahip. Motorun özelliklerine burdan bakabilirsiniz. Motor sürücüye yön ve adım bilgisi göndererek motoru kontrol etmeye çalışacağım. Adım bilgisini kare dalgalar üreterek göndereceğim. Her bir darbe bir adım anlamına geliyor.
En baştan olarak gerekli olanları listelersek
Malzeme listesi
Projede kullanıdığım motor sürücü A4988. Özelliklerine buradan bakabilrsiniz. Projede kullandığım step motor ise hybrid bipolar bir step motor. Nema 14 şafta sahip. Motorun özelliklerine burdan bakabilirsiniz. Motor sürücüye yön ve adım bilgisi göndererek motoru kontrol etmeye çalışacağım. Adım bilgisini kare dalgalar üreterek göndereceğim. Her bir darbe bir adım anlamına geliyor.
En baştan olarak gerekli olanları listelersek
Malzeme listesi
Gerekliler litesi :
- 1x A4988
- 1x Bioplor Hybrid Step Motor
- 1x Breadboard
- Arduino Mega 2560 ya da diğer Arduino boradlarından biri
- Arduino Yazılımı
- Processing Yazılımı
- 1x Breadboard
- Arduino Mega 2560 ya da diğer Arduino boradlarından biri
- Arduino Yazılımı
- Processing Yazılımı
Diğer Arduino projelerine de bakmak isterseniz technologylaboratory.blogspot.com/search/label/Arduino
Arduino Kod :
Arduino Kod :
/*
*****************
H.Melih ERDOĞAN
*****************
Project 12
Name : Stepper Motor
*/
*****************
H.Melih ERDOĞAN
*****************
Project 12
Name : Stepper Motor
*/
#define stepPin 3 // bağlantı yaptığım uçlar
#define dirPin 2
int dir;
int time;
String inputString = ""; // seri port üzerinde göndereceğim veri
boolean stringComplete = false;
// ayarlar
#define dirPin 2
int dir;
int time;
String inputString = ""; // seri port üzerinde göndereceğim veri
boolean stringComplete = false;
// ayarlar
void setup(){
Serial.begin(9600);
inputString.reserve(200);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop(){
if (stringComplete){ // eğer veri varsa
if (inputString.substring(0,3) == "dir") { // veri etiketi yön ise
motor_dir(); // yön fonksiyonunu çağır
}
else if (inputString.substring(0,5) == "speed") { // veri etiketi hız ise
motor_speed(); // hız fonksiyonunu çağır
}
inputString = "";
Serial.println("Motor Set");
stringComplete = false;
}
for (int i=0;i<200;i++){ // kare dalga oluştur ve 200 adım at
digitalWrite(stepPin, HIGH);
delayMicroseconds(time);
digitalWrite(stepPin, LOW);
delayMicroseconds(time);
}
}
// motor speed
void motor_dir(){
if(inputString.substring(3,4) == "r"){ // sağa dön
digitalWrite(dirPin, LOW);
}
else if(inputString.substring(3,4) == "l"){ // sola dön
digitalWrite(dirPin, HIGH);
}
else{
Serial.println("Error");
}
}
// motor speed // hızı ayarla
void motor_speed(){
if(inputString.substring(5,6) == "1"){
time = 300;
}
else if(inputString.substring(5,6) == "2"){
time = 500;
}
else if (inputString.substring(5,6) == "3"){
time = 1000;
}
else if (inputString.substring(5,6) == "4"){
time = 2000;
}
else{
Serial.println("Error");
}
}
// Serial Com.
void serialEvent() { // seri port üzerinden haberleşme
while (Serial.available()) {
char inChar = (char)Serial.read(); // gönderilen veriyi oku
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Devre Şeması
MS1,MS2,MS3 uçlarını toprağa bağladım. Bu uçlar adım çözünrlüğünü ayarlamak için kullanılıyor. Sleep ucu reset ucuna bağlı. Vmot ve GND uçlarına ise harici güç kaynağımı bağlıyorum. Kullanıdığım güç kaynağı 12V ve en fazla 500 ma kadar çıkış veriyor.
Serial.begin(9600);
inputString.reserve(200);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop(){
if (stringComplete){ // eğer veri varsa
if (inputString.substring(0,3) == "dir") { // veri etiketi yön ise
motor_dir(); // yön fonksiyonunu çağır
}
else if (inputString.substring(0,5) == "speed") { // veri etiketi hız ise
motor_speed(); // hız fonksiyonunu çağır
}
inputString = "";
Serial.println("Motor Set");
stringComplete = false;
}
for (int i=0;i<200;i++){ // kare dalga oluştur ve 200 adım at
digitalWrite(stepPin, HIGH);
delayMicroseconds(time);
digitalWrite(stepPin, LOW);
delayMicroseconds(time);
}
}
// motor speed
void motor_dir(){
if(inputString.substring(3,4) == "r"){ // sağa dön
digitalWrite(dirPin, LOW);
}
else if(inputString.substring(3,4) == "l"){ // sola dön
digitalWrite(dirPin, HIGH);
}
else{
Serial.println("Error");
}
}
// motor speed // hızı ayarla
void motor_speed(){
if(inputString.substring(5,6) == "1"){
time = 300;
}
else if(inputString.substring(5,6) == "2"){
time = 500;
}
else if (inputString.substring(5,6) == "3"){
time = 1000;
}
else if (inputString.substring(5,6) == "4"){
time = 2000;
}
else{
Serial.println("Error");
}
}
// Serial Com.
void serialEvent() { // seri port üzerinden haberleşme
while (Serial.available()) {
char inChar = (char)Serial.read(); // gönderilen veriyi oku
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Devre Şeması
MS1,MS2,MS3 uçlarını toprağa bağladım. Bu uçlar adım çözünrlüğünü ayarlamak için kullanılıyor. Sleep ucu reset ucuna bağlı. Vmot ve GND uçlarına ise harici güç kaynağımı bağlıyorum. Kullanıdığım güç kaynağı 12V ve en fazla 500 ma kadar çıkış veriyor.
Proje Ekran Görüntüleri :
hız bilgisini gönderioyrum speed1 -> 1 yani time 300 olacak
yön bilgisi gönderiyorum dirl yani directory left motor yön değiştiriyor.
hatalı bilgi yolluyorum error alıyorum. Motor varsayılan ayarlarında kalıyor.
Devrenin kurulmuş halinin fotoğrafları
Projenin çalıştırılmış şeklinin videosu aşağıdadır iyi seyirler. Bir sonraki projede görüşmek üzere.