Posso usar os pinos analógicos no Arduino para o meu projeto como digital?


27

Eu sou novo no Arduino e tenho um Arduino Uno. Para os projetos que fiz, usei apenas os pinos digitais.

Estou construindo um veículo pequeno que usa motores de passo. Eu fiquei sem pinos para controlar os motores deste veículo. Para que servem os pinos analógicos? É possível usar pinos analógicos para controlar o restante dos motores de passo que eu conecto ao Arduino ou preciso comprar um Arduino maior que o Arduino Uno para controlar essa engenhoca?

Respostas:


22

Sim, os pinos analógicos no Arduino podem ser usados ​​como saídas digitais.

Isso está documentado na documentação dos pinos de entrada do Arduino , na seção Mapeamento de pinos:

Mapeamento de
pinos Os pinos analógicos podem ser usados ​​de forma idêntica aos pinos digitais, usando os pseudônimos A0 (para entrada analógica 0), A1 etc. Por exemplo, o código seria assim para definir o pino analógico 0 em uma saída e definir ALTO:
pinMode (A0, OUTPUT);
digitalWrite (A0, ALTO);


Sim, desculpe-me. Lembro que era tarde quando publiquei isso e estava ficando com sono e perdendo a concentração. Eu removi o comentário.
Anonymous Penguin

27

Você sempre pode usar os pinos analógicos para escrita digital.

  • digitalRead()funciona em todos os pinos. Ele irá arredondar o valor analógico recebido e apresentá-lo a você. Se analogRead(A0)for maior que ou igual a 512, digitalRead(A0)será 1, caso contrário, 0.
  • digitalWrite()funciona em todos os pinos, com o parâmetro permitido 0 ou 1. digitalWrite(A0,0)é o mesmo que analogWrite(A0,0)e digitalWrite(A0,1)é o mesmo queanalogWrite(A0,255)
  • analogRead()funciona apenas em pinos analógicos. Pode levar qualquer valor entre 0 e 1023.
  • analogWrite()funciona em todos os pinos analógicos e todos os pinos digitais PWM . Você pode fornecer qualquer valor entre 0 e 255.

Os pinos analógicos permitem ler / escrever valores analógicos - basicamente, em vez de fornecer uma tensão de 0 ou 5 (como no digital), eles podem fornecer uma faixa de tensões entre 0 e 5 (tanto na entrada quanto na saída). Observe que a tensão durante a saída analógica é apenas a tensão observada em um multímetro. Na realidade, os pinos analógicos enviam pulsos de sinais de 0V e 5V para obter uma saída que "parece" analógica (este é PWM).

Em relação ao número de pinos: lembre-se de que os pinos PWM podem ser usados ​​para saída analógica. Se você ficar sem pinos, poderá usar a multiplexação para obter mais. Não é necessário adquirir outro Arduino.


8
AnalogWrite () não gera voltagens entre 0 e 5 (exceto no vencimento)! AnalogWrite () altera apenas a modulação da largura de pulso do sinal. A tensão de saída ainda é de 5 volts (ou seja o que for VCC). Os pinos marcados como "analógicos" emitem apenas 0V ou 5V. Eles não são variáveis e são nota
baldengineer

11
@ JamesC4S: Bom ponto, editado. Obrigado :)
Manishearth

Muito melhor! :)
baldengineer

DigitalRead () e digitalWrite () nos pinos analógicos são mais lentos? Se digitalRead () arredondar o valor, posso imaginar que seja muito mais lento que digitalRead () em um pino digital?
Johncl

Isso é muito conciso e informativo, obrigado. No entanto, acredito que há um pequeno erro. De acordo com a multa documentação : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)que contradiz a afirmação deste post If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen 13/11

6

Os pinos analógicos do Arduino podem ser usados ​​como pinos digitais, conforme apontado por Anindo Ghosh.

No entanto, mesmo se você ficar sem pinos para controlar seus motores de passo, não precisará comprar outra placa. Você pode simplesmente usar um componente intermediário, como um registro ou um multiplexador, para controlar o motor de passo apropriado.


4

Se você puder pagar, e realmente deseja facilitar o trabalho com um stepper super fácil, confira o Easy Stepper . Fiquei muito satisfeito.

Na página de código de exemplo

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

Também na mesma página, aqui está um exemplo de código para executar dois motores com duas placas easystepper, com aceleração / desaceleração: 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();
}

Isso realmente não responde à pergunta; seria melhor como um comentário. Você poderia realizá-lo para que ele responda à pergunta?
precisa saber é o seguinte

@AnnonomusPerson: O driver EasyDriver Stepper Motor aparece para um produto ativo, em estoque e tudo.
Davidcary
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.