H0 Modelspoor Forum

Modelbaanbesturing => Algemene vragen & polls => Topic gestart door: Michel Bikkel op 24 december 2019, 11:30:10

Titel: Arduino
Bericht door: Michel Bikkel op 24 december 2019, 11:30:10
Hoi,

is hier iemand die mij kan helpen met een Arduino vraagstuk....

Ik wil een draaischijf gaan maken die wordt aangedreven door een stappenmotor.
Het idee is om een digitale uitgang van een wisseldecoder een puls te latengeven en zo de stappenmotor 1 rail positie te laten draaien.
Het probleem voor nu zit hem in de software te schrijven en dan hoe aan te sluiten.

ik heb de volgende software gevonden maar dan draait de motor constant rechts om.
de knoppen wil ik later dus vervangen voor een puls uit een decoder.
 weet echter niet hoe de knoppen aan te sluiten op de arduino


/*
  Een library en een paar constantes definiĆ«ren
 */
#include <Stepper.h>
#define STAPPEN_PER_MOTOR_OMWENTELING 32
#define STAPPEN_PER_TOTAAL_OMWENTELING1 2048 // 64 x 32 = 2048 = 1 omwenteling rechtsom
#define STAPPEN_PER_TOTAAL_OMWENTELING2 -1024 // -1024 = 0.5 omwenteling linksom
 
Stepper small_stepper(
  STAPPEN_PER_MOTOR_OMWENTELING,
  8,
  10,
  9,
  11);                  // stapenmotor variabele
int knop1 = 1;          // knop aan pin 1
int knop2 = 2;          // knop aan pin 2
int toestandknop1 = 0;  // knop1 variabele
int toestandknop2 = 0;  // knop2 variabele
int  TeMakenStappen;    // variabele voor aantal stappen
 
/*
  Het programmablok void setup wordt eenmaal beschreven
*/
void setup(){
  pinMode(knop1, INPUT);  //knop1 is input
  pinMode(knop2, INPUT);  //knop2 is input
}
 
/*
  Het programmablok void loop herhaalt zich keer op keer
*/
void loop(){
  toestandknop1 = digitalRead(knop1);                     // lees toestand knop1
  toestandknop2 = digitalRead(knop2);                     // lees toestand knop2
  if (toestandknop1 == HIGH) {
    TeMakenStappen  =  STAPPEN_PER_TOTAAL_OMWENTELING1 ;  // draai 1x rechtsom
    small_stepper.setSpeed(500);                          // zet de snelheid
    small_stepper.step(TeMakenStappen);                   // loop
  }else if (toestandknop2 == HIGH) {
    TeMakenStappen  =  STAPPEN_PER_TOTAAL_OMWENTELING2 ;  // draai 0,5 keer linksom
    small_stepper.setSpeed(500);                          // zet de snelheid
    small_stepper.step(TeMakenStappen);                   // loop
  }
}
Titel: Re: Arduino
Bericht door: Rob op 24 december 2019, 11:54:59
Hoi Michel,

Als ik het zo lees reageert dit programma'tje op 'high' op knop 1 (pin 1) of knop 2 (pin 2).

Da's op zich niet zo handig, want niet aangesloten pinnen zijn vaak standaard op 'hoog' (=5V).

Nu heb je 3 mogelijkheden:

Als je straks een en ander aan wil sluiten op de decoder is de vraag of de puls 'low' of 'high' is. Maar dat is dan weer een volgende stap...

succes!
Rob
Titel: Re: Arduino
Bericht door: Michel Bikkel op 24 december 2019, 12:36:02
Hoi Rob,

Krijg het niet voor elkaar. ga opzoek naar een juist aansluitschema, denk dat daar de fout ergens zit.
Titel: Re: Arduino
Bericht door: Rob op 24 december 2019, 13:26:48
Hoi Michel,

Je kunt ook proberen de 'if's er even uit te halen.
Als het goed is draait de motor (as) eerst een omwenteling naar rechts en dan een halve naar links, dan weer 1 slag naar rechts, enzovoorts.

Dan weet je in ieder geval dat de motor goed is aangesloten en de aansturing goed is.

Rob