5 votos

Arduino: dos más entrada analógica!

estoy tratando de sensores analógicos. Tengo un Arduino Lilypad Consejo Simple con sólo 4 entrada analógica. Ahora, necesito dos más sensores y he encontrado en la red este esquema: enter image description here

Pero no entiendo si se podría añadir retrasos en mi proyecto, porque estoy controlando de audio-video de animal, y cualquier tipo de retraso tiene que ser evitado.

A continuación, en el enlace que he leído esto:

Es posible calcular la resistencia real de la lectura, pero por desgracia, las variaciones en el IDE de arduino y de la junta hará inconsistant. Ser conscientes de que si cambia IDE versiones de sistema operativo, o el uso de un 3.3 V arduino en lugar de 5V, o cambiar de una a 16mhz Arduino a un 8Mhz (como un lilypad) puede haber diferencias debido al tiempo que toma para leer el valor de un pin. Por lo general eso no es gran cosa pero puede hacer que su proyecto difíciles de depurar si no lo estaba esperando!

Yo no soy un gran experto de arduino y no entiendo por qué tengo que cambiar para lilypad.

Cualquier consejo se agradece!

9voto

rishi Puntos 1

Nunca he trabajado con Arduino, pero la mayoría de los microcontroladores de interrupción de los pines, por lo Arduino debe tener demasiado. Si utiliza un pin de interrupción para detectar que el condensador se ha cargado hasta el nivel de umbral, entonces usted no tendrá retrasos y su programa podría ejecutar con normalidad, mientras que la medición se lleva a cabo. Usted sólo tiene que utilizar un pin que permite la interrupción.

  1. Afirmar el pin de bajo
  2. Asegúrese de que la clavija esté lo suficientemente baja, el tiempo de descarga del condensador
  3. Permiten interrumpir y restablecer el temporizador
  4. Hacer que el pin de entrada (el condensador comenzará la carga)
  5. Ejecutar el código
  6. Cuando la interrupción se produce leer el valor del temporizador (esta es su valor medido) y afirmar el pin de bajo

5voto

Joel B Puntos 2031

Esto sin duda habrá de añadir retrasos como usted son de votación el pin de bloqueo de bucle

while (digitalRead(RCpin) == LOW) { // count how long it takes to rise up to HIGH
reading++;      // increment to keep track of time 

if (reading == 30000) {
  // if we got this far, the resistance is so high
  // its likely that nothing is connected! 
  break;           // leave the loop
}

Suponiendo que el compilador puede optimizar el código de una forma extremadamente eficiente este circuito podría tomar algo como 4 líneas de código a ejecutar, ya que tienes que leer el pin, luego se compara con un valor y, a continuación, rama sobre la base del resultado (me gustaría ser muy impresionado si usted puede obtener este par de instrucciones). Suponga que cada una de esas instrucciones se tarda sólo 1 ciclo de reloj para ejecutar (este es también, probablemente, va a tomar más, pero es de gran ayuda para acotar el problema). Esta rutina puede tomar en la mayoría de los:

\$MaxRoutineTime = LoopIterations \times \frac{Instructions}{LoopIteration} \times \frac{Seconds}{Instructions}\$

\$MaxRoutineTime = 30,000 \espacio de Iteraciones\times \frac{4 \espacio de Instrucciones} {LoopIteration} \times \frac{Segundos}{8,000,000 espacio \Instrucciones}\$

\$MaxRoutineTime = 15 espacio \mS\$

pero supongo que tardará un poco más que porque de las citadas prestaciones.

La razón por la que no agrega retrasos cuando se utiliza un ADC es debido a que el periférico se puede configurar para generar interrupciones y sólo serán notificados cuando el ADC lectura está completa. El tiempo que tarda el ADC para completar una medición es un número finito de ciclos de reloj, por lo que la aplicación de la nota que usted está de referencia es de señalar que si lento su velocidad de reloj, a pesar de que el ADC todavía va a tomar el mismo número de ciclos de reloj para completar una medición, la medición va a tomar más tiempo debido a que el reloj es más lento.

Editar

A primera vista, de su imagen, combinado con el hecho de que usted ha mencionado de audio, pensé que eras la medición de una entrada de micrófono. Sin embargo, parece que sólo estás usando Sensible a la Fuerza Resistencia (FSR), que es un sensor de presión. Si usted no necesita saber la cantidad de presión, sólo que fue empujado, usted no tiene que ir a través de todo el problema de encontrar la lectura exacta. Usted puede simplemente utilizar cualquier interrupción de generación, de entrada digital si se escoge el correcto valor de la resistencia (en lugar del condensador). Usted simplemente establecer un pin digital para generar interrupciones en los flancos de subida y de selección de una resistencia que le dará un cambio de estado (alta/baja) con la cantidad deseada de la fuerza para su toque. Entonces sabrás que cada vez que el FSR se empuja y se puede manejar con un bloqueo de fashioner, la introducción de la menor latencia posible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X