Show Posts
Pages: [1]
1  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: March 08, 2013, 05:25:02 am
Der Anfang ist gemacht smiley

http://www.youtube.com/watch?v=iwclBOGCIok&feature=youtu.be
2  International / Deutsch / Processing Integer nach Arduino on: February 28, 2013, 12:52:07 pm
Hallo,

ich würde gerne Daten von Processing an mein Arduino Uno R3 übertragen, um letztendlich eine Reihe von Motoren mit Processing steuern zu können.
Zum testen habe ich vorerst eine Eingabe im Serial Monitor von Arduino gemacht, um zu schauen, ob der Motor nach Eingabe der gewünschten Schritte auch dementsprechend dreht. Das funktioniert super.
Verwendet habe ich hier zu folgenden Code:

Code:
int pinStep = 3;
int pinDir = 2;


unsigned int integerValue=0;  // Max value is 65535
char incomingByte;

void setup()
{
  pinMode(pinDir, OUTPUT); /* Richtung */
  pinMode(pinStep, OUTPUT); /* Schritte */
  Serial.begin(9600);
}

void loop()
{

  // Wenn seriale Daten von extern kommen, in dem Fall von Processing 
  if (Serial.available() > 0) {   // something came across serial
    integerValue = 0;         // throw away previous integerValue
    while(1) {            // force into a loop until '\n' is received
      incomingByte = Serial.read();
      if (incomingByte == '\n') break;   // exit the while(1), we're done receiving
      if (incomingByte == -1) continue;  // if no characters are in the buffer read() returns -1
      integerValue *= 10;  // shift left 1 decimal place
      // convert ASCII to integer, add, and shift left 1 decimal place
      integerValue = ((incomingByte - 48) + integerValue);
    }
    Serial.println(integerValue);   // Do something with the value
   
    drehen(integerValue,250); // Anzahl der Mikroschritte , Zeit in ms
    delay(1000); // Pause
  }
     
}

void drehen(int schritte, int tempo)
{
  if(schritte > 0) /* Positive Drehrichtung */
    digitalWrite(pinDir,HIGH);
  else /* Negative Drehrichtung */
  digitalWrite(pinDir,LOW);

  schritte = abs(schritte); /* Absolute Schritte */

  for(int i=0; i < schritte; i++)
  {
    digitalWrite(pinStep, HIGH);
    delayMicroseconds(tempo);
    digitalWrite(pinStep, LOW);
    delayMicroseconds(tempo);
  }
}

Nun soll mein Arduino diese Daten von Processing empfangen. Übergeben sollen Daten als Integer von 0 bis 1600.
Doch leider ohne Erfolg, hoffe ihr könnt mir da helfen.

Mein Processing Code:

Code:
import processing.serial.*;

Serial port;
int mx;

void setup()
{
 
  size( 1600, 400 );

  background( 0 );


  println( Serial.list()[0]);
 
  port = new Serial( this, Serial.list()[0], 9600 );
}


void draw()
{

  background( 0 );
  mx = mouseX;

  text(mx, width / 2 - 50, height / 2 );

}

void mouseReleased()
{
  port.write(mx);
  println(mx);
}

Der nächste Schritt wäre dann, mehrere Daten zu übertragen. Vllt. habt ihr da auch noch einen Tipp für mich.
Ich hätte das ganze dann mit
Serial1.write ...
Serial2.write ...
und dementsprechend
Serial1.read ..
Serial2.read
versucht.

Eins noch: Kann man sich den SerialMonitor nicht anzeigen lassen, wenn ein Sketch bei Processing läuft?!
So sehe ich nämlich leider nicht, wie die Daten von Processing beim Arduino ankommen...
Dank für eure Hilfe.
3  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 26, 2013, 03:55:26 pm
Huhu,

also ich habe mich nun schon fast entschlossen, die alten Motoren nicht mehr anzusteuern, und es mit neuen, wo ich sämtliche technische Daten habe zu versuchen.
Ich bin nun schon soweit, dass ich Werte von Processing an Arduino auf Mausklick übertragen bekomme, und der Motor dem entsprechend fährt.
Allerdings habe ich noch ein Grundproblem, undzwar sobald ich weniger wie 200 Mikroschritte fahren will, dreht sich der Motor überhauptnicht smiley-sad alles was größer wie 200 ist funktioniert einwandfrei. Bei 1600 wird genau eine Umdrehung gefahren.

