Hoe kan ik een geschutstoren 290 graden laten draaien

Discussie in 'Model elektronica' gestart door Herby63, 4 sep 2021.

  1. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Dag Bruno,
    Ik ben een complete leek in deze materie.
    Om me enigszins in te werken ben ik op het internet YouTube-filmpjes gaan afschuimen.
    Zo kwam ik op de reeks tutorials van Paul McWorther (Toptechboy.com) terecht die in een uitgebreide reeks de basisbeginselen en eenvoudige projecten uitlegt en demonstreert in een taal die ik zelfs meen te begrijpen.
    Op een bepaald moment in de lessenreeks raadt hij de overstap naar de NANO aan om draagbare projecten te realiseren.
    Vandaar dat ik een paar NANO's aangeschaft heb.
    Het bestaan van de Pro-Mini en de voordelen ervan waren mij niet bekend.
    Met haar 1m25 lengte is plaatsgebrek in de Bismarck niet direct een probleem, behalve voor de motoren die direct onder een geschutstoren moeten geplaatst worden, zodat die niet in conflict komen met de aandrijflijn.
     
    Bruno van Hoek vindt dit leuk.
  2. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Hallo Max,
    Ik ga je aanbevelingen in overweging nemen.

    Nu het werkt (op UNO) zou ik er eigenlijk liefst niets meer aan veranderen, maar morgen, fris en monter, als ik al mijn moed samen raap, ga ik me er waarschijnlijk wel aan wagen. :)

    Intussen lukt het niet om de NANO tot leven te brengen.
    Mogelijke knelpunten zijn:
    - geen gepaste USB->USB-mini kabel, de kabel die ik heb is van een lader van een GSM, en daarin ontbreken mogelijks enkele pinnetjes, ik kan het niet goed zien;
    - de gebruikte chip;
    - de CH340-driver;
    - Bij het solderen van de pinnen de boel oververhit?
    - ...
     
  3. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    De aanhouder wint :)
    Het lag aan de chip, moest de ATmega328P (old bootloader) selecteren.
     
    Laatst bewerkt: 1 sep 2022
    max z en Bruno van Hoek vinden dit leuk.
  4. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    Atmega 328P neem ik aan.....maar ik herken het probleem..
     
  5. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    De ProMini heeft geen usb-aansluiting, je had daar in ieder geval een USB/UART converter voor moeten aanschaffen. Of, met een andere methodiek, een USBasp programmer.
     
  6. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    Nog een mogelijke vereenvoudiging: de variabele motDir heeft in deze toepassing geen enkele functie. De stap-snelheid wordt bepaald door het aantal stappen per omwenteling en de rotatiesnelheid. Met motDir zou je elke motor meerdere stappen achtereen kunnen laten maken, maar dat is juist wat je niet wil, dan moet de ene motor wachten op de andere. Je kunt dus vereenvoudigen naar step(1) en step(-1), en motDir verwijderen uit de code.
     
  7. Bruno van Hoek

    Bruno van Hoek Vriend van modelbouwforum.nl PH-SAM Forum veteraan

    Lid geworden:
    23 aug 2002
    Berichten:
    11.183
    Locatie:
    Almere, MVA (ex-Daedalus Amsterdam)/ PH-SAM/F23D
    Omdat ik zo snel mogelijk de bootloader wil verwijderen, kies ik altijd voor de USBasp. Werkt voor mij het handigst...
     
  8. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Inderdaad, ik pas het aan in de tekst, dat eventueel geïnteresseerden niet op het verkeerde been gezet worden :)
    Wat een geluk dat ik deze niet aangeschaft heb, trouwens als ik de pinrails niet in de NANO soldeer, kan ik ook de bedrading rechtstreeks aan de in- en uitgangen solderen en in een krimpkousje steken. Ik moet dan wel nog investeren in krimpkous op maat, want die heb ik niet :)
    Dat neem ik straks mee.
    Chinees voor mij, gelukkig heb ik dus NANO's :)
     
  9. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Dat begrijp ik niet goed Max.
    MotDir bepaalt de draairichting, niet de draaisnelheid.
    Mogelijks heeft het geen nut om bovenaan const int motDir=1; te zetten, en volstaat const int motDir; omdat de draairichting in de if-statement bepaald wordt.
    Bedoel je misschien dat int motSpeed=1; bovenaan de code kan weggelaten worden, en de if-statement kan vereenvoudigd worden naar step(1) en step(-1) ?
     
  10. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    @max z
    Voor zover ik het goed begrepen heb heb ik al je aanbevelingen geïntegreerd voor de code voor de 2 achterste geschutstorens, Caesar en Dora) genummerd met 2 en 3, en dus aangesloten op pots 3 en 4.
    Het werkt allemaal, maar de draaisnelheid is 30 seconden, of 2 omwentelingen per minuut.
    Toch maar de motSpeed=1 terug geactiveerd, en nu is de draaisnelheid weer 1 omwenteling per minuut ., en de const int motDir=1 gedesactiveerd, zoals je aangaf, en het werkt nog altijd naar wens.
    Dit geeft dan onderstaande code.
    Ik hoor het graag mocht je nog schoonheidstips hebben :)

    Code:
    volatile unsigned long timer; // all timer variables are unsigned long
    volatile int inpulse, seqnr = 20;
    volatile int Plist[16];
    int pulse2;
      int pulse3;
    
    #include <Stepper.h>
    const int stepsPerRevolution=2048;
    int motSpeed=1;
    //const int motDir=1;
    const int buttonPinSB2=8;
    const int buttonPinBB2=9;
      const int buttonPinSB3=A0;
      const int buttonPinBB3=A1;
    
    const int dt=250;
    Stepper myStepper2(stepsPerRevolution, 10,12,11,13);
      Stepper myStepper3(stepsPerRevolution, 3,5,4,6);
    
    void setup() {
      // put your setup code here, to run once:
     attachInterrupt(0, read_pwm, CHANGE); // Pin 2 = interrupt 0
      pinMode(2, INPUT);
     
      Serial.begin(9600);
     
      myStepper2.setSpeed(motSpeed);
        myStepper3.setSpeed(motSpeed);
    
      pinMode(buttonPinSB2, INPUT_PULLUP);
      pinMode(buttonPinBB2, INPUT_PULLUP);
        pinMode(buttonPinSB3, INPUT_PULLUP);
        pinMode(buttonPinBB3, INPUT_PULLUP);
    }
    
    void loop() {
     
      cli(); // stop interrupt interference
      pulse2 = Plist[2]; // get latest pulse for stepper 2
      sei(); // release interrupt
        cli(); // stop interrupt interference
        pulse3 = Plist[3]; // get latest pulse for stepper 3
        sei(); // release interrupt
      
      Serial.print (pulse2);
      Serial.print ("   ");
        Serial.println (pulse3);
       if (pulse2 <=1300 && digitalRead(buttonPinSB2)){
          myStepper2.step(1);
        }
        if (pulse2 >=1700 && digitalRead(buttonPinBB2)){
          myStepper2.step(-1);
    
    }
        if (pulse3 <=1300 && digitalRead(buttonPinSB3)){
          myStepper3.step(1);
        }
        if (pulse3 >=1700 && digitalRead(buttonPinBB3)){
          myStepper3.step(-1);
    
    }
    }
     
  11. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    Ja, dat bedoelde ik.
    Over motSpeed heb ik alleen gezegd dat de combinatie van stepsPerRevolution ( het aantal stappen voor een hele omwenteling) en motSpeed (de omwentelingssnelheid in rpm) de timing van de steps bepaald, dus je hebt motSpeed wel degelijk nodig als je deze Stepper-library gebruikt.
     
    Herby63 vindt dit leuk.
  12. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    geen andere dan ik in #239 gegeven heb
    Ik zou er dus dit van maken, en zo heb je ook maar één variabele int pulse nodig:
    Code:
    volatile unsigned long timer; // all timer variables are unsigned long
    volatile int inpulse, seqnr = 20;
    volatile int Plist[16];
    int pulse;
    const int stepsPerRevolution=2048;
    const int motSpeed=1;
    const int buttonPinSB2=8;
    const int buttonPinBB2=9;
    const int buttonPinSB3=A0;
    const int buttonPinBB3=A1;
    
    #include <Stepper.h>
    Stepper myStepper2(stepsPerRevolution, 10,12,11,13);
    Stepper myStepper3(stepsPerRevolution, 3,5,4,6);
    
    void setup() {
     
      attachInterrupt(0, read_pwm, CHANGE); // Pin 2 = interrupt 0
      pinMode(2, INPUT);
     
      Serial.begin(9600);
     
      myStepper2.setSpeed(motSpeed);
      myStepper3.setSpeed(motSpeed);
     
      pinMode(buttonPinSB2, INPUT_PULLUP);
      pinMode(buttonPinBB2, INPUT_PULLUP);
    
      pinMode(buttonPinSB3, INPUT_PULLUP);
      pinMode(buttonPinBB3, INPUT_PULLUP);
    }
    
    void loop() {
    
      cli(); // stop interrupt interference
      pulse = Plist[2]; // get latest pulse for stepper 2
      sei(); // release interrupt
    
      if (pulse <=1300 && digitalRead(buttonPinSB2)){
        myStepper2.step(-1);
      }
      if (pulse >=1700 && digitalRead(buttonPinBB2)){
        myStepper2.step(1);
      }
    
      cli(); // stop interrupt interference
      pulse = Plist[3]; // get latest pulse for stepper 3
      sei(); // release interrupt
    
      if (pulse <=1300 && digitalRead(buttonPinSB3)){
        myStepper3.step(-1);
      }
      if (pulse >=1700 && digitalRead(buttonPinBB3)){
        myStepper3.step(1);
      }
     
    }
    
    void read_pwm(){
      if (PIND & 0b00000100) { // if pin 2 is high
        timer = micros(); // start timer
      }
      else { // else pin 2 is low
        inpulse = ((volatile int)micros() - timer); // read timer
      
        if (inpulse<950)  seqnr = -1; // reset seqnr for next incoming pulses to start with 0
        else {
          seqnr += 1;
          if (seqnr < 16) Plist[seqnr] = inpulse;
        }
      }
    }
     
    Laatst bewerkt: 2 sep 2022
    Herby63 en Bruno van Hoek vinden dit leuk.
  13. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    Ik was de _pullup vergeten........staat er nu bij.

    Tsja, ik had voor die valkuil gewaarschuwd, en nu was ik er zelf ingevallen. Het blijkt de oorzaak te zijn van het niet functioneren van mijn stepper. Nu doet 'ie 't wel......:)
     
    Laatst bewerkt: 2 sep 2022
    Herby63 vindt dit leuk.
  14. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Dat doe ik dan ook maar :)
    Hartelijk dank voor je inbreng Max, zonder jou had ik het niet kunnen verwezenlijken.
     
  15. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.421
    Locatie:
    Boskoop
    Graag gedaan! En ik leer ook weer wat bij over het aansturen van stappenmotoren......
     
    Herby63 vindt dit leuk.
  16. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Ik heb wat gerommeld in Fusion 360.
    Zou dit wat kunnen zijn?
    De tandwielen hebben beiden 14 tanden en een buitendiameter van 16,125 mm.
    Het linker tandwiel heeft een uitsparing die precies over de as van de stappenmotor zou moeten passen. (ondersteboven)
    Het rechter tandwiel schuift in de ronde uitsparing aan de onderzijde van de geschutstoren, is hol vanbinnen (6 mm) om de aansluiting voor de servo voor het verticaal bewegen van de lopen te laten passeren, en heeft een nok om de eindswitches in te drukken. De totale hoogte ervan is 11,5 mm.
    Als het realistisch is, moet ik "enkel" nog een bevestigingsplaat ontwerpen voor de stappenmotor en de eindswitches.
    Tandwielen voor geschutstorens 1V2.jpg

    Mocht het op niks trekken, dan vind ik dit toch al een hele prestatie voor iemand die helemaal geen ingenieursopleiding gevolgd heeft. :)
     
    Laatst bewerkt: 2 sep 2022
    Bruno van Hoek en max z vinden dit leuk.
  17. hobbyist

    hobbyist Forum veteraan

    Lid geworden:
    10 mrt 2009
    Berichten:
    5.483
    Locatie:
    Noord Brabant
    Je hebt in ieder geval ruimtelijk inzicht en dat is ook wat waard.:)
     
    Herby63 vindt dit leuk.
  18. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    De ring waarmee de stepper onder de barbette gemonteerd wordt, zou er dan zo kunnen uitzien:
    - de ring schuift onderaan in de barbette;
    - de bevestigingsbeugels van de stepper schuiven over de 2 pinnen aan de onderzijde en kunnen gefixeerd worden hetzij met een eindje rubberslang of met een splitpen;
    - het off-center gat is voor de motoras;
    - door het centergat komt de servokabel naar beneden en kan vrij meedraaien met de geschutstoren.
    Dan moet ik alleen nog de exacte positie van de eindschakelaars vaststellen en een paar gaatjes boren of aanbrengen in het ontwerp.
    Ring voor bevestiging steppermotor.jpg Ring voor bevestiging steppermotor boven.jpg
    Voor torens Anton en Dora mag de flens volledig rond lopen.
    Voor torens Bruno en Caesar moet er een heel stuk af om in de opbouw te passen.

    Veel modelbouwplezier :) in al zijn aspecten
     
  19. Bruno van Hoek

    Bruno van Hoek Vriend van modelbouwforum.nl PH-SAM Forum veteraan

    Lid geworden:
    23 aug 2002
    Berichten:
    11.183
    Locatie:
    Almere, MVA (ex-Daedalus Amsterdam)/ PH-SAM/F23D
    Er af???:eek:
    Bij mij gaat er niets af!:rofl:
     
  20. Herby63

    Herby63

    Lid geworden:
    6 aug 2009
    Berichten:
    4.400
    Locatie:
    Brugge
    Heeft er iemand ervaring met die ROHS 28BYJ-48 steppers?
    Ik had al begrepen dat steppers relatief gezien grote stroomvreters zijn, en daarom niet via de arduino maar via een afzonderlijke voeding moeten van stroom voorzien worden.
    Bij het testen van het volledige systeem met aansturing van 4 servo's en 4 steppers, moet ik steeds vroegtijdig afbreken omdat het voltage inzakt, zelfs met een gestabiliseerde voeding van 13.5V 7/9A. Een pas geladen 6V 7Ah accu gaat in no time onder de 6V.
    Wat rondneuzen op tinternet geeft 100mAh tot 240mAh stroomverbruik voor deze steppers (stationair vs in bedrijf?)
    Dat zou voor 4 steppers tussen de 0,4 en 1 Ah moeten geven. Pittig maar niet onoverkomelijk.
    Als ik mijn multimeter mag geloven trekken ze echter tot 4Ah per stuk, dus 16A als ze alle 4 aangesloten zijn.
    Geen wonder dat de stroombronnen er mee worstelen.

    Wat doe ik verkeerd waardoor die steppers ongeveer 40x meer verbruiken (in rust) dan de opgegeven specificaties aanduiden?
    Veel verkeerd aansluiten kan je niet.
    De 4 draden die naar de Arduino gaan zijn correct aangesloten, anders zouden ze niet of niet zoals verwacht draaien, de 2 stroomdraden zijn ook correct verbonden met de onafhankelijke stroombron en beide -polen zijn met elkaar verbonden.
     
    Stoompomp vindt dit leuk.

Deel Deze Pagina