Hallo, Arduino-Anfänger und ein paar Fragen

Hallo zusammen,
direkt vorweg, bin blutiger Arduino-Anfänger.

Hab zwar schon einige Zeit mit der C-Control verbracht, und da auch einige Dinge mit dem Application-Board angestellt, aber der Arduino ist ne ganz andere Welt.

Hatte mir vor ein paar Tagen das "Franzis Lernpaket Arduino Uno" gekauft und dachte, daß es sich wirklich um ein Lernpaket für Anfänger handelt, wo Schritt für Schritt erklärt wird.

Weit gefehlt....
Die ersten ca 80 Seiten wird "Werbung" fpr den Arduino und die erhältliche Hardware gemacht.
Danach kommt ein kurzes Programm "LED blinkt" und es wird (wie erwartet) auf die einzelnen Teile des Programms Bezug genommen und erklärt.

Dann aber der Hammer....
Ab etwa Seite 100 gehts um serielle Übertragung, Anzeige, Hallo-Welt-Textanzeigen und was weiss ich was an Variablen und Constanten.
Anschliessend kommen dann Kontakt-Entprellen und Flackerlichter.

Hundsgewöhnliches "Wenn ein Eingang -> dann ein Ausgang" oder so sucht man vergebens.

Nach viiiiiiiiel gesuche, gefummel und probieren (mit entsprechend oft Fehlern und Rückschlägen) hatte ich endlich mein erstes "Wenn Eingang 10 = Eingang 11 -> dann LED 13 an" Programm zusammen.

//Bezeichnung der Ein- und Ausgänge
const int led=13;
const int Tas1=10;
const int Tas2=11;

//Bezeichnung der Variablen
int Taste1=0;
int Taste2=0;


//Initialisierung der PINs
void setup()
{
pinMode(Tas1,INPUT);
pinMode(Tas2,INPUT);
pinMode(led,OUTPUT);
}


//Hauptprogramm
void loop()
{
  Taste1 = digitalRead(Tas1);              //Einlesen von Tas1 und Zustand in Taster1 schreiben
  Taste2 = digitalRead(Tas2);              //Einlesen von Tas2 und Zustand in Taster2 schreiben
  
  if(Taste1==Taste2)                       // Wenn Taste1 gleich Taste2 :
  {
    digitalWrite(led,HIGH);                //... dann schalte Ausgang LED ein
  }
  
  else                                     //sonst:
  {
    digitalWrite(led,LOW);                 //... schalte Ausgang LED aus
  }
}

Juhu, es klappt.
Pin 10 und Pin 11 sind über Pull-Down-Widerstände an Masse, und werden dann über je einen Taster auf 5V gelegt, was das HIGH-Signal bewirkt.


Nun Schritt zwei im verzweifelten Versuch, dem Arduino doch noch Herr zu werden:

Angesteuert werden (bis hierhin über einen L293B) zwei kleine Motoren.

Die vier Pins 10,11,12 und 13 sind je für rechts-vorwärts, rechts-rückwärts, links-vorwärts und links-rückwärts.

Modifiziert wurde hierbei das Beispielprogramm (LED-Blink) aus dem Lernpaket.

int Pin13=13;
int Pin12=12;
int Pin11=11;
int Pin10=10;

void setup()
{                

  pinMode(Pin13, OUTPUT);     
  pinMode(Pin12, OUTPUT);     
  pinMode(Pin11, OUTPUT);     
  pinMode(Pin10, OUTPUT);     
}

void loop()                     
{
  digitalWrite(Pin13, HIGH); 
  digitalWrite(Pin12, LOW);
  digitalWrite(Pin11, LOW);
  digitalWrite(Pin10, LOW);

  delay(1000);

  digitalWrite(Pin13, LOW); 
  digitalWrite(Pin12, HIGH);
  digitalWrite(Pin11, LOW);
  digitalWrite(Pin10, LOW);

  delay(1000);
  
  digitalWrite(Pin13, LOW); 
  digitalWrite(Pin12, LOW);
  digitalWrite(Pin11, HIGH);
  digitalWrite(Pin10, LOW);

  delay(1000);

  digitalWrite(Pin13, LOW); 
  digitalWrite(Pin12, LOW);
  digitalWrite(Pin11, LOW);
  digitalWrite(Pin10, HIGH);

  delay(1000);

}

Schritt drei:

Um nun die beiden Motoren "Professionell Adruino-mässig" anzusteuern, wurde das Motor-Shield (http://arduino.cc/en/Main/ArduinoMotorShieldR3) gekauft.

Nun steh ich aber da....

(Auszug aus der Arduino.cc-Homepage über das Motor-Shield):

Input and Output

This shield has two separate channels, called A and B, that each use 4 of the Arduino pins to drive or sense the motor. In total there are 8 pins in use on this shield. You can use each channel separately to drive two DC motors or combine them to drive one bipolar stepper motor.

The shield's pins, divided by channel are shown in the table below:
Function pins per Ch. A pins per Ch. B
Direction D12 D13
PWM D3 D11
Brake D9 D8
Current Sensing A0 A1

If you don't need the Brake and the Current Sensing and you also need more pins for your application you can disable this features by cutting the respective jumpers on the back side of the shield.

The additional sockets on the shield are described as follow:

Screw terminal to connect the motors and their power supply.
2 TinkerKit connectors for two Analog Inputs (in white), connected to A2 and A3.
2 TinkerKit connectors for two Aanlog Outputs (in orange in the middle), connected to PWM outputs on pins D5 and D6.
2 TinkerKit connectors for the TWI interface (in white with 4 pins), one for input and the other one for output.

Das hilft dem Anfänger jetzt mal wieder enorm weiter... :frowning:

Hmm,... Direction/Richtung wird mittels Ansteuerung von Port 12 für Motor A und Port 13 für Motor B vorgenommen.
(D12 High = MotorA vorwärts, D12 Low = MotorA rückwärts)
Heisst das nun dann, der Motor läuft ständig in irgend eine Richtung ?

Ich finde, ein wirklicher Anfänger ist hier doch enorm "überfordert" und die ganzen anleitungen hier sind von Fachleuten für Fachleute geschrieben. :frowning:

Ich will doch eigentlich nur Zwei motoren (Rad rechts, Rad links) vorwärts,rückwärts,stop ansteuern können.....

Nächste Frage...
Ich sehe, daß das Board die Pins A0, A1, D3, D8, D9, D11, D12. D13 benutzt.
Heisst das dann, daß diese Pins für alles andere gesperrt / blockiert sind ?

Ich hoffe, hier etwas Licht im Dunkel zu finden.
... und meinem Projekt "Dreirädriger Roboter" etwas näher zu kommen.

Gruß
Alexander

Hallo Alexander,

welches Buch ich dir empfehlen kann ist "die elektronische Welt mit Arduino entdecken" von Erik Bartmann.
Da werden haarklein auch noch die Basics der Elektronik erklärt. Da habe ich dann mal etwas schneller gelesen, aber es ist ein sehr gutes Einstiegswerk und es werden querbeet einfache Schaltungen entwickelt und programmiert. Danach ist man eigentlich in der Lage nach dem Muster "Bauteil X" Arduino lib was im Internet zu Tage zu fördern und auch zu verstehen, wenn es halbwegs dokumentiert ist.

Nächste Frage...
Ich sehe, daß das Board die Pins A0, A1, D3, D8, D9, D11, D12. D13 benutzt.
Heisst das dann, daß diese Pins für alles andere gesperrt / blockiert sind ?

Das läßt sich nicht pauschal mit Ja oder Nein beantworten. da mußt du immer schauen, wofür der Pin benutzt wird. I2C oder SPI Bus läßt sich auch an weitere Sensoren, oder weitere IC's mit dieser Schnittstelle weiterverbinden, wenn Spannungslevel und Geschwindigkeit zueinander kompartibel sind, oder sich mit Pegelwandlern anpassen lassen.
Ansonsten ist ein Pin nicht doppelt nutzbar. Aber wenn einem die Pins ausgehen, kann man z.B. über Schieberegister, Multiplexing, eine Tastaturmatrix, analoge Abfrage mehrerer Tasten über einen gemeisamen Analogpin und ähnliche Kunstgriffe massiv Pins einsparen. Ansonsten greift man zum Arduino Mega, der hat etliche Pins mehr in echter Hardware. In die Verlegenheit bin ich aber noch nie gekommen :wink:

Gruß Gerald

Hallo,

vielleicht hilft Dir das hier: Elektromotor mit Deinem Motortreiber weiter.

Gruß,
Ralf

@Schachmann
Ja das ist ja die art, mit der ich die Motoren BISHER antreibe.
aber davon wollte ich ja weg, und genau dafür hatte ich das Motor-Shield gekauft.

@nix_mehr_frei
danke für den Tip mit dem Buch. Werde mir das mal zulegen.

Habe jetzt das Motor-Test-Programm von oben etwas modifiziert.

int MotAdir1=12;
int MotBdir1=13;

void setup()
{
  pinMode(MotAdir1, OUTPUT);
  pinMode(MotBdir1, OUTPUT);
}

void loop()
{
  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotBdir1, LOW);

  delay(1000);

  digitalWrite(MotAdir1, HIGH); 
  digitalWrite(MotBdir1, LOW);

  delay(1000);

  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotBdir1, HIGH);

  delay(1000);
  
  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotBdir1, LOW);

  delay(1000);

}

