gear door sequencer

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 24
Geregistreerd: 01 Sep 2013, 13:00

gear door sequencer

Berichtdoor benovitch » 01 Sep 2013, 13:10

Hallo,

Mij even voorstellen, mijn naam is Ben en ik ben bezig aan een RC Jet. Voor deze Jet heb ik een gear/door sequencer nodig. Ik ben er al in geslaagd om een code te schrijven die de deuren en de wielen in de gewenste volgorde laten openen en sluiten bij het verzetten van de switch op mijn zender.
Nu had ik graag nog enkele andere veiligheden ingebouwd maar dat gaat mijn petje te boven.
Ik had graag gewild dat wanneer de Arduino opstart er niets gebeurd met de servo’s of de wielen. Ik wil dus niet dat de wielen plots ingaan wanneer ik mijn toestel opstart en p de grond staat. Kan er zo’n veiligheid in geprogrammeerd worden?
Ook had ik graag gewild dat moest om één of andere reden de switch die de wielen stuurt, op de zender, in een andere positie staat. Lees wielen omhoog tijdens het opstarten op de grond in plaats van wielen uit. Dat de Arduino niets doet totdat de switch terug staat zoals bij het afzetten na een laatste vlucht.

Dit is de code die ik tot hiertoe geschreven heb:

#include <VarSpeedServo.h>




VarSpeedServo ServoWielen;
VarSpeedServo ServoDeur_1;
VarSpeedServo ServoDeur_2;
int ServoIn;
int ServoUp;
int ServoDown;

const int PinServoInput = 8; //aansluiting RX kanaal
const int PinServoWielen = 10; //aansluiting wielen
const int PinServoDeur_1 = 12; //aansluiting deur servo hoofdpoten
const int PinServoDeur_2 = 11; // aansluiting deur servo neuspoot


void setup(){
pinMode(PinServoInput, INPUT);
// Serial.begin(9600);
ServoWielen.attach(PinServoWielen);
ServoDeur_1.attach(PinServoDeur_1);
ServoDeur_2.attach(PinServoDeur_2);
ServoWielen.writeMicroseconds(1000);
ServoDeur_1.slowmove(2000,150);
ServoDeur_2.slowmove(2000,150);
ServoUp = 1600; //wielen omhoog
ServoDown = 1400; //wielen omlaag
delay(50);
}
void loop(){
ServoIn = pulseIn(PinServoInput, HIGH, 21000);


if (ServoIn >= 1600) { // als servo input van RX hoger is of gelijk aan ga naar GearUp
goto WielenOmhoog;
}
else if (ServoIn <= 1400) { // als de servo input van de RX lager is of gelijk aan ga naar GearDown
goto WielenUit;
}
goto EndLoop;


WielenOmhoog:
{

ServoDeur_1.slowmove(1000,50); //wieldeur hoofdpoten openen
if (ServoIn >ServoUp){
delay (2000);
}
ServoWielen.writeMicroseconds(2000); //wielen omhoog
if (ServoIn >ServoUp){
delay (2000);
}
ServoDeur_1.slowmove(2000,50); //wieldeur hoofdpoten dicht
ServoDeur_2.slowmove(1000,50); //wieldeur neuspoot dicht
if (ServoIn <ServoDown){

delay (20);
}

goto EndLoop;
}

WielenUit:
{
ServoDeur_1.slowmove(1000,50); //wieldeur hoofdpoten open
ServoDeur_2.slowmove(2000,50); //wieldeur neuspoot open
if (ServoIn <ServoDown){

delay (2000);
}

ServoWielen.writeMicroseconds(1000); //wielen omlaag

if (ServoIn <ServoDown){

delay (2000);
}
ServoDeur_1.slowmove(2000,50); //wieldeur hoofdpoten dicht
if (ServoIn <ServoDown){

delay (20);
}
goto EndLoop;
}
EndLoop:
ServoUp = ServoIn + 100; // adds 100 to the current servo in value to help detect if it has changed
ServoDown = ServoIn -100;

}



Alle hulp is welkom,mvg,

Ben

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: gear door sequencer

Berichtdoor pjh » 01 Sep 2013, 20:22

Je kunt een ping-sensor onder de romp van het vliegtuig zetten, zodat je weet wanneer de wielen van de grond zijn.
Maar is te zwaar denk ik.

Wanneer je enige input die switch is,
zul je ook de veiligheid via die switch moeten doen.

Zomaar een idee: drie keer van-aan-naar-uit vs. om de knop op scherp te zetten. Dan ga je vliegen en bij nog-een-keer de knop gaat het gestel in.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: gear door sequencer

Berichtdoor nicoverduin » 02 Sep 2013, 08:16

De vraag is, weet jij wanneer je stil staat? Zo ja dan bepaalt dat of de wielen ingeklapt mogen worden. Als je dat niet weet, zou je een PIR sensor kunnen overwegen aan de onderkant. Dat is een Infrarood sensor die bepaalt of er iets binnen de range is. De waarde (analoog) zou je dan kunnen instellen op 1 meter. Dus zodra de sensor iets binnen 1 meter tegenkomt, altijd de wielen neer laten staan. Dan overrule je ahw de switch.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 24
Geregistreerd: 01 Sep 2013, 13:00

Re: gear door sequencer

Berichtdoor benovitch » 02 Sep 2013, 12:39

Zou ik de EEPROM Write functie kunnen toepassen om de laatste staat te onthouden?

Ben

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: gear door sequencer

Berichtdoor nicoverduin » 02 Sep 2013, 16:23

Yep,
Maar is dat voldoende garantie?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 24
Geregistreerd: 01 Sep 2013, 13:00

Re: gear door sequencer

Berichtdoor benovitch » 02 Sep 2013, 18:45

De vraag is, weet jij wanneer je stil staat?


als het toestel op de grond staat kom ik niet aan de switch op de zender om de wielen in te trekken, enkel wanneer het toestel afgebroken wordt na een vliegdag. Anders wordt de switch enkel bediend in vlucht voor ze ofwel in te trekken of uit te laten.

Wanneer de Write EEPROM functie gebruikt wordt voorkomt dit dan ook het ongecontroleerd bewegen van de servo's tijdens het aanzetten van het vliegtuig.

Ben

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: gear door sequencer

Berichtdoor nicoverduin » 02 Sep 2013, 19:11

Ben
Voor dat laatste durf ik dat niet met zekerheid te zeggen. Ik heb wel even de code bekeken en het lijkt op het volgende als er nog geen signaal is

A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method.
The servos are pulsed in the background using the value most recently written using the write() method


Je zou kunnen proberen om :
a) eerst een write uit te voeren naar de servo
b) en dan de pin te attachen.

Dus omdraaien wat je nu doet. In de code gaat hij namelijk bij een attach wel de timer opstarten om te bewegen. Dus als de waarde eerste bekend is en dan pas de feitelijke pin te verbinden,
zou het kunnen werken.

Een andere oorzaak zou kunnen zijn is dat als de pin nog niet bekend is (INPUT of OUTPUT: dat komt pas bij de attach). Er een "zwevende" waarde op de arduino pin komt omdat hij als INPUT standaard is gedefinieerd. En dat zou kunnen leiden tot variaties. Dit zou je kunnen proberen te voorkomen door op de data pin van de servo een 10K weerstand naar GND te hangen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 24
Geregistreerd: 01 Sep 2013, 13:00

Re: gear door sequencer

Berichtdoor benovitch » 02 Sep 2013, 20:00

Blijft hetzelfde, heb eerst de write gedaan daarna de attach. Heb zelfs pauzes tussen de verschillende servo's gezet.

Code: Alles selecteren
#include <VarSpeedServo.h>




VarSpeedServo ServoWielen;
VarSpeedServo ServoDeur_1;
VarSpeedServo ServoDeur_2;
int ServoIn;
int ServoUp;
int ServoDown;

const int PinServoInput = 8;          //aansluiting RX kanaal
const int PinServoWielen = 10;        //aansluiting wielen
const int PinServoDeur_1 = 12;        //aansluiting deur servo hoofdpoten
const int PinServoDeur_2 = 11;        // aansluiting deur servo neuspoot


void setup(){
  pinMode(PinServoInput, INPUT);
  // Serial.begin(9600);
 
  ServoDeur_1.slowmove(2000,50);
  delay(500);
  ServoDeur_1.attach(PinServoDeur_1);
  ServoDeur_2.slowmove(2000,  50);
  delay(500);
  ServoDeur_2.attach(PinServoDeur_2);
  ServoWielen.writeMicroseconds(1000);
  delay (500);
  ServoWielen.attach(PinServoWielen);
 
 
 delay(3000);
 
 
 
 
  ServoUp = 1600;                    //wielen omhoog
  ServoDown = 1400;                  //wielen omlaag
  delay(50);
}
  void loop(){
    ServoIn = pulseIn(PinServoInput, HIGH, 21000);
 
   
     if (ServoIn >= 1600) {                    // als servo input van RX hoger is of gelijk aan ga naar GearUp
    goto WielenOmhoog;
  }
  else if (ServoIn <= 1400) {                 // als de servo input van de RX lager is of gelijk aan ga naar GearDown
    goto WielenUit;
  }
  goto EndLoop;
 
 
 WielenOmhoog:
 {
   
   ServoDeur_1.slowmove(1000,50);                //wieldeur hoofdpoten openen
   if (ServoIn >ServoUp){
   delay (2000);
   }
   ServoWielen.writeMicroseconds(2000);          //wielen omhoog
    if (ServoIn >ServoUp){
   delay (2000);
   }
   ServoDeur_1.slowmove(2000,50);                //wieldeur hoofdpoten dicht
   ServoDeur_2.slowmove(1000,50);                //wieldeur neuspoot dicht
   if (ServoIn <ServoDown){
   
   delay (20);
   }
   
    goto EndLoop;
 }
 
 WielenUit:
 {
   ServoDeur_1.slowmove(1000,50);                //wieldeur hoofdpoten open
   ServoDeur_2.slowmove(2000,50);                //wieldeur neuspoot open
   if (ServoIn <ServoDown){
   
   delay (2000);
   }
   
   ServoWielen.writeMicroseconds(1000);          //wielen omlaag
   
   if (ServoIn <ServoDown){
   
   delay (2000);
   }
   ServoDeur_1.slowmove(2000,50);                //wieldeur hoofdpoten dicht
   if (ServoIn <ServoDown){
   
   delay (20);
   }
   goto EndLoop;
 }
EndLoop:
  ServoUp = ServoIn + 100;            // adds 100 to the current servo in value to help detect if it has changed
  ServoDown = ServoIn -100;
 
  }

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: gear door sequencer

Berichtdoor nicoverduin » 02 Sep 2013, 20:22

Delays hebben weinig zin. Als het goed is werkt hij op interrupt basis en loopt hij gewoon door.
Kan jij aangeven wanneer hij random doet en wanneer hij stabiel wordt?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 24
Geregistreerd: 01 Sep 2013, 13:00

Re: gear door sequencer

Berichtdoor benovitch » 02 Sep 2013, 20:46

Hij doet enkel raar in het begin bij het opstarten. Eens dat dit voorbij is en ik in het Loop gedeelte kom werkt alles perfect. Wat ik wil is dat alles blijft staan zoals vlak voor het moment ik de arduino uitschakel.

Ben

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten