Modelbaanbesturing > Algemene vragen & polls

Arduino

(1/1)

Michel Bikkel:
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
  }
}

Rob:
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:

* Van elke pin een weerstand naar de GND (weerstand van 1k of 10k), die maakt de pin 'laag'.
En dan een drukknop (maakcontact) verbonden tussen de pin en de 5V. Als je de drukknop indrukt, wordt de pin HIGH en gaat de motor draaien.
* Een drukknop met breekcontact gebruiken. Die sluit je aan tussen de GND en de pin. Standaard is de pin dan laag, omdat deze is verbonden met de GND. Zodra je de knop indrukt, wordt het contact verbroken en is de pin weer HIGH

* Het programmaatje aanpassen, zodat deze reageert op LOW ipv HIGH. Dan heb je een drukknop (maakcontact) nodig met de GND. Indrukken maakt de pin LOW. In dat geval is het beter om ook de pinnen expres HIGH te zetten. Dat kan met de ingebouwde pullup weerstanden van de arduino, door het pinMode commando aan te passen:
pinMode(knop1, INPUT_PULLUP)
De detectie wordt dan
  if (toestandknop1 == LOW) {
Hetzelfde voor knop 2

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

Michel Bikkel:
Hoi Rob,

Krijg het niet voor elkaar. ga opzoek naar een juist aansluitschema, denk dat daar de fout ergens zit.

Rob:
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

Navigatie

[0] Berichtenindex

Naar de volledige versie