Tabla de contenido:

Selector de sintonización DIP con 1 pin: 4 pasos
Selector de sintonización DIP con 1 pin: 4 pasos

Video: Selector de sintonización DIP con 1 pin: 4 pasos

Video: Selector de sintonización DIP con 1 pin: 4 pasos
Video: 4 secuencias con DIP Switch | Electrónica | TinkerCad 2024, Mes de julio
Anonim
Selector de sintonización DIP con 1 pin
Selector de sintonización DIP con 1 pin

Hace un tiempo trabajé en un proyecto de "caja de música" que necesitaba elegir entre hasta 10 fragmentos de melodía diferentes. Una elección natural para elegir una melodía específica fue un interruptor DIP de 4 pines, ya que 4 interruptores proporcionan 24= 16 configuraciones diferentes. Sin embargo, la implementación de fuerza bruta para este enfoque requiere 4 pines de dispositivo, uno para cada interruptor. Como estaba planeando usar el ATtiny85 para el desarrollo, la pérdida de 4 pines fue demasiado. Afortunadamente, me encontré con un artículo que describe un método ingenioso para usar 1 pin analógico para manejar múltiples entradas de interruptor.

La técnica de 1 entrada de conmutador múltiple utiliza un circuito divisor de voltaje para proporcionar un valor entero único para cada una de las 16 combinaciones posibles de ajustes de conmutador. Este conjunto de 16 identificadores enteros se usa luego en el programa de aplicación para asociar una acción con un ajuste.

Este instructable emplea el método de múltiples interruptores para implementar la selección de melodías para la aplicación de caja de música. Luego, la melodía seleccionada se reproduce a través de un zumbador piezoeléctrico utilizando la función de tono Arduino.

Paso 1: hardware necesario

Hardware requerido
Hardware requerido

El uso de UNO como plataforma de implementación minimiza el número de componentes de hardware necesarios. La implementación del método de entrada de múltiples interruptores requiere solo un interruptor DIP de 4 pines, las 5 resistencias utilizadas para el divisor de voltaje y el cable de conexión para las conexiones. Se agrega un zumbador piezoeléctrico a la configuración para la implementación del selector de melodía de la caja de música. Opcionalmente, dependiendo del tipo de interruptor DIP utilizado, es útil usar un enchufe de 2 x 4 8 pines para conectar el interruptor DIP a la placa de prueba, ya que los pines del interruptor DIP estándar parecen estar hechos para soldar a una placa perforada que no se conecta directamente a una placa de prueba. El enchufe estabiliza las conexiones del interruptor DIP y evita que el interruptor se levante fácilmente al ajustar los interruptores de palanca.

Nombre Posible fuente ¿Cómo se usa?
Interruptor DIP de 4 pines Selección de melodía
Toma de 2 x 4 pines (opcional) Amazonas Las publicaciones en la mayoría de los interruptores DIP no sostienen muy bien el interruptor en una placa de pruebas. Un enchufe ayuda a que la conexión sea más sólida. Una alternativa es encontrar un interruptor DIP que esté realmente hecho para uso en placa de pruebas con pines IC regulares.

resistencias:

  • 10K x2
  • 20K
  • 40K
  • 80K
Implementar divisor de voltaje
zumbador piezoeléctrico pasivo Amazonas Reproduzca la melodía según lo impulsa la aplicación a través de la función de tono de Arduino

Paso 2: Explicación del método de conmutador múltiple

Explicación del método de conmutador múltiple
Explicación del método de conmutador múltiple

En esta sección se analizan los conceptos subyacentes del método de interruptores múltiples y se desarrollan las ecuaciones necesarias para el cálculo independiente de identificadores únicos para cada una de las 16 configuraciones posibles de los interruptores DIP. Estos identificadores se pueden utilizar en un programa de aplicación para asociar una configuración de conmutador con una acción. Por ejemplo, es posible que desee que la configuración - encender 1, apagar 2, apagar 3, apagar 4 (1, 0, 0, 0) - para reproducir Amazing Grace y (0, 1, 0, 0) para jugar León duerme esta noche. En aras de la brevedad y la concisión, los identificadores de configuración se denominan comparadores en el resto del documento.

Imagen
Imagen

El concepto fundamental para el método de múltiples interruptores es el circuito divisor de voltaje que consta de 2 resistencias en serie conectadas a un voltaje de entrada. El cable de voltaje de salida está conectado entre las resistencias, R1 y R2, como se muestra arriba. El voltaje de salida del divisor se calcula como el voltaje de entrada multiplicado por la relación de la resistencia R2 a la suma de R1 y R2 (ecuación 1). Esta relación es siempre menor que 1, por lo que el voltaje de salida siempre es menor que el voltaje de entrada.

