Чи можна використовувати аналогові штифти на 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В, щоб отримати вихід, який "виглядає" аналоговим (це ШІМ).

Щодо кількості штифтів: майте на увазі, що ШІМ-штифти можна використовувати для аналогового виводу. Якщо у вас не вистачає шпильок, ви можете скористатися мультиплексуванням, щоб зробити більше. Не варто діставати ще одного Ардуїно.


8
AnalogWrite () не виводить напруги від 0 до 5 (за винятком "Due")! AnalogWrite () змінює лише модуляцію ширини імпульсу сигналу. Вихідна напруга все ще становить 5 вольт (або що таке VCC). Штифти з позначкою "аналогові" будуть виводити лише 0В або 5В. Вони не мінливі і зауважте
baldengineer

1
@ JamesC4S: Добрий момент, відредаговано. Дякую :)
Manishearth

Набагато краще! :)
baldengineer

Чи повільніше цифрові читання () та digitalWrite () на аналогових штифтах? Якщо цифрове читання () округляє значення, я можу уявити, що воно є більш повільним, ніж digitalRead () на цифровому контактному?
Джонкл

Це дуже стисло та інформативно, дякую, проте я вважаю, що є одна невелика помилка. На думку тонких документів : 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

Аналогові штифти на Arduino можна використовувати як цифрові штифти, на що вказувала Аніндо Гош.

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


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

Також з тієї ж сторінки, ось якийсь приклад коду для запуску двох двигунів з двома платами перемикача, з прискоренням / уповільненням: 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 з'являється як активний продукт, на складі і все.
davidcary
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.