Doel:€250.00
Donaties:€128.00

Per saldo:€-122.00

Steun ons nu!

Laatst bijgewerkt
op 16-04-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Vijfhuis (v.h. Frotterdam) door Ben
Vandaag om 07:14:29
LS Models 2024 door Martijn193
Vandaag om 06:59:04
Van Biervliet/B Models 2019, nieuws van de fabrikant door Corné81
Vandaag om 06:07:34
Korneschans. Een fictief Duits Nederlands grensstation. door DJV
Vandaag om 05:08:38
Mijn eerste H0-modeltreinbaan in aanbouw door bigboynl
Vandaag om 01:23:06
Decals voor een Roco 64892 DSG Speisewagen door frits959
Vandaag om 01:22:36
Einde Koemo ballast ??? door Ronald69
Vandaag om 01:14:28
Keerlusmodule Digikeijs DR5013 gaat na willekeurig aantal rondes op kortsluiting door Bert_Apd
Vandaag om 00:57:40
Frans/Belgisch H0e baantje door NS264
Vandaag om 00:44:46
Kleine Baan in H0 (≤ 0.5m²) door NS264
Vandaag om 00:19:08
h0 diorama USA “The Paintshops” door Whis
Vandaag om 00:08:34
Ronald en Wanda's "Southern Comfort" swamp layout! door class 37
Vandaag om 00:06:03
Nederland jaren 50 op basis van mijn roots door defender
19 april 2024, 23:05:17
Haandrecht materieel door orientexpress
19 april 2024, 23:02:39
EifelBurgenBahn door Frank 123
19 april 2024, 23:01:42
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
19 april 2024, 23:00:45
Traintastic - modelbaan besturingssoftware (gratis en open source) door bask185
19 april 2024, 22:27:47
Hengelo in 1981-1982, maar dan anders: Kassenberg in N door raymond erdtsieck
19 april 2024, 22:23:17
Laag-Baarlo door Benelux795
19 april 2024, 22:22:31
Een stukje Odsherreds Jernbane (OHJ) door gdh
19 april 2024, 21:51:42
US diorama in H0 door Wim Vink
19 april 2024, 21:38:59
IC-trein naar Berlijn in model, welke rijtuigen? door Michiel 80
19 april 2024, 20:49:29
Toon hier je nieuwe (model-) spooraanwinst(en)... door johanw
19 april 2024, 20:31:36
La Fabrique (1:87, 0,16m2) door tothebeach
19 april 2024, 20:02:10
Cranicher Altbahn door Arjen52
19 april 2024, 19:47:50
BMB 00-Modulebaan, BMB-Rijdagen en BMB-Deelname aan Beurzen & Evenementen door Hans van de Burgt
19 april 2024, 19:41:34
Aachenau West door MichielB
19 april 2024, 18:48:39
Jeugdsentiment (show je oude treintjes) door thonis
19 april 2024, 18:36:00
Openen Lima Hondekop door Mispoes
19 april 2024, 17:59:32
Piko 2200 (52686)+ uhlenbrock 76420(?) door Ben
19 april 2024, 16:14:12
  

Auteur Topic: Arduino hulp gezocht  (gelezen 1237 keer)

Hans Mol

  • Offline Offline
  • Berichten: 257
    • Echaztalbahn 2.0
Arduino hulp gezocht
« Gepost op: 30 juli 2020, 18:45:40 »
Beste spoorliefhebbers,

Momenteel ben ik me aan het verdiepen in het programmeren van een Stepper middels Arduino aansturing.
Ik heb nu een sketch gemaakt waarbij de stepper door 1 druk op de knop 45 graden vooruit draait en na een 2e druk op de knop 45 graden terug draait.
Op zich werkt dit wel zij het niet dat de stepper, na opnieuw opstarten, vreemd gedrag vertoond.
In plaats van dat hij 45 graden draait bij zijn eerste loop draait hij m.i. maar de helft hiervan. Pas hierna draait hij de aangegeven 45 graden.

Kent iemand de reden van dit gedrag en zo ja hoe kan ik dit voorkomen.
De sketch is bedoeld voor het aansturen van een draaischijf. Door die halve verplaatsing zal de draaischijf nooit goed werken.