Como se indica en el diagrama de diseño anterior, el interruptor múltiple está configurado como un divisor de voltaje con R2 fijo y R1 igual a la resistencia compuesta / equivalente para las 4 resistencias del interruptor DIP. El valor de R1 depende de qué interruptores DIP están encendidos y, por lo tanto, contribuyen a la resistencia compuesta. Dado que las resistencias del interruptor DIP están en paralelo, la ecuación de cálculo de la resistencia equivalente se establece en términos de los recíprocos de las resistencias de los componentes. Para nuestra configuración y el caso de que todos los interruptores estén encendidos, la ecuación se convierte en

1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

dando R1 = 5333,33 voltios. Para tener en cuenta el hecho de que la mayoría de las configuraciones tienen al menos uno de los interruptores apagado, el estado del interruptor se usa como un multiplicador:

1 / R1 = s1* 1/80000 + s2* 1/40000 + s3* 1/20000 + s4*1/10000 (2)

donde el multiplicador estatal, sI, es igual a 1 si el interruptor está encendido e igual a 0 si el interruptor está apagado. R1 ahora se puede usar para calcular la relación de resistencia necesaria en la ecuación 1. Usando el caso en el que todos los interruptores están encendidos como ejemplo nuevamente

RELACIÓN = R2/ (R1+ R2) = 10000/(5333.33+10000) =.6522

El último paso en el cálculo del valor del comparador predicho es la multiplicación del RATIO por 1023 para emular el efecto de la función analogRead. El identificador para el caso donde todos los interruptores están encendidos es entonces

comparador15 = 1023*.6522 = 667

Todas las ecuaciones están ahora en su lugar para el cálculo de identificadores para los 16 posibles ajustes de interruptor. Para resumir:

  1. R1 se calcula usando la ecuación 2
  2. R1 y R2 se utilizan para calcular la RELACIÓN de resistencia asociada
  3. la RELACIÓN se multiplica por 1023 para obtener el valor del comparador
  4. opcionalmente, la tensión de salida prevista también se puede calcular como RATIO * Vin

El conjunto de comparadores depende solo de los valores de resistencia utilizados para el divisor de voltaje y son una firma única para la configuración. Debido a que los voltajes de salida del divisor fluctuarán de una ejecución a otra (y de lectura para lectura), único en este contexto significa que, si bien dos conjuntos de identificadores pueden no ser exactamente iguales, están lo suficientemente cerca como para que las diferencias del comparador de componentes caigan dentro de un pequeño valor previo. intervalo especificado. El parámetro de tamaño del intervalo debe elegirse lo suficientemente grande para tener en cuenta las fluctuaciones esperadas, pero lo suficientemente pequeño como para que no se superpongan las diferentes configuraciones del interruptor. Por lo general, 7 funciona bien para la mitad del ancho del intervalo.

Se puede obtener un conjunto de comparadores para una configuración particular mediante varios métodos: ejecute el programa de demostración y registre los valores para cada configuración; use la hoja de cálculo en la siguiente sección para calcular; copiar un conjunto existente. Como se señaló anteriormente, es muy probable que todos los conjuntos sean ligeramente diferentes, pero deberían funcionar. Sugiero usar el conjunto de identificadores del autor del método para la configuración de múltiples interruptores y la hoja de cálculo de la siguiente sección si alguna de las resistencias se cambia significativamente o se agregan más resistencias.

El siguiente programa de demostración ilustra el uso de los comparadores para identificar la configuración actual del interruptor DIP. En cada ciclo de programa se realiza una lectura analógica para obtener un identificador para la configuración actual. Luego, este identificador se compara en la lista de comparación hasta que se encuentra una coincidencia o se agota la lista. Si se encuentra una coincidencia, se emite un mensaje de salida para verificación; si no se encuentra, se emite una advertencia. Se inserta un retardo de 3 segundos en el circuito para que la ventana de salida en serie no se abrume con mensajes y para dar algo de tiempo para restablecer la configuración del interruptor DIP.

//-------------------------------------------------------------------------------------

// Programa de demostración para leer la salida del divisor de voltaje y usarlo para identificar la // configuración actual del interruptor DIP mirando el valor de salida en una matriz de // valores de comparación para cada configuración posible. Los valores de la matriz de búsqueda pueden // obtenerse de una ejecución anterior de la configuración o mediante cálculos // basados en las ecuaciones subyacentes. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definir las variables de procesamiento int dipPin = A0; // pin analógico para la entrada del divisor de voltaje int dipIn = 0; // mantiene la salida de voltaje del divisor traducida por analogRead int count = 0; // contador de bucle int epsilon = 7; // intervalo de comparación de ancho medio bool dipFound = false; // verdadero si la salida del divisor de voltaje actual se encuentra en la tabla de búsqueda void setup () {pinMode (dipPin, INPUT); // configura el pin divisor de voltaje como INPUT Serial.begin (9600); // habilita la comunicación serial} void loop () {delay (3000); // evitar que la salida se desplace demasiado rápido // Inicializar los parámetros de búsqueda count = 0; dipFound = falso; // Leer y documentar el voltaje de salida actual dipIn = analogRead (dipPin); Serial.print ("salida del divisor"); Serial.print (dipIn); // Buscar en la lista del comparador el valor actual while ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// lo encontré dipFound = true; Serial.print ("encontrado en la entrada"); Serial.print (recuento); Serial.println ("valor" + Cadena (comparador [recuento])); rotura; } contar ++; } if (! dipFound) {// valor que no está en la tabla; no debería suceder Serial.println ("¡OOPS! No encontrado; mejor llamar a Ghost Busters"); }}

