woensdag 29 december 2021
  1 Antwoorden
  466 Visits
Ik zal me eerst eens voorstellen: Mijn naam is Willem Op 't Roodt, 67 jaar en woonachtig in Tiel. Na zeker 50 jaar niks met treinen gedaan te hebben heb ik begin 2021 het plan opgevat om op mijn zolder een baan te maken en natuurlijk moet dat digitaal. Nu kan je qua besturing alles gewoon kant en klaar kopen, maar leuker is om zelf e.e.a. in elkaar te knutselen. Dus wat video's op Youtube gekeken en uiteindelijk voor JMRI icm Arduino gekozen en wonderbaarlijk lukt het aardig om alles aan de praat te krijgen. Het prutsen met trafo's, draadjes, Arduino boardjes enzo gaat me aardig af alleen als het op programmeren aankomt dan moet ik al gauw passen. Verder dan wat parameters wijzigen kom ik meestal niet.


Ik stuur de wissels aan met servo's vanuit JMRI met een Arduino Uno boardje. Op de Arduino heb ik een PCA9685 breakout board aangesloten en daar kan je 16 servo's mee aansturen. Alles werkt prima, maar..... De servo gooit de wissel heel snel om en eigenlijk zou ik de wissel heel rustig willen verstellen zodat het veel natuurgetrouwer gaat.

Nu heb ik een sketch van Adafruit (Adafruit_PWMServoDriver pwm) om de servo's te bedienen. Ik zag op het Youtube kanaal vanLittle Wicket Railway hoe je de servo's langzamer kan laten draaien zonder gebruik te maken van delays in het programma. De code hiervoor heb ik gevonden op Github. Ik zou het 'vertragingsgedeelte' willen integreren in de code van Adafruit, maar na een poging of 20 heb ik de handdoek in de ring gegooid, het lukt gewoon niet wegens te weinig programmeerkennis.

Is er iemand die me daarmee kan helpen?
Ik heb de beide sketches toegevoegd als (gezipte) bijlagen.
3 weken geleden
·
#21889
Willem,
Ik heb zelf geen PCA9685 breakout board en mijn reactie is daarom theoretisch.
In het voorbeeld van DelayFunction zie je dat de servo in kleine stappen van positie veranderd. Door in regel 23 "i" steeds met 1 te verhogen gaat de servo van 1000 naar 1001 en daarna naar 1002 enz tot de stand van 1900 is bereikt. hierdoor zie je de servo langzaam van positie 1000 naar 1900 veranderen.
In de schets van Servo_connect_to jmri krijgt de servo in regel 45 en 48 in een keer de opdracht om naar de eindstand te gaan bv servo 2 gaat van 1015 in een stap naar 1800.
Hier moet de op dracht dus worden opgedeeld in meerdere stappen.
dus hier bv een loop maken door "Close [2] - Throw[2] en dit delen door 25, je krijgt dan 785/25 =32 stappen ipv een zoals nu.
gebruik voor de loop een andere letter dan "i"
dus ipv regel 45 de volgende 4 regels
for (int y = Throw[i]; y < Close[i]; y=y+25)
{
pwm.writeMicroseconds(i, y);
}
Bij regel 48 Throw en Close omdraaien en steeds een stap aftrekken van y en ook groter dan ">" omdraaien naar kleiner dan"<"

Ik hoop dat ik je zo op de goede weg heb geholpen
vrgr
Gerard te Nuyl
  • Pagina :
  • 1
Er zijn nog geen reacties op dit bericht.
Reageer als een van de eersten op dit bericht!
Nog geen HCC-gebruikersaccount aangemaakt? Klik dan hier.

Inloggen