Home‎ > ‎projekte‎ > ‎arduino‎ > ‎

003 - 2stepper 4tasten

TARGET:


2 Schrittmotoren sollen zum Antrieb eines Roboters per 4 Tasten gesteuert werden:
  • up
    • beide Motoren drehen vorwärts
  • down
    • beide Motoren drehen rückwärts
  • left
    • der rechte Motor dreht vorwärts
    • der linke Motor dreht rückwärts
    • resultiert in einer links-drehung
  • right
    • der rechte Motor dreht rückwärts
    • der linke Motor dreht vorwärts
    • resultiert in einer rechts-drehung

SETUP:


Am Adafruit Motor-Shield wurde ein Festplatten-Flachband-Kabel an die ungenutzen aber durchgeschliffenen analogen Pins gelötet um einfach Zugang zu den Kontakten zu bieten.
Dabei wurden auch +5V und GND auf den Flachband-Stecker geleitet.


Auf einem erweiterten Breadboard wurde folgende Schaltung realisiert:

Die Wiederstände ziehen das Signal am Arduino-Eingangs-Pin auf GND ( LOW ).
Wird der Taster betätigt, geht der Eingang auf HIGH, weil er direkt mit 5V verbunden wird.


Der 2. Stepper ist ein anderes Modell. Beobachtet habe ich aber nur die Drehrichtung.

Zusätzlich wurde der Status noch auf der Seriellen Schnittstelle des Boards ausgegeben.

EXPERIENCE:


Solange nichts angeschlossen ist sind Inputs am Arduino wender HIGH oder LOW.
Man muß über einen Pull-Up-Widerstand gegen +5V oder Pull-Down-Widerstand gegen GND erst einen Signal-Zustand definieren. Dieser kann dann durch den Schalter gewechselt werden.




CODE:


#include <AFMotor.h>

// instantiate motor-objects
AF_Stepper moto1( 200, 2 );
AF_Stepper moto2( 200, 1 );

// define input-pin-numbers
int up= 17; // up
int dw= 16; // down
int rt= 15; // left
int lf= 14; // right

// instantiate variables
int left=0;   // left motor direction
int right=0; // right motor direction

void setup() {
  // set up Serial library
  Serial.begin(9600);          
  Serial.println("Stepper controll V1.0");
 
  // input pin setup
  pinMode( up, INPUT);
  pinMode( dw, INPUT);
  pinMode( lf, INPUT);
  pinMode( rt, INPUT);
 
  // motor-setup
  moto1.setSpeed(20);  // 10 rpm  
  moto2.setSpeed(20);

  moto1.release();
  moto2.release();
 
  // startup delay
  delay(5000);
  Serial.println("START");
}

void loop() {
  int button= getInput(); // pressed button 

  left= 1;
  right= 1;


  if ( button==up ) {
    Serial.print(" up  \n"); 
  }
  if ( button==dw ) {
    Serial.print(" down  \n");
    left= -1;
    right= -1; 
  }
  if ( button==lf ) {
    Serial.print(" left  \n");
    left= -1;
  }
  if ( button==rt ) {
    Serial.print(" right  \n");
    right= -1;     
  }
  move();     // get movin'    
  button= 0;
}

// going through the butons and return
// the pin-number of the first pressed button
int getInput () {
  Serial.print("get input ");

  int i= 14; // start with pin 14
 
  do {
     int pin= digitalRead(i);
     if ( pin==LOW ) {
       Serial.print(" button pressed: ");
       Serial.print(i);
       return i;
     } 
     i++;
     if (i==18) i=14;
  } while (i>0);
}

int move() {
  Serial.print(" moving  \n");
  int j=0;
  int moto1_d= FORWARD;
  int moto2_d= FORWARD;
 
  if ( left==-1 ) {
    moto1_d= BACKWARD;
  }
  if ( right==-1 ) {
    moto2_d= BACKWARD;
  }
 
  for ( j=0 ; j<50; j++ ) {
    moto1.step( 1, moto1_d , DOUBLE );
    moto2.step( 1, moto2_d , DOUBLE );
  } 

}