woensdag 29 december 2021
  6 Replies
  2.5K 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.
7 maanden 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
6 maanden geleden
·
#22037
Hallo Gerard,
Excuus voor mijn late reaktie, erg druk geweest met andere zaken en het stof begint nu neer te dalen.

Bedankt voor je reaktie. Ik zal je suggesties van de week uittesten en laten weten of alles naar wens werkt. Het ziet er niet al te moeilijk uit, dus dat gaat vast lukken.

Er is echter een probleempje bijgekomen. Ik heb inmiddels 12 servo's aangesloten en de bediening ervan verloopt goed. Wat me opvalt is dat sommige servo's geluid blijven maken, net alsof de gewenste positie niet gehaald kan worden. Als ik de positie ervan aanpas via de software dan heeft dit soms wel, maar meestal geen, effect. De servo blijft als het ware zoeken naar de juiste positie en uiteindelijk vind hij die dus niet. Na een tijdje worden ze ook wel heel erg warm, dus een paar uur achter elkaar zullen ze het vast niet vol gaan houden. Het geluid van eentje is niet zo storend, maar als er een stuk of 6 herrie staan te maken......

De oplossing hiervoor is blijkbaar niet zo simpel als ik op de diverse fora zo rondkijk.

Nu zijn de servo's die ik gebruik van het type SG90 en erg goedkoop. Het schijnt dat type MG 90 S veel beter werkt, althans zo zag ik in een filmpje. Eerst maar eens kijken of een betere kwaliteit soelaas biedt. De kosten voor 10 van die dingen zijn ongeveer 22 euro, dus die moeten met een dag of 14 wel binnen zijn vanuit China.
5 maanden geleden
·
#22135
Goedemiddag Wilhelmus,

Dat van die te te warm wordende SG90 servos heb ik ook ervaren. Bij mij kwam dat doordat er in die positie teveel kracht gezet moest worden. De draaiing werd iets 'terug' geduwd door de verende belasting en de electronische sturing in de SG90 ging weer wat bij sturen. Een onbelaste servo was bij mij veel stiller in de gestuurde stand. Tevens heb ik ook het aantal stappen en de draaihoek verminderd. De uiterste standen van de servo zijn ook de "uitersten" die het PWM-signaal van de servo SG90 kan verwerken. Ze zijn niet voor niets zo goedkoop. Sommigen kunnen ook niet eens 180 graden draaien.
Je kan spelen met de waarden die je naar de servo stuurt 1000 of 1900. Kan het ook met 1100 of 1800? Heb je dan nog genoeg beweging in je wissel voor het verplaatsen van je wisseltongen en heb je dan nog voldoende druk aan de aanliggende zijde?

Succes ermee?
mvgr
Nico van Rossum
4 maanden geleden
·
#22177
Goede dag Willem.
pas lid geworden, las ik jouw bijdrage.
ik weet niet hoever je nu staat, maar als je nog zoekende bent, zou ik eens bij ARCOMORA (arduino controlled model railway) gaan neuzen.
van UNO's programmeren hoef je in eerste instantie geen kennis te hebben (dat komt nadien wel)
ik weet natuurlijk niet of je al een control station hebt maar de meesten ondersteunen DCC (ook marklin)
dan kan je bv met DCC next van arcomora aardige dingen doen.
als voorbeeld in bijlage een van mijn testopstellingen voor een overweg met slagbomen (de software is meegeleverd)
groetjes guy. 20220201_154125.jpg
2 maanden geleden
·
#22361
Na een tijdje worden ze ook wel heel erg warm, dus een paar uur achter elkaar zullen ze het vast niet vol gaan houden. Het geluid van eentje is niet zo storend, maar als er een stuk of 6 herrie staan te maken......


wat hier gebeurt is dat de servo continu wordt aangestuurd, als de servo dus even uit zijn positie raakt wordt hij meteen weer terug gestuurd. dit kan dus gebeuren als de servo wat weerstand ondervindt en dus mechanisch uit zijn positie gedrukt wordt of als de kwaliteit van de servo matig is.
een oplossing kan zijn om een andere library te gebruiken die na een paar seconde stopt met aansturen.

vrgr
Gerard te Nuyl
1 week geleden
·
#22454
Dag Willem,
Ik weet niet of het nog nodig is, maar op Youtube heeft Albert G een mooie serie video's uitgebracht over Arduino gebruik.
Deze serie heet: Modelspoor met Arduino DCC++-EX.
In deel 11 wordt gebruik gemaakt van de PCA9685

Misschien een oplossing voor je.

Met vriendelijke groet,
Theo van Eerd
  • 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