Lecturas inestables en matriz de fotoresistores con Arduino, OK con ohmiómetro, ¿qué ocurre?

2

Estoy trabajando en una matriz de fotoresistores con mi arduino, y tengo algunos problemas para obtener lecturas estables.

Estoy manejando 7 filas una a la vez con el comando digitalWrite(pin,HIGH) de Arduino y flotando las otras salidas con pinMode(pin,INPUT); . El problema es que no tengo LECTURA de mis divisores de voltaje analogRead() a menos que la columna está conectada a mi óhmetro. ¿Qué pasa con eso?

Solo la columna conectada a mi ohmiómetro produce algo, todas las demás columnas dicen cero. ¿Qué hay en mi ohmímetro que de repente hace funcionar ese sensor?

Entonces, si conecto mi medidor de ohmios al riel positivo de P1 y a la conexión MEGA analógica 0 (A0), ¡de repente toda la columna recibe lecturas! De lo contrario, ceros en todas partes.

void readArray() 
{ 
  for(int i=0; i < ROWS; i++)
  { 
    for(int k=0; k<ROWS; k++)
    { 
      pinMode(rowPins[k], INPUT); 
    } 

    pinMode(rowPins[i],OUTPUT); 
    digitalWrite(rowPins[i],HIGH); 
    delay(250); 

    for(int j=0; j < COLS; j++) 
    { 
      holdVals[i][j] = analogRead(j); 
      Serial.println(holdVals[i][j]); 
    } 

    digitalWrite(rowPins[i],LOW); 
  } 
}
    
pregunta BuffaloJacked

4 respuestas

2

La respuesta que JustJeff te dio es probablemente la razón por la que solo obtienes algo cuando el óhmetro está conectado. Me gustaría abordar un tema diferente. El problema es que la matriz de su fotoresistor no va a funcionar.

El problema es que no se puede "activar" una sola fila a la vez. Por ejemplo, digamos que enciendes la fila del medio. Las líneas de la fila superior e inferior están en tres estados desde la unidad de usuario. La corriente irá desde la línea de la fila central, a través de P5 a la columna más a la izquierda, a través de P1 a la línea de la fila superior, a través de p2 a la siguiente línea de la columna, y desordenará sus mediciones para esa columna. Ahora imagina muchos "caminos falsos" y probablemente puedas resolver que todo se desordenará sin esperanzas.

Una solución para esto es poner un diodo schottky en serie con cada fotorresistor (con el diodo "apuntando" a las líneas de la columna). Usted lee una fila como lo hace ahora, aunque puede intentar manejar las "filas no utilizadas" con una señal baja en lugar de indicarlas tres veces. No estoy seguro si tendrá algunos problemas actuales de fugas extravagantes si no lo hace.

Sin embargo, incluso sin los diodos, habría esperado que leyeras al menos algo de voltaje. Sus resistencias de lado bajo (R en sus esquemas) pueden ser un valor demasiado bajo. Haz lo que dice JustJeff y mide el voltaje en una línea de columna. Si está cerca de cero, entonces tienes un problema de hardware. Si no está cerca de cero, entonces tiene un problema de software.

P.S., no miré tu código C, ya que no estoy familiarizado con la programación en Arduino.

    
respondido por el user3624
1

Cuando se configura para medir ohmios, su medidor en realidad aplica un poco de voltaje al elemento bajo prueba. Normalmente, esto resulta en una corriente que el medidor puede usar para inferir la resistencia que se está midiendo. Da la casualidad de que también proporciona una caída de voltaje que su entrada de ADC también puede observar.

Lo que debe hacer es configurar el medidor para las lecturas de voltaje y ver si su digitalWrite () está teniendo el efecto deseado. Claro que parece que no lo es. Olvido (fuera de la parte superior de mi cabeza), pero es posible que tenga que configurar el pin para la salida para que funcione digitalWrite (). Tal vez no.

    
respondido por el JustJeff
1

Un par de cosas:

  1. Se supone que no debes medir la resistencia usando un ohmímetro con energía aplicada a tu circuito como una regla general.

  2. En lo que respecta al software, pinMode configurado en INPUT puede ser un poco engañoso. Los pines AVR pueden tener tres modos: salida, entrada de alta impedancia y entrada interna débilmente elevada. Cuando especifica pinMode INPUT, está en uno de los dos últimos casos, porque todo lo que hace es afectar el registro DDRx. Para asegurarse de que de hecho es una entrada de alta impedancia, también debe digitalWrite LOW el mismo pin, que afecta al registro PORTx.

En efecto, lo que sucede es que cuando configura sus salidas en ALTO por primera vez, la próxima vez que las convierta en entradas, se activarán las activaciones internas pasivas. Entonces, en resumen, en lugar de pinMode(rowPins[k], INPUT); use dos declaraciones:

pinMode(rowPins[k], INPUT);
digitalWrite(rowPins[k], LOW);
    
respondido por el vicatcu
0

Muchas sugerencias buenas, pero sugeriría algunas frutas de bajo rendimiento:

1) conexiones defectuosas / cables sueltos para que las filas no estén energizadas;

2) pines incorrectos conectados vs. el código;

Intentaría descartarlos antes de profundizar.

descodificar los valores de la resistencia en función de las lecturas de adc puede ser un desafío, dado que la matriz está conectada.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas