Sensor de Temperaura DS1822 y Arduino UNO
Materiales requeridos:
- Arduino UNO
- Protoboard
- Sensor de temperatura DS1822 Dallas (Ahora maxim) (-55~125'C). (error ~2,0º)
- Cables y resistencia de 4.7K
Diagrama de conexion de Sensor de temperatura DS1822 y Arduino
En este diagrama se mustra una manera de como conectar arduino con el sensor de temperatura DS1822 el cable negro va al pin de GND que seria nuestra tierra, el cable rojo va al pin de 5v el cual seria la alimentación o corriente de nuestro sensor y el cable azul esta conectado a el pin 10 el cual es un pin de entrada digital PWM en donde se hará la lectura de valores del sensor que en este caso se traduce en temperatura (centigrados o fahrenheit).

Si podemos apreciar en el protoboard esta conectada una resistencia de 4.7K entre la entrada de corriente o alimentación llamada Vcc a nuestro sensor y la salida de datos del mismo llamada DQ (Dren). Se conecta de esta manera para el correcto funcionamiento del sensor.
Caracteristicas de sensor de Temperatura (Informacion adicional pero importante)
Sensor Digital
Resolucion de 9 y 12 bits
Rango de operacion de -50 a 125 grados centigrados
Precision de +-2 grados
Protocolo de comunicacion OneWire ()
Manual del sensor:
http://www.embeddeddatasystems.com/assets/images/supportFiles/manuals/DS1822Z.pdf

Fotos de la conexión (Como yo hice la conexión)
En este diagrama se mustra una manera de como conectar arduino con el sensor de temperatura DS1822 el cable negro va al pin de GND que seria nuestra tierra, el cable rojo va al pin de 5v el cual seria la alimentación o corriente de nuestro sensor y el cable azul esta conectado a el pin 10 el cual es un pin de entrada digital PWM en donde se hará la lectura de valores del sensor que en este caso se traduce en temperatura (centigrados o fahrenheit).

Si podemos apreciar en el protoboard esta conectada una resistencia de 4.7K entre la entrada de corriente o alimentación llamada Vcc a nuestro sensor y la salida de datos del mismo llamada DQ (Dren). Se conecta de esta manera para el correcto funcionamiento del sensor.
Caracteristicas de sensor de Temperatura (Informacion adicional pero importante)
Sensor Digital
Resolucion de 9 y 12 bits
Rango de operacion de -50 a 125 grados centigrados
Precision de +-2 grados
Protocolo de comunicacion OneWire ()
Manual del sensor:
http://www.embeddeddatasystems.com/assets/images/supportFiles/manuals/DS1822Z.pdf
Fotos de la conexión (Como yo hice la conexión)
![]() | ![]() |
![]() |
Código Arduino para la comunicación con sensor DS1822
Este codigo esta escrito para aceptar a tres tipos de sensores de la familia Dallas los cuales serian DS18S20, DS18B20, DS1822. Basicamente lo que hace este codigo es:
- Buscar la dirección del sensor en este caso con la cual se identifica que tipo de sensor es.
- Leer la dirección.
- Verificar la integración de datos atravez de CRC para la direccion del sensor.
- Reconocimiento del sensor y elección del mismo
- Mando de hexadecimal (0x44) para recibir datos del sensor
- Presentacion de hexadecimal en respuesta (sensor)
- Conversion de respuesta a temperatura real
- Eleccion de resolucion de sensor (de 9 BIT A 12 BIT)
- Operaciones para calcular grados (Centigrados o Fahrenheit)
- Impresion de resultados
#include onewire.h="" //LIBRERIA DE COMUNICACION POR PROTOCOLO ONE WIRE // DS1822 SENSOR DE TEMPERATURA OneWire ds(10); // INICIALIZANDO EL PIN 10 EN CANAL ONEWIRE void setup(void) { // INICIANDO EL MICROCONTOLADOR EN BAUDIOS :(9600) Serial.begin(9600); } void loop(void) { byte i; byte type_s; byte present = 0; byte data[12]; byte addr[12]; float centigrados, fahrenheit; //PROCESO DE COMUNICACION CON EL SENSOR ds.reset_search();// SE BUSCA LA DIRECCION QUE ARROJA EL SENSOR if (!ds.search(addr)) {// SI NO HAY NINGUN SENSOR O NO SE ENCUENTRA NUNGUNA DIRECCION Serial.print("NO HAY DIRECCIONES DE SENSORES ENCONTRADOS.\n"); ds.reset_search();// SE REINICIA LA BUSQUEDA DE DIRECCION return; } //Serial.print("R="); for( i = 0; i < 12; i++) { //CICLO QUE MUESTRA LA DIRECCION HEXADECIMAL EN 12 POSICIONES //Serial.print(addr[i], HEX); CADENADA IDENTIFICACION DE SENSOR EJEMPLO DE CADENA DE SENSOR DS1822 22C35E5000E5DEF991AA //Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { //VERIFICACION DE INTEGRIDAD DE DATOS //Serial.print("CRC NO VALIDO!\n"); return; } //ELECCION DEL TIPO DE SENSOR DE TEMPERATURA SEGUN LA DIRECCION ARROJADA Y VALIDADA DE CRC PARA ELECCION DE FAMILIA DE SENOSOR //IDENTIFICACION DEL SENSOR DEL FABRICANTE DALLAS (AHORA MAXIM) if ( addr[0] == 0x10) { //Serial.print("EL DISPOSITIVO ES DE LA FAMILIA DS18S20.\n"); } else if ( addr[0] == 0x28) { //Serial.print("EL DISPOSITIVO ES DE LA FAMILIA DS18B20.\n"); }else if ( addr[0] == 0x22) { //Serial.print("EL DISPOSITIVO ES DE LA FAMILIA DS1822.\n"); }else { Serial.print("EL DISPOSITIVO NO ES RECONOCIDO: 0x"); Serial.println(addr[0],HEX); return; } ds.reset(); ds.select(addr); //DIRECCION ESPECIFICA DE COMUNICACION CON EL SENSOR ds.write(0x44,1);// SE EMITE UN COMANDO PARA QUE EL SENSOR DE TEMPERATURA INICIE CONVERSIONES Y PUEDA MOSTRAR TEMPERATURAS (COMUNICACION CON EL SENSOR) delay(1000);// ESPERA DE 750 MILISEGUNDOS PARA QUE RESPONDA APROXIMADAMENTE EL SENSOR present = ds.reset(); ds.select(addr); ds.write(0xBE);// ESCRIBIENDO BLOQUES DE DATOS //Serial.print("P="); //Serial.print(present,HEX); //PRESENTACION DEL HEXADECIMAL EN RESPUESTA // Serial.print(" "); for ( i = 0; i < 9; i++) {//AQUI SE REPRESENTAN LOS 9 BITS QUE NECESITAMOS COMO MINIMO data[i] = ds.read(); // Serial.print(data[i], HEX); //Serial.print(" "); } // Serial.print(" CRC="); // Serial.print( OneWire::crc8( data, 8), HEX); IMPRESION DEL CRC EN HEXADECIMAL // Serial.println(); //------------TEMPERATURA ------------------- // CONVERSION DE DATOS A LA TEMPERATURA REAL ACTUAL //PORQUE EL RESULTADO ES ENTERO DE 16BITS DEBE DE SER ALMACENADO //EN UNA VARIABLE DE int16_t INCLUSO CUANDO SE COMPILA EN UN PROCESADOR DE 32BITS int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // RESOLUCION PREDETERMINADA DE 9 BIT if (data[7] == 0x10) { // "count remain" PROPORCIONA UNA RESOLUCION COMPLETA DE 12BITS raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); //SI LOS BIT SON MENORES A 9 LOS BIT ARROJADOS SON INDEFINIDOS ASI QUE SE CONTEMPLAN COMO 0 YA //NO ESTA EN RANGO DE RESOLUCION DE LAS FAMILIAS DE SENSOR DE TEMPERATURA if (cfg == 0x00) raw = raw & ~7; // 9 BIT DE RESOLUCION, 93.75 ms TIEMPO DE CONVERSION else if (cfg == 0x20) raw = raw & ~3; // 10 BIT DE REOLUCION, 187.5 ms TIEMPO DE CONVERSION else if (cfg == 0x40) raw = raw & ~1; // 11 BIT DE RESOLUCION, 375 ms TIEMPO DE CONVERSION //12 BIT RESOLUCION POR DEFECTO 750ms TIEMPO DE CONVERSION } centigrados = (float)raw / 16.0;//CONVERSION A CENTIGRADOS fahrenheit = centigrados * 1.8 + 32.0;//CONVERSION DE CENTIGRADOS A FAHRENHEIT //Serial.print(" Temperatura = "); float centigrados2 =(fahrenheit-32)/1.8; //CONVERSION DE FAHRENHEIT A CENTIRADOS Serial.println(centigrados2); // IMPRESION DE RESULTADO EN CENTIGRADOS // Serial.print(" Centigrados, "); // Serial.print(fahrenheit); // Serial.println(" Fahrenheit"); }Resultado en monitor serie en el IDE de Arduino:
Comentarios
Publicar un comentario