Arduinoを初めて使用し、ArduinoUnoを使用しています。私が行ったプロジェクトでは、デジタルピンのみを使用しました。
ステッピングモーターを使用する小型車を製造しています。この車両のモーターを制御するためのピンが不足しています。アナログピンは何のためのものですか? Arduinoに接続する残りのステップモーターを制御するためにアナログピンを使用することは可能ですか、それともこの矛盾を制御するためにArduino Unoよりも大きなArduinoを購入する必要がありますか?
回答
はい、Arduinoのアナログピンはデジタル出力として使用できます。
これは、 Arduino入力ピンのドキュメントのピンマッピングセクションに記載されています:
ピンマッピング
アナログピンは、エイリアスA0(アナログ入力0用)、A1などを使用して、デジタルピンと同じように使用できます。たとえば、コードは次のようになります。アナログピン0を出力に設定し、HIGHに設定します。
pinMode(A0、OUTPUT);
digitalWrite(A0、HIGH);
コメント
- うん…ごめんなさい。それを投稿したのが遅く、眠くなって集中力を失っていたのを覚えています。コメントを削除しました。
回答
デジタル書き込みにはいつでもアナログピンを使用できます。
-
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を入手する必要はありません。
コメント
- AnalogWrite()は0から5の間の電圧を出力しません(Dueを除く)! AnalogWrite()は、信号のパルス幅変調のみを変更します。出力電圧はまだ5ボルト(またはVCCが何であれ)です。 "アナログ"とマークされたピンは0Vまたは5Vのみを出力します。それらは可変ではなく、注意事項です
- @ JamesC4S:良い点、編集済み。ありがとう:)
- はるかに良いです! 🙂
- アナログピンのdigitalRead()とdigitalWrite()は遅いですか? digitalRead()が値を丸める場合、デジタルピンのdigitalRead()よりもはるかに遅いと想像できますか?
- これは非常に簡潔で有益ですが、ありがとうございます。ただし、小さなエラーが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
。
回答
Arduinoのアナログピンは、指摘されているようにデジタルピンとして使用できます。 AnindoGhoshによる。
ただし、ステッピングモーターを制御するためのピンがなくなった場合でも、別のボードを購入する必要はありません。レジスタやマルチプレクサなどの中間コンポーネントを使用するだけで、適切なステッピングモーターを制御できます。
回答
余裕があり、ステッパーでの作業を本当に簡単にしたい場合は イージーステッパーをチェックしてください。私は非常に喜んでいました。
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ステッピングモータードライバーは、在庫があり、すべてがアクティブな製品のように見えます。
回答
コメントできないため、回答として追加します。
簡単に回答するには、はい、できます。参照してください。その方法については、 AnindoGhoshの回答へ
注意ただし、 Arduino Nano の場合、ピン A6とA7はアナログのみですでありデジタルモードでは使用できません。
コメント
- この回答にはほとんどリンクのみが含まれていることに注意してください。リンク/ウェブサイトが陳腐化し、この回答が役に立たなくなる可能性があります。リンクは保持しますが、ウェブサイトの関連部分を要約または引用してください。
- @Huisman公平を期すために、EE.SEの他の質問へのリンクは、廃止されたりアクセスできなくなったりする可能性が低くなります。しかし、簡単な要約で答えは確かに改善されます。
- @JYelton私は'リンクをたどりませんでしたが、'正解です。