RC Model Arçalar İçin Mini Lineer Aktüatör. DIY Mekanik ve Devre Tasarımı
3D baskı için PETG filamentini seçtim. Çünkü PETG, mekanik hareket sırasında daha akışkan bir yapıya sahip. Bu, şaftın çok daha düzgün hareket etmesini sağlıyor.
Şaft ve şaft gövdesini yazdırdıktan sonra, parçaların birbirine uyum sağlaması için 3-4 kez manuel olarak hareket ettirin. Eğer serbestçe hareket etmiyorlarsa, dilimleme yazılımı ayarlarınızda filament akış oranını biraz azaltın. Örneğin, 0.98 yerine 0.95 kullanmayı deneyebilirsiniz.
Şaft ve şaft gövdesini düşük hızda (maksimum 60) yazdırın. Ayrıca katman kalınlığını 0.12 veya 0.16 olarak ayarlamanızı tavsiye ederim.
Lineer Aktuatör Kodu (Arduino Pro Micro İçin):
// ===== PINS =====
#define RC_PIN 3 // PWM input (INT0)
#define FI_PIN 5 // Forward
#define BI_PIN 6 // Backward
// ===== SETTING | AYARLAR =====
#define CENTER 1500
#define DEADZONE 20
#define MIN_PULSE 1000
#define MAX_PULSE 2000
#define SIGNAL_TIMEOUT 100000 // 100ms
#define HIGH_TIMEOUT 3000 // 3ms
#define MIN_SPEED 70 // motorun dönebileceği minimum PWM
// ===== VARIABLES | DEĞİŞKENLER =====
volatile uint32_t riseTime = 0;
volatile uint32_t pulseWidth = 1500;
volatile uint32_t lastSignalTime = 0;
volatile bool signalHigh = false;
// ===== INTERRUPT =====
void pwmInterrupt() {
if (digitalRead(RC_PIN) == HIGH) {
riseTime = micros();
signalHigh = true;
} else {
pulseWidth = micros() - riseTime;
lastSignalTime = micros();
signalHigh = false;
}
}
void setup() {
pinMode(RC_PIN, INPUT);
pinMode(FI_PIN, OUTPUT);
pinMode(BI_PIN, OUTPUT);
motorStop();
attachInterrupt(digitalPinToInterrupt(RC_PIN), pwmInterrupt, CHANGE);
}
void loop() {
uint32_t now = micros();
// ===== FAILSAFE =====
if (signalHigh && (now - riseTime > HIGH_TIMEOUT)) {
motorStop();
return;
}
if (now - lastSignalTime > SIGNAL_TIMEOUT) {
motorStop();
return;
}
uint32_t pwm = pulseWidth;
// ===== FILTER | FİLTRE =====
static uint32_t lastValid = 1500;
if (pwm >= MIN_PULSE && pwm <= MAX_PULSE) {
lastValid = pwm;
} else {
pwm = lastValid;
}
int diff = pwm - CENTER;
// ===== DEADZONE =====
if (abs(diff) < DEADZONE) {
motorStop();
return;
}
// ===== SPEED CALCULATING | HIZ HESAPLAMA =====
int speed = map(abs(diff), DEADZONE, 500, MIN_SPEED, 255);
speed = constrain(speed, 0, 255);
// ===== YÖN + PWM =====
if (diff > 0) {
motorForward(speed);
} else {
motorReverse(speed);
}
}
// ===== MOTOR FUNCTIONS | MOTOR FONKSİYONLARI =====
void motorForward(int speed) {
analogWrite(FI_PIN, speed);
digitalWrite(BI_PIN, LOW);
}
void motorReverse(int speed) {
analogWrite(BI_PIN, speed);
digitalWrite(FI_PIN, LOW);
}
void motorStop() {
digitalWrite(FI_PIN, LOW);
digitalWrite(BI_PIN, LOW);
}
Lineer Actuvatör Devre PDF, Gerber Dosyaları, Arduino Kodu: https://drive.google.com/file/d/1T168OMJgCEb5yzt3M2t_KZCUSwRgONTD/view?usp=sharing
3D PRINTER STL DOSYALARI: https://cults3d.com/:4296738
lineer Actuvatör için Gerekli Malzemeler:
N20 Gear Motor 6V 8500 veya 600 RPM)
Arduino Pro Micro (5V)
TA6586 DC Motor Driver DIP-8 IC
Limit Switch
2.54 Header Pin
PCB Terminal Block Soket (5mm-5.08mm)
100uF Kapasitör
100nF Kapasitör
Tek taraflı bakır PCB levha
2 pin JST soket (Kablolu)
PETG filament
