Arduino ile Rectract - Iniş Takımı Uygulaması
İlk bastırdığım "KÜP ???"lerin resimlerini hiç göndermeyeyim ben
. Hoş daha ilk baskısını dün yaptık zaten
.
İlk bastırdığım "KÜP ???"lerin resimlerini hiç göndermeyeyim ben
Sümer abi , ABS flament baskılı bir kaç iş gördüm , baya sağlam görünüyor , gerçi senin modeller 10 kilo üzeri olunca , metalden işlenmesi daha mantıklı tabii ki...Sümer Yamaner' Alıntı:Bi kere benim inişlerime dayanacak retractı basacak 3D printer belki NASA'da falan vardır.![]()
Ayrıca benim kafam basmıyor 3D baskı işine. Ben LED yakıp söndürmeye devam edeyim.
![]()
Vay ilginç bir totemmiş abiSümer Yamaner' Alıntı:...... Yarın akşama kadar yazılım chip içinde mayalanacak. Yarın akşam test edeceğim.(Bu da benim totemim işte)!
![]()
int rxPin = 12; //Alıcı sinyali 12 nolu pinde
int motor_l1 = 6; // Sol retract motoru 6 ve 8 nolu pinlerde
int motor_l2 = 8;
int motor_r1 = 2; // Sağ retract motoru 2 ve 4 nolu pinlerde
int motor_r2 = 4;
int sensor_l = 1; // Sol akım sensörü 1 nolu analog girişte
int cur_l = 0; // Sol akım
int sensor_r = 3; // Sağ akım sensörü 3 nolu analog girişte
int cur_r = 0; // Sağ akım
int ret_com = 1; // Retract komutu Açık = 1 Kapalı = 0
int ret_pos = 1; // Aktüel retract pozisyonu Açık = 1, Kapalı = 0
int rxPWM = 0; //Alıcı sinyalini depolayan değişken
int x = 1; //Motor akım kontrolünde kullanılacak değişiken
int mincurl = 0; // Azami akımda sensör değeri.
int mincurr = 0;// Azami akımda sensör değeri.
unsigned long timer; // Timeout timer işlevi için
int mincurpinl = 1; // Sol ayar trimpotu
int mincurpinr = 0; // Sağ ayar trimpotu
void setup()
{
pinMode(motor_l1, OUTPUT);
pinMode(motor_l2, OUTPUT);
pinMode(motor_r1, OUTPUT);
pinMode(motor_r2, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(motor_l1, LOW);
digitalWrite(motor_l2, LOW);
digitalWrite(motor_r1, LOW);
digitalWrite(motor_r2, LOW);
digitalWrite(13, LOW);
rxPWM = pulseIn(rxPin, HIGH, 25000);
while(rxPWM < 800 || rxPWM > 2200) // Burada geçerli bir alıcı sinyali bekliyoruz
{
rxPWM = pulseIn(rxPin, HIGH, 25000);
}
if(rxPWM < 1500)
{
ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
}
else
{
ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
}
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
}
void loop()
{
digitalWrite(motor_l1, LOW);
digitalWrite(motor_l2, LOW);
digitalWrite(motor_r1, LOW);
digitalWrite(motor_r2, LOW);
rxPWM = pulseIn(rxPin, HIGH, 25000); // Kumanda sinyalini oku ve yorumla
if(rxPWM < 1500) // Eğer rxPWM 1500'den küçükse kapat komutu geldi demektir yoksa açık komutu geldi demektir
{
ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
}
else
{
ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
}
if(ret_com == 0 && ret_pos == 1) // Eğer retract açık konumdaysa ve kapat komutu geldiyse retractlar kapatılacak
{
RetractClose();
}
else if(ret_com == 1 && ret_pos == 0) // Eğer retract kapalı konumdaysa ve aç komutu geldiyse retractlar açılacak
{
RetractOpen();
}
}
void RetractOpen() //Retractı açan subroutine
{
digitalWrite(13, HIGH);
digitalWrite(motor_l1, HIGH); // Retract motorları açma yönünde enerjilendirildi
digitalWrite(motor_l2, LOW);
digitalWrite(motor_r1, HIGH); // Retract motorları açma yönünde enerjilendirildi
digitalWrite(motor_r2, LOW);
x = 0;
delay(250);
timer = millis();
while(x < 2)
{
mincurl = analogRead(mincurpinl);
mincurr = analogRead(mincurpinr);
mincurl = 400 + mincurl / 10;
mincurr = 400 + mincurr / 10;
rxPWM = pulseIn(rxPin, HIGH, 25000);
cur_l = analogRead(sensor_l);
cur_r = analogRead(sensor_r);
if(cur_l < mincurl)
{
digitalWrite(motor_l1, LOW);
x = x + 1;
}
if(cur_r < mincurr)
{
digitalWrite(motor_r1, LOW);
x = x + 1;
}
if(rxPWM < 1500)
{
digitalWrite(motor_l1, LOW);
digitalWrite(motor_r1, LOW);
x = 2;
}
if((millis() - timer) > 20000)
{
break;
}
}
digitalWrite(13, LOW);
digitalWrite(motor_l1, LOW);
digitalWrite(motor_r1, LOW);
ret_pos = 1; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}
void RetractClose() //Retractı kapatan subroutine
{
digitalWrite(13, HIGH);
digitalWrite(motor_l1, LOW); // Retract motorları açma yönünde enerjilendirildi
digitalWrite(motor_l2, HIGH);
digitalWrite(motor_r1, LOW); // Retract motorları açma yönünde enerjilendirildi
digitalWrite(motor_r2, HIGH);
x = 0;
delay(250);
timer = millis();
while(x < 2)
{
mincurl = analogRead(mincurpinl);
mincurr = analogRead(mincurpinr);
mincurl = 400 + mincurl / 10;
mincurr = 400 + mincurr / 10;
rxPWM = pulseIn(rxPin, HIGH, 25000);
cur_l = analogRead(sensor_l);
cur_r = analogRead(sensor_r);
if(cur_l < mincurl)
{
digitalWrite(motor_l2, LOW);
x = x + 1;
}
if(cur_r < mincurr)
{
digitalWrite(motor_r2, LOW);
x = x + 1;
}
if(rxPWM >= 1500)
{
digitalWrite(motor_l2, LOW);
digitalWrite(motor_r2, LOW);
x = 2;
}
if((millis() - timer) > 20000)
{
break;
}
}
digitalWrite(13, LOW);
digitalWrite(motor_l2, LOW);
digitalWrite(motor_r2, LOW);
ret_pos = 0; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}
Sümer Yamaner' Alıntı:İmza için aceleye gerek yok...
Bugün üçten sonra yağmur bastırdığı için aceleyle toplandım. Retractları söküp yanıma alacaktım ama olmadı. Retractlar için birkaç farklı yeni motor siparişi vermiştim. Onlar da geldikten sonra daha net kararlar verebileceğim. Önümüzdeki günler havalar berbat. Kendimi baskılı devrelere adayacağım sanırım.Bu arada başka bir şey geldi aklıma. İniş takımı yuvalarına birer microswitch koyarak kapanmayı denetleyebilirim. Açılma için böyle bir mekanizma zor görünüyor. Ama eğer sabit akımlı ve/veya akım sınırlamalı bir devre oluşturabilirsem o durumda sadece süre tutarak retract açabilirim. Kapanma için switch, açılma için süre. Kod da çok basitleşir. Biraz da bu konuda kafa yoralım bakalım.
![]()
Sümer Yamaner' Alıntı:Ver gazı bakalım ne olacak.![]()