Angeschlossen ist das ganze so:
http://bildr.org/2011/06/easydriver/
Verwendeter Motor:
http://www.physicalcomputing.at/shop/article_A-1107100/Stepper-Motor-Bipolar.html?sessid=fuyWTGQ9EvDkRs49VusSQJptpGgZGbLPcOo71O0zt26WLGHXEnviB3tCk5sZLRet&shop_param=cid%3D10%26aid%3DA-1107100%26

Verwendeter Code auf dem Arduino:

Code:
int pinStep = 3;
int pinDir = 2;

// Wert, der von Processing uebergeben wird
int value = 0;  



void setup()
{
  pinMode(pinDir, OUTPUT); /* Richtung */
  pinMode(pinStep, OUTPUT); /* Schritte */
  Serial.begin(9600);
}

void loop()
{

  // Wenn seriale Daten von extern kommen, in dem Fall von Processing  
  if( Serial.available() )
  {
    //Wert von Processing
    value = Serial.read();
    //Ausgabe in Konsole
    Serial.println( value );

    //Schrittmotoren Uebergabe
    /* Üblicherweise:
     - 1,8°/ Schritt
     - 200 Schritte/ Umdrehung
     - 8 Mirkoschritte = 1 Schritt
     --> 1600 Mikroschritte = 1 Umdrehung
     */
    drehen(value,100); // Anzahl der Mikroschritte , Zeit in ms
    delay(1000); // Pause

  }

}

void drehen(int schritte, int tempo)
{
  if(schritte > 0) /* Positive Drehrichtung */
    digitalWrite(pinDir,HIGH);
  else /* Negative Drehrichtung */
  digitalWrite(pinDir,LOW);

  schritte = abs(schritte); /* Absolute Schritte */

  for(int i=0; i < schritte; i++)
  {
    digitalWrite(pinStep, HIGH);
    delayMicroseconds(tempo);
    digitalWrite(pinStep, LOW);
    delayMicroseconds(tempo);
  }
}


Hoffe Ihr könnt mir da einen Tipp geben.

Was noch nicht klappt, ist den Serial Monitor zu öffnen, während der Processing- Code gestartet ist, aber das bisher auch noch nicht so schlimm smiley

Danke.

PS: Was mir gerade noch auffällt, der Motor wird ziemlich warm, auch dann, wenn er garnicht bewegt wird, es reicht, wenn EasyDriver und Arduino an sind.
Ist das normal?
4  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 22, 2013, 09:18:04 am
Quote
Nein. Dir und Step ist schon richtig. MS1 und MS2 stellen die Ansteuerungsmodi des Schrittmotors ein. Da der Easydriver ein Stromtreiber ist und Du aber nicht die nötige hohe Spannung hast, kannst Du Vollschritte verwenden und es funktioniert einigermaßen.
Also MS1 und MS2 fix auf Masse schalten.

Hab ich gemacht, doch ohne merkliche Änderung, Motor stottert weiterhin.
Foto im Anhang.

Quote
3,5A sind zuviel.
Wie sah die orginale Ansteuerung aus?
Ich hab mal ein wenig gegoogelt. In einem Projekt werden die Motore mit einem ULN2803angesteuert; jeweils 2 Motore mit einem ULN. Der ULN verträgt bei 4 aktiven Ausgängen ca 200 bis 300mA  http://www.aaronklapheck.com/MiniMover.html
Und dort war auch das Datenblatt der Motore:  http://www.aaronklapheck.com/Downloads/MiniMover5/Data_Sheets/MitsumiStepMotor_M42SP-5.pdf

Ja auf die Seite bin ich auch schon gestoßen, allerdings bezweifel ich, dass der Motor der gleiche ist! Meine Motoren haben ursprünglich 6 Kabel, und sind in einer Metallummantelung, welche ich nicht abbekomme, um auf genauere Motordaten zu schließen.
Die Original Ansteuerung habe ich als Foto angehangen.

Quote
Miß mal den Wicklungswiderstand.

Hier komme ich auf 72 Ohm pro Spule. Wenn ich als Elektro-Anfänger richtig gemessen habe.

