Motoren steuern

Hallo! Ich bin erst ein Anfänger.
Ich möchte wissen, wie man in arduino motoren steuert(Mit Pushbutton)
Mann drückt auf den Taster drauf, und der Motor dreht sich solange bis man den Taster wieder loslässt. Geht das mit digitalWrite?

Danke :slight_smile:

Vielleicht so: (ohne Pushbutton)?

motorpin = pinMode(2) //oder anderer Pin
void main()
{
     digitalWrite(motorpin, HIGH)
     digitalWrite(motorpin, LOW)
}

hilft mir keiner? Das ist ja ein guter erster eindruck!

Ich habe genau so angefangen ich hatte eine Idee für ein Projekt.
Der nächste Schritt ist sich viele Projekte anschauen den Code anschauen und dann bekommt man immer mehr verständnis für die Materie.
Man versucht sich einfach am Anfang ein bisschen die Sachen angucken ein bisschen zusammenkopieren und während den ganzen kopierne und probieren kommt man auf neuer Ideen und passt seine Code dann an und so ist das dann ein learning by doing.
Es kommt immer bescheiden an. z.B. zu sagen wenn ich auf einen taster drücke soll sich eine LED dimmen heller dunkler und dann heller.
Bitte macht mir mal eine Code dafür.

Selber probieren und wenn man dann auf Probleme stößt kann man diese konkret beschreiben und man bekommt sehr kompetente Lösungen bzw gute Ansätze für eine Lösung.

Dieser Weg ist immer der bessere

Der Code von dem Example "Button" ist so:

