Styra servon med Arduino och RC mottagare/Transmiter (2 / 2 steg)
Steg 2: Koden
Denna kod är mycket enkel,
i det här exemplet när skevroder minnet är som vänster eller höger 3 servon kommer att flytta från 90 grader (mitten) till 0 grader och respektive 180 grader en efter en annan. Ändra delay() om du vill ändra hastigheten på servon.
Du måste definiera din egen om du vill centrera din servon genom att övervaka värden för mottagaren. Jag definierade mellan 1450 och 1550, eftersom det värde jag övervakas var omkring 1500 för skevroder -> channel2
om ((channel2 > = 1450) & & (channel2 < = 1550))
---RC Servo kontroll---***
***---K. Michalsky / 2015---***
Arduino Pins
Pin7 till channel2 av mottagare
Pin9 att signalen från Servo1
Pin10 till signalen från Servo2
Pin11 till signalen från Servo3
Inkludera Servo bibliotek. Servo biblioteket stöder upp till 12 motorer på de flesta Arduino styrelser och 48 på Arduino Mega.
#include < Servo.h >
Skapa servo objekt för att styra servomotorer
Servo servoMotor1;
Servo servoMotor2;
Servo servoMotor3;
Definiera variabler för placera av servon
int posServo1 = 0;
int posServo2 = 0;
int posServo3 = 0;
Definiera en variabel för kanalen av mottagare som du vill kontrollera servon, i detta fall channel2 (skevroder kanalen från min mottagare)
int channel2;
Koppla varje servo variabel till en PIN-kod
void setup() {
servoMotor1.attach(9); Servo1 kopplade till pin 9
servoMotor2.attach(10); Servo2 kopplad till pinne 10
servoMotor3.attach(11); Servo3 bifogas stift 11
Definiera ingångsstiftet för mottagaren
pinMode (7, ingång);
Serial.BEGIN(9600); Seriell kommunikation för senare uppföljning av kanal signal värde
}
void loop() {
Läs pulsen från Pin7 antingen högt eller lågt
channel2 = pulseIn (7, hög).
Monitor kanalvärdet
Serial.Print ("kanal 2:");
Serial.println(channel2);
Definiera ett intervall av kanalvärdet att centrera servo när minnet av transmiter är centrerad. Detta intervall kan variera beroende på vilken servon och Transmiter du använder. Servon är centrerade i 90 grader
om ((channel2 > = 1450) & & (channel2 < = 1550)) {
posServo1 = 90.
posServo2 = 90.
posServo3 = 90.
servoMotor1.write(posServo1);
servoMotor2.write(posServo2);
servoMotor3.write(posServo3);
}
Om kanalvärdet är större än det högsta värdet av utbud efter
annat if(channel2>1550) {
för (int jag = 90; posServo1 < 180; posServo1 ++) {
servoMotor1.write(posServo1);
Jag = posServo1;
om (jag > = 179) {
för (int j = 90; posServo2 < 180; posServo2 ++) {
servoMotor2.write(posServo2);
j = posServo2;
Delay(10); Dags för servo2 att nå värdet
om (j > = 179) {
för (int j = 90; posServo3 < 180; posServo3 ++) {
servoMotor3.write(posServo3);
j = posServo3;
Delay(10); Dags för servo3 att nå värdet
}
}
}
}
Delay(10); Dags för servo1 att nå värdet
}
}
Om kanalvärdet är mindre än det lägsta värdet för intervallet do efter
annat if(channel2<1450) {
för (int jag = 90; posServo1 > 0; posServo1--) {
servoMotor1.write(posServo1);
Jag = posServo1;
om (jag < = 1) {
för (int j = 90; posServo2 > 0; posServo2--) {
servoMotor2.write(posServo2);
j = posServo2;
Delay(10); Dags för servo2 att nå värdet
om (j < = 1) {
för (int j = 90; posServo3 > 0; posServo3--) {
servoMotor3.write(posServo3);
j = posServo3;
Delay(10); Dags för servo3 att nå värdet
}
}
}
}
Delay(10); Dags för servo1 att nå värdet
}
}
Delay(100); Tid för att övervaka värden
}