karacaoglu
Üye
- Katılım
- 11 Ocak 2018
- Mesajlar
- 6
- Puanları
- 1
- Yaş
- 28
Arkadaşlar öncelikle merhaba. Bitirme projesi olarak öğrenme fonksiyonuna sahip robot kolu tasarlıyorum. Projeden biraz bahsedecek olursam size:
Malzemeler:
4,SG90 Servo, 2-Switch, 3-LED, Robot Kol, 2-Miniboard, Arduino Uno, 9V Pil, 5V Adaptör, Kontrplak çevrimli kutu
Çalışma Mantığı:
Switch1 (S1): Sisteme enerji temin etme
Switch2 (S2): Öğrenme Fonksiyonunu kontrol etme
LED1: Sistem enerjili (yeşil)
LED2: Sistem öğreniyor (sarı)
LED3: Sistem öğrendiği hareketi yapıyor (mavi)
Servo Motorlar 5V-1A adaptör ile besleniyor.
Arduino 9V pil ile besleniyor.
S1 anahtarını on konumuna getirince LED1 yanıyor. Sonrasında S2 anahtarını on konumuna getirdiğimde (LED2 on) robot koluna el ile zorlama vasıtasıyla hareket yapıtırılıp, S2 off konumuna getirilince (LED3 on) öğrendiği hareketi yapmasını bekliyorum.
Bağlantı:
-5V Adaptörün +' sı 4 adet servonun Vcc girişine board üzerinden bağlı
-5V Adaptörün -' si 4 adet servonun gnd ucuna board üzerinden bağlı (arduinonun GND si de bağlı bu konuma)
- Servoların bilgi pinleri sırasıyla Digital (6,9,10,11) pinlerine bağlı -PWM
- Servonun içerisinde bulunan potansiyometreden çıkan kablolar ise sırasıyla Analog(0,1,2,3) pinlerine bağlı ******* Servo motor içerisinde bulunan potansiyometre (kendi üzerinden bulunuyor, dışarıdan bağlanmadı) bana konum bilgisini veriyor (testleri yapıldı)
- S1 anahtarının bir ucunda 5V (Arduinonun 5V ve GND sini ayrı bir board üzerine taktım. Oradaki 5V) diğer ucu ise D4 pini ile pull down direncine bağlı (pull down direncinin diğer bacağı toprak)
- S2 anahtarı içinde aynı bağlantı geçerli (D5 pini)
Ancak karşılaştığım sorun şu;
- S1 anahtarını on yaptıktan sonrasında S2 anahtarını da on yapınca hareketi öğretebilmem gerekiyor. Ancak robot kendisini belirli bir konumda kilitliyor ve elimle oynatmama izin vermiyor.
- S2 off yaptıktan sonra öğrendiği hareketi yapması gerekiyor ancak herhangi bir hareket yaptıramadığım için belirli bir hareket yapamıyor.
Bu konuda yardımcı olabilecekler varsa şimdiden çok teşekkür ederim. Yazdığım kodu paylaşayım, inceleyebilirsiniz. Gözümden kaçan bir hata veya eksiklik olabilir (ki ben kodsal bir hatadan şüpheleniyorum)
Kısacası arkadaşlar benim robot kola elimle hareket yaptırmam gerekiyor (iteleyerek, elimle döndererek) ancak servolar hareket yaptırmama izin vermiyorlar. Dönmüyorlar hiçbir yere. Sadece bir konumda tutuyorlar kendilerini.
KOD:
Malzemeler:
4,SG90 Servo, 2-Switch, 3-LED, Robot Kol, 2-Miniboard, Arduino Uno, 9V Pil, 5V Adaptör, Kontrplak çevrimli kutu
Çalışma Mantığı:
Switch1 (S1): Sisteme enerji temin etme
Switch2 (S2): Öğrenme Fonksiyonunu kontrol etme
LED1: Sistem enerjili (yeşil)
LED2: Sistem öğreniyor (sarı)
LED3: Sistem öğrendiği hareketi yapıyor (mavi)
Servo Motorlar 5V-1A adaptör ile besleniyor.
Arduino 9V pil ile besleniyor.
S1 anahtarını on konumuna getirince LED1 yanıyor. Sonrasında S2 anahtarını on konumuna getirdiğimde (LED2 on) robot koluna el ile zorlama vasıtasıyla hareket yapıtırılıp, S2 off konumuna getirilince (LED3 on) öğrendiği hareketi yapmasını bekliyorum.
Bağlantı:
-5V Adaptörün +' sı 4 adet servonun Vcc girişine board üzerinden bağlı
-5V Adaptörün -' si 4 adet servonun gnd ucuna board üzerinden bağlı (arduinonun GND si de bağlı bu konuma)
- Servoların bilgi pinleri sırasıyla Digital (6,9,10,11) pinlerine bağlı -PWM
- Servonun içerisinde bulunan potansiyometreden çıkan kablolar ise sırasıyla Analog(0,1,2,3) pinlerine bağlı ******* Servo motor içerisinde bulunan potansiyometre (kendi üzerinden bulunuyor, dışarıdan bağlanmadı) bana konum bilgisini veriyor (testleri yapıldı)
- S1 anahtarının bir ucunda 5V (Arduinonun 5V ve GND sini ayrı bir board üzerine taktım. Oradaki 5V) diğer ucu ise D4 pini ile pull down direncine bağlı (pull down direncinin diğer bacağı toprak)
- S2 anahtarı içinde aynı bağlantı geçerli (D5 pini)
Ancak karşılaştığım sorun şu;
- S1 anahtarını on yaptıktan sonrasında S2 anahtarını da on yapınca hareketi öğretebilmem gerekiyor. Ancak robot kendisini belirli bir konumda kilitliyor ve elimle oynatmama izin vermiyor.
- S2 off yaptıktan sonra öğrendiği hareketi yapması gerekiyor ancak herhangi bir hareket yaptıramadığım için belirli bir hareket yapamıyor.
Bu konuda yardımcı olabilecekler varsa şimdiden çok teşekkür ederim. Yazdığım kodu paylaşayım, inceleyebilirsiniz. Gözümden kaçan bir hata veya eksiklik olabilir (ki ben kodsal bir hatadan şüpheleniyorum)
Kısacası arkadaşlar benim robot kola elimle hareket yaptırmam gerekiyor (iteleyerek, elimle döndererek) ancak servolar hareket yaptırmama izin vermiyorlar. Dönmüyorlar hiçbir yere. Sadece bir konumda tutuyorlar kendilerini.
KOD:
Kod:
#include <Servo.h> // SERVO KÜTÜPHANESİ EKLENDİ
Servo myservo1; // ALT SERVO
Servo myservo2; // SAĞ SERVO
Servo myservo3; // SOL SERVO
Servo myservo4; // ÜST SERVO
int bekle = 300; // BEKLEME SÜRESİ 300 MİLİSANİYE OLARAK AYARLANDI
int bekle2 = 1000; // BEKLEME SÜRESİ 1 SANİYE OLARAK AYARLANDI
int servodeger1 = A0; // ALT SERVO ENCODER PİNİ A0' A AYARLANDI
int servodeger2 = A1; // SAĞ SERVO ENCODER PİNİ A1' E AYARLANDI
int servodeger3 = A2; // SOL SERVO ENCODER PİNİ A2' E AYARLANDI
int servodeger4 = A3; // ÜST SERVO ENCODER PİNİ A3' E AYARLANDI
int servo1pozisyon[] = {1, 1, 1, 1};
int servo2pozisyon[] = {1, 1, 1, 1};
int servo3pozisyon[] = {1, 1, 1, 1};
int servo4pozisyon[] = {1, 1, 1, 1};
int servo1; // SERVOLAR İÇİN DEĞİŞKENLER TANIMLANDI
int servo2;
int servo3;
int servo4;
int aci1; // SERVO DÖNÜŞ AÇILARINI ALABİLMEK İÇİN DEĞİŞKENLER TANIMLANDI
int aci2;
int aci3;
int aci4;
void setup() {
pinMode(4, INPUT); // SİSTEM ANAHTARI D4 PİNİNE GİRİŞ OLARAK AYARLANDI
pinMode(5, INPUT); // ÖĞRENME ANAHTARI D5 PİNİNE GİRİŞ OLARAK AYARLANDI
pinMode(7, OUTPUT); // YEŞİL LED 7. PİN OLARAK AYARLANDI
pinMode(8, OUTPUT); // SARI LED 8. PİN OLARAK AYARLANDI
pinMode(12, OUTPUT); // MAVİ LED 12. PİN OLARAK AYARLANDI
myservo1.attach(6); // 1. SERVO BİLGİ PİNİ D6' A AYARLANDI
myservo2.attach(9); // 2. SERVO BİLGİ PİNİ D9' A AYARLANDI
myservo3.attach(10); // 3. SERVO BİLGİ PİNİ D10' A AYARLANDI
myservo4.attach(11); // 4. SERVO BİLGİ PİNİ D11' E AYARLANDI
Serial.begin(9600); // SERİ HABERLEŞME BAŞLATILDI
}
void loop() {
System: // GOTO KOMUTU İÇİN ETİKET TANIMLANDI
servo1 = 0;
servo2 = 0;
servo3 = 0;
servo4 = 0;
digitalWrite(6, LOW); // BAŞLANGIÇTA PWM GÖNDERİLMEMESİ HEDEFLENDİ
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
int s1 = digitalRead(4); // SİSTEM ANAHTARI OKUNDU
int s2 = digitalRead(5); // ÖĞRENME ANAHTARI OKUNDU
if (s1 == HIGH) { // SİSTEM ANAHTARI KAPATILDI MI?
digitalWrite(7, HIGH); // YEŞİL LEDİ YAK
if (s2 == HIGH) { // ÖĞRENME ANAHTARI KAPATILDI MI?
digitalWrite(8, HIGH); // SARI LEDİ YAK
digitalWrite(12, LOW); // MAVİ LEDİ SÖNDÜR
servo1 = analogRead(servodeger1); // HER SERVO DEĞİŞKENİ KENDİ ENCODERİNDEN GELEN BİLGİYİ KAYDEDER
aci1 = map(servo1, 0, 1023, 0, 179);
servo2 = analogRead(servodeger2);
aci2 = map(servo2, 0, 1023, 0, 179);
servo3 = analogRead(servodeger3);
aci3 = map(servo3, 0, 1023, 0, 179);
servo4 = analogRead(servodeger4);
aci4 = map(servo4, 0, 1023, 40, 179);
delay(bekle);
switch (s2) { // 4 KONUM BİLGİSİ KAYDEDİLDİ
case 1:
servo1pozisyon[0] = aci1;
servo2pozisyon[0] = aci2;
servo3pozisyon[0] = aci3;
servo4pozisyon[0] = aci4;
break;
case 2:
servo1pozisyon[1] = aci1;
servo2pozisyon[1] = aci2;
servo3pozisyon[1] = aci3;
servo4pozisyon[1] = aci4;
break;
case 3:
servo1pozisyon[2] = aci1;
servo2pozisyon[2] = aci2;
servo3pozisyon[2] = aci3;
servo4pozisyon[2] = aci4;
break;
case 4:
servo1pozisyon[3] = aci1;
servo2pozisyon[3] = aci2;
servo3pozisyon[3] = aci3;
servo4pozisyon[3] = aci4;
break;
}
if (s2 == LOW) { // ÖĞRENME ANAHTARI AÇILDI MI?
for (int i = 0; i < 4; i++) {
digitalWrite(12, HIGH); // MAVİ LED' İ YAK
digitalWrite(8, LOW); // SARI LED' İ SÖNDÜR
myservo1.write(servo1pozisyon[i]); // HER SERVOYA İLGİLİ AÇI DEĞİŞKENLERİ YAZILIR
myservo2.write(servo2pozisyon[i]);
myservo3.write(servo3pozisyon[i]);
myservo4.write(servo4pozisyon[i]);
delay(bekle2);
}
}
else {
goto System;
}
}
else {
digitalWrite(8, LOW);
digitalWrite(12, HIGH);
goto System;
}
}
else if (s1 == LOW) { // SİSTEM ANAHTARI AÇILDI MI?
digitalWrite(7, LOW); // YEŞİL LEDİ SÖNDÜR
digitalWrite(12, LOW); // MAVİ LEDİ SÖNDÜR
digitalWrite(8, LOW); // SARI LEDİ SÖNDÜR
goto System; // System ETİKETİNE GİT
}
}