Paso 3: hoja de cálculo del comparador

Imagen
Imagen

Los cálculos para los 16 valores de comparación se dan en la hoja de cálculo que se muestra arriba. El archivo de Excel adjunto está disponible para descargar en la parte inferior de esta sección.

Las columnas A-D de la hoja de cálculo registran los valores de la resistencia del interruptor DIP y las 16 configuraciones posibles del interruptor. Tenga en cuenta que el interruptor DIP de hardware que se muestra en el diagrama de diseño de fritzing está numerado de izquierda a derecha en lugar de la numeración de derecha a izquierda que se muestra en la hoja de cálculo. Encontré esto algo confuso, pero la alternativa no coloca la configuración "1" (0, 0, 0, 1) al principio de la lista. La columna E usa la fórmula 2 de la sección anterior para calcular la resistencia equivalente del divisor de voltaje R1 para el entorno. La Columna F usa este resultado para calcular el RATIO de resistencia asociado y, finalmente, la Columna G multiplica el RATIO por el valor máximo de analogRead (1023) para obtener el valor del comparador predicho. Las últimas 2 columnas contienen los valores reales de una ejecución del programa de demostración junto con las diferencias entre los valores predichos y reales.

La sección anterior mencionó tres métodos para obtener un conjunto de valores de comparación, incluida la extensión de esta hoja de cálculo si los valores de resistencia cambian significativamente o se agregan más interruptores. Parece que las pequeñas diferencias en los valores de la resistencia no afectan significativamente los resultados finales (lo cual es bueno ya que las especificaciones de la resistencia dan una tolerancia, digamos 5%, y la resistencia rara vez es igual a su valor real declarado).

Paso 4: toca una melodía

Tocar una melodía
Tocar una melodía

Para ilustrar cómo se puede usar la técnica de múltiples interruptores en una aplicación, el programa de demostración de comparación de la sección "Explicación del método" se modifica para implementar el procesamiento de selección de melodía para el programa de caja de música. La configuración de la aplicación actualizada se muestra arriba. La única adición al hardware es un zumbador piezoeléctrico pasivo para tocar la melodía seleccionada. El cambio básico al software es la adición de una rutina para tocar una melodía, una vez identificada, usando el zumbador y la rutina de tono Arduino.

Los fragmentos de melodía disponibles están contenidos en un archivo de encabezado, Tunes.h, junto con la definición de las estructuras de soporte necesarias. Cada melodía se define como una serie de estructuras relacionadas con notas que contienen la frecuencia y duración de la nota. Las frecuencias de las notas están contenidas en un archivo de encabezado separado, Pitches.h. El programa y los archivos de encabezado están disponibles para descargar al final de esta sección. Los tres archivos deben colocarse en el mismo directorio.

La selección e identificación procede de la siguiente manera:

  1. El "usuario" establece los interruptores DIP en la configuración asociada con la sintonía deseada
  2. cada ciclo de bucle de programa, el identificador para la configuración actual del interruptor DIP se obtiene a través de analógico
  3. El identificador de configuración del paso 2 se compara con cada uno de los comparadores en la lista de sintonía disponible
  4. Si se encuentra una coincidencia, se llama a la rutina playTune con la información necesaria para acceder a la lista de notas de la melodía.

    Usando la función de tono de Arduino, cada nota se reproduce a través del zumbador

  5. Si no se encuentra ninguna coincidencia, no se realiza ninguna acción
  6. repetir 1-5

Los ajustes de los interruptores DIP para las melodías disponibles se muestran en la siguiente tabla, donde 1 significa que el interruptor está encendido, 0 apagado. Recuerde que la forma en que está orientado el interruptor DIP coloca el interruptor 1 en la posición más a la izquierda (la que está asociada con la resistencia de 80K).

NOMBRE Interruptor 1 Interruptor 2 Interruptor 3 Interruptor 4
Danny Boy 1 0 0 0
Osito 0 1 0 0
León duerme esta noche 1 1 0 0
Nadie conoce el problema 0 0 1 0
Gracia asombrosa 0 0 0 1
Espacio en blanco 1 0 0 1
MockingBird Hill 1 0 1 1

La calidad del sonido de un zumbador piezoeléctrico ciertamente no es excelente, pero al menos es reconocible. De hecho, si se miden los tonos, están muy cerca de la frecuencia exacta de las notas. Una técnica interesante utilizada en el programa es almacenar los datos de la melodía en la sección de memoria flash / programa en lugar de la sección de memoria de datos predeterminada mediante el uso de la directiva PROGMEM. La sección de datos contiene las variables de procesamiento del programa y es mucho más pequeña, alrededor de 512 bytes para algunos de los microcontroladores ATtiny.

Recomendado: