Могу ли я использовать аналоговые выводы на Arduino для моего проекта как цифровые?

27

Я новичок в использовании Arduino, и у меня есть Arduino Uno. Для проектов, которые я сделал, я использовал только цифровые контакты.

Я строю небольшой автомобиль, который использует шаговые двигатели. У меня закончились контакты для управления моторами для этого автомобиля. Для чего нужны аналоговые контакты? Могу ли я использовать аналоговые контакты для управления остальными шаговыми двигателями, которые я подключаю к Arduino, или мне нужно купить Arduino большего размера, чем Arduino Uno, чтобы управлять этой штуковиной?

Боген
источник

Ответы:

22

Да, аналоговые контакты Arduino можно использовать как цифровые выходы.

Это описано в документации по входным контактам Arduino в разделе Pin Mapping:

Отображение
контактов Аналоговые контакты могут использоваться идентично цифровым контактам с использованием псевдонимов 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()работает на всех аналоговых выводах и на всех цифровых выводах ШИМ . Вы можете указать любое значение от 0 до 255.

Аналоговые выводы позволяют вам читать / записывать аналоговые значения - в основном, вместо выдачи напряжения 0 или 5 (как с цифровым), они могут давать диапазон напряжений от 0 до 5 (как на входе, так и на выходе). Обратите внимание, что напряжение на аналоговом выходе является только наблюдаемым напряжением с помощью мультиметра. В действительности аналоговые выводы посылают импульсы сигналов 0 В и 5 В, чтобы получить выход, который «выглядит» аналогом (это ШИМ).

Относительно количества выводов: имейте в виду, что выводы PWM могут использоваться для аналогового выхода. Если у вас закончились булавки, вы можете использовать мультиплексирование, чтобы заработать больше. Не нужно приобретать еще один Arduino.

Manishearth
источник
8
AnalogWrite () не выводит напряжения в диапазоне от 0 до 5 (за исключением срока)! AnalogWrite () изменяет только широтно-импульсную модуляцию сигнала. Выходное напряжение по-прежнему составляет 5 вольт (или любой другой VCC). Контакты с пометкой «аналоговый» будут выводить только 0 В или 5 В. Они не являются переменными и являются примечанием
baldengineer
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

Аналоговые Ghosh указывают, что аналоговые контакты на Arduino могут быть использованы в качестве цифровых выводов.

Однако, даже если у вас закончились булавки для управления шаговыми двигателями, вам не нужно покупать другую доску. Вы можете просто использовать промежуточный компонент, такой как регистр или мультиплексор, для управления соответствующим шаговым двигателем.

asheeshr
источник
4

Если вы можете себе это позволить, и вы действительно хотите сделать работу со степпером очень простой, попробуйте Easy Stepper . Я был очень доволен.

Из примера кодовой страницы

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

Также на той же странице приведен пример кода для запуска двух двигателей с двумя панелями easystepper с ускорением / замедлением: 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();
}
Стив Кули
источник
Это действительно не отвечает на вопрос; было бы лучше в качестве комментария. Не могли бы вы конкретизировать это, чтобы он ответил на вопрос?
Manishearth
@AnnonomusPerson: драйвер шагового двигателя EasyDriver представляется активным продуктом, в наличии и всем остальным .
Дэвидкари