Hieronder heb ik de sketch even geplakt.
Ik hoop dat hier op het forum iemand is die mij hierin kan helpen.

Alvast bedankt,

Hans Mol

// TEST steppermotor met 1 button voor- en achteruit
//****************************************************************************************

#include <AccelStepper.h>                         // Gebruikt AccelStepper bibliotheek

//constanten
#define motorPin1  6                              // IN1 pin op de ULN2003A driver
#define motorPin2  7                              // IN2 pin op de ULN2003A driver
#define motorPin3  8                              // IN3 pin op de ULN2003A driver
#define motorPin4  9                              // IN4 pin op de ULN2003A driver

const int buttonPin = 10;                         // drukknop1 pin 10
                           
//variabelen
int buttonState = LOW;                            // waarde van de drukknop1

int stepsPerRevolution = 64;                      // stappen per omwenteling
float degreePerRevolution = 5.625;                // graden per stap

int teller = 0;

/*
* We maken gebruik van een 28BYJ-48 motor. Dit is een halfwire stepper met 4 pins.
* Hierbij dient de volgorde van de pins gewijzigd te worden in 1,3,2,4.
*/
AccelStepper stepper(AccelStepper::HALF4WIRE, motorPin1, motorPin3, motorPin2, motorPin4);

//****************************************************************************************

void setup() {
 
  stepper.setMaxSpeed(800.0);                     // stel de maximale motorsnelheid in
  stepper.setAcceleration(100.0);                 // stel de acceleratie in
  stepper.setSpeed(150);                          // stel de huidige snelheid in
 
  pinMode(buttonPin, INPUT);                      // stel de switch pin1 in als invoer 
}

//****************************************************************************************

void loop() {
 buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH)
 {
   teller++;
//   delay(500);
 }
     if (teller == 1)
       stepper.moveTo(degToSteps(45));
       stepper.run(); 
//       delay(10000);
        if (teller == 2) {
       stepper.moveTo(degToSteps(-45));
       stepper.run();
//       delay(10000);
        } else {
       if (teller > 2)
       teller = 0;
   }
 }

//****************************************************************************************

/*
* Rekent het aantal graden om naar het aantal stappen
* 28BYJ-48 motor heeft 5,625 graden per stap
* 360 graden / 5,625 = 64 stappen per omwenteling
* Voorbeeld van degToSteps(45):
* (64 / 5,625) * 45 = 512 stappen
*/

float degToSteps(float deg) {
  return (stepsPerRevolution / degreePerRevolution) * deg;
}
« Laatst bewerkt op: 30 juli 2020, 19:31:31 door Hans Mol »

coldforged

  • Offline Offline
  • Berichten: 138
Re: Arduino hulp gezocht
« Reactie #1 Gepost op: 30 juli 2020, 19:09:51 »
Hoi,

waarschijnlijk dat deze link je verder helpt er mee:
http://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/

grtz
Martin

meino

  • Offline Offline
  • Berichten: 2098
Re: Arduino hulp gezocht
« Reactie #2 Gepost op: 30 juli 2020, 19:12:31 »

ik heb een aantal opmerkingen.
Ten eerste houd je geen rekening met de bounce die kan optreden bij een schakelaar. Dat houdt in, dat op het moment van sluiten (of openen) van een schakelaar er vaak een korte periode is dat er door de schakelaar een serie open- en sluitmomenten zijn. Ik gebruik altijd een timer en pas als de situatie gedurende zeg 10-15ms constant is, besluit ik om daar op te reageren. De Arduino is snel genoeg om op de korte pulsen van de bounce te reageren, dus het kan goed zijn dat hij meerder button pushes ziet.

Een tweede punt is, dat je in de loop functie continue de staat van de button uitleest, dat kan goed gaan als je zo snel bent dat tijdens de volgende iteratie je de buttion al hebt losgelaten. Die kans is uiterst klein. Dus de schets zal continue de stepper laten schakelen tussen 45 en -45 graden. Dus je zult pas naar de andere richting kunnen gaan als de button ook een tijdje af is geweest.

