プロジェクトとしてArduinoのアナログピンをデジタルとして使用できますか?


27

私はArduinoを使うのが初めてで、Arduino Unoを持っています。私が行ったプロジェクトでは、デジタルピンのみを使用しました。

ステッピングモーターを使用する小型車両を構築しています。この車両のモーターを制御するためのピンが不足しています。アナログピンとは何ですか?アナログピンを使用してArduinoに接続する残りのステップモーターを制御することはできますか、またはこの仕掛けを制御するためにArduino Unoよりも大きいArduinoを購入する必要がありますか?

回答:


22

はい、Arduinoのアナログピンはデジタル出力として使用できます。

これは、ピンマッピングセクションのArduino入力ピンドキュメントに記載されています

ピンマッピング
アナログピンは、エイリアスA0(アナログ入力0)、A1などを使用して、デジタルピンと同じように使用できます。たとえば、コードはこのようになり、アナログピン0を出力に設定し、 it HIGH:
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()すべてのアナログピンとすべてのデジタルPWMピンで動作します。0〜255の任意の値を指定できます。

アナログピンを使用すると、アナログ値を読み書きできます。基本的に、0または5の電圧を出力する代わりに(デジタルの場合)、0〜5(入力および出力の両方)の電圧範囲を提供できます。アナログ出力時の電圧は、マルチメータで観測された電圧のみであることに注意してください。実際には、アナログピンは0Vおよび5V信号のパルスを送信して、アナログに見える出力(PWM)を取得します。

ピンの数に関して:PWMピンはアナログ出力に使用できることに注意してください。ピンが足りなくなった場合は、マルチプレキシングを使用してより多くを作成できます。別のArduinoを入手する必要はありません。


8
AnalogWrite()は0〜5の電圧を出力しません(Dueを除く)。AnalogWrite()は、信号のパルス幅変調のみを変更します。出力電圧はまだ5ボルト(またはVCCが何であれ)です。「アナログ」とマークされたピンは、0Vまたは5Vのみを出力します。それらは可変ではなく、注意です
-baldengineer

1
@ JamesC4S:良い点、編集済み。ありがとう:)
マニッシュアース

ずっといい!:)
ボールドエンジニア

アナログピンのdigitalRead()およびdigitalWrite()は遅いですか?digitalRead()が値を丸めると、デジタルピンのdigitalRead()よりもずっと遅いと想像できますか?
-Johncl

これは非常に簡潔で有益ですが、ありがとうございます。ただし、1つの小さなエラーがあると思います。すばらしい文書によると: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

Andudo Ghoshが指摘したように、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);          
}

また、同じページから、加速/減速付きの2つのイージーステッパーボードで2つのモーターを実行するコードの例を次に示します。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();
}

これは本当に質問に答えません。コメントとしては良いでしょう。質問に答えられるように肉付けしてください。
マニッシュアース

@AnnonomusPerson:EasyDriverステッピングモータードライバーは、在庫のあるすべてのアクティブな製品に表示されます。
-davidcary
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.