:
Ich habe auch etwas weiter gebastelt, und auf Teile gewartet, deshalb melde ich mich erst so verspätet.
Undzwar habe ich mir noch einen Testmotor zugelegt, um zu überprüfen ob die Ansteuerung prinzipiell so gelingt.(Ohne MS1 und MS2)
Hierbei handelt es sich um diesen Motor:
http://www.physicalcomputing.at/shop/article_A-1107100/Stepper-Motor-Bipolar.html?sessid=fuyWTGQ9EvDkRs49VusSQJptpGgZGbLPcOo71O0zt26WLGHXEnviB3tCk5sZLRet&shop_param=cid%3D10%26aid%3DA-1107100%26
Die Ansteuerung mit dem Arduino und EasyDriver funktioniert soweit gut!
Dann habe ich versucht, das gleiche mit dem Big EasyDriver zu machen, anstatt einer Umdrehung wir nur noch eine Halbe Umdrehung gefahren...kann ich mir nicht wirklich erklären, denn alles andere ist das gleiche..

Der Grund, wieso ich mir noch einen BigEasyDriver gekauft habe, war die Bereitstellung von mehr Strom für meinen ursprünglichen Motor, doch verwende ich hier den BigEasyDriver, ändert sich nichts gegenüber dem normalen EasyDriver...

Also Fazit bisher:
- Neuer Testmotor mit EasyDriver funktioniert
- Neuer Testmotor mit BigEasyDriver fährt bei gleicher Einstellung nur eine Halbe- Umdrehung
- Ürsprünglicher Motor stottert, unabhäning von EasyDriver, BigEasyDriver mit und ohne Ms1 und M2

Alles mit 1600 Mikroschritte und 250ms/ Umdrehung.




5  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 17, 2013, 05:14:15 pm
Quote
@KeRo Der Easydriver hat mehrere Eingänge für die Schrittmodi. Wähle Vollschritt (MS1 = MS2 = L). Alles andere funktioniert nicht richtig. Dann den Eingang für die Drehrichtung (dir) und den Eingang für die Schritte(step) bei jedem L.H Übergang dreht der Motor einen Schritt weiter. Die Mittelanzapfungen der beiden Motorwicklungen müssen getrennt und nirgens angeschlossen sein und die beiden Wicklung muß an A die andere an B.

D.h. vom Arduino nicht an DIR und STEP, sondern an MS1 und MS2?

Quote
Welchen Wert hast Du für den Spulenstrom am Easy Driver Board eingestellt?
Und welchen Wert hat der Strom, wenn Du 4A durch die Anzahl der im Arm enthaltenen Motoren teilst?

Ich habe sowohl Min=150mA als auch Max=750mA versucht, hat sich jedoch nichts geändert.
Der Arm besitzt insgesamt 6 Motoren. Wäre also 0,6A pro Schrittmotor, wenn dies so wäre.

Wenn ich 12V an eine Spule des Motors klemme, also "+" an ein Kabel und "-" an das andere, und die Stromstärke messe, komm ich auf ca. 3,5A ...und mein Kabel wird warm :O

6  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 17, 2013, 01:40:54 pm
Hier der neue Code:

Mit vier Anschlussdrähten handelt es sich um einen bipolaren Steppermotor.

Bei bipolaren Steppern ist die Step-Schaltfolge an den Pins:
Code:
Step wire 1 wire 2 wire 3 wire 4
1 High low high low
2 low high high low
3 low high low high
4 high low low high

Mit sechs Anschlussdrähten handelt es sich um einen unipolaren Steppermotor.

Bei unipolaren Steppern sind verschiedene Step-Schaltfolge an den Pins möglich, am wenigsten Strom verbraucht:
Code:
Step wire 1 wire 2 wire 3 wire 4
1 low low low high
2 low low high low
3 low high low low
4 high low low low

Oder unipoloar mit mehr Stromverbrauch und mehr Drehmoment:
Code:
Step wire 1 wire 2 wire 3 wire 4
1 low low high high
2 low high high low
3 high high low low
4 high low low high

Also jedenfalls immer 4 Phasen als Schrittfolge, nicht nur 2, egal ob unipoloar oder bipolar.
Bei falscher Stepfolge dreht sich nix.

Hast Du die beiden Mittelabgriffe der Spulenwicklungen herausgefunden?
Wie hast Du alles angeschlossen?
Und warum verwendest Du eigentlich nicht die Arduino Stepper-Library zum Steppen?

