프로젝트에 Arduino의 아날로그 핀을 디지털로 사용할 수 있습니까?


27

Arduino를 처음 사용하고 Arduino Uno가 있습니다. 내가 한 프로젝트에는 디지털 핀만 사용했습니다.

스테퍼 모터를 사용하는 소형 차량을 만들고 있습니다. 이 차량의 모터를 제어하기 위해 핀이 부족합니다. 아날로그 핀은 무엇입니까? Arduino에 연결하는 나머지 스텝 모터를 제어하기 위해 아날로그 핀을 사용할 수 있습니까? 아니면이 contraption을 제어하기 위해 Arduino Uno보다 더 큰 Arduino를 구매해야합니까?

답변:


22

예, Arduino의 아날로그 핀을 디지털 출력으로 사용할 수 있습니다.

이 내용은 핀 매핑 섹션 의 Arduino 입력 핀 설명서 에 설명되어 있습니다.

핀 매핑
A0 (아날로그 입력 0의 경우), A1 등을 사용하여 아날로그 핀을 디지털 핀과 동일하게 사용할 수 있습니다. 예를 들어, 코드는 아날로그 핀 0을 출력으로 설정하고 설정하는 방법입니다. 높음 :
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);


그래 ... 미안 나는 그것을 게시했을 때 늦었고 기억이 졸려 집중력을 잃었다는 것을 기억합니다. 의견을 삭제했습니다.
익명 펭귄

27

디지털 쓰기에는 항상 아날로그 핀을 사용할 수 있습니다.

  • digitalRead()모든 핀에서 작동합니다. 수신 된 아날로그 값만 반올림하여 표시합니다. 경우 analogRead(A0)보다 크거나 같은지 (512), digitalRead(A0)다른 1, 0이 될 것이다.
  • digitalWrite()0 또는 1 파라미터 수와, 모든 핀의 동작 digitalWrite(A0,0)과 동일 analogWrite(A0,0)하고, digitalWrite(A0,1)동일한이고analogWrite(A0,255)
  • analogRead()아날로그 핀에서만 작동합니다. 0에서 1023 사이의 값을 사용할 수 있습니다.
  • analogWrite()모든 아날로그 핀 및 모든 디지털 PWM 핀에서 작동합니다. 0에서 255 사이의 값을 제공 할 수 있습니다.

아날로그 핀을 사용하면 아날로그 값을 읽고 쓸 수 있습니다. 기본적으로 0 또는 5의 전압 (디지털과 마찬가지로)을 제공하는 대신 0과 5 사이의 전압 범위 (입력 및 출력)를 제공 할 수 있습니다. 아날로그 출력 중 전압은 멀티 미터에서 관찰 된 전압 일뿐입니다. 실제로, 아날로그 핀은 0V 및 5V 신호의 펄스를 보내 아날로그를 보이는 출력 (PWM)을 얻습니다.

핀 수 : PWM 핀은 아날로그 출력에 사용될 수 있습니다. 핀이 부족하면 멀티플렉싱 을 사용하여 더 많은 것을 만들 수 있습니다. 다른 Arduino를 얻을 필요는 없습니다.


8
AnalogWrite ()는 0에서 5 사이의 전압을 출력하지 않습니다 (Due 제외)! AnalogWrite ()는 신호의 펄스 폭 변조 만 변경합니다. 출력 전압은 여전히 ​​5 볼트입니다 (또는 VCC가 무엇이든). "아날로그"라고 표시된 핀은 0V 또는 5V 만 출력합니다. 그것들은 가변적이지 않으며 주목을
받습니다

1
@ JamesC4S : 좋은 지적, 편집했습니다. 감사합니다 :)
Manishearth

훨씬 낫다! :)
baldengineer

아날로그 핀의 digitalRead () 및 digitalWrite ()가 느립니까? digitalRead ()가 값을 반올림하면 디지털 핀에서 digitalRead ()보다 느리다고 상상할 수 있습니까?
Johncl

이것은 매우 간결하고 유익합니다. 감사합니다. 그러나 작은 오류가 하나 있다고 생각합니다. 훌륭한 문서 에 따르면 : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)이 게시물의 진술과 모순 If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0됩니다.
dotancohen

6

Anindo Ghosh가 지적한 것처럼 Arduino의 아날로그 핀을 디지털 핀으로 사용할 수 있습니다.

그러나 스테퍼 모터를 제어하기 위해 핀이 부족하더라도 다른 보드를 구입할 필요는 없습니다. 레지스터 또는 멀티플렉서와 ​​같은 중간 구성 요소를 사용하여 적절한 스테퍼 모터를 제어 할 수 있습니다.


4

당신은 그것을 감당할 수있는, 그리고 당신이 정말로 스테퍼 작업을 확인하려면 아주 쉽게 확인 쉬운 스테퍼를 . 나는 매우 기뻤습니다.

로부터 예제 코드 페이지

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

또한 같은 페이지에서 가속 / 감속을 사용하여 2 개의 easystepper 보드와 함께 2 개의 모터를 구동하는 예제 코드가 있습니다 . 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();
}

이것은 실제로 질문에 대답하지 않습니다. 의견으로 더 나을 것입니다. 질문에 대답 할 수 있도록 살을 낼 수 있습니까?
Manishearth

@AnnonomusPerson : EasyDriver 스테퍼 모터 드라이버 가 활성 제품, 재고 및 모든 항목에 나타납니다.
davidcary
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.