modeltrein besturing

algemene C code
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: modeltrein besturing

Berichtdoor Koepel » 20 Nov 2016, 19:32

Ik begrijp je vraag en sketch niet helemaal, sorry.
Wat is MegaServo ? Je hebt toch niet een 7 jaar oude en overbodige library in je sketch gezet ?

Hoe krijgen de servo motors stroom ? Via een aparte voeding ?

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: modeltrein besturing

Berichtdoor shooter » 20 Nov 2016, 23:23

waar doe je de attaches?
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 07 Okt 2016, 10:33

Re: modeltrein besturing

Berichtdoor maartentukker » 21 Nov 2016, 19:00

De MegaServo library is om alle pinnen van de arduino mega te kunnen gebruiken om servo's aan te sluiten. Of dit oud is en niet meer nodig weet ik niet precies, maar eerst kon ik geen servo aansturen via pin 2. Via internet naar een oplossing gezocht en toen kwam ik dit tegen.
De sketch heb ik van: http://thenscaler.com/?page_id=174 Deze heb ik wat aangepast aan de hand van vorige sketches.
De attach staat bij void ServoGoto

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: modeltrein besturing

Berichtdoor Koepel » 21 Nov 2016, 19:20

Als je niet vertelt waar die MegaServo vandaan komt, dan ga ik er van uit dat je een willekeurige library van internet in je project gebruikt, en dat wij nooit kunnen controleren wat er gebeurt.
Zou je die MegaServo alsjeblieft willen verwijderen, ik weet niet of die nog compatible is. De gewone Servo library zou ook op pin 2 moeten werken, of er is iets anders aan de hand.

Waar je die sketch vandaan hebt, dat ziet er redelijk uit. Ik geef het een zeven(tje).

Wil je met één drukknop de drie servo motoren stuk voor stuk langzaam omzetten ?

Maar een attach() om steeds een klein stukje te bewegen, dat lijkt me niet juist. Je hebt nu verschillende manieren door elkaar. Het beste kun je opnieuw beginnen, maar ik weet niet of je zelf een sketch vanaf begin tot eind kunt schrijven.