/*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital  
 pin 13, when pressing a pushbutton attached to pin 7. 
 
 
 The circuit:
 * LED attached from pin 13 to ground 
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.
 
 
 created 2005
 by DojoDave <http://www.0j0.org>
 modified 17 Jun 2009
 by Tom Igoe
 
  http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

muss ich dann statt digitalWrite(ledPin, HIGH)
digitalWrite(motorPin, HIGH) nehmen?

muss ich dann statt digitalWrite(ledPin, HIGH)
digitalWrite(motorPin, HIGH) nehmen?

So könnte man es sagen, ja. Allerdings ist es vollkommen egal, wie du die Variable nennst, in der die Pinnummer gespeichert ist. Es könnte auch digitalWrite(schnackeldoens, HIGH) dabei rauskommen, alles eine Frage deiner Kreativität :wink:

Sei vorsichtig mit einem Motor. Normale DC-Motoren, die man zuhause vielleicht irgendwo rumliegen hat, solltest du keinesfalls direkt an den Arduino anschließen. Steuer mit dem Arduino einen Transistor (am besten einen MOSFET) an, der soll dann den Motor anschalten. Der maximal zulässige Strom aus einem Pin am Arduino ist sehr begrenzt und reicht nicht, einen solchen Motor zu "versorgen". Außerdem enstehen beim Abschalten des Motors hässliche Spannungsspitzen, die bei direktem Anschluss an einem Digital-Pin in den Arduino zurückwandern und dir den Prozessor zerschießen können (wenn du keine Gegenmaßnahmen triffst).

Ansonsten noch der Tipp: Immer auch mal im Playground vorbeischauen wenn es um so grundlegende Fragen geht (es sei denn du bist des englischen nicht mächtig, dann sei dir verziehen). Da gibt es z.B. den Link hier (ist sogar noch ein wenig umfangreicher): http://www.arduino.cc/playground/Main/DCMotorControl

das die var egal ist, weis ich, und einen MOSFET (gib mir mal die Bestellnr. bei Conrad etc.)
außerdem gibt es doch auch bestimmt Arduino-Motoren oder?

Danke

gib mir mal die Bestellnr. bei Conrad etc

Ein solcher Befehlston ist im Forum nicht gerne gesehen. [smiley=angry.gif]

Sorry, aber so hat wirklich niemand Lust dich zu unterstützen.

Zu deinem Problem:
Falls du Probleme mit dem Sketch hast, kannst du zum Test auch eine Leuchtdiode verwenden, welche beim Drücken des Buttons angeht.

Schau dir mal diesen Thread an:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230677423

Und noch genauer hier:
http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads

Achso: LEGO-Motoren sollen von dem Pushbutton abhängig sein.

Achso: LEGO-Motoren sollen von dem Pushbutton abhängig sein.

Was meinst du damit?

ja also, lego motoren werden beim drücken des pushbuttons eingeschaltet!

ja also, lego motoren werden beim drücken des pushbuttons eingeschaltet!

Welche Legomotoren verwendest du dazu? Art-Nr?
Wenn du die Lego-Motoren mit dem Arduino ansteuern willst, musst du das Drücken der Pushbottons (wo sind die platziert) über die Arduino-Ansteuerung realisieren.

Damit wir dir helfen können, musst du uns schon ein paar Informationen über verwendete Komponenten usw liefern.
Nur fragen ob das geht, ist ein bisschen zu wenig >:(

Art.Nr der Legomotoren:
8883
Link:
http://search2.lego.com/exec/?q=LEGO%20Motor&pt=&lang=1031&cc=DE&u=

Wenn du die Lego-Motoren mit dem Arduino ansteuern willst, musst du das Drücken der Pushbottons (wo sind die platziert) über die Arduino-Ansteuerung realisieren.

Was meinst du damit?

Keine Antwort?

Durch Drücken des Pushbuttons wird der Stromkreis geschlossen und der Motor bekommt Spannung und bewegt sich.

Da du nun den Motor mit dem Arduino ansteuern willst, muss du, wie bereits gesagt, das Schliessen des Pushbuttons durch die Arduino-Ansteuerung ersetzen.

Aus der Katalogansicht ist leider nicht ersichtlich wo der erwähnte Pushbutton ist und wie die Schaltung rund um den Motor aussieht.

Du musst also zuerst herausfinden, welche Anschlüsse für die Ansteuerung des Motors nötig sind.

Wie man Motoren mit Arduino ansteuern kannst, zeigen die Links weiter oben.

Nachtrag:
vermutlich habe ich das mit dem Pushbutton falsch interpretiert.
Dir geht es wohl darum mittels eines Pushbuttons einen Eingang anzusteuern. Durch das Eingangssignal wird dann bei HIGH ein Ausgang gesetzt, welcher den Motor ansteuert.

Somit kannst du dein präsentieres Programm verwenden. Statt der LED einfach den Motor. Je nach Motortyp muss diese über einen Powertransistor, MOSFET oder Motor-IC angesteuert werden.

Wie gesagt, versuche zuerst herauszufinden wie der Legomotor bewegt wird.

So, ich dachte ich wäre anstrengend... aber dieser Thread ist es mal ganz sicher :wink:

Lieber Arduinorobot,

es geht alles viel einfacher, wenn Du uns ersteinmal gaaanz genau erzählst was Du vor hast.

Also sag uns was Du tun willst, dann sag uns was Du für Teile einsetzen willst, kannst oder hast.

Dann mach Dir klar, daß jede Hilfe aus der Community freiwillig ist,
also ein Geschenk an Dich, und das erwartet man nicht,
sondern freut sich wenn man überhaupt eins bekommt.

Wenn man dann will, sollte man danke sagen.

Es hilft dann sehr, auch einem selbst, wenn man versucht das ganze selbst zu verstehen, sonst wird das ganze nichts... hier will nämlich niemand DEIN Projekt bauen, sondern Dir dabei nur helfen.

Ein bisschen Lernen gehört also dazu... ein bisschen netter Ton, und ein bisschen willen auch selbst etwas arbeiten zu müssen....
es muß nichtmal viel sein, aber man sollte erkennen daß es Dein und nicht unser Projekt ist....


So, also... Du möchtest Legomotoren mit dem Arduino steuern.

Damit man weiß wie man die anteuern muß, muß man erstmal wissen
was das für eine Technik ist bei den Legomotoren. Es gibt da zwei große Bereiche die in Frage kommen... entweder es sind schrittmotoren, oder dc-motoren (Webmeister hilf mir mal bitte auf die Sprünge... wie heißen die richtig? :wink: ) .

Die einen machen nur schritte, also ganz kleine Bewegungen wie Du das von einer Uhr kennst, die anderen drehen sich ganz schnell... wie zum Beispiel in einem ferngesteuerten Rennwagen.

Ich denke hier dürften es normale DC-Motoren sein, und keine Schrittmotoren... trotz vier Adern... ich denke es sind vier Adern um die Drehrichtung zu ändern.

Lieber Arduinorobot, kannst Du uns sagen was das für Motoren sind?

Danach richtet sich nämlich eine ganze Menge...

Wenn es nicht unbedingt Legomotoren sein müssen, sag uns einfach was du machen willst... dann können wir Dir Motoren empfehlen.

Lieber Gruß
ChrisS

schrittmotoren, oder dc-motoren (Webmeister hilf mir mal bitte auf die Sprünge... wie heißen die richtig?

In Deutsch heissen die einfach Gleichstrommotoren

Soweit ich aus der Produktseite von Lego gesehen habe, sind die erwähnten Motoren normale Gleichstrommotoren. Das Kabel mit den 4 Leitungen ist mir auch aufgefallen.

hier will nämlich niemand DEIN Projekt bauen, sondern Dir dabei nur helfen.

Das hast du schön gesagt. Und so sollte es eigentlich sein. Leider verstehen das viele Anfänger oder Einsteiger in den Foren anders. >:(
Auch überfordern sich die Einsteiger in vielen Fällen. Da sie zu Beginn schon komplizierte Lösungen realisieren wollen. Dabei fehlen meist die Grundlagen.
Das gleiche läuft auch in diesem Thread. Arduinorobot will einen Motor ansteuern und weiss nicht wie das mit dem Arduino geht. Zuerst müsste aber die Frage geklärt sein, wie man den Legomotor überhaupt ansteuern muss. Dazu braucht es für den ersten Test kein Arduino-Board sondern ein paar Drähte und eine Batterie oder Netzteil.

Ich denke es sind genügend Fragen an Arduinorobot gestellt. Er soll jetzt zuerst mal die Sache mit den Motoren klären. Danach helfen wir gerne weiter, wobei das Projekt nicht UNSER Projekt, sondern SEIN Projekt ist.

....noch eine kleine Hilfe zu den Motoren (falls es sich um welche aus der "Lego Power Functions" Serie handelt) hier das Pinout:

http://www.1000steine.de/1000steine/forum2/forum_entry.php?id=154570

...baue selber grad die LEGO Motoren meiner Söhne an ein Arduino Motor Shield - denn das Mindstorms LEGO Controller Zeugs kommt mir nicht ins Haus - wenn dann wird das per Open Hard und Software gesteuert :wink:

Viele Grüsse, Michi

hallo,
mag sein, dass ich mich jetzt als blutiger Anfänger gleich unbeliebt mache, da mir auch die Grundkentnisse im Programmieren fehlen.

Aber wenn ich den Thread richtig verstanden habe, will arduinorobot einen Motor per Tastendruck steuern, jetzt ist meine Frage, soll das eine Taste auf der Tastatur des Computers sein, oder willst du einfach nur auf ne Taste drücke und ein Moror geht an? Wenn du das 2. Möchtest, warum machst du es dir so schwär und gest über das Arduino, anstatt einfach nur eine Baterrie mit nem Drat und nem taster oder Schlater zu verbinden und vertig?

Der Leistungsverbraucher ist dabei dein Moror.

oder meinst du sowas?

(achtung, den code habe ich bei nem VHS Kurs geschrieben, also übernehme ich keine Garantie auf Korektheit)

int LED = 13; 
int taste = 12;

// raus: Ardulino-Steckleiste-Pin
// rein: angeschlossener Taster gedrückt oder nicht
boolean Tastegedrueckt (int pin) {
  boolean zustand;

  do {
    zustand=digitalRead(pin); // guckt ob 0 oder 5V anliegen
    delay (10);
  } 
  while (zustand==digitalRead(pin));

  return zustand==LOW; // taster gedrückt: es liegen 0V an.
}



void setup () {
  Serial.begin (9600);
  Serial.print ("Start \n");
  
  pinMode (LED, OUTPUT);
  pinMode (taste, INPUT);
  
  Serial.print ("Ende \n");
}

int modus = 0;

void loop () {

  // warten auf Tastendruck, bis "losfahren"

  // 10cm "fahren und wieder auf Tastendruck warten

  // 20Cm "fahren und wieder auf Tastendruck warten

  // 30cm "fahren" und wieder auf Tastendruck warten

  // und schluss


  switch (modus) {
   case 100:  digitalWrite(13, HIGH);
             Serial.print ("1 \n");
             delay (1000);
             while (!Tastegedrueckt(taste)) {
               delay (100);
             };
             modus=200;
             break;
             
   case 200: digitalWrite(13, LOW); 
             Serial.print ("2 \n");
             delay(1000);
              while (!Tastegedrueckt(taste)) {
               delay (100);
             };
             modus=300;
             break;
   
   case 300: digitalWrite(13, HIGH);
             Serial.print ("3 \n");
             delay(1000);
             while (!Tastegedrueckt(taste)) {
               delay (100);
             };
             modus=0;
             break; 
             
  default: while (!Tastegedrueckt(taste)) {
              Serial.print ("0 \n");
              delay (100);}
              modus=100;
     }
  }

dabei musst du digital.print gegen digital.write austauschen (glaube ich zumindest). Bei diesem code handelt es sich aber eher um eine art Teimer, bei der du die taste einmal drückst und sich sich nach einer vorher festgelegten Zeit wieder abschaltet. Wenn du den Taster wieder drückst, geht er zum nächsten Punkt über, heißt, du da verschiedene Zeitspannen eingeben kannst. (glaube das ist net genz das was du sichst, aber ich suche noch nach einem anderen code und villeicht kannst du ja Teile daraus verwenden.)

an deiner stelle würde ich den unteren Teil des Codes so anpassen:

 switch (modus) {
    case 100:  digitalWrite(13, HIGH);
             Serial.print ("1 \n");
            // auf delay verzichten
             while (!Tastegedrueckt(taste)) {
               delay (100);
             };
             modus=200;
             break;
             
  default: while (!Tastegedrueckt(taste)) {
              digital.write (13, LOW);  // irgend wie so zumindest
              delay (100);}
              modus=100;

OK, ich bin Müde, also überleg am besten mal selber (und hoffentlich ist das auch alles so richtig :-/ , naja gucks dir halt mal an)

In der Hoffnung das ich dir geholfen habe.
MfG
syborg