Adı üstünde, proje Arduino kullanarak, kumanda kontrollü bir iniş takımı yapmak. Fakat burada motor ve servo ekipmanlarından ziyade Arduino ve yazılımı üzerinden gidiyor olacağız. 12.01.2015 tarihi itibarı ile amaç şu şekilde :
- İniş takımınının elektroniğini, Arduino kullanarak kodu ile beraber gerçekleştirmek.
- Mekanik ve elektriksel kısım olarak (genelde) hazır sistemleri kullanmak.
- İniş takımını kumanda üzürinden açmak ve kapatmak.
- Ek olarak bir kapak mekanizması kullanamak.
Mevcut olan en yeni kod, bu ilk mesajda düzenli olarak güncelleniyor olacak. Kodun hangi aşamalardan geçtiğini görmek isteyenlerin konuyu okumaları gerekiyor çunkü burada tekrar yazılamayacak kadar karışık ve uzun.
Güncel Durum
- 12.01.2015 : Servo kontrolü yok. İniş takımı motorları, ACS712 vasıtası akım kontrollü olarak durduruluyor. Belirli bir süre bekleyip işlem yaptıracak olan zamanlayıcı tipi kod öbekleri de koda dahil değil. İniş takımının sadece bir yarısı kodda mevcut.
Retract Project for RCKolik - Version 0.23.4h - Codename "Half of the apple"
- İniş takımınının elektroniğini, Arduino kullanarak kodu ile beraber gerçekleştirmek.
- Mekanik ve elektriksel kısım olarak (genelde) hazır sistemleri kullanmak.
- İniş takımını kumanda üzürinden açmak ve kapatmak.
- Ek olarak bir kapak mekanizması kullanamak.
Mevcut olan en yeni kod, bu ilk mesajda düzenli olarak güncelleniyor olacak. Kodun hangi aşamalardan geçtiğini görmek isteyenlerin konuyu okumaları gerekiyor çunkü burada tekrar yazılamayacak kadar karışık ve uzun.
Güncel Durum
- 12.01.2015 : Servo kontrolü yok. İniş takımı motorları, ACS712 vasıtası akım kontrollü olarak durduruluyor. Belirli bir süre bekleyip işlem yaptıracak olan zamanlayıcı tipi kod öbekleri de koda dahil değil. İniş takımının sadece bir yarısı kodda mevcut.
Retract Project for RCKolik - Version 0.23.4h - Codename "Half of the apple"
Kod:
/* Retract Project for RCKolik
by Zafer SAHIN
License of this example code is TEA-WARE.
modified 11/01/2015 by Zafer SAHIN
Version 0.23.4h - Codename "Half of the apple"
*/
int motor_left[] = {3, 11}; // Arduino pins for controlling left retract motor
int rxPin = 12; // Arduino pin for receiver pin
int curentSensorLeft = 2; // Arduino analog pin for left motor current sensor
int curretValLeft = 512; // Analog reading for 0A current reading from ACS712 sensor
// These values are purely dependent on the current sensor and the load. Tweaked for ACS712 bidirectional current sensor
// and L293D motor drives. Further tweak might be necessary.
int currentLimitLOW = 409; // Current values bigger than 1000mA to the negative direction.
int currentLimitHIGH = 614; // Current values bigger than 1000mA to the positive direction.
int retractLeftState = 0 ; // Variable to hold left retract position, open = 1, closed = -1
unsigned long rxPWMduration; // Variable for reading receiver
void setup() {
pinMode(motor_left[0], OUTPUT);
pinMode(motor_left[1], OUTPUT);
retractLeftStop();
delay(5000);
rxPWMduration = pulseIn(rxPin, HIGH);
while (rxPWMduration < 800) {
delay(1000);
rxPWMduration = pulseIn(rxPin, HIGH);
}
delay(1000);
if (rxPWMduration > 1500) {
retractLeftState = 1;
} else {
retractLeftState = -1;
}
}
void loop() {
rxPWMduration = pulseIn(rxPin, HIGH);
curretValLeft = analogRead(curentSensorLeft);
// This switch position is for opening the retracts
if (rxPWMduration > 1500) {
// Left Retract Operations
if (retractLeftState == 1) { // If we are already in retractState = 1, do NOTHING, stop retract motor.
retractLeftStop();
} else { // If we are not in retractState = 1, because we are switched from another state just yet, open retracts, and sense current to stop.
retractLeftOpen();
if ((curretValLeft < currentLimitLOW) || (curretValLeft > currentLimitHIGH)) {
retractLeftState = 1;
}
}
// This switch position is for closing the retracts
} else {
// Left Retract Operations
if (retractLeftState == -1) { // If we are already in retractState = -1, do NOTHING, stop retract motor.
retractLeftStop();
} else { // If we are not in retractState = -1, because we are switched from another state just yet, open retracts, and sense current to stop.
retractLeftClose();
if ((curretValLeft < currentLimitLOW) || (curretValLeft > currentLimitHIGH)) {
retractLeftState = -1;
}
}
}
}
void retractLeftOpen(){ // Function for opening Left Retract
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
}
void retractLeftClose(){ // Function for closing Left Retract
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
}
void retractLeftStop(){ // Function for stopping Left Retract
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);
}