Go Down

Topic: 50 NTC o DS18B20 con un arduino UNO [SOLUCIONADO casi] (Read 7060 times) previous topic - next topic

curro92

Feb 06, 2013, 08:06 am Last Edit: Feb 28, 2013, 04:10 pm by curro92 Reason: 1
Hola,
quisiera conectar unos 50 NTC a un arduino UNO para medir la temperatura interior de una colmena, y  guardar los datos cada x minutos en una SD.
Para leer temperaturas tendría ir seleccionado cada NTC, y para ello necesitaría 6 pines digitales (2^6 = 64). No conozco mucho el tema, creo que necesitaría algún chip 7400 de tipo multiplexor... ¿Alguna idea?


Heke

#1
Feb 06, 2013, 11:21 am Last Edit: Feb 06, 2013, 11:28 am by Heke Reason: 1
Curro92

¿Y si en vez de NTC usas DS18B20?



Ventajas, el protocolo es el 1 wire, solo empleas un pin, puedes poner en cascada hasta 100 dispositivos y hasta una distancia de 200 metros. (estos datos los lei pero no he localizado la hoja oficial que lo corrobora)

Tambien ganas en precision, una sonda digital te da una medida de temperatura independiente de la resistencia del cable o interferencias, una analogica no.

Cadda DS18B20 tiene una MAC unica con lo que identificarlas es por software y encima las puedes conseguir estancas:

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

flico

Puedes usar multiplexores de 8 canales como el 4051, asi por cada entrada analogica tienes 8 termistores conectados.





Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Sergegsx

sin duda DS18B20, yo tambien los uso y son una maravilla.

flico

Usar sensores onewire como el DS18B20 es una opcion muy buena, lo unico que para tener 50 dispositivos conectados un pushpull pasivo con una resistencia no es nada recomendable. En estos casos hay que usar un pushpull activo.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

curro92

#5
Feb 06, 2013, 04:34 pm Last Edit: Feb 06, 2013, 04:37 pm by curro92 Reason: 1
Gracias a todos.

El DS18B20 me gusta, pero 50pcs me salen por treinta y tantos euros.

Esta tarde he encontrado otra posibilidad mucho más viable económicamente. Un montaje de 8 x 4051 que consume 6 pines digitales y uno analógico
http://modelrail.otenko.com/arduino/multiplexing-photodetectors-to-detect-train-occupancy

También existe una librería para ese montaje:
https://github.com/ajfisher/arduino-analog-multiplexer

El presupuesto (vía extremo oriente):
- 50 pcs NTC: 3.7€
-10 pcs 4051: 2€
- 1 Pro Mini con atmega320 16MHz: 4.71€
- SD Card module: 1.06€  (falta la tarjeta)
- DS1307 RTC (Battery include): 1.72€
-----------------------------------------------
Total: 13,19€

Un datalogger que va a medir la temperatura interior de la colmena simultáneamente en 50 puntos distintos cada 10 minutos, anotando además año, mes, día, hora, minuto. Los NTC los voy a incluir en los bastidores de cuadros de cera antes de que formen los panales.









flico

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Sergegsx

te vale la pena por 20 euros la cantidad de cable que tienes que tirar adicional? yo sigo viendo mejor opción el DS18B20, ademas que la señal es digital y no analogica, que tambien lo veo una ventaja

curro92

#8
Feb 07, 2013, 04:48 am Last Edit: Feb 07, 2013, 05:43 am by curro92 Reason: 1
Vaya, Sergegsx me ha dejado otra vez con dudas, en lo de la maraña de cables tiene razón.

flico: podrías  explicar muy brevemenete qué es eso de "pushpull activo"?

En el datasheet aparecen dos formas de conectar:
  1. Supplying the Parasite-Powered DS18B20 During Temperature Conversions
  2. Powering the DS18B20 with an External Supply

Cuando mencionas "pushpull activo" te refieres a la segunda?

Heke

#9
Feb 07, 2013, 08:13 am Last Edit: Feb 07, 2013, 08:24 am by Heke Reason: 1
Supongo que lo que quiere decir es esto:
Quote
Parasite power mode
When operating in parasite power mode, only two wires are required: one data wire, and ground. At the master, a 4.7k pull-up resistor must be connected to the 1-wire bus. When the line is in a "high" state, the device pulls current to charge an internal capacitor.