Stel dat je meerdere servo motoren langzaam naar een positie wilt laten gaan, en er verder niet naar wil omkijken. Dan is misschien een library handig, waarbij je de snelheid kunt instellen. Maar dan weet ik nog niet op welk moment de leds gewijzigd worden.
Ik heb even zitten zoeken, en de VarSpeedServo (https://github.com/netlabtoolkit/VarSpeedServo) is heel specifiek voor de AVR chips geschreven (Arduino Uno en Arduino Mega). Voor alleen een wissel omzetten is een interrupt gestuurde Servo niet nodig. Deze lijkt me wel wat (https://github.com/reinout/servomover/blob/master/servomover.cpp), maar dan is het nodig om in de loop() een 'update' functie te draaien, dus je kunt maar weinig delay gebruiken in de overige code.
Deze gebruikt ook een 'update' functie in de loop() : https://github.com/iplayfast/TimedServo.

Als je geen library wilt gebruiken, dan zou ik een functie maken die dat doet. Nu heb je drie keer dezelfde code, die overigens drie keer verschillend is.

Berichten: 37
Geregistreerd: 07 Okt 2016, 10:33

Re: modeltrein besturing

Berichtdoor maartentukker » 26 Nov 2016, 15:06

De library MegaServo komt van: http://playground.arduino.cc/Code/MegaServo

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: modeltrein besturing

Berichtdoor Koepel » 26 Nov 2016, 16:16

Die is uit het stenen tijdperk, bedoelt om dinosaurussen heen en weer te zwiepen :roll:
Gebruikt alsjeblieft de gewone Servo library. Als pin 2 niet werkt, dan is er misschien iets anders aan de hand (het kan een bug zijn, maar dat denk ik niet).

Ik zit nog met heel veel vragen, dus ik weet niet of ik je verder kan helpen :(

Berichten: 37
Geregistreerd: 07 Okt 2016, 10:33

Re: modeltrein besturing

Berichtdoor maartentukker » 26 Nov 2016, 17:53

Het lijkt me handiger om met 1 druk op 1 knop 1 servo aan te sturen, deze heeft een kleine beweging nodig, een graad of 20 verplaatsing naar links of naar rechts.
na die beweging moet er een groen of een rood ledje branden, afhankelijk van de stand van de servo (wissel).

De keuze nu voor 1 knop heeft puur te maken met de bedrading en de ruimte op het controle paneel die ik overigens nog moet ontwerpen.

Ik zal de megaservo library vervangen door de normale servo library en wat proefjes doen.

De bedoeling is denk ik om een algemene loop te maken waar elke input (drukknop) gebruik van maakt en dat signaal dan naar de juiste servo stuurt. Drukknop 1 voor servo 1, 2 voor 2, 3 voor 3, etc....

Omdat de servo vaak bromt als deze zijn eindpositie bereikt heeft, heb ik de detach functie erin zitten. Dan is het rustiger op de baan :D

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: modeltrein besturing

Berichtdoor Koepel » 26 Nov 2016, 18:50

Een brommende servo heeft ook met kwaliteit te maken, als het goed is dan bromt hij niet.
Maar okay, een attach() en detach() mag wel, maar dan wel op een goede manier.

Dus drie knoppen voor 3 servo motoren, en de knop is een soort toggle.

De sketch is nu een verzameling van code die niet werkt. Durf je het aan om opnieuw te beginnen ?
Zou je dit willen opdelen in aparte stukken ?

Eerst de knoppen, dan een enkele servo, dan drie, daarna de servo's langzaam laten gaan.

Je kunt de Bounce2 library nemen, dan zijn de knoppen debounced (met een filter) en kun je eenvoudig een toggle aanbrengen.
https://github.com/thomasfredericks/Bounce2
Het kan natuurlijk ook in de sketch.

Ik stel voor om in een tabel de twee eindstanden van alle drie de servo motoren te zetten. Lukt dat denk je ?
Code: Alles selecteren
const int endstops[3][2] =
{
  { 80, 100 },     // servo 1
  { 79, 99 },     // servo 2
  { 82, 105 },    // servo 3
}


Het langzaam laten gaan van de servo motor vergt nogal wat met millis() en updates. Daar ook maar een library voor nemen ?

Berichten: 37
Geregistreerd: 07 Okt 2016, 10:33

Re: modeltrein besturing

Berichtdoor maartentukker » 26 Nov 2016, 19:01

Klink goed, ik snap alleen niet helemaal wat bounce doet behalve filteren.
De opzet van servo waardes is prima, dit worden dan de verwijs waarden vanuit de loop neem ik aan.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: modeltrein besturing

Berichtdoor Koepel » 26 Nov 2016, 19:27

De Bounce2 heeft ook de StateChangeDetection (https://www.arduino.cc/en/Tutorial/StateChangeDetection) ingebouwd.

Dan kun je eenvoudig een toggle maken (in het voorbeeld hieronder een toggle tussen STRAIGHT en TURN), en vervolgens opstarten dat de servo gaat bewegen.

Dit is pseudo-code :
Code: Alles selecteren
#define STRAIGHT false
#define TURN true
boolean state2;

  if( knop2.fell() )
  {
    state2 = !state2;
    setServo2( state2);
  }


De '!' is een boolean 'NOT'. Lees die regel met state2 als : "state2 is not state2".
De 'state2' is trouwens de staat/status van de wissel, niet van de knop.

Met drie knoppen is het beter om een array te gebruiken. Dan wordt het misschien dit:
Code: Alles selecteren
  for( i=0; i<3; i++)
  {
    if( knop[i].fell() )
    {
      state[i] = !state[i];
      setServo( i, state[i]);
    }
  }

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten