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

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

Estoy construyendo un vehículo pequeño que usa motores paso a paso. Me he quedado sin pines para controlar los motores de este vehículo. ¿Para qué sirven 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?

Respuestas (5)

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

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

Asignación de pines
Los pines analógicos se pueden usar de manera idéntica a los pines digitales, usando 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 configurar es ALTO:
pinMode (A0, SALIDA);
escritura digital (A0, ALTO);

Sí... lo siento. Recuerdo que era tarde cuando publiqué eso y me estaba dando sueño y perdiendo la concentración. Eliminé el comentario.

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, en caso contrario 0.
  • digitalWrite()funciona en todos los pines, con el parámetro permitido 0 o 1. digitalWrite(A0,0)es lo mismo que analogWrite(A0,0), y digitalWrite(A0,1)es lo 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 PWM digitales . Puede proporcionarle cualquier valor entre 0 y 255.

Los pines analógicos le permiten leer/escribir valores analógicos; básicamente, en lugar de dar un voltaje de 0 o 5 (como con el digital), pueden dar 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 0 V y 5 V para obtener una salida que "parece" analógica (esto es PWM).

En cuanto a la cantidad de pines: tenga en cuenta que los pines PWM se pueden usar para salida analógica. Si te quedas sin pines, puedes utilizar la multiplexación para hacer más. No es necesario conseguir otro Arduino.

¡AnalogWrite() no genera voltajes entre 0 y 5 (excepto en Due)! 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ógicos" solo generarán 0V o 5V. No son variables y son nota.
@JamesC4S: Buen punto, editado. Gracias :)
¡Mucho mejor! :)
¿Son más lentos digitalRead() y digitalWrite() en pines analógicos? Si digitalRead() redondea el valor, puedo imaginar que es mucho más lento que digitalRead() en un pin digital.
Esto es muy conciso e informativo, gracias, sin embargo, creo que hay un pequeño error. De acuerdo con los documentos finos : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)lo 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.
Una excepción: los pines adicionales A6 y A7 de Arduino Nano, Pro Mini y Mini solo se pueden usar como entradas analógicas, no como entradas o salidas digitales. Esta es una limitación de hardware específica para esos pines, que no se encuentra en otros modelos.

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

Sin embargo, incluso si se queda sin pines para controlar sus motores paso a paso, realmente no necesita comprar otra placa. Simplemente puede usar un componente intermedio como un registro o un multiplexor para controlar el motor paso a paso apropiado.

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

Desde la página de código 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 de la misma página, aquí hay un código de ejemplo para hacer funcionar dos motores con dos tableros 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();
}
Esto realmente no responde la pregunta; sería mejor como comentario. ¿Podría desarrollarlo para que responda a la pregunta?
@AnnonomusPerson: El controlador de motor paso a paso EasyDriver parece un producto activo, en stock y todo.

Agregando como respuesta, porque no puedo comentar.

Para responder brevemente, sí se puede. Consulte la Respuesta de Anindo Ghosh sobre cómo hacerlo.

Sin embargo, tenga en cuenta que para Arduino Nano , los pines A6 y A7 son solo analógicos y no se pueden usar en modo digital.

Tenga en cuenta que esta respuesta casi solo contiene un enlace. Los enlaces/sitios web pueden volverse obsoletos, lo que hace que esta respuesta sea inútil. Conserve el enlace, pero resuma o cite las partes relevantes del sitio web.
@Huisman Para ser justos, es menos probable que los enlaces a otras preguntas sobre EE.SE desaparezcan o se vuelvan inaccesibles; pero un breve resumen sin duda mejoraría la respuesta.
@JYelton No seguí el enlace, pero tienes razón.