Czy mogę używać analogowych pinów Arduino do mojego projektu jako cyfrowego?

27

Jestem nowym użytkownikiem Arduino i mam Arduino Uno. Do zrealizowanych przeze mnie projektów użyłem tylko cyfrowych pinów.

Buduję mały pojazd, który wykorzystuje silniki krokowe. Skończyły mi się szpilki do sterowania silnikami tego pojazdu. Do czego służą piny analogowe? Czy mogę używać pinów analogowych do sterowania resztą silników krokowych, które podłączam do Arduino, czy też muszę kupować większe Arduino niż Arduino Uno do sterowania tym urządzeniem?

bogen
źródło

Odpowiedzi:

22

Tak, piny analogowe Arduino mogą być używane jako wyjścia cyfrowe.

Jest to udokumentowane w dokumentacji pinów wejściowych Arduino , w sekcji Mapowanie pinów:

Mapowanie pinów Pinów
analogowych można używać identycznie jak pinów cyfrowych, używając aliasów A0 (dla wejścia analogowego 0), A1 itp. Na przykład kod wyglądałby tak, aby ustawić pin analogowy 0 na wyjście i ustawić HIGH:
pinMode (A0, WYJŚCIE);
digitalWrite (A0, HIGH);

Anindo Ghosh
źródło
Tak, przepraszam. Pamiętam, że było późno, kiedy to opublikowałem i zaczynałem się spać i traciłem koncentrację. Usunąłem komentarz.
Anonimowy pingwin
27

Zawsze możesz użyć pinów analogowych do zapisu cyfrowego.

  • digitalRead()działa na wszystkich pinach. Po prostu zaokrągli otrzymaną wartość analogową i przedstawi ją. Jeśli analogRead(A0)jest większa lub równa 512, digitalRead(A0)będzie wynosić 1, w przeciwnym razie 0.
  • digitalWrite()działa na wszystkich pinach, z dozwolonym parametrem 0 lub 1. digitalWrite(A0,0)jest taki sam jak analogWrite(A0,0)i digitalWrite(A0,1)jest taki sam jakanalogWrite(A0,255)
  • analogRead()działa tylko na pinach analogowych. Może przyjmować dowolną wartość z zakresu od 0 do 1023.
  • analogWrite()działa na wszystkich pinach analogowych i wszystkich pinach cyfrowych PWM . Możesz podać dowolną wartość z zakresu od 0 do 255.

Piny analogowe pozwalają odczytywać / zapisywać wartości analogowe - w zasadzie zamiast podawać napięcie 0 lub 5 (jak w przypadku cyfrowej), mogą dawać zakres napięć od 0 do 5 (zarówno jako wejście, jak i wyjście). Należy pamiętać, że napięcie na wyjściu analogowym to tylko napięcie obserwowane za pomocą multimetru. W rzeczywistości piny analogowe wysyłają impulsy sygnałów 0 V i 5 V, aby uzyskać wyjście, które „wygląda” analogowo (jest to PWM).

Jeśli chodzi o liczbę pinów: pamiętaj, że pinów PWM można użyć do wyjścia analogowego. Jeśli zabraknie pinów, możesz użyć multipleksowania, aby uzyskać więcej. Zdobycie kolejnego Arduino nie jest konieczne.

Manishearth
źródło
8
AnalogWrite () nie wytwarza napięć od 0 do 5 (z wyjątkiem wymaganego)! AnalogWrite () zmienia tylko modulację szerokości impulsu sygnału. Napięcie wyjściowe wynosi nadal 5 woltów (lub cokolwiek to jest VCC). Piny oznaczone jako „analogowe” będą wytwarzały napięcie tylko 0 V lub 5 V. Nie są zmienne i są uwaga
baldengineer 10.04.13
1
@ JamesC4S: Dobry punkt, zredagowany. Dzięki :)
Manishearth 10.04.13
Dużo lepiej! :)
baldengineer
Czy digitalRead () i digitalWrite () na pinach analogowych działają wolniej? Jeśli digitalRead () zaokrągli wartość, mogę sobie wyobrazić, że jest on znacznie wolniejszy niż digitalRead () na cyfrowym pinie?
Johncl
Jest to bardzo zwięzłe i pouczające, dziękuję, jednak uważam, że istnieje jeden mały błąd. Według dobrych dokumentów : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)co jest sprzeczne ze stwierdzeniem w tym poście If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen
6

Jak wskazał Anindo Ghosh, analogowe piny Arduino mogą być używane jako cyfrowe piny.

Jednak nawet jeśli zabraknie pinów do sterowania silnikami krokowymi, tak naprawdę nie trzeba kupować kolejnej płyty. Możesz po prostu użyć elementu pośredniego, takiego jak rejestr lub multiplekser, do sterowania odpowiednim silnikiem krokowym.

asheeshr
źródło
4

Jeśli możesz sobie na to pozwolić i naprawdę chcesz, aby praca ze steperem była bardzo łatwa, sprawdź Easy Stepper . Byłem bardzo zadowolony.

Z przykładowej strony kodowej

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

Również z tej samej strony, oto przykładowy kod do uruchomienia dwóch silników z dwiema płytami easyystepper, z przyspieszaniem / zwalnianiem: 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
źródło
To naprawdę nie odpowiada na pytanie; byłoby lepiej jako komentarz. Czy mógłbyś go rozwinąć, aby odpowiedział na pytanie?
Manishearth 14.04.13
@AnnonomusPerson: Sterownik silnika krokowego EasyDriver wydaje się być aktywnym produktem, w magazynie i wszystkim.
davidcary