Ach ja: Ein Treiber, der nur für 0,75 A ausgelegt wird, wird natürlich an einem 4A-Motor kräftig überlastet, selbst wenn sich die 4A auf die Motor-Gesamtstromaufnahme bezieht. Im Zweifelsfall mal mit einem Multimeter ausmessen, wenn kein Datenblatt vorliegt: Wieviel Strom zieht eine Spulenwicklung eigentlich, wenn sie an 12V angelegt wird?

Hi vielen Dank für deine Antwort.

Die Mittelabgriffe habe ich herausgefunden, genaus wie die 2 Kabel pro Spule.
Dann habe ich die 2 Kabel der einen Spule an A und die 2 anderen Kabel an B meines Easydriver gehangen...

Ich hab gerade mal 12V an zwei Kabel meines Motors angeklemmt, und gemessen. Ungefähr 3A wird gezogen, wenn ich alles richtig gemacht habe smiley

Ich habe mich bisher immer an Beispiel aus dem Internet gehalten, weil ich wie bereits gesagt kaum Ahnung habe :/, so wusste ich bisher noch garnichts von der Stepper-Library.

Also meine Vermutung als Laie ist, dass mein EasyDriver nicht genug Ampere für meinen Motor bereitstellen kann, deshalb auch der Verlust der Schritte.
Nur frage ich mich dann, wie es hier klappen konnte:

http://www.almostscientific.com/2011/10/23/its-alive-mini-mover-5-resurrected-with-arduino/
Hier wird auch ein EasyDriver, was ich in dem Video sehe, sogar der gleiche wie meiner verwendet, und die angesteueten Motoren sind auch identisch..

Was habe ich noch für Möglichkeiten? Außer auf andere Motoren umzuschwenken?

Danke smiley
7  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 16, 2013, 04:08:55 am
Guten Morgen smiley,

da ich leider nicht wirklich weiter komme, habe ich gestern nochmal einen anderen Code versucht.
Hierbei habe ich festgestellt, sobald ich die Zeit für die Umdrehung des Motors nach oben setzte, sich der Motor flüssiger bewegt.
Allerdings werden nicht die eingestellten Schritte gefahren.

Zum besseren Verständnis, habe ich das ganze wieder gefilmt.

1600 Schritte, Zeit 140 ms:
http://www.mherbig.de/2.swf
1600 Schritte, Zeit 280 ms:
http://www.mherbig.de/3.swf
1600 Schritte, Zeit 87 ms:
http://www.mherbig.de/4.swf

Wieso auch immer, scheinen Schritte verloren zu gehen, würde mich sehr freuen, wenn Ihr mir etwas helfen könnt.

Danke smiley

Hier der neue Code:

Code:
#define DIR_PIN 2
#define STEP_PIN 3

void setup() {
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
}

void loop(){
  //rotate a specific number of microsteps (8 microsteps per step)
  //a 200 step stepper would take 1600 micro steps for one full revolution
  //rotate(1600*4, .5);
  //delay(1000);
  rotate(-1600, 140); //reverse
  delay(1000);
}


void rotate(int steps, float speed){
  //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (steps > 0)? HIGH:LOW;
  steps = abs(steps);

  digitalWrite(DIR_PIN,dir);

  float usDelay = speed;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay);

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
}
8  International / Deutsch / MiniMover5 Versuchsprojekt on: February 14, 2013, 07:34:29 am
Hallo an alle Arduino- Freunde,

ich bräuchte etwas eure Hilfe! Ich bin leider kein Elektroniker oder ähnliches, jedoch sehr am Basteln interessiert.
Ich konnte vor kurzem einen MiniMover5 erwerben. Welchen ich nun mittels des Arduino Uno r3 und einem EasyDriver ansteuern möchte.
Ganz ähnlich wie in diesem Beispiel:

http://www.almostscientific.com/2011/10/23/its-alive-mini-mover-5-resurrected-with-arduino/

Bei den eingebauten Schrittmotoren sind 6 Kabel vorhanden, welche ich mit Hilfe dieser Anleitung bereits auf 4 reduziert habe, da ich die "Center-Tabs" nicht benötige:

http://www.easterngeek.com/2010/06/how-to-identify-stepper-motor-lead.html

