INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
03.04.2014, 07:25 (Dieser Beitrag wurde zuletzt bearbeitet: 03.04.2014 09:30 von Vittelboy.)
Beitrag #1
Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Halli Hallo, Smile
ich habe gerade erst mit dem Thema Arduino angefangen und Stehe vor einem Problem.
Und zwar habe ich das Adafruit Motorshield 1.2 mit dem ich 2 Getriebemotoren über einen Joystick ansteuern möchte.
Ziel des Aufbaus ist ein Remote Head für einen Kamerakran der die Kamera bewegen soll und zwar mit weicher anfahrt und weicher Bremse.
Ich würde also gerne mit einem Joystick die beiden Motoren in der Richtung und Geschwinigkeit steuern und eventuell mit einem Poti die maximal Geschwindigkeit regulieren.

Ich habe schon alles mögliche ausprobiert und das einziege was ich gerade schaffe ist das wenn ich den joystick umlege das sich der Motor vorwärts dreht und nicht mehr auf hört...Dodgy

Das ist mein erster Forenbeitrag überhaupt also bitte ich meine unbeholfenheit zu endschuldigen. Blush
wär echt saugeil wenn mir wer helfen kann Wink

LG
Vittelboy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2014, 10:00
Beitrag #2
RE: 2 DC Motoren über Motorshield mit Joystick steuern
Hallo!
Wenn die Motoren drehen, hast das gröbste schon geschafft.
Ich denk mal... Joystick Taster an Analog 1, eventuell mit Pullup
Joystick X an Analog 2,
Joystick Y an Analog 3,
...meine Stickachsen bringen Werte von 80 - 1020, Mittelstellung bei 540.

