Come controllare un mandrino analogico? Come controllare un componente con AnalogWrite e AnalogRead?

La scrittura o la lettura di pin analogici ti consentirà di controllare i tuoi componenti e di leggere le misurazioni dai tuoi sensori.

Ecco cosa vedremo in questo corso:

Controlla il tuo componente (analogWrite)
Leggere la tensione su un sensore (analogRead)
Convertire il valore ottenuto o desiderato (mappa)

Ecco i pin analogici controllabili da analogWrite e analogRead:

Qual è la differenza tra analogico e digitale?

Un segnale digitale può assumere due valori: ALTO o BASSO. HIGH corrisponde allo stato alto e LOW allo stato basso. Questo segnale è molto utile, ad esempio, per rilevare lo stato di un pulsante o per accendere un LED.

Tuttavia, se si desidera accendere il LED a metà della sua intensità, è necessario un segnale analogico.

Può assumere un numero infinito di valori compresi tra 0 V e 5 V. Questo segnale ti sarà utile per misurare e inviare valori molto più precisi, come 0,45 V invece di 0 V e 5 V come in un segnale digitale.

Per convertire il segnale è possibile utilizzare un convertitore analogico-digitale.

analogWrite ()

AnalogWrite consente di controllare componenti come LED, servomotori, ecc. Infatti, grazie alla tecnologia PWM, AnalogWrite è in grado di controllare i componenti con precisione, ad esempio indicando la posizione di un servomotore o la potenza di un LED.

analogWrite(pin, value);

AnalogWrite consente di generare valori intermedi tra 0 e 255 (su una scheda Arduino standard) regolando il duty cycle della tensione di uscita. In altre parole, modula la larghezza dell’impulso per simulare una tensione media diversa. Ad esempio, se si specifica un valore pari a 128 per la funzione analogWrite, ciò significa che il pin produrrà un’onda quadra con un duty cycle del 50%, generando così una tensione media di circa 2,5 V.

Ecco un esempio della funzione analogWrite sul pin A3:

analogWrite(A3, 128);

analogRead ()

Se vuoi leggere il valore proveniente da un sensore, la funzione analogRead di cui hai bisogno!

Ecco un esempio di utilizzo della funzione analogRead():

analogRead(Pin)
Pin: da A0 ad A5

La funzione restituisce il valore del pin analogico, che è un valore compreso tra 0 e 1023 corrispondente alla tensione letta sul pin. Vedremo come convertirlo.

Conversione di valore

La map è una funzione matematica che trasforma un valore specificando i limiti del vecchio valore e i limiti entro cui si desidera che rientri il valore convertito.

map(valore_da_convertire, vecchio_valore_basso, vecchio_valore_alto, nuovo_valore_basso, nuovo_valore_alto)
  • analogWrite(): converte il valore in % o gradi tra 0 e 255
Come accennato in precedenza, la funzione analogWrite accetta come parametri valori compresi tra 0 e 255. Ma il servomotore, ad esempio, viene controllato con valori compresi tra 0° e 180°. Per quanto riguarda il LED, può essere controllato tra 0% e 100%. Quindi convertiremo questi valori in modo che corrispondano alla funzione analogWrite utilizzando la funzione map.
Ad esempio, se vogliamo la posizione di 90° per il nostro servomotore sul pin 7:
int servo_value=90;
servo_value=map(servo_value,0.180,0.255);
analogWrite(7,servo_value);
  • analogRead(): converte il valore tra 0 e 1023 in una tensione tra 0 e 5 V

Il valore compreso tra 0 e 1023 probabilmente non ti dice nulla, quindi vediamo come convertirlo tra 0 V e 5 V. Per fare questo utilizzeremo la funzione map, che ci permetterà di convertire il valore ottenuto:

int valore_intero = analogRead(pin);
valore_intero =map(valore,0,1023,0,5);