Posso usare i pin analogici su Arduino per il mio progetto come digitale?


27

Sono nuovo nell'uso di Arduino e ho un Arduino Uno. Per i progetti che ho realizzato, ho usato solo i pin digitali.

Sto costruendo un piccolo veicolo che utilizza motori passo-passo. Ho esaurito i perni per controllare i motori di questo veicolo. A cosa servono i pin analogici? È possibile utilizzare pin analogici per controllare il resto dei motori passo-passo che collego ad Arduino o devo acquistare un Arduino più grande di Arduino Uno per controllare questo aggeggio?

Risposte:


22

Sì, i pin analogici su Arduino possono essere utilizzati come uscite digitali.

Questo è documentato nella documentazione dei pin di input di Arduino , nella sezione Mappatura dei pin:

Pin mapping
I pin analogici possono essere usati in modo identico ai pin digitali, usando gli alias A0 (per ingresso analogico 0), A1, ecc. Ad esempio, il codice sarebbe simile a questo per impostare il pin analogico 0 su un'uscita e per impostare ALTA:
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);


Si scusa. Ricordo che era tardi quando l'ho pubblicato e stavo diventando assonnato e perdendo concentrazione. Ho rimosso il commento.
Pinguino anonimo

27

Puoi sempre usare i pin analogici per la scrittura digitale.

  • digitalRead()funziona su tutti i pin. Arrotonderà semplicemente il valore analogico ricevuto e te lo presenterà. Se analogRead(A0)è maggiore o uguale a 512, digitalRead(A0)sarà 1, altrimenti 0.
  • digitalWrite()funziona su tutti i pin, con i parametri consentiti 0 o 1. digitalWrite(A0,0)è uguale a analogWrite(A0,0), ed digitalWrite(A0,1)è uguale aanalogWrite(A0,255)
  • analogRead()funziona solo su pin analogici. Può assumere qualsiasi valore compreso tra 0 e 1023.
  • analogWrite()funziona su tutti i pin analogici e tutti i pin PWM digitali . Puoi fornire qualsiasi valore compreso tra 0 e 255.

I pin analogici consentono di leggere / scrivere valori analogici: in pratica, invece di fornire una tensione di 0 o 5 (come nel caso del digitale), possono fornire un intervallo di tensioni compreso tra 0 e 5 (sia in ingresso che in uscita). Si noti che la tensione durante l'uscita analogica è solo la tensione osservata con un multimetro. In realtà, i pin analogici inviano impulsi di segnali 0V e 5V per ottenere un'uscita che "sembra" analogica (questo è PWM).

Per quanto riguarda il numero di pin: tenere presente che i pin PWM possono essere utilizzati per l'uscita analogica. Se esaurisci i pin, puoi utilizzare il multiplexing per fare di più. Non è necessario ottenere un altro Arduino.


8
AnalogWrite () non emette tensioni comprese tra 0 e 5 (tranne sul Due)! AnalogWrite () modifica solo la modulazione dell'ampiezza dell'impulso del segnale. La tensione di uscita è ancora di 5 volt (o qualunque sia VCC). I pin contrassegnati "analogico" emetteranno solo 0 V o 5 V. Non sono variabili e sono note
baldengineer il

1
@ JamesC4S: buon punto, modificato. Grazie :)
Manishearth

Molto meglio! :)
baldengineer

DigitalRead () e digitalWrite () sui pin analogici sono più lenti? Se digitalRead () arrotonda il valore, posso immaginare che sia molto più lento di digitalRead () su un pin digitale?
Johncl,

Questo è molto conciso e informativo, grazie, tuttavia credo che ci sia un piccolo errore. Secondo i buoni documenti : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)che contraddice la dichiarazione in questo post If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen

6

I pin analogici su Arduino possono essere usati come pin digitali, come sottolineato da Anindo Ghosh.

Tuttavia, anche se si esauriscono i pin per controllare i motori passo-passo, non è necessario acquistare un'altra scheda. È possibile semplicemente utilizzare un componente intermedio come un registro o un multiplexer per controllare il motore passo-passo appropriato.


4

Se te lo puoi permettere e vuoi davvero rendere il lavoro con uno stepper super facile dai un'occhiata a Easy Stepper . Mi ha fatto molto piacere.

Dalla tabella codici di esempio

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

Sempre dalla stessa pagina, ecco un esempio di codice per far funzionare due motori con due schede easystepper, con accelerazione / decelerazione: 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();
}

Questo in realtà non risponde alla domanda; sarebbe meglio come un commento. Potresti dargli una risposta in modo che risponda alla domanda?
Manishearth,

@AnnonomusPerson: EasyDriver Stepper Motor Driver sembra un prodotto attivo, disponibile e tutto il resto.
davidcary,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.