Ich dachte, daß sich an den LEDs der beiden Motorausgänge irgendwas tut. Leider fehlanzeige.

Hat denn hier niemand das Motor-Shield und weiss, wie man da gaaanz einfach einen Motor mit ansteuert ?

Hallo Alexander,

wenn du dem Motor nur an/ausschalten willst, reicht es den PWM Pin auf HIGH/LOW zu setzen.
Mit (D12 High = MotorA vorwärts, D12 Low = MotorA rückwärts) gibst du dann die Richtung vor.

Ich sehe, daß das Board die Pins A0, A1, D3, D8, D9, D11, D12. D13 benutzt.
Heisst das dann, daß diese Pins für alles andere gesperrt / blockiert sind ?

Leider ja, weil die Pins ja auf dem Shield verdrahtet sind. (Ich will dir jetzt nicht dazu raten die Verbindungen zu kappen. Dann kauf dir lieber einen L298 Motortreiber wie z.B. den ).

Gruß
Reinhard

Ich dachte, daß sich an den LEDs der beiden Motorausgänge irgendwas tut. Leider fehlanzeige.

Du musst für eine Motor immer den Direction PIN und den PWM PIN beschalten (s.o.). Die Brake PINs sind nicht unbedingt nötig.

Sehe gerade im Schaltplan und der Beschreibung

If you don't need the Brake and the Current Sensing and you also need more pins for your application you can disable this features by cutting the respective jumpers on the back side of the shield.

Ist also dafür vorbereitet die Verbindungen zu unterbrechnen.

@ernie-bernie
danke danke, das hat jetzt geholfen.

Code sieht nun wie folgt aus:

int MotAdir1=12;
int MotBdir1=13;
int MotAPWM=3;
int MotBPWM=11;

void setup()
{
  pinMode(MotAdir1, OUTPUT);
  pinMode(MotBdir1, OUTPUT);
  pinMode(MotAPWM,  OUTPUT);
  pinMode(MotBPWM,  OUTPUT);
}

void loop()
{
  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotAPWM,  LOW);
  digitalWrite(MotBdir1, LOW);
  digitalWrite(MotBPWM,  LOW);

  delay(1000);

  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotAPWM,  HIGH);
  digitalWrite(MotBdir1, LOW);
  digitalWrite(MotBPWM,  LOW);
  
  delay(1000);
 
  digitalWrite(MotAdir1, HIGH); 
  digitalWrite(MotAPWM,  HIGH);
  digitalWrite(MotBdir1, LOW);
  digitalWrite(MotBPWM,  LOW);
  
  delay(1000);
  
  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotAPWM,  LOW);
  digitalWrite(MotBdir1, LOW);
  digitalWrite(MotBPWM,  HIGH);
  
  delay(1000);

  digitalWrite(MotAdir1, LOW); 
  digitalWrite(MotAPWM,  LOW);
  digitalWrite(MotBdir1, HIGH);
  digitalWrite(MotBPWM,  HIGH);
  
  delay(1000);

}

Die LEDs an den Motor-Schrauben gehen nun der Reihe nach an, wie es zum Test sein soll.

VIELEN DANK !!

Nun noch eine Frage....
Die Analog-Eingänge (die weissen dreipoligen Stecker) und die analog-Ausgänge (orange dreipolige Stecker) kann ich für "irgendwas" einsetzen, oder müssen die zwingend was mit den motoren zu tun haben ?

Ganz einfach zu erklären, ein Arduino wo drauf steht “extra für Anfänger” etc, ist nichts für Anfänger, die denken die können ihr Projekt, was auch immer die sich ausdenken, irgendein HighTech Ding, sofort umsetzten.
Wenn du mal [gegoogelt](http://arduino motorshield site:http://forum.arduino.cc) hättest, würdest du bestimmt in etwa solche Ergebnisse finden.

Da ist doch soweit alles erklärt, oder was ist noch nicht klar?
Ich habe so ein AdafruitMotorShield
Interesse zum lernen muss schon vorhanden sein, dann klappts auch mit den Büchern.

Hallo,

Leute, so richtig geil wird's erst damit. :smiley:
Infineon DC Motor Control Shield with BTN8982TA for Arduino
Gibts bei Farnell und bestimmt auch bald woanders.

Das ist mal wieder was modernes zu den betagten L29x Bauteilen.