Solicitud de asesoramiento con doble manejo del sensor TCS34725 (SOLUCIONADO)

Buenas, aquí en el mundo que menos domino que es el del estaño y los electrones.

Estoy preparando ya las pruebas con el sensor TCS34725, el cual me va a permitir medir el color, de acuerdo a las necesidades específicas y tiempos de respuesta que yo necesito.

El las instrucciones de la librería sobre el manejo del sensor, se especifica de manera tácita (En concreto la adaptación que realiza Adafruit del mismo):

// connect LED to digital 4 or GROUND for ambient light sensing
// connect SCL to analog 5
// connect SDA to analog 4
// connect Vin to 3.3-5V DC
// connect GROUND to common ground

Primero voy a comentar lo que sí tengo claro (o creo que ya tengo controlado)

  • La comunicación con el sensor es es I2C (justo lo que yo quería)
  • Tengo claro que lo conectaré al SCL y SDA, sea el que use, aunque no use eso pines analógicos, eso tengo claro cómo controlarlo si esos pines no son los que al final uso.
  • He estudiado todo el Datasheet del producto que está en TCS34725 pdf, TCS34725 Description, TCS34725 Datasheet, TCS34725 view ::: ALLDATASHEET :::.
  • Me he decidido por este montaje porque incorpora un led, el cual es el que necesito para poder leer el color de síntesis sustractiva de color, además está controlado por un MOSFET, con lo cual, según las indicaciones de Adafruit, lo conecto a un pin cualquiera de la placa y puedo controlar encenderlo y apagarlo sin necesidad de resistencia adicional, lo cual me va a permitir medir el color de la síntesis aditiva de color.

Hasta aquí todo bien.

Mis dudas son las siguientes:

  • La comunicación I2C se realiza sin poder modificar el identificador del sensor, de manera que dos sensores iguales tendrán el mismo identificador.
  • Justo necesito 2 sensores, para medir en dos condiciones diferentes, eso sí, en dos momentos muy diferentes: Una dentro del aparato y otra fuera del aparato (segundo sensor conectado por cables con unos no más de 30cm de distancia).
  • Cuando quiera utilizar uno, no necesitaré utilizar el otro JAMAS, es imposible e innecesario (no quiero aburrir con los detalles, pero os pido que aceptéis esto como axioma).
  • Puedo utilizar un multiplexor de I2C, como el TCA9548A, el cual me permite utilizar 8 dispositivos I2C con la misma dirección, el cual cuesta unos $10 redoneados y he de importar del extranjero.
  • La otra solución, que no sé si funciona y se me ocurre, es no alimentar el sensor que no deseo utilizar en el Vin, y utilizar 2 octoacopladores con 2 resistencias, que las encuentro en la tienda de la esquina, y con $10 compro como nosecuantasmil de ambas.

¿Funcionaría mi solución octoacoplada?

Adjunto un esquema no resuelto, ya que no tengo los sensores en el Frirzing, pero es para documentar la idea que surge en mi cabeza, a ver cuan errado estoy.

Agradezco ayuda al respecto, ya que, además de las implicaciones Hardware, tiene implicaciones en la librería que estoy desarrollando.

Muchas gracias

------- Corrección posterior.

Como el culombio no es lo mío, de manera muy alegre he omitido esta indicación:

// connect LED to digital 4 or GROUND for ambient light sensing

Osea, no he de conectarlo a un pin, sino a tierra. Pregunto:

¿Si quiero apagarlo y encenderlo puedo usar otro octoacoplador para controlarlo con un pin?

Gracias

Puedes usar un CD4066 para multiplexar las señales, me parece más confiable que hacetlo con las alimentaciones.
Ahora no estoy en casa, luego te hago un esquema si quieres.

Muchas gracias, desconocía ese componente, si te lo agradecería cuando puedas, yo mientras haré mi rarea y me voy a documentar sobre el mismo.

Usando los 2 pines de tu esquema (D2 y D8) podés seleccionar las señales SDA y SLC de cualquiera de los 2. Con HIGH en los pines de control cierra la llave, con LOW se ponen en alta impedancia (HiZ) o sea abren
Se podrían llegar manejar con un solo pin agregando un transistor.

Edito: se me ocurrió una alternativa mejor con el 74HC157. Miro la hoja de datos y en un rato te paso el esquema

