Puis-je utiliser les broches analogiques de l'Arduino pour mon projet en tant que numérique?


27

Je suis nouveau dans l'utilisation d'Arduino et j'ai un Arduino Uno. Pour les projets que j'ai réalisés, je n'ai utilisé que les broches numériques.

Je construis un petit véhicule qui utilise des moteurs pas à pas. Je n'ai plus de broches pour contrôler les moteurs de ce véhicule. À quoi servent les broches analogiques? Est-il possible pour moi d'utiliser des broches analogiques pour contrôler le reste des moteurs pas à pas que je connecte à l'Arduino, ou dois-je acheter un Arduino plus grand que l'Arduino Uno pour contrôler cet engin?

Réponses:


22

Oui, les broches analogiques de l'Arduino peuvent être utilisées comme sorties numériques.

Ceci est documenté dans la documentation des broches d'entrée Arduino , dans la section Pin Mapping:

Mappage
des broches Les broches analogiques peuvent être utilisées de manière identique aux broches numériques, en utilisant les alias A0 (pour l'entrée analogique 0), A1, etc. Par exemple, le code ressemblerait à ceci pour définir la broche analogique 0 sur une sortie et pour définir il HAUT:
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);


Ouais désolé. Je me souviens qu'il était tard quand j'ai posté ça et que je commençais à avoir sommeil et à perdre la concentration. J'ai supprimé le commentaire.
Anonymous Penguin

27

Vous pouvez toujours utiliser les broches analogiques pour l'écriture numérique.

  • digitalRead()fonctionne sur toutes les broches. Il arrondira simplement la valeur analogique reçue et vous la présentera. Si analogRead(A0)est supérieur ou égal à 512, digitalRead(A0)sera 1, sinon 0.
  • digitalWrite()fonctionne sur toutes les broches, avec le paramètre autorisé 0 ou 1. digitalWrite(A0,0)est le même que analogWrite(A0,0), et digitalWrite(A0,1)est le même queanalogWrite(A0,255)
  • analogRead()ne fonctionne que sur des broches analogiques. Il peut prendre n'importe quelle valeur entre 0 et 1023.
  • analogWrite()fonctionne sur toutes les broches analogiques et toutes les broches PWM numériques . Vous pouvez lui fournir n'importe quelle valeur entre 0 et 255.

Les broches analogiques vous permettent de lire / écrire des valeurs analogiques - fondamentalement, au lieu de donner une tension de 0 ou 5 (comme avec le numérique), elles peuvent donner une plage de tensions entre 0 et 5 (à la fois en entrée et en sortie). Notez que la tension pendant la sortie analogique n'est que la tension observée avec un multimètre. En réalité, les broches analogiques envoient des impulsions de signaux 0V et 5V pour obtenir une sortie qui "ressemble" analogique (c'est PWM).

Concernant le nombre de broches: gardez à l'esprit que les broches PWM peuvent être utilisées pour la sortie analogique. Si vous manquez de broches, vous pouvez utiliser le multiplexage pour en faire plus. Il n'est pas nécessaire d'obtenir un autre Arduino.


8
AnalogWrite () ne produit pas de tensions entre 0 et 5 (sauf sur le Due)! AnalogWrite () ne modifie que la modulation de largeur d'impulsion du signal. La tension de sortie est toujours de 5 volts (ou quel que soit le VCC). Les broches marquées "analogiques" ne sortiront que 0V ou 5V. Ils ne sont pas variables et sont à noter
baldengineer

1
@ JamesC4S: Bon point, édité. Merci :)
Manishearth

Bien mieux! :)
baldengineer

DigitalRead () et digitalWrite () sur les broches analogiques sont-ils plus lents? Si digitalRead () arrondit la valeur, je peux imaginer que ce soit beaucoup plus lent que digitalRead () sur une broche numérique?
Johncl

C'est très concis et instructif, merci, mais je pense qu'il y a une petite erreur. Selon les beaux documents : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)ce qui contredit la déclaration dans ce post If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
dotancohen

6

Les broches analogiques de l'Arduino peuvent être utilisées comme broches numériques, comme l'a souligné Anindo Ghosh.

Cependant, même si vous manquez de broches pour contrôler vos moteurs pas à pas, vous n'avez pas vraiment besoin d'acheter une autre carte. Vous pouvez simplement utiliser un composant intermédiaire tel qu'un registre ou un multiplexeur pour contrôler le moteur pas à pas approprié.


4

Si vous pouvez vous le permettre et que vous voulez vraiment rendre le travail avec un stepper super facile, consultez Easy Stepper . J'ai été ravi.

À partir de l' exemple de page de codes

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

Également à partir de la même page, voici un exemple de code pour exécuter deux moteurs avec deux cartes easystepper, avec accélération / décélération: 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();
}

Cela ne répond vraiment pas à la question; ce serait mieux comme commentaire. Pourriez-vous l'étoffer pour qu'il réponde à la question?
Manishearth

@AnnonomusPerson: Le pilote de moteur pas à pas EasyDriver apparaît à un produit actif, en stock et tout.
davidcary
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.