This current is usually very small, but may go as high as 1.5 mA when doing a temperature conversion or writing EEPROM. When a slave device is performing one these operations, the bus master must keep the bus pulled high to provide power until the operation completes; a delay of 750ms is required for a DS18S20 temperature conversion. The master can't do anything during this time, like issuing commands to other devices, or polling for the slave's operation to be completed. To support this, the OneWire library makes it possible to have the bus held high after the data is written.


Cuando hay mucho conectado al 1 wire, se puede emplear en paralelo un mosfet para mandarle la tension directa, sin limite de corriente por los "altos consumos" en los momentos de la lectura como esta nota de aplicacion:


Añado que con el modo tradicional (vcc-gnd-data) no hace falta, solo calcular la resistencia un poco mas baja:
http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
Quote
Normal (external supply) mode
With an external supply, three wires are required: the bus wire, ground, and power. The 4.7k pull-up resistor is still required on the bus wire. As the bus is free for data transfer, the microcontroller can continually poll the state of a device doing a conversion. This way, a conversion request can finish as soon as the device reports being done, as opposed to having to wait 750ms in "parasite" power mode.

Note on resistors:
For larger networks, you can try smaller resistors.
The ATmega328/168 datasheet indicates starting at 1k6 and a number of users have found smaller to work better on larger networks.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

flico

#10
Feb 07, 2013, 12:36 pm Last Edit: Feb 07, 2013, 12:41 pm by flico Reason: 1
Solo es que durante el tiempo de conversión activas el Pin del mosfet. Suele ser como maximo 750ms el tiempo que dura la conversión pero se acorta si bajas la resolución.

Unas pruebas que hice llegue a los 200m leyendo dispositivos onewire de dos hilos y 750ms de pushpull que en modo pasivo no leía nada mas que un dispositivo. Pero claro era en dos hilos.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

curro92

#11
Feb 08, 2013, 05:02 am Last Edit: Feb 08, 2013, 05:24 am by curro92 Reason: 1
Gracias de nuevo
resumiendo: si pongo tres cables (vcc-gnd-data)  me olvido del mosfet.
Sobre poner resistencia menor, según el datasheet
Quote
Note on resistors:
For larger networks, you can try smaller resistors.
The ATmega328/168 datasheet indicates starting at 1k6 and a number of users have found smaller to work better on larger networks.


¿Se supone que debo poner algo entre 1k6 y 4k7? Probaré.

Y ya que sois tan amables, otra pregunta: Cómo calcularía el consumo en mA de una red de 50 DS18B20? Si el consumo fuera continuo usaría un téster, pero cambia según esté midiendo o no cada sensor. Según el datasheet:
- active current (cuando está leyendo): 1mA
- standby current:  750nA
- sink current: 1mA
- DQ Input Current : 5uA (cuando la línea DQ está alta)

No controlo los dos últimos...


Heke

Hola Curro92

Empleando la configuracion de 3 cables, ya lleva alimentacion separada, la resistencia es un simple pullup, casi pogo la mano en el fuego por el valor de 1k5 para las 50.

Si la distancia es grande, 100m p.ej. usa cable cat6.

Por lo demas debe de funcionar sin problemas...

Suerte electro-Apicultor.  XD
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

curro92

Gracias, Heke

Estoy probando varios DS18B20 conectados a un Arduino. Uso la librería  DallasTemperature

Para saber el número de sensores, utilizo la función correspondiente
Code: [Select]

devicecount = sensors.getDeviceCount();


Y luego busco el ID de cada sensor para identificarlo
Code: [Select]

for(n=0;n< devicecount; n++)
      sensors.getAddress(addresses[n], n);


Por otro lado, externamente a los sensores les identifico con unas marcas (con un pintauñas reciclado). Apretando con los dedos los sensores uno a uno, veo en cuál sube la temperatura y puedo asociar el ID y las marcas de pintura.

Mi pregunta es: al usar sensors.getDeviceCount() ¿siempre saldrán en el mismo orden los sensores? O pueden salir en un orden aleatorio?







Heke

Hola Curro

Cuando haces un devicecount lo que hace es enumerar los sensores que tiene conectados, el orden no depende de eso.

Cada sensor tiene lo que se llama una mac o para mas sencillo digamos que un DNI, y ese numero es fijo de cada sensor, lo pongas al principio o al final de una hilera.

Es  un numero estampado internamente (electronicamente) como si fuera la IP de un ordenador, da igual donde vaya cuando tu accedes al dispositivo X siempre sera a él.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Go Up