Muchas gracias, de verdad que sí, ahora necesito hacerte unas preguntas, para cuando puedas y si tienes gusto:

  • En tu solución, evito la comunicación pero siempre tendría los sensores conectados a Vin (por generalizar, ya veré que voltaje necesito). ¿Es cierto? ME ENCANTA
  • Yo había pensado no energizar el sensor para evitar consumo del mismo mientras no se utiliza, lo cual va a ocurrir en la mayoría de los contextos, digamos que el 99% del tiempo que aparato esté activo.
  • Sólo en un contexto aparato y sensor trabajarían todo el tiempo, pero he de confesar que eso será la fase 2 de este proyecto (no creo que antes de Agosto del próximo año y si fuese Agosto estaría muy feliz de que fuese tan pronto).

Ahora tengo la curiosidad de saber si estoy en lo cierto de la interpretación de la idea de @gatul y si es preferible a la que yo tenía prevista.

PD: No se me había ocurrido conmutar la señal, me encanta la idea

Lo del Hc157 queda descartado, las llaves no son bilaterales como en el 4066 (o sea, no importa cual lado de la llave usas como entrada y cual como salida, es como un rele, digamos) en cambio el 157 es multiplexor 2 entradas a 1 salida, si importa como se conecta y no sirve para este caso.

En lo particular prefiero no andar "jugando" con las alimentaciones. Tienes que dar tiempo a que estabilicen, a que los componentes tambien lo hagan, y no sabes bien cuál es ese tiempo de espera... Non mi piace.

Conmutando las señales no hay esperas. El 4066 "soporta" hasta 40 MHz, imagínate que nunca vas a necesitar tan alta velocidad de switcheo con un arduino.
Pones en HIGH el pin de control del que vas a leer/escribir, si quieres aseguras que el otro esté en LOW, y listo, haces la lectura o escritura.

Aparte, según la hoja de datos, el TCS34725 consume 65 uA en espera. ¡Nada! Y encima lo podes poner en modo sleep que consume 2.5 uA.

Ummm, no había visto eso del sleep, pero claro dependo del montaje que hade AdaFruit, lo estudio.

Una duda más, básicamente el comportamiento del CD4066 es el de un transistor, permíteme el símil ahora para hacerte la siguiente pregunta.

Como mi pin será la que conmute, ¿por donde conecta el pin al GND? ¿Por el GND común del integrado? y dicho esto ¿Necesito entonces una resistencia, pongamos de 1K entre la puerta y la base del transistor/CD4066? espero haberme explicado

El GND es común al arduino (o lo que vayas a usar). Para los pines de control no hacen falta resistencias, son de alta impedancia. Y para las llaves tampoco necesitas nada, tienen una resistencia interna menor a 200 ohms, no creo que influyan en nada.

Nota al margen, el 4066 puede manejar incluso señales analógicas, no solo digitales, y como se pueden alimentar con fuentes simétricas (+5V y -5V, por ej.) puedes pasarle directamente señales de audio, por ejemplo.

Estupenda solución, muchas gracias.

Te añado algo que he descubierto, para convertir un pin digital en analógico con el 4066

Me pongo a estudiar cómo lo conecto todo y doy el tema por solucionado, muchas gracias.

¡De nada profe! Ha sido un gusto
Saludos

Creo que queda poco para agregar, hay otras posibilidades de multiplexado.
Adafruit tiene este módulo TCA9548A que puede ser de tu agrado porque minimiza las soldaduras que tanto te gustan .... o será que te disgustan? jajaja

Si gracias @surbyte, sé que es un asunto de priorizar, pero es que he realizado los siguientes cálculos:

  • Producto de Adafruit $7
  • Importación al país $10
  • Costos de Aduana $5

Total: $22

  • Comprarlo a un proveedor local cuando lo tiene $7

Total: $7

  • Opción de @gatul adquirida en el país, 10 unidades $10

En cualquier caso, incluso con el módulo Adafruit

  • Coste de quemaduras con soldador tanto por parte del profesor o los estudiantes, reconstrucción facial, trasplante de piel de espalda, búsqueda de donante de piel al ser insuficiente la de la espalda: 100.000.000€ (Esta en Euros)

Así que no sé por cual solución me decidiré

La solución es simple, que el profesor sea malo para soldar no implica que los alumnos lo sean. De manera que haz un concurso de soldadura y quien gane debe soldar todas las placas y listo, asunto resuelto.

:smiley: ;D :smiley: