ฉันสามารถใช้หมุดอะนาล็อกบน Arduino สำหรับโครงการของฉันเป็นดิจิตอลได้หรือไม่


27

ฉันยังใหม่กับการใช้ Arduino และฉันมี Arduino Uno สำหรับโครงการที่ฉันทำฉันใช้พินดิจิตอลเท่านั้น

ฉันกำลังสร้างยานพาหนะขนาดเล็กที่ใช้มอเตอร์สเต็ป ฉันหมดพินเพื่อควบคุมมอเตอร์สำหรับรถคันนี้ หมุดอะนาล็อกมีไว้เพื่ออะไร เป็นไปได้หรือไม่ที่ฉันจะใช้ขาอะนาล็อกเพื่อควบคุมสเต็ปมอเตอร์ที่เหลือซึ่งฉันเชื่อมต่อกับ Arduino หรือฉันต้องซื้อ Arduino ที่ใหญ่กว่า Arduino Uno เพื่อควบคุมการคุมกำเนิดนี้หรือไม่?

คำตอบ:


22

ได้หมุดแบบอะนาล็อกบน Arduino สามารถใช้เป็นสัญญาณดิจิตอลได้

เอกสารนี้มีไว้ในเอกสารประกอบหมุดอินพุตของ Arduinoในส่วน Pin Mapping:

การ
จับคู่พินสามารถใช้พินแบบอะนาล็อกกับพินดิจิตอลได้โดยใช้นามแฝง A0 (สำหรับอินพุตแบบอะนาล็อก 0), A1 เป็นต้นเช่นรหัสจะมีลักษณะเช่นนี้เพื่อตั้งค่าพินแบบแอนะล็อกเป็น 0 และตั้งค่า มันสูง:
pinMode (A0, OUTPUT);
digitalWrite (A0, สูง);


ใช่ ... ขอโทษ ฉันจำได้ว่ามันสายเมื่อฉันโพสต์นั้นและฉันเริ่มง่วงนอนและสูญเสียสมาธิ ฉันลบความคิดเห็น
เพนกวินที่ไม่เปิดเผยตัว

27

คุณสามารถใช้หมุดอะนาล็อกสำหรับการเขียนแบบดิจิตอลได้ตลอดเวลา

  • digitalRead()ทำงานบนหมุดทั้งหมด มันจะปัดเศษค่าอะนาล็อกที่ได้รับและนำเสนอให้คุณ หากanalogRead(A0)มากกว่าหรือเท่ากับ 512 จะเท่ากับ 1 หรือเท่ากับdigitalRead(A0)0
  • digitalWrite()ใช้งานได้กับพินทั้งหมดโดยที่พารามิเตอร์ที่อนุญาตคือ 0 หรือ 1 digitalWrite(A0,0)นั้นเหมือนกันanalogWrite(A0,0)และdigitalWrite(A0,1)เหมือนกันanalogWrite(A0,255)
  • analogRead()ใช้ได้กับหมุดแบบอะนาล็อกเท่านั้น สามารถรับค่าใด ๆ ระหว่าง 0 ถึง 1,023
  • analogWrite()ใช้งานได้กับหมุดอะนาล็อกและหมุดPWMดิจิตอล คุณสามารถระบุค่าใด ๆ ระหว่าง 0 ถึง 255

หมุดอะนาล็อกช่วยให้คุณอ่าน / เขียนค่าอะนาล็อก - โดยทั่วไปแทนที่จะให้แรงดันไฟฟ้า 0 หรือ 5 (เช่นเดียวกับดิจิตอล) พวกเขาสามารถให้ช่วงแรงดันไฟฟ้าระหว่าง 0 ถึง 5 (ทั้งอินพุตและเอาต์พุต) โปรดทราบว่าแรงดันไฟฟ้าระหว่างเอาต์พุตอนาล็อกเป็นเพียงแรงดันไฟฟ้าที่สังเกตได้ด้วยมัลติมิเตอร์ ในความเป็นจริงหมุดแบบแอนะล็อกส่งพัลส์ของสัญญาณ 0V และ 5V เพื่อรับเอาต์พุตที่ "ดู" อะนาล็อก (นี่คือ PWM)

เกี่ยวกับจำนวนพิน: โปรดจำไว้ว่าพิน PWM สามารถใช้สำหรับเอาท์พุทแบบอะนาล็อก หากคุณไม่มีพินคุณสามารถใช้มัลติเพล็กซ์ มันไม่จำเป็นที่จะต้องได้รับ Arduino อีก


8
AnalogWrite () ไม่ส่งสัญญาณแรงดันไฟฟ้าระหว่าง 0 ถึง 5 (ยกเว้นบน Due)! AnalogWrite () เปลี่ยนการปรับความกว้างพัลส์ของสัญญาณเท่านั้น แรงดันเอาต์พุตยังคงเป็น 5volts (หรือ VCC ใด ๆ ก็ตาม) หมุดที่ทำเครื่องหมายว่า "อะนาล็อก" จะส่งออก 0V หรือ 5V เท่านั้น พวกเขาไม่ได้เป็นตัวแปรและทราบ
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

หมุดอะนาล็อกบน Arduino สามารถใช้เป็นหมุดดิจิตอลดังที่ Anindo Ghosh ชี้ให้เห็น

อย่างไรก็ตามแม้ว่าคุณจะไม่มีพินในการควบคุมสเต็ปเปอร์มอเตอร์คุณก็ไม่จำเป็นต้องซื้อบอร์ดเพิ่มอีก คุณสามารถใช้ส่วนประกอบระดับกลางเช่นรีจิสเตอร์หรือมัลติเพล็กเซอร์เพื่อควบคุมสเต็ปเปอร์มอเตอร์ที่เหมาะสม


4

หากคุณสามารถจ่ายได้และคุณอยากจะให้การทำงานกับสเต็ปเปอร์ง่ายสุดตรวจสอบง่าย 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 Stepperปรากฏขึ้นกับผลิตภัณฑ์ที่ใช้งานได้ในสต็อกและทุกอย่าง
davidcary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.