Arduino'daki analog pimleri projem için dijital olarak kullanabilir miyim?


27

Arduino'yu kullanmaya yeni başladım ve bir Arduino Uno'm var. Yaptığım projeler için sadece dijital pinleri kullandım.

Step motor kullanan küçük bir araç yapıyorum. Bu aracın motorlarını kontrol etmek için pim bitmiştir. Analog pinler ne içindir? Arduino'ya bağladığım adım motorlarının geri kalanını kontrol etmek için analog pimler kullanmam mümkün mü, yoksa bu kontrolü kontrol etmek için Arduino Uno'dan daha büyük bir Arduino satın almak zorunda mıyım?

Yanıtlar:


22

Evet, Arduino'daki analog pimler dijital çıkışlar olarak kullanılabilir.

Bu, Arduino giriş pin belgelerinde , Pin Eşleme bölümünde belgelenmiştir :

Pin eşlemesi
Analog pinler, A0 (analog giriş 0), A1 vb. YÜKSEK:
pinMode (A0, ÇIKIŞ);
digitalWrite (A0, YÜKSEK);


Evet üzgünüm. Bunu gönderdiğimde geç olduğunu hatırlıyorum ve uykum oluyor ve konsantrasyonumu kaybediyordum. Yorumu kaldırdım.
Anonim Penguen

27

Analog pimleri her zaman dijital yazma için kullanabilirsiniz.

  • digitalRead()tüm pinlerde çalışır. Sadece alınan analog değeri yuvarlar ve size sunar. Eğer analogRead(A0)daha yüksek veya 512 eşit olduğu, digitalRead(A0)başka bir 1, 0 olur.
  • digitalWrite() 0 veya 1 izin verilen parametre ile tüm pinlerde çalışır. digitalWrite(A0,0) aynıdır analogWrite(A0,0)ve digitalWrite(A0,1)aynıdır.analogWrite(A0,255)
  • analogRead()sadece analog pinlerde çalışır. 0 ile 1023 arasında herhangi bir değer alabilir.
  • analogWrite() tüm analog pinlerde ve tüm dijitallerde çalışır PWM pinlerde çalışır. 0 ile 255 arasında herhangi bir değer sağlayabilirsiniz.

Analog pinler analog değerleri okumanıza / yazmanıza izin verir - temelde 0 veya 5 voltaj vermek yerine (dijitalde olduğu gibi), 0 ile 5 arasında (hem giriş hem de çıkış olarak) bir voltaj aralığı verebilirler. Analog çıkış sırasındaki voltajın yalnızca multimetre ile gözlenen voltaj olduğunu unutmayın. Gerçekte, analog pimler analog olarak görünen bir çıkış elde etmek için 0V ve 5V sinyalleri gönderir (bu PWM'dir).

Pin sayısı ile ilgili olarak: PWM pinlerinin analog çıkış için kullanılabileceğini unutmayın. Pimler tükenirse, daha fazlasını yapmak için çoklama kullanabilirsiniz . Başka bir Arduino almak gerekli değildir.


8
AnalogWrite (), 0 - 5 arasındaki voltajları vermez (Due hariç)! AnalogWrite () yalnızca sinyalin darbe genişlik modülasyonunu değiştirir. Çıkış voltajı hala 5 volt'tur (veya her ne VCC ise). "Analog" işaretli pimler sadece 0V veya 5V çıkış verecektir. Değişken değillerdir ve nottur
baldengineer

1
@ JamesC4S: İyi nokta, düzenlenmiş. Thanks :)
Manishearth

Çok daha iyi! :)
baldengineer

Analog pinlerdeki digitalRead () ve digitalWrite () daha yavaş mı? DigitalRead () değeri yuvarlarsa, dijital pin üzerinde digitalRead () 'den çok daha yavaş olduğunu hayal edebiliyorum.
Johncl

Bu çok özlü ve bilgilendirici, teşekkür ederim, ancak küçük bir hata olduğuna inanıyorum. Göre ince docs : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)Bu mesajda deyimi çelişmektedir If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen

6

Arduino'daki analog pimler, Anindo Ghosh tarafından belirtildiği gibi dijital pimler olarak kullanılabilir.

Ancak, step motorlarınızı kontrol etmek için pimleriniz tükense bile, gerçekten başka bir tahta almanıza gerek yoktur. Uygun step motorunu kontrol etmek için basitçe bir register veya çoklayıcı gibi bir ara bileşen kullanabilirsiniz.


4

Eğer bunu karşılayabiliyorsanız ve gerçekten bir adım adım süper kolay check-in yapmayı kolaylaştırmak istiyorsanız, Kolay Adım . Çok memnundum.

Gönderen örnek kod sayfası

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

Aynı sayfadan, ivme / yavaşlama ile birlikte iki basit ekran kartı olan iki motoru çalıştırmak için bazı örnek kodlar: 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();
}

Bu gerçekten soruya cevap vermiyor; yorum olarak daha iyi olurdu. Soruyu cevaplayabilmesi için etini çıkarabilir misin?
Manishearth

@AnonomerPerson: EasyDriver Step Motor Sürücüsü , stokta ve her şeyde aktif bir üründe görünür.
davidcary
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.