Arduino come potenziometro digitale
Come usare
Con Arduino si intende una serie di schede a microprocessore. Un potenziometro digitale è un chip, che al suo interno, ha una serie di resistenze collegate come divisore di tensione.

Un potenziometro digitale possiede le seguenti caratteristiche:
- è un potenziometro a tutti gli effetti, ma non si deteriora con l’utilizzo
- per essere tarato non ha bisogno di un intervento manuale (girare il cacciavite)
- si programma con un microcontrollore
- può essere resinato e mantiene la possibilità di essere ri-tarato
- è meno sensibile all’umidità
- ha un profilo meno ingombrante di un tradizionale potenziometro
- è meno sensibile alle vibrazioni
Utilizzi del potenziometro digitale
- sostituzione dei potenziometri tradizionali
- ritardi, filtri e costanti di tempo programmabili
- controllo di volume e stereofonia
- compensazione delle impedenze di linea
- regolazioni negli alimentatori
arduino come potenziometro digitale – scheda

Modelli di potenziometro digitale
I potenziometri tradizionali, diciamo analogici, si diversificano per almeno due caratteristiche principali:
- valore resistivo
- tipo di linearità: lineare/logaritmica
La progressione della resistenza tra il pin centrale e uno dei pin laterali è analogica, cioè procede in modo continuo tra 0 e il valore resistivo nominale massimo.
Nel potenziometro digitale la resistenza viene incrementata a scatti. Nel chip che compone il potenziometro digitale ci sono una serie di singole resistenze, collegate tra loro in serie. Il pin centrale viene collegato, tramite la programmazione, ai capi di un nodo tra due resistenze. Così si forma un partitore di tensione, che è l’utilizzo tipico di un potenziometro, detto anche reostato.
Il numero degli scatti/resistenze definisce la definizione che può avere il potenziometro digitale. Nei datasheet viene specificata in numero di bit.
Ci sono potenziometri con appena 6 bit, equivalenti a 64 scalini resistivi. Sono i componenti che costano meno. Altri modelli con 7, 8 o 10 bit (128, 256 0 1024 scalini resistivi).
Memorizzazione della programmazione
Un potenziometro digitale deve essere programmato. La programmazione può essere permanente o a memoria temporanea.
Permanente significa che il rapporto di partizione è memorizzato in una EEProm. Ogni volta che l’integrato viene spento, e poi riacceso, viene ripristinata la programmazione impostata in precedenza.
Memoria temporanea RAM significa che ogni volta che viene spento, e poi riacceso, l’integrato ripristina la programmazione di default. Solitamente coincide con una programmazione del partitore a metà corsa (pari resistenza tra il pin centrale e i pin laterali).
Tensione e corrente di lavoro
Un dato da valutare è la tensione applicabile al partitore. Normalmente la tensione massima applicabile è variabile da 2,7 a 5,5 Volt. Ci sono modelli con tensioni più elevate variabili dai 15 ai 30 Volt (sono anche più costosi).
La corrente di lavoro massima è quella che può scorrere all’interno del partitore resistivo interno all’integrato. E’ riportato in “Absolute Maximum Ratings” alla riga “Maximum current into A, W and B pins”. Può variare tra +/- 2,5mA fino a +/- 25mA.
Circuiti integrati potenziometro digitale
Nel modello MCP4018 e MCP4019 notate come il pin B è collegato insieme al pin dell’alimentazione negativa GND/Vss. Questo ne limita l’utilizzo solo ai circuiti partitori di tensione.





Programmare Arduino come potenziometro digitale
Un esempio lo trovate nella IDE di Arduino: File –> Esempi –> Wire –> digital_potentiometer
Questo programma utilizza il circuito integrato AD5171 potenziometro digitale. Viene utilizzato il metodo di scambio dati I2C.
// I2C Digital Potentiometer // by Nicholas Zambetti <http://www.zambetti.com> // and Shawn Bonkowski <http://people.interaction-ivrea.it/s.bonkowski/> // Demonstrates use of the Wire library // Controls AD5171 digital potentiometer via I2C/TWI // Created 31 March 2006 // This example code is in the public domain. #include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) } byte val = 0; void loop() { Wire.beginTransmission(44); // transmit to device #44 (0x2c) // device address is specified in datasheet Wire.write(byte(0x00)); // sends instruction byte Wire.write(val); // sends potentiometer value byte Wire.endTransmission(); // stop transmitting val++; // increment value if(val == 64) // if reached 64th position (max) { val = 0; // start over from lowest value } delay(500); }
Datasheet potenziometro digitale
http://ww1.microchip.com/downloads/en/DeviceDoc/22096b.pdf
https://datasheet.lcsc.com/szlcsc/Microchip-Tech-MCP4018T-503E-LT_C145561.pdf
https://datasheet.lcsc.com/szlcsc/Microchip-Tech-MCP4011-503E-SN_C185531.pdf
https://www.tme.eu/en/Document/1c6d79496035ee640a410c41b872fd71/AD8400AR10-Analog-Devices.pdf