Bouwverslag Gry Maritha

Discussie in 'Bouwverslagen - Schepen' gestart door JaFa, 7 mei 2013.

  1. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    goed bezig JaFa
     
  2. cor_k

    cor_k

    Lid geworden:
    16 okt 2017
    Berichten:
    41
    Locatie:
    Rotterdam e.o.
    Ik blijf me iedere keer weer verbazen wat je allemaal voor elkaar krijgt. Was je ook nog van plan een water aansluiten te maken in de kluisgaten, zodat je de ankerketting en het anker kan spoelen als ze weer opgehaald worden? (Misschien de volgende uitdaging)
     
  3. pentip

    pentip

    Lid geworden:
    17 apr 2006
    Berichten:
    500
    Locatie:
    Gennep
    Je weet 'm wel te voeden.... :)

    wat een geweldige combinatie van modelbouw en computer-electronica, echt prachtig!

    alleen al die start procedure van de motoren, wat een genot! Ongetwijfeld kijk je dan naar nog meer details. Zoals de manier waarop de rook uitgestoten wordt. Dat is in het begin anders als in bedrijf. In bedrijf heb je van die hitte uitstraling en iets verderop pas rook.

    Knap om met 1:1 materialen (rook, water) toch een schaalmodel tot in detail tot leven te wekken, inspirerend.
     
    Laatst bewerkt: 8 nov 2017
  4. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Wel er is niet echt heel veel gebeurd deze week, misschien dit weekend, wel heb ik alle Failsaves gecode, wat wil dit eigenlijk zeggen,

    Er zitten 2 grote cargo luiken midden op de boot, maar deze kunnen geblokkeerd worden door respectievelijk, het zijluik dit dan voor het voorste deel van de cargo opening zijnde de FrontHatch.

    En het wandelplatform met cabin van de grote kraan, deze blokkeert het achterluik in de kraan's normale positie.

    Vooraan:

    - Dus als het zijluik open is mag het voorluik niet openen, als het voorluik open is mag het zijluik niet openen.
    - Als de lift omhoog staat mag het zijluik niet dicht, en het voorluik ook niet enz... enz...

    Achteraan:

    - Als de kraan in de normale positie staat mag het luik niet openen of sluiten,

    (als het luik open of dicht is mag ze wel draaien) deze laatste stap moet ik nog maken, dan moet de ESC van de draairichting mee op de arduino om in de Failsave te worden gezet.

    Dit zegt niet veel maar dit zal er wel voor zorgen dat de luiken elkaar niet raken of stuktrekken, evenals de kraan en lift...

    Genoeg gezeverd hier is de code, misschien hebben jullie er wat aan, je kan er stappen uit gebruiken voor soortgelijke functies,

    Het zou kunnen dat ik de servo verplaatsing nog verander van "graden" naar "microseconde" dan is er nog veel trager maar vooral veel "smoother" beweging mogelijk, al is die wel ok zo, misschien gewoon eens om te testen.

    Code:
    /* Gry Maritha Hatch speed regulation MULTIPROP, Fronthatch, Rearhatch, Sidehatch, Lift + lift failsave and Anchors versie 3.2.0 om 17:24
     * Failsave on Fronthatch vs Sidehatch / Sidehatch vs Lift / Rearhatch VS Heila Crane
     * 
     */
    
    
    #include <VarSpeedServo.h>       
    
    #define RCmax      2200         
    #define RCmid      1500           
    #define RCmin       800         
    #define TimeOut  260000         
    
    #define Closepos1           165  // Fronthatch 7 165
    #define Openpos1              7  // Open positie
    #define Savepos1            165  //
    #define Speed1                1  // =57s
    
    #define Closepos2            27  // RearHatch 27 165
    #define Openpos2            165  // Open positie
    #define Savepos2             27  //
    #define Speed2                1  // =54s
    
    #define Closepos3           140  // Sidehatch 28 135
    #define Openpos3             30  //
    #define Savepos3Lift         40  //
    #define Savepos3FrontHatch  140  //
    #define Speed3                2  // = 22s
    
    #define Uppos4               37  // Lift
    #define Midpos4              60  // Lift 37 60 135
    #define Downpos4            135  //
    #define Speed4                3  // 5 = 9s 3 = 14s
    
    #define Uppos5               42  // AnchorLeft
    #define Hangpos5             47  // Juist buiten de anker kluis hangend
    #define Downpos5            140  //
    #define Speeddown5          255  // vallen
    #define Speedup5              1  // ophalen
    
    #define Uppos6              153  // AnchorRight
    #define Hangpos6            150  //
    #define Downpos6             60  //
    #define Speeddown6          255  //
    #define Speedup6              1  //
    
    #define RCport1               4  // FRONTHATCH 4MP naar D4
    #define RCport2               5  // REARHATCH 5MP naar D3
    #define RCport3               2  // SIDEHATCH
    #define RCport4               3  //
    #define RCport5               6  // ANCHOR LEFT
    #define RCport6               7  // ANCHOR RIGHT
    
    #define SNDoutput1           14  // FRONTHATCH (A0 = D14 ) = SND naar USM EXT1
    #define SNDoutput2           15  // REARRHATCH (A1 = D15) = SND naar USM EXT2
    #define SNDoutput3           16  // SIDEHATCH SND = USM EXT3
    #define SNDoutput4           17  //
    
    #define CraneInput           18  // (A3144 magneet = LOW )
    
    VarSpeedServo Fronthatch;       
    VarSpeedServo Rearhatch;       
    VarSpeedServo Sidehatch;         
    VarSpeedServo Lift;             
    VarSpeedServo Anchorleft;       
    VarSpeedServo Anchorright;       
    
    int RCpulse1;                   
    int RCpulse2;
    int RCpulse3;
    int RCpulse4;
    int RCpulse5;
    int RCpulse6;
    
    int Cranepos;
    
    int Pos1;   
    int Pos2;
    int Pos3;
    int Pos4;
    int Pos5;
    int Pos6;
    
    int Speed5;
    int Speed6;
    
    int Pos1Read;
    int Pos2Read;
    int Pos3Read;
    int Pos4Read;
    int Pos5Read;
    int Pos6Read;
    
    
    
      void setup()
    {
    
    // for (int Smoothning = 0; Smoothning < Smoothfactor; Smoothning++){Smoothfactor = 0;}  // proberen de map te stabilizeren
    
      Pos1 = Closepos1;      // Start waarde voor servo positie FrontHatch (dicht)
      Pos2 = Closepos2;      // Start waarde voor servo positie Rearhatch (dicht)
      Pos3 = Closepos3;      // Start waarde voor servo positie Sidehatch (dicht)
      Pos4 = Downpos4;       // Start waarde voor servo positie Lift  (onder)
      Pos5 = Hangpos5;       // Start waarde voor servo positie AnchorLeft  (hangen)
      Pos6 = Uppos6;         // Start waarde voor servo positie AnchorRight  (op)
    
      Pos1Read = Openpos1;   // FrontHatch  Hier geven we de initiele waarden van de positie read aan,
      Pos2Read = Openpos2;   // RearHatch
      Pos3Read = Openpos3;   // SideHatch
    
      Speed5 = Speedup5;     // De ankersnelheid
      Speed6 = Speeddown6;   //
    
      Fronthatch.attach   (8);                    //plaats de servo op pin 8
      Fronthatch.write(Pos1,Speed1,false);        // deze regel zorgt ervoor dat tijdens de start de servo naar de gewenste positie gaat of blijft op deze postitie en niet centered
    
      Rearhatch.attach    (9);   
      Rearhatch.write(Pos2,Speed2,false);
    
      Sidehatch.attach   (10);   
      Sidehatch.write(Pos3,Speed3,false);
    
      Lift.attach        (11);
      Lift.write(Pos4,Speed4,false);
    
      Anchorleft.attach  (12);
      Anchorleft.write(Pos5,Speed5,false);
    
      Anchorright.attach (13);
      Anchorright.write(Pos6,Speed6,false);
    
      pinMode(SNDoutput1, OUTPUT);
      pinMode(SNDoutput2, OUTPUT);
      pinMode(SNDoutput3, OUTPUT);
      pinMode(SNDoutput4, OUTPUT);           // nog niet gebruikt
    
      pinMode(CraneInput, INPUT);            // De A3144 van de kraan is input
     
      digitalWrite(SNDoutput1, HIGH);        // omdat de USM de neutraal of 0 schakeld zetten we de uitgang hoog dit is 5v
      digitalWrite(SNDoutput2, HIGH);
      digitalWrite(SNDoutput3, HIGH);
      digitalWrite(SNDoutput4, HIGH);
    
    // Serial.begin(9600);
    
    }
    
      void RCread(){ // hier worden de RC inputs ingelezen
      RCpulse1 = pulseIn(RCport1, HIGH, TimeOut); 
      RCpulse2 = pulseIn(RCport2, HIGH, TimeOut); 
      RCpulse3 = pulseIn(RCport3, HIGH, TimeOut);
      RCpulse4 = pulseIn(RCport4, HIGH, TimeOut);
      RCpulse5 = pulseIn(RCport5, HIGH, TimeOut);
      RCpulse6 = pulseIn(RCport6, HIGH, TimeOut);
    
      Cranepos = digitalRead(CraneInput);         
     
      }
    
       void loop()
      {
        RCread(); // Ga naar RCread, om de RC inputs in te lezen.
      
        if(RCpulse1 > RCmin && RCpulse1 < RCmax){
          
          if(Pos3Read >= Savepos3FrontHatch){                                                     
            if(RCpulse1 > RCmid + 250){Pos1 = Openpos1; digitalWrite(SNDoutput1, LOW);}                 
            else if(RCpulse1 < RCmid - 250){Pos1 = Closepos1; digitalWrite(SNDoutput1, LOW);}
            else {Pos1 = map(RCpulse1, (RCmid +249 ), (RCmid - 249), Openpos1, Closepos1); digitalWrite(SNDoutput1, HIGH);}}                                               
          else {Pos1 = Closepos1;} 
    
          if (Cranepos == HIGH){                           
            if(RCpulse2 > RCmid + 200){Pos2 = Openpos2; digitalWrite(SNDoutput2, LOW);}                   
            else if(RCpulse2 < RCmid - 200){Pos2 = Closepos2;digitalWrite(SNDoutput2, LOW);}
            else {digitalWrite(SNDoutput2, HIGH);}}
          else {Pos2 = Closepos2;}
    
          if(Pos1Read == Closepos1){                                                                     
            if(RCpulse3 > RCmid + 200){Pos3 = Closepos3;digitalWrite(SNDoutput3, LOW);}                 
            else if(RCpulse3 < RCmid - 200){Pos3 = Openpos3;digitalWrite(SNDoutput3, LOW);}}
          else {Pos3 = Closepos3;}
    
                if(Pos3Read <= Savepos3Lift){                                                               
            if(RCpulse4 < RCmid - 100){Pos4 = Uppos4;}
            else if(RCpulse4 > RCmid + 100){Pos4 = Downpos4;}
            else {Pos4 = Midpos4;}}
          if (Pos3Read > Savepos3Lift){Pos4 = Downpos4;}
    
          if(RCpulse5 > RCmid + 100){Pos5 = Uppos5; Speed5 = Speedup5;}                                   
          else if(RCpulse5 < RCmid + 100 && RCpulse5 > RCmid - 50){Pos5 = Hangpos5; Speed5 = Speedup5;} 
          else if(RCpulse5 < RCmid - 250){Pos5 = Downpos5; Speed5 = Speeddown5;}
          else{Pos5 = map(RCpulse5, (RCmid -50 ), (RCmid - 250), Hangpos5, Downpos5); Speed5 = Speedup5;} 
     
          if(RCpulse6 > RCmid + 100){Pos6 = Uppos6; Speed6 = Speedup6;} 
          else if(RCpulse6 < RCmid + 100 && RCpulse6 > RCmid - 50){Pos6 = Hangpos6; Speed6 = Speedup6;}   
          else if(RCpulse6 < RCmid - 250){Pos6 = Downpos6; Speed6 = Speeddown6;}
          else{Pos6 = map(RCpulse6, (RCmid -50 ), (RCmid - 250), Hangpos6, Downpos6); Speed6 = Speedup6;}
      
    
    //Serial.print("RCpulse5 = "); // hiermee kan je de pulses meten en tonen als het bord is aangesloten op de seriele monitor.
    //Serial.println(RCpulse5);
    //delay(1000);
    
     
        }
    
        Fronthatch.write(Pos1,Speed1,false);             // laat de servo naar de variabele 'pos1' gaan
        Rearhatch.write(Pos2,Speed2,false);             
        Sidehatch.write(Pos3,Speed3,false);
        Lift.write(Pos4,Speed4,false);     
        Anchorleft.write(Pos5,Speed5,false);
        Anchorright.write(Pos6,Speed6,false);             
    
        Pos1Read = Fronthatch.read();                     // lees de positie van de servo
        Pos2Read = Rearhatch.read();                     
        Pos3Read = Sidehatch.read();                     
     
    
      }
    Nu ik eigenlijk toch wat in die code denk, overweeg ik om zowel de bewegingen als controle van beide kranen over te brengen naar arduino,
    dit kan niet meer op deze omdat er al 6 servo's 1 sensor en 4 analoge uitgangen worden gebruikt.

    Voor beide kranen heb ik 5+3 kanalen dus 16 digitale (PPM) poorten nodig ik denk dat ik voor de lees functies het ook bij (PPM) kan houden en niet naar (PWM) moet gaan, het probleem wordt het aantal beschikbare poorten ik moet eens kijken of ik die analoge poorten (8) kan gebruiken als digitaal anders kom ik er niet ik denk dat ik maar 13 digitale heb...

    Hier gaat het wat van afhangen, ik heb weinig zin om 2 extra Arduino's in te bouwen dus het moet maar lukken met deze 2 en niet 3 nu dat is echt nog wel toekomst muziek...
     
  5. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    Lekker bezig Jan!

    Betreft je vraag, over hoeveel digitale ingangen je maximaal op een Nano hebt:
    nano.jpg
    Alle (donker)Paarse blokken met nummers, geven het aantal digitale poorten aan.
    Dit zijn er dus maximaal 20, als je die RX & TX pinnen ook meerekent (D0 en D1).
     
  6. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Hey, fijn je weer te horen!

    Ok dus als ik het goed heb waarschijnlijk dan 18, we hebben de Rx en Tx al eens getest en voor welke reden dan ook wil die weinig tot niets doen...

    Omdat ik een Failsave nodig heb op het draaien van de Heila kraan, (deze mag niet openen als het achterste luik dicht is en de kraan in de "foute" positie staat) verhuist deze sturing naar arduino 1.

    Misschien probeer ik ook eens de "Boom" en de winch hier op te krijgen, ik moet wel 2 analoog pinnen overhouden voor geluid naar de USM te induceren.
    (Misschien lukt dit wel met de Rx en Tx pin...)

    Een kleine optelsom geeft mij 2 luiken, Lift & zijluik, 2 ankers = 12 in/outputs, dan nog 3 richtingen voor de Heila = 6 inputs en 2 USM uitgangen een totaal van 20... En nu maar hopen dat dit ook daadwerkelijk lukt, dan zou ik de Arduino voor de Palfinger uit de vergelijking kunnen houden. deze staat toch ver naar achter en misschien is het gewoon beter dat dat apart gebeurd.

    Mocht dit niet lukken ga ik voor het volgende, de Arduino 1 heeft de draai richting van de Heila, de Boom en Winch zitten op Arduino 2 samen met de 5 Palfinger functies, totaal dan 14 en 4 USM outputs dus 18...

    Ik hoop dat ik dan de USM kan aansturen door 2 Arduino's door er diodes tussen te plaatsen...

    Maar eerst proberen we systeem 1...

    (waarom dit met de Arduino aansturen, wel hierdoor kan er geluid aan beweging worden toegevoegd (hopelijk) (hiervoor wil ik de "servoRead" functie gebruiken)

    To Be Continued...
     
  7. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Ok de voorste luiken werken zoals het moet nu, met een "veiligheids-"envelop" voorbij een bepaalde waarden van het ander luik gaan ze weer dicht, maar als ik eerlijk ben is het wel gewoon mooier dat ze gewoon niet opengaan, dus er zit een kans in dat ik de luiken enkel zal laten bewegen als de andere gewoon dicht zijn. Maar natuurlijk de huidige optie is wel meer "Hightech"... pff moeilijke keuze...

    Nu de kraan en het achterluik ik heb maar een drukschakelaar genomen om de Hall sensor te simuleren, gebruikt wordt de A3144, deze koste me maar 0,53 cent (wel 5 weken wachten) dus daar kan je het wel voor doen niet? :koud: (nog een 10k R er tussen om duidelijk verschil te kunnen meten en dan zou dat moeten werken).

    Ik ga het magnetisch veld opwekken met een flex-magneetstrip dan is de "envelop" van de kraan wel erg makkelijk te maken, kleuterklas knip en plak werk :yes: (ongeveer mijn niveau dus:p).

    Nu eens kijken of ik het klaar krijg, idee: Als het luik dicht is en de kraan staat erover mag het luik niet opengaan!

    dan het volgende is: als het luik niet open is of niet dicht is, mag de kraan niet bewegen in de overstaande positie.

    De Hall sensor geeft een 0 (LOW) waarde als er een magneet in de buurt is dus als de kraan in het magneetveld is, mag het luik niet open, is het luik niet volledig open of dicht, mag de kraan niet meer bewegen van zodra de Hall sensor LOW detecteert.

    Het groene is de bedoeling dus, nu nog eens proberen dit in een werkend geheel te krijgen... Waarschijnlijk zijn er wel heel wat modelbouwers met een soortgelijk probleem, misschien kunnen jullie iets met deze info...
     
  8. Zeiler

    Zeiler

    Lid geworden:
    28 dec 2012
    Berichten:
    783
    Locatie:
    Hilversum
    Ongelooflijk hoeveel techniek je in zo'n model kwijt kan en wat een programmeer tijd er allemaal moet in zitten. Wat heeft je meer tijd gekost? De mechanica of de elektronica? Veel succes met de laatste loodjes, volgens mij ben je al een heel eind!
     
  9. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    Hoi Jan,

    Je hebt voor je Hall-Effect sensor geen extra 10K weerstand nodig, daar je gebruik kunt maken van die interne Pull-Up weerstand van de Arduino.
    Hier de DataSheet.
    Mochten die 5 weken te lang gaan duren, hier een winkel in NL die ze ook voorradig heeft: Klik Hier
     
  10. pentip

    pentip

    Lid geworden:
    17 apr 2006
    Berichten:
    500
    Locatie:
    Gennep
    Heb je hier iets aan? https://forum.arduino.cc/index.php?topic=87213.0

    Ik lees het zo dat de arduino bij startup de servoposities gaat vaststellen en dat er manieren zijn om dat te voorkomen door de laatste positie als vaste waarde aan te nemen.
    moet je wel zorgen dat die laatste positie gerealiseerd wordt bij het afsluiten van het programma.
    EDIT: elders lees ik dat het de library is die dat vaststellen doet. En daarin zou je dat uit moeten kunnen zetten. let wel dat de positie wel van groot belang is voordat de boel gaat bewegen. Het gaat er alleen om dat het niet bij het opstarten gedaan wordt.

    Of misschien weggeschreven wordt bij het afsluiten naar genoemde eeprom. of misschien is er een schakelaartje ergens die uitgelezen kan worden (dicht=luik dicht, open= luik niet dicht dus positie bepalen (luik kan immers ook half open gebeleven zijn na een storing)

    Eigenlijk moet de arduino uitgaan van iets (bijvoorbeeld: dicht) maar vervolgens altijd bij een eerste commando tot beweging eerst even vaststellen waar de boel staat (wat ie nu dus bij startup doet). Is ie dan opgestart met open klep ipv dicht dan merkt ie dat dus bij het commando 'open' als ie eerst actuele positie vaststelt.

    sorry als je dit allemaal al geprobeerd had.
     
    Laatst bewerkt: 12 nov 2017
  11. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Hey Frank, bedankt voor het meedenken dat wordt zeer zeker gewaardeerd,
    Zoals je wellicht had gelezen is dit een vrij groot probleem, vooral bij dit model waar de middenstand van de servo's eigenlijk wat problemen veroorzaakt tijdens en aantal conflicten,
    1 van deze is het achterluik, ik zal er steeds moeten voor zorgen dat de kraan niet over het luik staat alvorens een opstart anders zal er iets het begeven vrees ik.
    Het voorluik en zijluik raken elkaar net niet (4mm) de lift in het zijluik heeft ook 5mm speling.

    Nu als dit kan worden opgelost zou ik erg blij zijn...
    ik gebruik niet de standaard bibliotheek, maar de VarServoSpeed, deze geeft veel meer vrijheid op gebied van servosnelheid, en het probleem is hier als ik de basis positie zijnde 1500ms aanpas ik sommige servo's heb die naar het begin (toe) lopen en andere naar het einde (open)... niet echt een oplossing.
    De positie vastleggen in het begin is reeds geprobeerd maar werkt tot op heden niet, als ook de stroom laten naijlen op het signaal, al was hier het resultaat wel verschillend, bij de positieve onderbreking was alles normaal bij de negatieve "sprong" de servo maar halfweg duidelijk beter maar nog niet ok...

    Nu vooraleer ik hier terug aan begin ga ik eerst eens kijken of ik ik al de gewenste functies in orde krijg, ondertussen denk ik dat de fouten uit mijn Hall sensor meting zijn.

    1 van de functies die ik nog wilde verwezenlijken was het geluid van de HydroJacks van de grote heila kraan via de arduino naar de USM te route...

    Maar door dat de Multi prop en de Arduino samen niet heel stabiel werken voor een gewone doorlus functie gaat dat niet lukken.

    Een forum lid ging eens kijken of dit met een PIC was op te lossen, nu hierin ben ik nog niet helemaal thuis dus laat ik hem maar doen ;-) (waarvoor dank!)

    Ik vrees echter dat de komende weken zullen worden geconsumeerd door het werk...
     
  12. pentip

    pentip

    Lid geworden:
    17 apr 2006
    Berichten:
    500
    Locatie:
    Gennep
    Ja werken kost erg veel vrije tijd.

    ik moet herstarten met de arduino maar kan me herinneren dat mij hetzelfde opviel met die opstart 'schrikbeweging' en dat vind ik niks. Ziet er gewoon raar uit als je zo moet opstarten. Dus ik zal m'n ervaringen posten hier en jouw library ook gebruiken om te zien waar mijn schip strand... heu, dat was toevallig.
     
  13. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
  14. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Hey Marten & Frank, deze regel in de lib was mij nieuw... al meen ik mij toch idd iets te herinneren dat je het ooit hebt aangehaald...

    Nu als we deze lib aanpassen ik zou zeggen gewoon de regel verwijderen en de lib als "non standaard" lib gebruiken dan is ons probleem toch opgelost of zie ik dat nu weer veel te simpel?

    Ik denk dat veel modelbouwers hier veel meer mee zijn...

    Eventueel dat je een default opstart per servo in je eigen sketch moet zetten dan laat je ze starten waar je wil...

    Nu ik voel me wat te "groen" om een lib te herwerken maar Maarten weet hier zeker raad mee. Niet Maarten ;)?

    Ik kijk straks de lib eens na (tijdens het werk:koud:)
     
  15. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    Nou ja, Lib-lezen is wel even wat anders dan Liplezen ! :hammer:
    De regel weghalen kan meerdere consequenties hebben, daar je ook iets aan een index toevoegt.
    Wellicht is het al voldoende, om die DEFAULT_PULSE_WIDTH te veranderen naar waarde 0. (in het bestandsdeel VarSpeedServo.h)
    Met een pulslengte van 0, zou dit moeten resulteren op geen puls!

    Om te testen of dat dit werkt, maak een nieuwe sketch met een enkele servo VarSpeedServo.servo1; en zet alleen in de setup servo1.attach (10); , verder geen waardes waar de servo moet zijn.
    Ook in de loop geef je verder geen waardes op.
    Hooguit geef je een waarde toe, als je een digitale pin met een schakelaar activeert.

    Ik zal dit deze week ook eens testen en laat je weten wat er gebeurt.
     
  16. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    @JaFa
    Ik heb wat tests gedaan en die 1500 naar 0 zetten is zeker geen optie!
    Wel heb ik gemerkt, dat zodra je een servoslow functie tijdens je setup gebruikt, dat hij dan vanaf die 1500 refereert.
    Oftewel, als je geen servoslow toepast, heb je geen hinder meer van die 1500 waarde.
    Code:
      Rearhatch.attach    (9);  
      Rearhatch.write(Pos2);
    Er is wel een optie om dit ook in de library te doen, echter is dit niet efficient.
    Daar als je een extra servo er bijplaatst, dien je deze weer handmatig te updaten en omrekenen naar MicroSeconds!
    https://github.com/netlabtoolkit/VarSpeedServo/blob/master/VarSpeedServo.cpp#L300
    Code:
    VarSpeedServo::VarSpeedServo()
    {
    if( ServoCount < MAX_SERVOS) {
    this->servoIndex = ServoCount++; // assign a servo index to this instance
      servos[servoIndex].ticks = usToTicks(1100);   // store new start servo1
      servos[servoIndex].ticks = usToTicks(1200);   // store new start servo2
      servos[servoIndex].ticks = usToTicks(1300);   // store new start servo3
      servos[servoIndex].ticks = usToTicks(1400);   // store new start servo4
      servos[servoIndex].ticks = usToTicks(1500);   // store new start servo5
      servos[servoIndex].ticks = usToTicks(1600);   // store new start servo6
    this->curSeqPosition = 0;
    this->curSequence = initSeq;
    }
    else
    this->servoIndex = INVALID_SERVO ; // too many servos
    }
    Ik heb bovenstaand voor totaal 6 servo's een eigen opstart waarde gegeven.
    Echter doet wat ik eerder toonde hetzelfde, alleen dan zonder enige aanpassingen in de library:
    Code:
      Rearhatch.attach    (9);   
      Rearhatch.write(Pos2);
     
  17. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Ok lees ik goed?
    Als je de bestaande servo functie gebruikt springt hij niet, maar heeft deze een vertragingsmogelijkheid?

    #anders "attach" ik en schrijf de begin positie met de gewone servo functie, en de vertraagde met de VarSpeedServo... ;} // kan dit?

    Ondertussen heb ik een Hall sensor en Arduino relais, (hier in India hebben ze alles :koud:) nu nog thuis krijgen...

    De Lib aanpassen zie ik anders ook niet echt als een probleem zodra alle functie's werken zoals moet, dat is dan toch ook maar eenmalig...

    Nu de 3 ESC's gaan uit de Arduino en ik moet enkel een extra relais er tussen zetten, deze zal ook op de hall sensor werken en de rotatie van de kraan onderbreken als het luik niet volledig dicht of volledig open is, het is te zeggen het zal niet mogelijk zijn om in de conflict te komen, de andere draairichting blijft mogelijk

    De hall en de relais gaan dus gewoon digitaal gestuurd worden, (met " ESC's zou dit analoog zijn)

    Maar nu schiet mij nog iets te binnen, we hebben enkel de ESC's getest met de VarSpeed functie niet met gewone functie denk ik,
    misschien kan het dan toch binnen de arduino mocht deze de ESC veel gevoeliger kunnen sturen. Dat moet ik toch ook eens testen...

    Waarschijnlijk zaterdag avond werk eerder ben ik niet thuis...

    Kan je even kijken naar mijn "oranje" vragen? Want in het 2de geval zou alles zijn opgelost... :koud:

    Ik wordt er zowaar blij van!!!:yes:
     
  18. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    Hoi Jan,

    Die normale servo functie zal geen verbeteringen geven, daar er nu eenmaal veel gebeurt.

    Hier jouw huidige setup:
    Code:
      void setup()
    {
    
    
      Pos1 = Closepos1;      // Start waarde voor servo positie FrontHatch (dicht)
      Pos2 = Closepos2;      // Start waarde voor servo positie Rearhatch (dicht)
      Pos3 = Closepos3;      // Start waarde voor servo positie Sidehatch (dicht)
      Pos4 = Downpos4;       // Start waarde voor servo positie Lift  (onder)
      Pos5 = Hangpos5;       // Start waarde voor servo positie AnchorLeft  (hangen)
      Pos6 = Hangpos6;       // Start waarde voor servo positie AnchorRight  (op)
      Pos7 = Midpos7; 
      Pos8 = Midpos8;
     
      Pos1Read = Openpos1;   // FrontHatch  Hier geven we de initiele waarden van de positie read aan, deze wordt naderhand
      Pos2Read = Openpos2;   // RearHatch
      Pos3Read = Openpos3;   // SideHatch
     
    
      Speed5 = Speedup5;     // De ankersnelheid
      Speed6 = Speeddown6;   // Idem
    
      Fronthatch.attach   (10);    //plaats de servo op pin 10
      Fronthatch.write(Pos1,Speed1,false); // deze regel zorgt ervoor dat tijdens de start de servo naar de gewenste positie gaat of blijft op deze postitie en niet centered
    
      Rearhatch.attach    (11);    //plaats de servo op pin 11...
      Rearhatch.write(Pos2,Speed2,false);
    
      Sidehatch.attach    (12);   
      Sidehatch.write(Pos3,Speed3,false);
    
      Lift.attach         (13);
      Lift.write(Pos4,Speed4,false);
    
      Anchorleft.attach   (14);
      Anchorleft.write(Pos5,Speed5,false);
    
      Anchorright.attach  (15);               // GEETECH KAN ANALOG 14 15 16 17
      Anchorright.write(Pos6,Speed6,false);
    
      HeilaRotate.attach  (16);               //
      HeilaRotate.write(Pos7,Speed7,false);
    
      HeilaBoom.attach    (17);                //
      HeilaBoom.write(Pos8,Speed8,false);
     
      pinMode(SNDoutput1, OUTPUT); //hier worden de SND uitgangen gedefinieerd, deze gaan naar de USM ext ingangen dit zijn er maximaal 4
      pinMode(SNDoutput2, OUTPUT);
    
      pinMode(CraneInput, INPUT);    // De hallsensor van de kraan is input poort 20 op de Arduino
     
      digitalWrite(SNDoutput1, HIGH); // omdat de USM de neutraal of 0 schakeld zetten we de uitgang hoog dit is 5v
      digitalWrite(SNDoutput2, HIGH);
    
    
    //Serial.begin(9600); // dit maak te connectie met de
    
    }
    En hier je setup zoals ik bedoel:
    Code:
      void setup()
    {
    
    
      Pos1 = Closepos1;      // Start waarde voor servo positie FrontHatch (dicht)
      Pos2 = Closepos2;      // Start waarde voor servo positie Rearhatch (dicht)
      Pos3 = Closepos3;      // Start waarde voor servo positie Sidehatch (dicht)
      Pos4 = Downpos4;       // Start waarde voor servo positie Lift  (onder)
      Pos5 = Hangpos5;       // Start waarde voor servo positie AnchorLeft  (hangen)
      Pos6 = Hangpos6;       // Start waarde voor servo positie AnchorRight  (op)
      Pos7 = Midpos7; 
      Pos8 = Midpos8;
     
      Pos1Read = Openpos1;   // FrontHatch  Hier geven we de initiele waarden van de positie read aan, deze wordt naderhand
      Pos2Read = Openpos2;   // RearHatch
      Pos3Read = Openpos3;   // SideHatch
     
    
      Speed5 = Speedup5;     // De ankersnelheid
      Speed6 = Speeddown6;   // Idem
    
      Fronthatch.attach   (10);    //plaats de servo op pin 10
      Fronthatch.write(Pos1); // deze regel zorgt ervoor dat tijdens de start de servo naar de gewenste positie gaat of blijft op deze postitie en niet centered
    
      Rearhatch.attach    (11);    //plaats de servo op pin 11...
      Rearhatch.write(Pos2);
    
      Sidehatch.attach    (12);   
      Sidehatch.write(Pos3);
    
      Lift.attach         (13);
      Lift.write(Pos4);
    
      Anchorleft.attach   (14);
      Anchorleft.write(Pos5);
    
      Anchorright.attach  (15);               // GEETECH KAN ANALOG 14 15 16 17
      Anchorright.write(Pos6);
    
      HeilaRotate.attach  (16);               //
      HeilaRotate.write(Pos7);
    
      HeilaBoom.attach    (17);                //
      HeilaBoom.write(Pos8);
     
      pinMode(SNDoutput1, OUTPUT); //hier worden de SND uitgangen gedefinieerd, deze gaan naar de USM ext ingangen dit zijn er maximaal 4
      pinMode(SNDoutput2, OUTPUT);
    
      pinMode(CraneInput, INPUT);    // De hallsensor van de kraan is input poort 20 op de Arduino
     
      digitalWrite(SNDoutput1, HIGH); // omdat de USM de neutraal of 0 schakeld zetten we de uitgang hoog dit is 5v
      digitalWrite(SNDoutput2, HIGH);
    
    
    //Serial.begin(9600); // dit maak te connectie met de
    
    }
    Met mijn aangepaste setup, krijgen de servo's direct de juiste positie door, die ze tijdens de opstart dienen te hebben.
     
  19. JaFa

    JaFa

    Lid geworden:
    20 jun 2010
    Berichten:
    951
    Locatie:
    Leuven (Belgie)
    Ok ik ga dit zaterdag testen, maar ik zie niet goed waarom ze nu niet zouden moeten springen uiteindelijk gebeurt het zelfde, maar aan max servo speed,
    ik heb een beetje het gevoel dat als er nu stroom op komt staan alles naar het midden gaat en direct daarna naar zijn "begin"positie, maar misschien is de arduino sneller dan de servo reactie, ik zal het testen en vandaar zien we weer verder...
     
  20. marten77

    marten77

    Lid geworden:
    22 jul 2007
    Berichten:
    2.325
    Locatie:
    Gouda
    Hoi Jan,

    Het verscheel zit hem in die servo vertraging functie die je oproept, welke ik heb weggelaten tijdens de opstart.
    Ik had er ook een servo mee getest en gaat dan direct naar zijn aangegeven positie, i.p.v. eerst naar het midden 1500ms.
    Het zou raar zijn, als de servo eerst volle snelheid naar het midden gaat en daarna weer op volle snelheid verder of terug.

    De library heeft namelijk een startpositie nodig, om die servo vertraging te kunnen starten.
    Dat is dus vanaf 1500ms (90 graden), oftewel, tijdens de opstart zal de servo vanaf 90 beginnen en loopt dan op de aangegeven snelheid naar jouw gewenste snelheid.
    Het had mooi geweest, dat je die "default" startpositie in de sketch kon bepalen.
    Ik durf niet te zeggen, of ik daar iets aan kan toevoegen.
    Library lezen gaat makkelijker, dan dingen eraan wijzigen of toevoegen :hammer:
     

Deel Deze Pagina