Kann ich die analogen Pins auf dem Arduino für mein Projekt als digital verwenden?

27

Ich bin neu in der Verwendung von Arduino, und ich habe ein Arduino Uno. Für die Projekte, die ich gemacht habe, habe ich nur die digitalen Stifte verwendet.

Ich baue ein kleines Fahrzeug mit Schrittmotoren. Mir sind die Stifte ausgegangen, um die Motoren für dieses Fahrzeug zu steuern. Wofür sind die analogen Pins? Kann ich die restlichen Schrittmotoren, die ich an den Arduino anschließe, über analoge Pins steuern, oder muss ich einen größeren Arduino als Arduino Uno kaufen, um diesen Apparat zu steuern?

Bogen
quelle

Antworten:

22

Ja, die analogen Pins des Arduino können als digitale Ausgänge verwendet werden.

Dies ist in der Dokumentation der Arduino-Eingabepins im Abschnitt Pin-Zuordnung dokumentiert :

Pinbelegung
Die analogen Pins können mit den Aliasen A0 (für Analogeingang 0), A1 usw. identisch mit den digitalen Pins verwendet werden. Der Code sieht beispielsweise so aus, dass der analoge Pin 0 auf einen Ausgang gesetzt und gesetzt wird it HIGH:
PinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);

Anindo Ghosh
quelle
Ja entschuldigung. Ich erinnere mich, dass es spät war, als ich das schrieb und ich müde wurde und an Konzentration verlor. Ich habe den Kommentar entfernt.
Anonymous Penguin
27

Sie können die analogen Stifte immer für digitales Schreiben verwenden.

  • digitalRead()Funktioniert auf allen Pins. Es wird lediglich der empfangene Analogwert gerundet und Ihnen angezeigt. Wenn analogRead(A0)größer oder gleich 512 ist, digitalRead(A0)wird 1, sonst 0.
  • digitalWrite()Funktioniert auf allen Pins, mit dem erlaubten Parameter 0 oder 1. digitalWrite(A0,0)ist dasselbe wie analogWrite(A0,0)und digitalWrite(A0,1)ist dasselbe wieanalogWrite(A0,255)
  • analogRead()Funktioniert nur mit analogen Pins. Es kann einen beliebigen Wert zwischen 0 und 1023 annehmen.
  • analogWrite()Funktioniert auf allen analogen und allen digitalen PWM- Pins. Sie können einen beliebigen Wert zwischen 0 und 255 angeben.

Mit den analogen Pins können Sie analoge Werte lesen / schreiben. Anstatt eine Spannung von 0 oder 5 (wie bei Digital) auszugeben, können Sie einen Spannungsbereich zwischen 0 und 5 (sowohl als Eingang als auch als Ausgang) angeben. Beachten Sie, dass die Spannung während der analogen Ausgabe nur die mit einem Multimeter beobachtete Spannung ist. In der Realität senden die analogen Pins Impulse mit 0V- und 5V-Signalen, um einen Ausgang zu erhalten, der analog "aussieht" (dies ist PWM).

In Bezug auf die Anzahl der Pins: Beachten Sie, dass die PWM-Pins für den Analogausgang verwendet werden können. Wenn Ihnen die Pins ausgehen, können Sie mit Multiplexing mehr machen. Es ist nicht notwendig, ein anderes Arduino zu bekommen.

Manishearth
quelle
8
AnalogWrite () gibt keine Spannungen zwischen 0 und 5 aus (außer am Due)! AnalogWrite () ändert nur die Pulsweitenmodulation des Signals. Die Ausgangsspannung beträgt immer noch 5 Volt (oder was auch immer VCC ist). Die mit "analog" gekennzeichneten Pins geben nur 0V oder 5V aus. Sie sind nicht variabel und sind Note
Baldengineer
1
@ JamesC4S: Guter Punkt, bearbeitet. Vielen Dank :)
Manishearth
Viel besser! :)
Baldengineer
Sind digitalRead () und digitalWrite () auf analogen Pins langsamer? Wenn digitalRead () den Wert rundet, kann ich mir vorstellen, dass er auf einem digitalen Pin viel langsamer ist als digitalRead ()?
Johncl
Das ist sehr kurz und informativ, danke, aber ich glaube, dass es einen kleinen Fehler gibt. Nach den fine docs : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)was der Aussage in diesem Beitrag widerspricht If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
13.
6

Die analogen Pins des Arduino können als digitale Pins verwendet werden, wie von Anindo Ghosh hervorgehoben.

Aber selbst wenn Ihnen die Stifte zur Steuerung Ihrer Schrittmotoren ausgehen, müssen Sie nicht unbedingt ein anderes Board kaufen. Sie können einfach eine Zwischenkomponente wie ein Register oder einen Multiplexer verwenden, um den entsprechenden Schrittmotor zu steuern.

Ascheshr
quelle
4

Wenn Sie es sich leisten können, und Sie wollen wirklich mit einem Stepper machen arbeiten super einfach überprüfen Einfachen Stepper . Ich war sehr zufrieden.

Aus der Beispiel-Codepage

http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414-080645.jpg



Example 1: Basic Arduino setup
This is the most basic example you can have with an Arduino, an Easy Driver, and a stepper motor. Connect the motor's four wires to the Easy Driver (note the proper coil connections), connect a power supply of 12V is to the Power In pins, and connect the Arduino's GND, pin 8 and pin 9 to the Easy Driver.

Then load this sketch and run it on your Arduino or chipKIT:
void setup() {                
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1);          
  digitalWrite(9, LOW); 
  delay(1);          
}

Auf derselben Seite finden Sie auch einige Beispiele für den Betrieb von zwei Motoren mit zwei Easystepper-Boards mit Beschleunigung / Verzögerung: http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414- 081018.jpg


#include <AccelStepper.h>

// Define two steppers and the pins they will use
AccelStepper stepper1(1, 9, 8);
AccelStepper stepper2(1, 7, 6);

int pos1 = 3600;
int pos2 = 5678;

void setup()
{  
  stepper1.setMaxSpeed(3000);
  stepper1.setAcceleration(1000);
  stepper2.setMaxSpeed(2000);
  stepper2.setAcceleration(800);
}

void loop()
{
  if (stepper1.distanceToGo() == 0)
  {
    delay(500);
    pos1 = -pos1;
    stepper1.moveTo(pos1);
  }
  if (stepper2.distanceToGo() == 0)
  {
    delay(500);
    pos2 = -pos2;
    stepper2.moveTo(pos2);
  }
  stepper1.run();
  stepper2.run();
}
Steve Cooley
quelle
Das beantwortet die Frage wirklich nicht. es wäre besser als Kommentar. Könnten Sie es konkretisieren, damit es die Frage beantwortet?
Manishearth
@AnnonomusPerson: Der EasyDriver-Schrittmotortreiber scheint ein aktives Produkt zu sein, auf Lager und alles.
Davidcary