Tabla de contenido:
- Paso 1: Conexiones del DS1803
- Paso 2: Byte de comando
- Paso 3: Control del DS1803
- Paso 4: configurar
- Paso 5: el programa
Video: Potenciómetro digital dual DS1803 con Arduino: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
Me gusta compartir el uso de un potenciómetro digital DS1803 con un Arduino. Este IC contiene dos potenciómetros digitales que se pueden controlar a través de una interfaz de dos cables, para esto utilizo la biblioteca wire.h.
Este IC puede reemplazar un potenciómetro analógico normal. De esta forma puede controlar, por ejemplo, un amplificador o una fuente de alimentación.
En este instructable controlo el brillo de dos LED para mostrar el funcionamiento.
El arduino cuenta los pulsos de un codificador rotatorio y coloca el valor en la variable pot [0] y pot [1]. Cuando presiona el interruptor en el codificador, puede cambiar entre el potenciómetro [0] y el potenciómetro [1].
El valor real de los potenciómetros se lee desde el DS1803 y se coloca en potValue variable [0] y potValue [1] y se muestra en una pantalla LCD.
Paso 1: Conexiones del DS1803
Aquí puede ver las conexiones del DS1803. H es el lado alto del potenciómetro, L el lado bajo y W el limpiaparabrisas. SCL y SDA son las conexiones de bus.
Con las conexiones A0, A1 y A2 puedes darle al DS1803 su propia dirección, de esta manera puedes controlar más dispositivos a través de un bus. En mi ejemplo, le di al DS1803 una dirección 0 conectando todos los pines al suelo.
Paso 2: Byte de comando
La forma en que funciona el DS1803 se puede utilizar en el byte de comando. Cuando seleccionas "escribir potenciómetro-0" se seleccionan ambos potenciómetros, cuando solo quieres ajustar el potenciómetro-0, solo tienes que enviar el primer byte de datos. "Escribir potenciómetro-1" solo ajusta el potenciómetro-1. "Escribir en ambos potenciómetros" da a ambos potenciómetros el mismo valor.
Paso 3: Control del DS1803
El byte de control (figura 3) tiene un identificador de dispositivo, este permanece siempre igual. En mi ejemplo, A0, A1 y A2 son 0 porque seleccionamos direcciones poniendo todos los pines A a tierra. El último bit R / W se establecerá en 0 o 1 mediante el comando "Wire.beginTransmission" y "Wire.requestFrom" en el Arduino. En la figura 5 puede ver el telegrama completo. El telegrama leído se muestra en la figura 4.
Paso 4: configurar
Este circuito muestra cómo conectar todo. La pantalla LCD de Nokia está disponible con diferentes conexiones, asegúrese de conectar la suya correctamente. También el codificador rotatorio sus diferentes versiones, algunas tienen el común en el pin del medio y otras no. He puesto una pequeña red de filtros (resistencia de 470 ohmios con tapa de 100 nF) para filtrar las señales de salida A y B del codificador. Necesito este filtro porque la salida tenía mucho ruido. También puse un temporizador antirrebote en mi programa para cancelar algo de ruido. Por lo demás creo que el circuito está despejado. La pantalla LCD se puede solicitar a través de Adafruit
Paso 5: el programa
Para el uso del bus de 2 hilos incluyo la biblioteca Wire.h. Para usar el LCD, incluyo la biblioteca Adafruit que puede descargar de https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library también la biblioteca Adafruit_GFX.h está disponible aquí https:// github. com / adafruit / Adafruit-GFX-Library.
#incluir
#incluir
#incluir
Pantalla Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Aquí puedes ver todas las variables. Byte de control y byte de comando como se describió anteriormente. El deBounceTime se puede ajustar según el ruido de su codificador.
potenciómetro de bytes [2] = {1, 1}; byte controlByte = B0101000; // 7 bits, byte commandByte = B10101001; // los 2 últimos bits son la selección del potenciómetro. byte potValue [2]; int i = 0; int deBounceTime = 10; // Ajusta este valor en función del ruido const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; unsigned long oldTime; booleano presionado = 0; recuento booleano = 1;
En la configuración, defino los pines correctos y coloco el texto estático en la pantalla LCD
configuración vacía () {Wire.begin (); Serial.begin (9600); pinMode (codificador_A, ENTRADA); pinMode (codificador_B, ENTRADA); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (NEGRO); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
En el bucle, primero verifico si el intervalo es superior a 500 ms, si es así, la pantalla LCD se actualiza. Si no, el botón del codificador está marcado. Si se presiona, se llama al toggleBuffer. Después de esto, se comprueba el codificador. Si la entrada 0 es baja (rotación detectada), verifico la entrada B, si la entrada B es 0, incremento el potenciómetro , otras las reduzco. Después de esto, el valor se enviará al DS1803 a través de wire.write.
bucle vacío () {
intervalo();
if (digitalRead (buttonPin) == 1 && (presionado == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {presionado = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (bote > 25) {bote = 25;}} else {bote -; if (bote <1) {bote = 1;}} cuenta = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // empezar a transmitir
Wire.write (commandByte); // selección de potenciómetros Wire.write (pot [0] * 10); // envía el primer byte de los datos del potenciómetro Wire.write (pot [1] * 10); // envía el segundo byte de los datos del potenciómetro Wire.endTransmission (); // dejar de transmitir} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {presionado = 1; if (i == 0) {i = 1;} else {i = 0;}}
Primero despejo el área donde tengo que escribir las variables. Hago esto para dibujar un rectángulo en esta área. Después de eso, escribo las variables en la pantalla.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // lee el primer byte del potenciómetro potValue [1] = Wire.read (); // lee el segundo byte del potenciómetro display.fillRect (40, 0, 40, 45, WHITE); // borrar la pantalla variable en la pantalla LCD.setCursor (40, 10); display.print (potValue [0]); // escribe el primer valor del potenciómetro en la pantalla LCD.setCursor (40, 22); display.print (potValue [1]); // escribe el segundo valor del potenciómetro en la pantalla LCD.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// temporizador de intervalo para escribir datos en LCD if ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Recomendado:
Arduino controla la velocidad y dirección del motor de CC con un potenciómetro, pantalla OLED y botones: 6 pasos
Control de Arduino Velocidad y dirección del motor de CC usando un potenciómetro, pantalla OLED y botones: En este tutorial aprenderemos a usar un controlador de CONTROL DE MOTOR DE CC L298N y un potenciómetro para controlar la velocidad y dirección de un motor de CC con dos botones y mostrar el valor del potenciómetro en la pantalla OLED. Vea un video de demostración
Controlar el brillo del LED con potenciómetro con Arduino: 3 pasos
Controlar el brillo del LED con potenciómetro con Arduino: En este proyecto, controlaremos el brillo del LED usando la resistencia variable proporcionada por el potenciómetro. Este es un proyecto muy básico para un principiante, pero le enseñará muchas cosas sobre el funcionamiento del potenciómetro y LED que se requieren para hacer adva
Potenciómetro digital MCP41HVX1 para Arduino: 10 pasos (con imágenes)
Potenciómetro digital MCP41HVX1 para Arduino: La familia de potenciómetros digitales MCP41HVX1 (también conocidos como DigiPots) son dispositivos que imitan la función de un potenciómetro analógico y se controlan a través de SPI. Una aplicación de ejemplo sería reemplazar la perilla de volumen de su estéreo con un DigiPot que es
Claqueta Digital Con Arduino (Claqueta digital con Arduino): 7 pasos
Claqueta Digital Con Arduino (Claqueta digital con Arduino): Crea tu propia claqueta digital, también puedes convertir una claqueta no digital en una, utilizando Arduino.MATERIALES Display de 7 segmentos MAX7219 de 8 digitos compatible con arduino.Modulo de Reloj RTC model DS3231 compatible con arduino.Arduin
Atenuador LED con potenciómetro: 5 pasos (con imágenes)
Atenuador LED con potenciómetro: este es un instructivo que le enseña cómo usar un potenciómetro para atenuar un LED