Die 4 Kabel (je pro Spule) habe ich mit dem EasyDriver verbunden. Zur Zeit wird mein EasyDriver durch ein Netzteil mit 12V und 8A versorgt.
Den Arduino habe ich mit meinem EasyDriver verbunden:

Pin2 --> Dir
Pin3 --> Step
GND --> GND

Den Versuchsaufbau kann man auch genau nochmal in den angehangen Bildern sehen.
Anschließend habe ich folgenden Code auf mein Arduino geladen, um den Schrittmotor zu testen:

Code:
int pinStep = 3;
int pinDir = 2;

void setup()
{
  pinMode(pinDir, OUTPUT); /* Richtung */
  pinMode(pinStep, OUTPUT); /* Schritte */
}

void loop()
{
 
/* Üblicherweise:
  - 1,8°/ Schritt
  - 200 Schritte/ Umdrehung
  - 8 Mirkoschritte = 1 Schritt
  --> 1600 Mikroschritte = 1 Umdrehung
*/ 
  drehen(1600,200); /* Anzahl der Mikroschritte , Zeit in ms */
  delay(1000); /* Pause */
  drehen(-1600,200); /* Anzahl der Mikroschritte , Zeit in ms */
  delay(1000); /* Pause */
}

void drehen(int schritte, int tempo)
{
  if(schritte > 0) /* Positive Drehrichtung */
    digitalWrite(pinDir,HIGH);
  else /* Negative Drehrichtung */
    digitalWrite(pinDir,LOW);
   
  schritte = abs(schritte); /* Absolute Schritte */
 
  for(int i=0; i < schritte; i++)
  {
    digitalWrite(pinStep, HIGH);
    delayMicroseconds(tempo);
    digitalWrite(pinStep, LOW);
    delayMicroseconds(tempo);
  }
}

Was dabei herauskommt, könnt ihr in dem Video sehen:

http://www.mherbig.de/1.swf

Erhöhe ich die Zeit, welche er für eine Umdrehung (1600Mikroschritte) braucht von 200ms auf 2000ms, so dreht er überhaupt nicht mehr...
Desweiteren, ließ sich kein Upload auf mein Arduino mehr machen, sobald ich den EasyDriver mit Strom versorgt habe. Deshalb bin ich auf diesen Theard gestoßen:

http://arduino.cc/forum/index.php?topic=112378.0

Vllt. ist das auch das Problem, dass mein Motor so komisch dreht - fehlende Spannung?!
Das Originalschild auf dem MiniMover5 schreibt:

"12VDC AT 4 AMPS"
Leider habe ich nicht mehr Angaben zum Motortyp oder ähnlichem.

Und 4A können vom EasyDriver nicht bereit gestellt werden..
Könnte das der Fehler sein?
Oder habt ihr noch eine andere Idee?


Ich hoffe Ihr könnt mir da weiterhelfen.

Danke smiley




9  International / Deutsch / Re: MiniMover5 Arduino+EasyDriver on: February 09, 2013, 04:23:39 am
Danke für eure Antworten!

Gibt es die Möglichkeit, den Schrittverlust zurück auf das Arduino- Board zu geben? Um das in der Programmierung berücksichtigen zu können?

KeRo
10  International / Deutsch / MiniMover5 Arduino+EasyDriver on: February 08, 2013, 12:37:51 pm
Huhu,

ich bin ein absoluter Anfänger und hoffe hier auf ein par Antworten zu treffen smiley.
Ich versuche einen alten MiniMover5 wieder zum laufen zu bekommen.


Zum testen habe ich mir nun einen Arduino Uno R3 und einen EasyDriver bestellt.
Das ganze soll nach dieser Logik angesteuert werden:


Ich warte noch auf den EasyDriver, aber ich gehe mal davon aus, dass ich das gut angesteuert bekomme.
Falls das funktioniert, werde ich das ganze mit Insgesamt 6 Schrittmotoren machen.

Vorab stellen sich für mich aber noch ein par Grundsatz fragen:

- Gibt es eine elegante Möglichkeit, die Schrittmotoren anzuhalten, sobald sie gegen einen Anschlag fahren?
- bzw. wie würdet Ihr herangehen, um die Grenzen der jeweiligen Motoren zu bestimmen, bis wohin gefahren werden darf.

Hoffe ihr könnt mir ein wenig helfen smiley

Danke
Pages: [1]