/* analog Joystick control */
{
int valuet = analogRead(0); // analogpin for Joytaster
int valuex = analogRead(2); // analogpin for JoyX
int valuey = analogRead(1); // analogpin for JoyY
#define _BUTTON_analog_up 520 // Button Up
#define _BUTTON_analog_down 560 // Button Down
#define _BUTTON_analog_left 520 // Button Left
#define _BUTTON_analog_right 560 // Button Right
#define _BUTTON_analog_enter 200 // Button Enter

if( valuet <= _BUTTON_analog_enter) { LCDML.Button_enter(); }
else if( valuex <= M1 links) { // control up }
else if(valuex >= M1 rechts) { // control down}
else if(valuey >= M2 links) { backlight, HIGH; }
else if( valuey >= M2 rechts) { }}

so könntest event. schon mal die Drehrichtung festlegen.
Speed geht dann von 0-255...

int speedxr = map (valueX, 570, 1020, 0, 255);
..nur mal so als Idee...die Ausgangsfrequenz (nach Bedarf) eingestellt lassen.
mfg Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2014, 11:12
Beitrag #3
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hi,
vielen Dank für die schnelle Antwort. Smile
Ich habe einen Joystick ohne Taster also habe ich den Enter Teil rausgenommen und versucht es dem Motorshield anzupassen.
Jedoch bekomme ich beim Compilen ein paar Fehlermeldungen...

was habe ich vergessen Huh

#include <AFMotor.h>

AF_DCMotor motor1(3);
AF_DCMotor motor2(4);



void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");


}

void loop()

/* analog Joystick control */
{

int valuex = analogRead(1); // analogpin for JoyX
int valuey = analogRead(0); // analogpin for JoyY
#define _BUTTON_analog_up 510 // Button Up
#define _BUTTON_analog_down 490 // Button Down
#define _BUTTON_analog_left 510 // Button Left
#define _BUTTON_analog_right 490 // Button Right



if( valuex <= motor1.run(FORWARD))
else if(valuex >= motor1.run(BACKWARD))
else if(valuey <= motor2.run(FORWARD))
else if( valuey >= motor2.run(BACKWARD))
{

}
}

Fehlermeldung:

Remote2.ino: In function 'void loop()':
Remote2:33: error: void value not ignored as it ought to be
Remote2:34: error: expected primary-expression before 'else'
Remote2:34: error: expected `;' before 'else'
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.04.2014, 08:21
Beitrag #4
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hallo!
Ok, da müssen wir weiter ausholen..
Der von mir gepostete Code ist ja so nicht funktionell und sollte nur zur Orientierung
dienen. Also, beginnen wir bei 0....
Zuerst mal der Aufbau:
Uno mit Motorshield und 2 Motore...? Was kommt sonst noch an die Schaltung..
Display, Sensoren...?
Sollte man dann doch übers Wochenende schaffen..

mfg Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.04.2014, 08:35
Beitrag #5
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hallo,

ich habe den Code gerade so umgeändert das es fast funktioniert.
Ich kann jetzt beide Motoren mit dem Joystick Steuern. Leider ist Backward schneller als forward und wenn ich das PWM Signal mit dem Oszilloskop messe habe ich keine durchgehende Spannung sondern Kleine abfälle, die zwar für PWM Okay wären, aber wenn ich in einem einfachen Programm den Motor mit 255 speed laufen lasse nicht habe. Huh

Ja genau ich habe den UNO und das Adafruit Motorshield 1.2 und 2 Getriebemotoren.
und es soll noch mit einem Poti die maximal Geschwindigkeit beider Motoren geregelt werden.

Hier mal der Code mit dem es halb funktioniert.

Zitat:#include <AFMotor.h>

AF_DCMotor motor1(3);
AF_DCMotor motor2(4);



void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
}
void loop()
/* analog Joystick control */
{

int valuex = analogRead(1); // analogpin for JoyX
int valuey = analogRead(0); // analogpin for JoyY
{
if( valuex >= 555){
motor1.run(FORWARD);
motor1.setSpeed(255) ;
}else if(valuex <= 555){
  motor1.run(RELEASE);}

if(valuex <=535){
motor1.run(BACKWARD);
motor1.setSpeed(255);
}else if(valuex >= 535){
  motor1.run(RELEASE);}

if(valuey >= 500){
motor2.run(FORWARD);
motor2.setSpeed(255);
}else if(valuey <= 500){
  motor2.run(RELEASE);}

if( valuey <= 480){
motor2.run(BACKWARD);
motor2.setSpeed(255);}
else if(valuey >= 480){
  motor2.run(RELEASE);}
  
}
}

mfg Vittelboy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.04.2014, 11:24
Beitrag #6
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hallo!
Speed wird über ein extra poti vorgegeben ? Gut, machts einfacher.

int valuesp = analogRead(2); // poti für Speed
int speed = map (valuesp, 0, 1024, 0, 250)

die (255) durch (speed) ersetzen.

Versuch mal ,
motor.run(FORWARD); motor.run(RELEASE);motor.setSpeed(speed);
in die If zeile zu packen, glaube , mit dem else nimmst ihm die Freigabe ?



mfg Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.04.2014, 12:17
Beitrag #7
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hallo,

danke für den Poti Code Smile
es funktioniert soweit alles (mit Joystick die Motoren ansteuern und mit Poti die Geschwindigkeit begrenzen). Allerdings ist jetzt noch das Problem, dass die Geschwindigkeit in der einen Richtung okay, aber nicht auf Vollgas ist und sich die Motoren in der anderen Richtung kaum bewegen.
Außerdem würde ich die motoren sanft anfahren und bremsen lassen.

MFG
Vittelboy

Zitat:#include <AFMotor.h>

AF_DCMotor motor1(3);
AF_DCMotor motor2(4);



void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
}
void loop()
/* analog Joystick control */
{
int valuesp = analogRead(2); // poti für Speed
int speed = map (valuesp, 0, 1024, 0, 250);
int valuex = analogRead(1); // analogpin for JoyX
int valuey = analogRead(0); // analogpin for JoyY
{
if(valuex >= 575){
    motor1.run(FORWARD);
    motor1.setSpeed(speed);}
if(valuex <= 575)
    {motor1.run(RELEASE);}


if(valuex <=515){
    motor1.run(BACKWARD);
    motor1.setSpeed(speed);}
if(valuex >= 515)
    {motor1.run(RELEASE);}


if(valuey >= 517){
    motor2.run(FORWARD);
    motor2.setSpeed(speed);}
if(valuey <= 517)
    {motor2.run(RELEASE);}


if(valuey <= 457){
    motor2.run(BACKWARD);
    motor2.setSpeed(speed);}
if(valuey >= 457)
   {motor2.run(RELEASE);}
  
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2014, 13:14 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2014 08:52 von P.Martin.)
Beitrag #8
RE: Wie steuere ich 2 DC Motoren über ein Motorshield mit einem Joystick?
Hallo!
Achsanwahl mit Joystick, Speed mit dem Poti , max. Speed in der map Funktion
hinterlegen (250) ?
...oder die Joystickwerte mit map aufbereiten und 0-100% mit dem Stick regeln .
Poti dann nur zum Begrenzen ..könnte man ja auch die PWM Frequenz vom Shield
runternehmen..?

..so sollten doch mal beide Achsen in beide Richtungen laufen...

if(valuex >= 550){ motor1.run(RELEASE); motor1.setSpeed(speed); motor1.run(FORWARD) ;}
else if(valuex <= 500){ motor1.run(RELEASE); motor1.setSpeed(speed); motor1.run(BACKWARD) ;}

/*if(valuey >= 550){ motor2.run(RELEASE); motor2.setSpeed(speed); motor2.run(FORWARD) ;}
else if(valuey <= 500){ motor2.run(RELEASE); motor2.setSpeed(speed); motor2.run(BACKWARD) ;} */

edit: Das mit dem Release ist bei meinen Breakouts genau verkehrt...
Sorry, wollte keine Verwirrung stiften.
Versuchs mal mit minimalem Code, nur eine Achse ...
Definiere auch die Frequenz, sonst laufen sie nur mit 1K (ohne Dampf )

AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

if(valuex >= 550){ motor1.setSpeed(speed); motor1.run(FORWARD) ;}
else if(valuex <= 500){ motor1.setSpeed(speed); motor1.run(BACKWARD) ;}

Welche Stromversorgung hast für das Shield (Motore) ?

mfg Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Kommunikation über das WiFi-Shield Flap 3 230 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Menü über Bluetooth Eingabe abwarten anwo 4 502 18.10.2016 08:59
Letzter Beitrag: Lolliball
  Daten über USB verarbeiten Felix91 10 319 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Code mit Verifikation über Keypad & LCD machnetz 5 215 10.10.2016 15:01
Letzter Beitrag: torsten_156
  A4988 Driver mit einem Nema 17 Hangloose 3 140 04.09.2016 21:49
Letzter Beitrag: Hangloose
  Arduino Steuern über eigne Homepage b3ta 8 395 16.08.2016 11:07
Letzter Beitrag: Pit
  I2C LCD mit Motorshield benutzen nomis 6 295 06.06.2016 16:57
Letzter Beitrag: nomis
  DUE-MEGA über I2C Verbinden HTO 0 220 22.05.2016 10:16
Letzter Beitrag: HTO
  Serial Monitor Eingabe über Code Maxi290997 4 519 12.05.2016 18:57
Letzter Beitrag: SkobyMobil
  Kann ich mit einem Arduino ein Gyro für Adroid Simulieren? Demitos 0 405 16.03.2016 18:33
Letzter Beitrag: Demitos

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste