Divisor de Tension Bis

En primer lugar pedir disculpa por el post anterior por la falta de datos. Intetaré explicarme algo mejor.
Este atranque que tengo forma parte de un proyecto mayor que lo tengo encaminado, el problema es el siguiente.
Con una fuente de 12v tengo que alimentar 6 cables que van conectados a los puertos analogicos de arduino Uno.
Cada cable tiene que llegar con una tension distinta, por ejemplo 4.75 - 4 - 3.5 - 3 - 2.25 - 1.5 - 0.7 V. segun he leido ese se hace con un divisor de tension con resistencias. os paso el esquema que he echo con dos divisiones de tension (una para cada tres pines)

1631636108070.png

Los resultados que me arroja el serial son los siguientes:
1023.00 M0=5.00 1
342.00 M1=1.67 3
727.00 M2=-4.33 4
727.00 M3=3.55 5
167.00 M4=0.82 7
-886.00 M5=-4.33 9

Donde la columna de la izq es el valor que lee arduino y los valores Mx son las conversiones a voltaje.

El cable 3 y 4 me da la misma lectura y eso es lo que tengo que evitar. no si es problema del esquema o del valor de las resistencias ( tercera columna)

Otra prueba con otro esquema
1631636368145.png
Lectura Voltaje V.Resistencias
974.00 M0=4.76 1
740.00 M1=3.62 2
-78.00 M2=1.91 3
-78.00 M3=-0.38 4
-663.00 M4=-3.24 5
-1364.00 M5=-6.67 6

Este es el codigo:

int n = 0;
void setup() {
Serial.begin(9600);
}

void loop() {
float m = analogRead(A0);
float volt = m * 5 / 1024;
float m1 = analogRead(A1);
float volt1 = m1 * 5 / 1024;
float m2 = analogRead(A2);
float volt2 = m2 * 5 / 1024;
float m3 = analogRead(A3);
float volt3 = m3 * 5 / 1024;
float m4 = analogRead(A4);
float volt4 = m4 * 5 / 1024;
float m5 = analogRead(A5);
float volt5 = m5 * 5 / 1024;

if (n == 0) {
Serial.println(" Medición en A0 Voltaje en A0");
Serial.print(m); Serial.print(" "); Serial.println(volt);
n = n + 1;
}
else {
Serial.print(m); Serial.print(" M0="); Serial.println(volt);
Serial.print(m1); Serial.print(" M1="); Serial.println(volt1);
Serial.print(m3); Serial.print(" M2="); Serial.println(volt2);
Serial.print(m3); Serial.print(" M3="); Serial.println(volt3);
Serial.print(m4); Serial.print(" M4="); Serial.println(volt4);
Serial.print(m5); Serial.print(" M5="); Serial.println(volt5);
}
delay(5000);

Espero ahora haberme explicado algo mejor, si no es asi pido disculpas de antemano e intentare responder a lo que me pregunteis.

Lo que necesito es que cada cable entrege una valor distinto a arduino

Gracias.
 
Última edición:
Otra cosa es que ningun Atmel o PIC (que yo sepa) mide voltajes negativos, y vos tenes valores negativos, algo imposible, y eso que excluyo que usas una fuente positiva (o al menos no partida).

Para convertir un valor de rangos de algo a otro algo, se usa la funcion "map".

Otra cosa, que te habia colocado un enlace para que leas, pero se ve que no lo hiciste. Alli se muestra cómo formatear el código para que sea mas legible.

Mejor dinos cuál es la finalidad del proyecto, quizas haya otras alternativas, como la propuesta por @phavlo
 
No pensarte en usar diodos en serie ?
Por cada diodo vas a tener una caída de tensión de 0.7V.
Como podéis ver soy muy novato en esto.. no se que es mejor usar si resistencias o diodos.. necesito que me llegue voltaje distinto a los 6 pines analógicos de Arduino, cualquier idea será bien recibida.
Los datos que puse son con el simulador TinkerCad.
Otra cosa es que ningun Atmel o PIC (que yo sepa) mide voltajes negativos, y vos tenes valores negativos, algo imposible, y eso que excluyo que usas una fuente positiva (o al menos no partida).

Para convertir un valor de rangos de algo a otro algo, se usa la funcion "map".

Otra cosa, que te habia colocado un enlace para que leas, pero se ve que no lo hiciste. Alli se muestra cómo formatear el código para que sea mas legible.

Mejor dinos cuál es la finalidad del proyecto, quizas haya otras alternativas, como la propuesta por @phavlo
No vi tu enlace disculpa, el codigo ha sido adaptado de lo que he le ído y visto en san Google, supongo que se podrá mejorar.

La finalidad del proyecto es un juego electrónico, donde cada cable con una tension distinta tiene que meterse en una clavija asignada. Por eso las diferencias de tension en el cable, para saber Arduino si ha metido el cable correcto en cada clavija.
 
Deberias buscar sobre teclado matricial, o registro de desplazamiento si es muchos puntos a detectar.
Lo del voltaje para detectar algo que puede crear resistencia, no me convence, ademas lo ideal seria usar un unico pin analogico y con sentencia "IF" o switch ir comparando en bucle.

El delay de "5 segundos"!!!!! Es lo peor que puede haber. En lo posible EVITA usar delay.

Mira los enlaces de mi firma (debajo de éste mensaje), leelos entero, incluyendo los enlaces que figuran alli
 

Fogonazo

"Qualified exorcist approved by the Vatican"
como podeis ver soy muy novato en esto.. no se que es mejor usar si resistencias o diodos.. necesito que me llegue voltaje distinto a los 6 pines analogicos de arduino, cualquier idea será bien recibida.
Los datos que puse son con el simulador TinkerCad.



no vi tu enlace disculpa, el codigo ha sido adpatado de lo que he leido y visto en san google, supongo que se podra mejorar.

la finalidad del proyecto es un juego electronico, donde cada cable con una tension distinta tiene que meterse en una clavija asignada. por eso las diferencias de tension en el cable, para saber arduino si ha metido el cable correcto en cada clavija

No pensarte en usar diodos en serie ?
Por cada diodo vas a tener una caída de tensión de 0.7V.
Como te comentó @phavlo, armas una serie de varios diodos comunes, por ejemplo 1N4148
Los alimentas con una resistencia desde tus 12Vcc.
Mides con multímetro las uniones que te sirvan a tu proyecto y desde ahí a tu Arduino, en cada unión tendrás una tensión distinta
 
Como te comentó @phavlo, armas una serie de varios diodos comunes, por ejemplo 1N4148
Los alimentas con una resistencia desde tus 12Vcc.
Mides con multímetro las uniones que te sirvan a tu proyecto y desde ahí a tu Arduino, en cada unión tendrás una tensión distinta
Muchas gracias, voy a investigar un poco mas a fondo lo que me dices
Deberias buscar sobre teclado matricial, o registro de desplazamiento si es muchos puntos a detectar.
Lo del voltaje para detectar algo que puede crear resistencia, no me convence, ademas lo ideal seria usar un unico pin analogico y con sentencia "IF" o switch ir comparando en bucle.

El delay de "5 segundos"!!!!! Es lo peor que puede haber. En lo posible EVITA usar delay.

Mira los enlaces de mi firma (debajo de éste mensaje), leelos entero, incluyendo los enlaces que figuran alli
No puedo usar un solo pin y cadena de if, ya que son una combinación de 6 cables sin repetición, (muchas probabilidades) y lo del delay es simplemente a la hora de ver los resultados para que haga una parada, en el codigo final no ira, pero gracias por tu consejo..
 
El conversor AD de Arduino no lo conozco, pero normalmente los CAD tienen una impedancia de entrada (el CAD que usé era de 5K), esta impedancia conectada y desconectada a las ramas del divisor provoca lecturas erróneas. Te recomiendo que uses un método el el que no influya, o uses un divisor para cada rama teniéndola en cuenta.
 
- Para lo que querés hacer es preferible el 2do divisor.
Si los incrementos de tensión son iguales --> las resistencias son iguales.
Si se fijan las tensiones de manera arbitraria , como los valores de resistencias serán los comerciales lo mas conveniente es hacerse una planilla Excel que calcule los valores teóricos e ir redondeando hasta tener valores satisfactorios.
Si deben ser exactos... pues necesitarás trimpots.

- La lectura se repite porque es lo que programaste.
Serial.print(m3); Serial.print(" M2="); Serial.println(volt2);
Serial.print(m3); Serial.print(" M3="); Serial.println(volt3);

- Esos valores negativos no son problema del código sino de la configuración del terminal, los datos salen bien.
 
No puedo usar un solo pin y cadena de if, ya que son una combinación de 6 cables sin repetición, (muchas probabilidades) y lo del delay es simplemente a la hora de ver los resultados para que haga una parada, en el codigo final no ira, pero gracias por tu consejo..

Si yo entiendo bien, tienes 6 pares de conectores en los cuales pueden ir 6 cables distintos donde cada cable representa una opción (no hay dos cables iguales) y dependiendo de la combinación obtener un resultado.

El circuito que propones (segunda imagen ya que la primera tiene más problemas aún A2 también esta a tierra) tiene un problema (al menos el que veo yo): La entrada análoga A5 esta a tierra, siempre medirá 0V.

El problema que tienes es que tratas de medir tensiones como resultado y lo que tu quieres es el valor de las resistencias (osea detectar que cable esta conectado a que punto).

Para calcular la resistencia deberás aplicar ley de Ohm y Kirchhoff. A modo de ejemplo:

R1 (la que esta a la izquierda de todo) : R1 = 5V - valor del ADC(A0) / "I". Donde "I" va a depender de las 6 resistencias que uses y se calcula como "I" = 5V / R1 + R2+ R3 + R4 + R5 + R6 lo que va a dar un valor constante.

El problema es si quieres mezclar mas resistencias o usar 6 de un conjunto de 12 (como ejemplo).

Osea que el método anterior tiene desventajas.

Yo usaría un circuito así:

Divisor.png
Donde R2 es una resistencia fija en el lado del microcontrolador y R1 es la resistencia aleatoria que se conectará. Ahí ya es mas simple calcular el valor de R1:

R1 = (ADC / R2) * (5V - ADC). [Deberás convertir el valor del ADC a tensión osea multiplicándolo por 5 / 1024].

Si necesitas mas canales ADC, puedes usar 1 solo del microcontrolador poniendo delante una o varias llaves análogas como puede ser el CD4051.

Por último, no te olvides conectar el GND de la placa de arduino junto con el negativo del protoboard. No se si el simulador lo toma ya unido pero supongo que no y de ahí, quizás, que tengas voltajes negativos.
 
Última edición:
Arriba