31 de julho de 2021

Do bit Ao Byte

Embarcados, Linux e programação

X9C10x – Potenciômetro digital com Arduino

potenciômetro digital com Arduino

Olha que incrível! O que pode ser mais legal e preciso do que usar a MCU para controlar a resistência de um potenciômetro? Além de poder fazer ajuste interativo, ainda podemos aplicar um algorítimo para ajustar o potenciômetro digital com Arduino , ESP8266/ESP32 etc.

Características do potenciômetro digital X9C104

Sendo um potenciômetro, não há muito o que variar (bom trocadilho, hum?). Ele possui as saídas RH, RW e RL. Ele tem uma resistência de 100K. Internamente ele possui uma matriz de 99 componentes resistivos e sua interface de comunicação é 3-wire. Esse potenciômetro digital você encontra nesse link, da Curto Circuito.

O final 102 é 1KOhms, 103 é 10KOhms e 503 é 50KOhms.

Pinout do X9C104

Estão dispostos 10 pinos, como na tabela abaixo:

PINO (ESQUERDA)FUNÇÃO (ESQUERDA)PINO (DIREITA)FUNÇÃO (DIREITA)
VCCAlimentação (5V)VCCAlimentação (5V)
GNDGroundRHResistor alto
INCComando de mudançaRWResistor regulado
U/Dajuste UP/DownRLResistor baixo
CSChip selector. Ativo: LOWGNDGround

O primeiro pino é o superior esquerdo, marcado com uma circunferência côncava sobre o encapsulamento do CI.

Esse pinout é um frame tirado do vídeo relacionado a esse artigo. Apesar da leitura ser o suficiente, ficarei honrado com sua visita ao canal DobitaobyteBrasil no Youtube.

Wiring do potenciômetro digital com Arduino

Podemos usar quaisquer pinos e qualquer Arduino. Ou nem precisa ser Arduino, mas vamos considerar os pinos 5,6 e 7 para Uno, Nano, Mega e para um Attiny88, como o MH-Tiny. Desse modo, não precisamos mexer no sketch de exemplo e conseguiremos comprovar facilmente o funcionamento, para depois fazermos livremente nossas implementações. Essa é uma dica; por mais que possa parecer perda de tempo, experimente um código de exemplo da biblioteca utilizada para constatar o funcionamento do hardware, wiring e ter uma visão do que realmente acontece no funcionamento – ou até simplifique o sketch de exemplo, como aqui. Depois, qualquer coisa que acontecer já parte-se da premissa que é outra parte que não o dispositivo testado.

Biblioteca para X9C10x

Temos duas bibliotecas (pelo menos) para esses potenciômetros dessa série. Uma delas, da ElectroPeak, que coloquei em um repositório para não termos o risco de perder. Baixe e coloque-a no diretório Arduino/libraries. Se preferir importar como zip pela IDE do Arduino, comprima o diretório DigiPotX9Cxxx e importe-o. A segunda opção é instalar a biblioteca LapX9C10X, que está disponível através do gerenciador de bibliotecas da IDE do Arduino ou pelo PlatformIO. Para exemplificar, vou usar a biblioteca que está em meu repositório (do link acima) e simplificar o código para um fade in e fade out.

Código de teste

Eis um código de teste, que comento logo após.

#include <DigiPotX9Cxxx.h>
DigiPot pot(5,6,7);
void setup() {
}

void loop() {
  for (int i=0; i<100; i++) {
    pot.increase(1);
    delay(20);
  }
  
  for (int i=0; i<100; i++) {
    pot.decrease(1);
    delay(20);
  }
}
 

Repare que os tempos e os loops são iguais, exceto pela função de incremento ou decremento. Apesar disso, o tempo que o LED fica desligado é maior do que o tempo que fica ligado. Isso porque estamos usando um potenciômetro de 100k e um resistor de 680Ohms. O fade funciona muito bem, como pode ser visto no vídeo, que estará disponível em nosso canal DobitaobyteBrasil no Youtube tão logo acabe de ser editado. Se não é inscrito, inscreva-se e clique no sininho para receber notificações. Seu apoio é importante.

E, se você leu até aqui: Fiz esse tutorial com o MH-Tiny, da Curto Circuito. Como já citei anteriormente, a placa engana facilmente, pois é quase idêntica ao Arduino Nano, não fosse o fato de ser micro-USB e placa preta – muito mais bonita, digo de passagem.