Potenziometro digitale e Arduino

Ciao a tutti!
grazie ad un progettino che ho in mente di realizzare, mi sono imbattuto in questo componente:

Questo chip racchiude 2 potenziometri digitali, quindi ci permetterà di avere 2 resistenze variabili controllabili elettronicamente con un Arduino (e non) permettendoci quindi di controllarle anche da remoto.




Le possibilità di utilizzo di questo componente sono molte, ad esempio io ci sto smanettando per tentare di regolare il volume a distanza di un vecchio amplificatore sprovvisto di telecomando.


Ecco lo schema che ho realizzato per utilizzare il componente:



Poi per fare alcune prove ho caricato questo sketch,
il funzionamento è semplice, verrà letto un numero (da 1 a 100) dalla porta seriale, ed in base a quel valore varierà la resistenza tra 0 e 50kohm (l'MCP4251 è disponibile con valori di resistenza di 5, 10, 50 e 100kohm)

Per prima cosa caricate questo sketch:


  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. byte idpot1 = B00000000; //id per selezionare il potenziometro 1
  4. byte idpot2 = B00010000; //id per selezionare il potenziometro 2
  5. int abilitazione = 10;
  6. int vol;
  7. int vol_perc;
  8. void setup()
  9. {
  10.   pinMode (abilitazione, OUTPUT);
  11.   SPI.begin();
  12.   Serial.begin(9600);
  13.   digitalWrite (abilitazione, HIGH);
  14.   digitalWrite (abilitazione, LOW); //con il fronte di discesa viene abilitato il MCP
  15. }
  16. void loop() {
  17.   int c = Serial.parseInt();
  18.   if(c>0) //ad ogni lettura, se non viene inviato niente, viene comunque ricevuto il valore -1, in questo modo ignoro questo valore.
  19.   {
  20.     vol_perc = map (c, 1, 100, 0, 255); // scalatura del valore da 8 bit a percentuale
  21.     EEPROM.write(0,vol_perc); // scrivo il valore percentuale sulla EEPROM
  22.   }
  23.   Serial.println (map (EEPROM.read(0), 0, 255, 1, 100)); // leggo il valore dalla EEPROM
  24.   SPI.transfer(idpot1);
  25.   SPI.transfer(EEPROM.read(0)); //scrivo il valore sul potenziometro 1
  26.   SPI.transfer(idpot2);
  27.   SPI.transfer(EEPROM.read(0)); //scrivo il valore sul potenziometro 2
  28.   delay (1000);
  29. }



Per decidere il valore di resistenza sarà sufficiente scrivere sul serial monitor presente nell'IDE di Arduino il valore in percentuale


ecco cosa ottengo tra i pin 5 e 6 dell'MCP scrivendo sul serial monitor 1




23.2 kohm se scrivo 50 sul serial monitor





e 46.6 kohm scrivendo 100 sul serial monitor




Ora, se volete comandare il vostro potenziometro digitale a distanza, sarà sufficiente collegare un modulo bluetooth come mostrato qui, lo sketch rimane quello di questo articolo, quindi non sarà necessario modificarlo. Per scrivere il valore potrete usare un'app come descritto nel post sul modulo bluetooth.

Per approfondire ecco il datasheet, a pagina 31 potete trovare il pinout, a pagina 48 c'è una tabella che indica le stringhe da inviare via SPI per controllare l'MCP.

Ringrazio Matthew McMillan per il fantastico articolo (in inglese) che mi ha permesso di comprendere il funzionamento di questo componente.

Segui Daniele Alberti su Google+!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...