¿Puedo usar los pines analógicos en el Arduino para mi proyecto como digital?

27

Soy nuevo en el uso de Arduino, y tengo un Arduino Uno. Para los proyectos que he realizado, solo he usado los pines digitales.

Estoy construyendo un pequeño vehículo que usa motores paso a paso. Me he quedado sin pasadores para controlar los motores de este vehículo. ¿Para qué son los pines analógicos? ¿Es posible que use pines analógicos para controlar el resto de los motores paso a paso que conecto al Arduino, o tengo que comprar un Arduino más grande que Arduino Uno para controlar este artilugio?

bogen
fuente

Respuestas:

22

Sí, los pines analógicos del Arduino se pueden usar como salidas digitales.

Esto está documentado en la documentación de pines de entrada de Arduino , en la sección Mapeo de pines:

Mapeo de pines
Los pines analógicos se pueden usar de manera idéntica a los pines digitales, utilizando los alias A0 (para la entrada analógica 0), A1, etc. Por ejemplo, el código se vería así para configurar el pin analógico 0 en una salida y establecer ALTO:
pinMode (A0, SALIDA);
digitalWrite (A0, ALTO);

Anindo Ghosh
fuente
Si ... lo siento. Recuerdo que era tarde cuando publiqué eso y tenía sueño y perdía la concentración. Eliminé el comentario.
Anonymous Penguin
27

Siempre puede usar los pines analógicos para la escritura digital.

  • digitalRead()Funciona en todos los pines. Simplemente redondeará el valor analógico recibido y se lo presentará. Si analogRead(A0)es mayor o igual a 512, digitalRead(A0)será 1, de lo contrario 0.
  • digitalWrite()funciona en todos los pines, con el parámetro permitido 0 o 1. digitalWrite(A0,0)es el mismo que analogWrite(A0,0), y digitalWrite(A0,1)es el mismo queanalogWrite(A0,255)
  • analogRead()funciona solo en pines analógicos. Puede tomar cualquier valor entre 0 y 1023.
  • analogWrite()funciona en todos los pines analógicos y todos los pines digitales PWM . Puede suministrarle cualquier valor entre 0 y 255.

Los pines analógicos le permiten leer / escribir valores analógicos: básicamente, en lugar de emitir un voltaje de 0 o 5 (como con el digital), pueden proporcionar un rango de voltajes entre 0 y 5 (tanto como entrada como salida). Tenga en cuenta que el voltaje durante la salida analógica es solo el voltaje observado con un multímetro. En realidad, los pines analógicos envían pulsos de señales de 0V y 5V para obtener una salida que "se ve" analógica (esto es PWM).

Con respecto al número de pines: tenga en cuenta que los pines PWM pueden usarse para salida analógica. Si te quedas sin pines, puedes usar la multiplexación para hacer más. No es necesario obtener otro Arduino.

Manishearth
fuente
8
¡AnalogWrite () no genera voltajes entre 0 y 5 (excepto en el Debido)! AnalogWrite () solo cambia la modulación de ancho de pulso de la señal. El voltaje de salida sigue siendo de 5 voltios (o lo que sea VCC). Los pines marcados como "analógico" solo emitirán 0V o 5V. No son variables y son nota
baldengineer
1
@ JamesC4S: Buen punto, editado. Gracias :)
Manishearth
¡Mucho mejor! :)
baldengineer
¿Son más lentos digitalRead () y digitalWrite () en pines analógicos? Si digitalRead () redondea el valor, ¿puedo imaginar que sea mucho más lento que digitalRead () en un pin digital?
Johncl
Esto es muy conciso e informativo, gracias, sin embargo, creo que hay un pequeño error. De acuerdo con los buenos documentos : lo the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)que contradice la declaración en esta publicación If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen
6

Los pines analógicos en el Arduino se pueden usar como pines digitales, como lo señaló Anindo Ghosh.

Sin embargo, incluso si te quedas sin pasadores para controlar tus motores paso a paso, realmente no necesitas comprar otra placa. Simplemente puede usar un componente intermedio como un registro o un multiplexor para controlar el motor paso a paso apropiado.

Asheeshr
fuente
4

Si puede permitírselo, y realmente desea que trabajar con un stepper sea muy fácil, consulte Easy Stepper . Me quedé muy satisfecho.

Desde la página de códigos de ejemplo

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);          
}

También desde la misma página, aquí hay un código de ejemplo para ejecutar dos motores con dos placas easystepper, con aceleración / desaceleración: 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
fuente
Esto realmente no responde la pregunta; Sería mejor como comentario. ¿Podrías desarrollarlo para que responda la pregunta?
Manishearth
@AnnonomusPerson: el controlador de motor paso a paso EasyDriver aparece para un producto activo, en stock y todo.
davidcary