Bisakah saya menggunakan pin analog pada Arduino untuk proyek saya sebagai digital?

27

Saya baru menggunakan Arduino, dan saya memiliki Arduino Uno. Untuk proyek yang saya lakukan, saya hanya menggunakan pin digital.

Saya sedang membangun kendaraan kecil yang menggunakan motor stepper. Saya sudah kehabisan pin untuk mengendalikan motor untuk kendaraan ini. Untuk apa pin analog itu? Apakah mungkin bagi saya untuk menggunakan pin analog untuk mengendalikan sisa motor langkah yang saya sambungkan ke Arduino, atau apakah saya harus membeli Arduino yang lebih besar daripada Arduino Uno untuk mengendalikan alat ini?

bogen
sumber

Jawaban:

22

Ya, pin analog pada Arduino dapat digunakan sebagai output digital.

Ini didokumentasikan dalam dokumentasi pin input Arduino , di bagian Pemetaan Pin:

Pin mapping Pin
analog dapat digunakan secara identik ke pin digital, menggunakan alias A0 (untuk input analog 0), A1, dll. Misalnya, kode akan terlihat seperti ini untuk mengatur pin analog 0 ke output, dan untuk mengatur TINGGI:
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);

Anindo Ghosh
sumber
Ya ... maaf. Saya ingat sudah terlambat ketika saya memposting itu dan saya mulai mengantuk dan kehilangan konsentrasi. Saya menghapus komentar.
Penguin Anonim
27

Anda selalu dapat menggunakan pin analog untuk penulisan digital.

  • digitalRead()bekerja pada semua pin. Itu hanya akan membulatkan nilai analog yang diterima dan menyajikannya kepada Anda. Jika analogRead(A0)lebih besar dari atau sama dengan 512, digitalRead(A0)akan menjadi 1, atau 0.
  • digitalWrite()bekerja pada semua pin, dengan parameter yang diizinkan 0 atau 1. digitalWrite(A0,0)sama dengan analogWrite(A0,0), dan digitalWrite(A0,1)sama dengananalogWrite(A0,255)
  • analogRead()hanya bekerja pada pin analog. Ini dapat mengambil nilai apa pun antara 0 dan 1023.
  • analogWrite()bekerja pada semua pin analog dan semua pin PWM digital . Anda dapat memberikan nilai apa pun antara 0 dan 255.

Pin analog memungkinkan Anda membaca / menulis nilai analog - pada dasarnya, alih-alih memberikan tegangan 0 atau 5 (seperti dengan digital), pin analog dapat memberikan kisaran tegangan antara 0 dan 5 (baik sebagai input dan output). Perhatikan bahwa tegangan selama output analog hanya tegangan yang diamati dengan multimeter. Pada kenyataannya, pin analog mengirim pulsa sinyal 0V dan 5V untuk mendapatkan output yang "terlihat" analog (ini adalah PWM).

Mengenai jumlah pin: perlu diingat bahwa pin PWM dapat digunakan untuk output analog. Jika Anda kehabisan pin, Anda bisa menggunakan multiplexing untuk menghasilkan lebih banyak. Tidak perlu untuk mendapatkan Arduino lain.

Manishearth
sumber
8
AnalogWrite () tidak menghasilkan tegangan antara 0 hingga 5 (kecuali pada Jatuh Tempo)! AnalogWrite () hanya mengubah modulasi lebar pulsa sinyal. Tegangan output masih 5 volt (atau VCC apa pun itu). Pin bertanda "analog" hanya akan menghasilkan 0V atau 5V. Mereka tidak variabel dan perhatikan
baldengineer
1
@ JamesC4S: Poin bagus, diedit. Terima kasih :)
Manishearth
Jauh lebih baik! :)
baldengineer
Apakah digitalRead () dan digitalWrite () pada pin analog lebih lambat? Jika digitalRead () membulatkan nilai yang bisa saya bayangkan itu jauh lebih lambat daripada digitalRead () pada pin digital?
Johncl
Ini sangat singkat dan informatif, terima kasih, namun saya percaya ada satu kesalahan kecil. Menurut dokumen yang bagus : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)yang bertentangan dengan pernyataan dalam posting ini If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen
6

Pin analog pada Arduino dapat digunakan sebagai pin digital, seperti yang ditunjukkan oleh Anindo Ghosh.

Namun, bahkan jika Anda kehabisan pin untuk mengendalikan motor stepper Anda, Anda tidak perlu membeli papan lain. Anda cukup menggunakan komponen perantara seperti register atau multiplexer untuk mengendalikan motor stepper yang sesuai.

asheeshr
sumber
4

Jika Anda mampu membelinya, dan Anda benar-benar ingin bekerja dengan stepper super mudah, periksa Easy Stepper . Saya sangat senang.

Dari halaman contoh kode

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

Juga dari halaman yang sama, inilah beberapa contoh kode untuk menjalankan dua motor dengan dua papan easystepper, dengan akselerasi / perlambatan: 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
sumber
Ini benar-benar tidak menjawab pertanyaan; akan lebih baik sebagai komentar. Bisakah Anda menyempurnakannya sehingga menjawab pertanyaan?
Manishearth
@AnnonomusPerson: Driver Motor EasyDriver Stepper muncul ke produk yang aktif, tersedia, dan semuanya.
davidcary