Laatste punt is, je gebruikte stepper kent niet een geheel aantal stapjes per omwenteling. Je lost dat op door met floats te werken, maar wat ik mij herinner van de Accelstepper is dat die met gehele getallen werkt, dus je gaat afrondings verschillen krijgen. In dit voorbeeld heeft dat nog geen grote invloed omdat de afrondingsverschillen naar beide kanten hetzelfde zijn, dus elkaar opheffen. Maar dat zal niet het geval zijn als je met verschillende hoeken gaat werken en de afrondingsverschillen op verschillende manieren kunnen worden opgeteld. Beter is het om een tabel met positities te gebruiken en zorgen dat je nooit deze stepper meer dan 360graden te laten draaien, maar altijd terug te gaan.

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

ikbenerevenniet

  • Offline Offline
  • Berichten: 379
Re: Arduino hulp gezocht
« Reactie #3 Gepost op: 30 juli 2020, 19:14:44 »
Wil je je code even tussen code-tags zetten? (de knop met het hekje, #) Nu wordt de layout van de hele pagina uit elkaar gedrukt... En: ik denk dat "degreePerRevolution" eigenlijk "degreePerStep" zou moeten heten.

Hans Mol

  • Offline Offline
  • Berichten: 257
    • Echaztalbahn 2.0
Re: Arduino hulp gezocht
« Reactie #4 Gepost op: 30 juli 2020, 19:36:58 »
Beste Meino en Erik,

Alvast bedankt voor jullie tips. Hier ga ik mee aan de slag.
Ik heb de code nu tussen ## staan. Dat is inderdaad beter. (wist niet dat dit zo werkte)

Hans

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino hulp gezocht
« Reactie #5 Gepost op: 30 juli 2020, 20:59:57 »
Waarom gebruik je zowel #define als const om een I/Opin te declareren? #define wordt afgeraden.

In het programma noemen ze dit een halfwire stepper, van een halfwire heb ik nog nooit gehoord, wel van half step en full step.

Ze noemen 64 stappen/omwenteling (van 360 graden), dan is 45 graden (=360/8) toch ook gewoon 64/8 = 8 stappen? Hoe komen ze dan bij 512 stappen??

Dit programma kijkt of zoekt niet naar een vaste startpositie, het laat de motor draaien vanuit de stand waar die op dat moment staat. Dat hoeft geen probleem te zijn, maar voor een draaischijf of traverse gaat het niet goed werken.

Er zijn ook stepper motor drivers die met 2 I/O pinnen aangestuurd worden, met een A3967 chip ipv ULN2003; 1 pin voor richting (H = linksom, L = rechtsom) en 1 klok pin (iedere L--->H overgang verdraait de motor 1 stap). Dat is eenvoudiger te programmeren, zonder externe library.


 
« Laatst bewerkt op: 30 juli 2020, 21:02:34 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Hans Mol

  • Offline Offline
  • Berichten: 257
    • Echaztalbahn 2.0
Re: Arduino hulp gezocht
« Reactie #6 Gepost op: 30 juli 2020, 21:15:52 »
Beste 72sonett

Wat betreft Arduino ben ik een absolute leek. Hetgeen ik nu heb is gemaakt op basis wat ik op internet hierover kan vinden. Daarbij heb ik sketches over push buttons en steppermotor gecombineerd. Voornamelijk komen deze van Bas on Tech.
Wat ik eigenlijk wil is met een Uno een steppermotortje met 4 knoppen een zelfgemaakte draaischijf in 4 posities plaatsen

Druk op knop 1: xxgraden rechts
Druk op knop 2. xxgraden links
Druk op knop 3. 180 graden rechts
Druk op knop 4. 180 graden terug

Helaas bestaan er geen kant en klare sketches hiervoor. Dus maar zelf aan de slag met de info die beschikbaar is.
Je begrijpt dat ik op jouw vragen geen antwoord heb. Daarvoor ontbreekt simpelweg de kennis bij mij. Maar al doende leert men😄

meino

  • Offline Offline
  • Berichten: 2098
Re: Arduino hulp gezocht
« Reactie #7 Gepost op: 30 juli 2020, 23:04:49 »
Hans

ik heb nog een paar opmerkingen. Ik weet niet waar je het vandaan hebt dat deze stepper (28BYJ-48) 64 stapjes heeft voor een omwenteling. Volgens de informatie die ik heb heeft de stepper zelf maar 32 stapjes per omwenteling. Echter er zit een vertragingsbakje op die ongeveer een vertraging heeft van 64:1. Ik zeg ongeveer 64:1, omdat het werkelijk 63.68395 : 1 is. Daardoor zijn er 32 x 63.68395 = 2037.8864 stapjes nodig om een volledige rotatie van 360 graden te maken. Iedereen rond dat af tot 2038 stappen voor een 360 graden rotatie. Maar door dat kleine afrondingsverschil kun je niet door gaan met roteren, omdat bij iedere rotatie van 2038 stappen de afwijking groter wordt. Daar moet je dus rekening mee houden in je positionering.
Verder een stappenmotor heeft geen vaste locatie, als hij stroomloos is, dan is hij vrij om te bewegen, bij deze stappenmotor zal de tandwielkast van de vertraging de stand van de motor proberen te blokkeren, maar hij kan nog steeds bewegen, dus bij inschakelen is er geen garantie ddat hij in de stand staat die je verwacht. Dus moet je een soort van calibratie hebben om de stappenmotor weer in een bekende positie te krijgen.

Ik heb een Peco draaischijf met een stappenmotor en een Arduino geautomatiseerd, maar dat is met een NEMA17 motor en een magneet met hallsensor op de draaischijf. Vraagje wat is de grote van de draaischijf, H0 -N. Ik werk in H0 en wilde oorspronkelijk ook dit stappenmotortje gebruiken, maar dat was niet sterk genoeg voor een H0 draaischijf, vandaar de NEMA17 motor met een TMC2130 driver board.
Overigens kun je wel mijn schets krijgen, maar die werkt wel via DCC commando's.

Groet Meino
« Laatst bewerkt op: 30 juli 2020, 23:37:03 door meino »
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

coldforged

  • Offline Offline
  • Berichten: 138
Re: Arduino hulp gezocht
« Reactie #8 Gepost op: 30 juli 2020, 23:17:20 »
@meino: ik heb best interesse in die source aangezien dat met dcc gebeurd

meino

  • Offline Offline
  • Berichten: 2098
Re: Arduino hulp gezocht
« Reactie #9 Gepost op: 30 juli 2020, 23:34:52 »
Stuur me maar een PB met je mailadres.

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

Hans Mol

  • Offline Offline
  • Berichten: 257
    • Echaztalbahn 2.0
Re: Arduino hulp gezocht
« Reactie #10 Gepost op: 31 juli 2020, 06:03:31 »
Hoi Meino,

Bedankt voor je reactie echter ik denk dat het aantal stapjes (64) per omwenteling wel klopt.
In de sketch geef ik het aantal graden in van bijv. 180 en dat doet hij dan ook. 
Het klopt wel dat je met een afwijking kan komen te zitten wanneer je verder gaat dan 360 graden. Maar de bedoeling is om of 45 grd of 180 grd te draaien en daarna altijd terug. (In de praktijk ofwel afslag naar locloods ofwel de loc draaien. Dan heft deze het afrondingsverschil weer op.

Ik rijd H0 maar heb, om redenen van ruimtegebrek, zelf een draaischijfje met een diam. van 14 cm gebouwd.  Deze steppenmotor kan deze kleine draaischijf wel aan. Ik rijd overigs alleen met kleine locs.

Helaas kan ik dus niets met jouw sketch.
Maar toch bedankt voor je aanbod.

Inmiddels heb ik de sketch zo ver dat het probleem bij de start (het slechts voor de helft draaien van het aantal opgegeven graden heb opgelost.  Ik vermoed dat dit kwam door de accelstepper.h. Door nu eerst een opdracht te geven om de eerste stap 0 graden te draaien en pas verder in de loop de opdracht te geven voor het gewenste aantal graden reageert de steppermotor nu goed. 
Ik zal, als ik wat verder ben, de actuele sketch plaatsen.

Ik kom wat verder maar ik ben er nog niet.

Groeten

Hans