Kan jeg bruke de analoge pinnene på Arduino for prosjektet mitt som digitale?

Jeg er ny med å bruke Arduino, og jeg har en Arduino Uno. For prosjektene jeg har gjort, har jeg bare brukt de digitale pinnene.

Jeg bygger et lite kjøretøy som bruker trinnmotorer. Jeg har gått tom for pinner for å kontrollere motorene til dette kjøretøyet. Hva er de analoge pinnene til? Er det mulig for meg å bruke analoge pinner for å kontrollere resten av trinnmotorene som jeg kobler til Arduino, eller må jeg kjøpe en større Arduino enn Arduino Uno for å kontrollere dette utstyret?

Svar

Ja, de analoge pinnene på Arduino kan brukes som digitale utganger.

Dette er dokumentert i Arduino-inngangspinnedokumentasjon , i delen Pin Mapping:

Pinnekartlegging
De analoge pinnene kan brukes identisk med de digitale pinnene, ved å bruke aliasene A0 (for analog inngang 0), A1, etc. Koden vil for eksempel se slik ut til sett analog pin 0 til en utgang, og sett den HØY:
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);

Kommentarer

  • Ja … beklager. Jeg husker at det var sent da jeg postet det, og jeg ble søvnig og mistet konsentrasjonen. Jeg fjernet kommentaren.

Svar

Du kan alltid bruke de analoge pinnene til digital skriving.

  • digitalRead() fungerer på alle pinner. Det vil bare runde den mottatte analoge verdien og presentere den for deg. Hvis analogRead(A0) er større enn eller lik 512, vil digitalRead(A0) være 1, ellers 0.
  • digitalWrite() fungerer på alle pinner, med tillatt parameter 0 eller 1. digitalWrite(A0,0) er det samme som analogWrite(A0,0), og digitalWrite(A0,1) er det samme som analogWrite(A0,255)
  • analogRead() fungerer bare på analoge pinner. Det kan ta en hvilken som helst verdi mellom 0 og 1023.
  • analogWrite() fungerer på alle analoge pinner og alle digitale PWM pins. Du kan levere den hvilken som helst verdi mellom 0 og 255.

De analoge pinnene lar deg lese / skrive analoge verdier – i utgangspunktet i stedet for å gi ut en spenning på 0 eller 5 (som med digital) , de kan gi et spenningsområde mellom 0 og 5 (både som inngang og utgang). Merk at spenningen under analog utgang bare er den observerte spenningen med et multimeter. I virkeligheten sender de analoge pinnene pulser på 0V og 5V-signaler for å få en utgang som «ser» analog ut (dette er PWM).

Når det gjelder antall pinner: husk at PWM-pinnene kan være brukes til analog utgang. Hvis du går tom for pins, kan du bruke multiplexing for å lage mer. Det er ikke nødvendig å få en ny Arduino.

Kommentarer

  • AnalogWrite () gir ikke ut spenninger mellom 0 og 5 (unntatt på Due)! AnalogWrite () endrer bare pulsbreddemodulasjonen til signalet. Utgangsspenningen er fortsatt 5 volt (eller hva VCC er). Pinnene merket » analog » gir bare ut 0V eller 5V. De er ikke variable og er merkede
  • @ JamesC4S: Bra poeng, redigert. Takk 🙂
  • Mye bedre! 🙂
  • Er digitalRead () og digitalWrite () på analoge pinner langsommere? Hvis digitalRead () avrunder verdien, kan jeg forestille meg at den er mye tregere enn digitalRead () på en digital pin?
  • Dette er veldig kortfattet og informativ, takk, men jeg tror at det er en liten feil. I følge fine docs : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards) som strider mot utsagnet i dette innlegget If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.

Svar

De analoge pinnene på Arduino kan brukes som digitale pinner ut av Anindo Ghosh.

Selv om du går tom for pinner for å kontrollere trinnmotorer, trenger du ikke å kjøpe et annet kort. Du kan ganske enkelt bruke en mellomkomponent som et register eller en multiplekser for å kontrollere riktig trinnmotor.

Svar

Hvis du har råd til det, og du virkelig vil gjøre arbeidet med en stepper superenkel sjekk ut Easy Stepper . Jeg var veldig fornøyd.

Fra eksempelkodesiden

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

Også fra samme side, her er noen eksempler på kode for å kjøre to motorer med to easystepper boards, med akselerasjon / retardasjon: 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(); } 

Kommentarer

  • Dette svarer virkelig ikke ‘ på spørsmålet; det ville være bedre som en kommentar. Kunne du gir den ut slik at den svarer på spørsmålet?
  • @AnnonomusPerson: EasyDriver Stepper Motor Driver ser ut til å være et aktivt produkt, på lager og alt.

Svar

Legger til som svar, fordi kan ikke kommentere.

For å svare kort, ja du kan. Se til Anindo Ghoshs svar om hvordan du gjør det.

Merk men at for Arduino Nano er pins A6 og A7 bare analoge og kan ikke brukes i digital modus.

Kommentarer

  • Vær oppmerksom på at dette svaret nesten bare inneholder en lenke. Koblinger / nettsteder kan være foreldet, noe som gjør dette svaret ubrukelig. Behold lenken, men oppsummer eller siter de relevante delene av nettstedet.
  • @Huisman For å være rettferdig, er det mindre sannsynlig at lenker til andre spørsmål om EE.SE avskrives eller blir utilgjengelige; men et kort sammendrag vil sikkert forbedre svaret.
  • @JYelton Jeg fulgte ‘ ikke lenken, men du ‘ har rett.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *