Recientemente he creado un reloj-termómetro hecho con un PIC 16F628A, un sensor de temperatura i2c DS1624, un reloj en tiempo real i2c DS1307 y un LCD de 16×2 compatible con Hitachi HD44780.
El sistema, una vez encendido, muestra la fecha y hora, la temperatura junto con los valores máximo y mínimo que alcanza y finalmente un mensaje personalizado. Aquí hay un video que he grabado del mismo:
El esquema del circuito es el siguiente:
Y desde aquí os podeis bajar el .hex y el código fuente (CCS C)
La fecha y hora se configuran con sólo un botón pulsador que está conectado a RB0 y que funciona por temporización e indexación. Es decir, si tu pulsas la primera vez el botón, se mostrará en el LCD la fecha y hora y el indice 0, que indica que vas a modificar el día, entónces si pulsas dentro de los dos segundos siguientes el botón, el día se incrementará, si no lo pulsas, el indice se incrementará a 1 y se podrán modificar los meses de igual manera. Así hasta llegar al indice 5 que son los segundos y después mostrará la fecha y hora actualizadas renovandose cada segundo.
A los diez segundos de mostrar la fecha y hora se muestra la temperatura actual junto con los valores máximo (M) y minimo (m) que se han alcanzado. Si son los 30 primeros segundos de medianoche se resetearán esos valores.
A los diez segundos de mostrar la temperatura, se mostrará un mensaje personalizado que se ha guardado en la EEPROM al programar el PIC. Pasados cinco segundos vuelve a mostrar la fecha y hora.
El PIC usa el oscilador interno de 4Mhz. El programa ocupa un 98% de su memoria de código. Aunque en el video vereis que hay un interruptor de encendido/apagado, un led indicador de encendido/apagado y unas resistencias variables para el LCD, con lo que hay en el esquema es suficiente para funcionar. Vcc son 5 voltios conseguidos a través de un 7805.
Buenas, me gusta tu página, suelo entrar bastante, desde que la conocí, cuando publicaste el artículo de domótica a bajo coste, en el que encendías una lámpara. Curioso, estuvimos probándolo un colega y yo, y al final nos funcionó. Tengo algunas dudas:
– ¿donde puedo comprar los materiales?
– No tengo ni idea de circuitería, bueno, lo básico que dan en la universidad (técnico informático de sistemas), pero me gustaría aprender, ya que me relaja y no me importaría hacer cosas de estas en mi tiempo libre. ¿Qué conocimientos debo tener para comenzar, o para poder hacer el circuito que montas aquí en el artículo?
Gracias, saludos.
En la carrera se da poco de electrónica (2 asignaturas) por lo que te recomiendo que seas autotidacta.
El proyecto de domótica fue un circuito que me compré ya hecho basado en optoacopladores que se enchufan al puerto paralelo y manejan relés.
Yo empecé con los pocos conocimientos que tenía con el libro de «Microcontrolador PIC16F84. Desarrollo de proyectos» http://www.pic16f84a.org/ y la verdad es que como base está muy bien.
Luego en páginas web como http://todopic.com.ar o http://picmania.garcia-cuervo.net/ se aprende mucho.
Los componentes o bien los compras en tiendas de electrónica que haya en tu localidad o en páginas web como http://es.rs-online.com/web/
Gostei muito do circuito, mas infelizmente o arquivo não pode ser mais baixado, gostaria de ter os arquivos. Grato.
Desde ya, un espectáculo el circuito….pero me vendrian espectacular los archivos :P, y el link no funciona :S.
Ya esta arreglado el enlace. Gracias por comentármelo.
Hola amigo.
Felicidades por tu circuito del reloj y temperatura, me voy a poner con el para hacermelo.
la unica duda es que he descargado el proyecto y en el zip falta la libreria del sensor de temperatura
#include
y me da error al compilar, haber si me lo podias enviar, gracias y felicidades.
Hola Javier. Ese fichero es propiedad de CCS y por eso no puedo difundirlo.
admin :
Fecha: 30 Junio 2009 @ 23:50
Hola Javier. Ese fichero es propiedad de CCS y por eso no puedo difundirlo.
Jaaa… y vos seguro que pagaste por esa libreria.
javier, podes colocar un sensor de temperatura de cualquier tipo, por ejemplo el LM35 que es muy economico y te da una salida de 10mV por cada Cº, por lo que si conectas la salida a cualquier entrada analogica, podes leer la temperatura directamente del conversor AD del PIC, este proyecto es para BabyProgramadores, cualquier Gil puede hacerlo, y este se da aire de Importancia.
Por cualquier consulta, escribilas aqui
Lars
Pues si, he pagado por el compilador CCS.
No puedo ni imaginar lo Gil que debes ser sabiendo que el pic con el que se ha desarrollado el proyecto no tiene conversor analógico/digital.
Vamos, que te quieres dar aires de sabiondo diciendo lo del LM35 y ni siquiera sabes el microcontrolador con el que se está haciendo. Lamer
mejor no deben de publicar proyectos incompletos
Mejor no comentar si no se ha leido el artículo entero
asi es percyman este circuito no funciona esta incompleto le falta las librerias del sensor de temperatura, el administrador deberia de borrar este tipo de proyectos que no funcionan o esta incompletos.
claro carlomagno el administrador , no puede controlarse ni asi mismo.debe de cambiar de profecion ja ja ja.
carlomagno y carloncho. Eres lo que se denomina un troll. Eres la misma persona, y de paso pones comentarios ofensivos (ya borrados por supuesto). Debe ser que no tienes amigos y como te aburres en casa prefieres tocar las pelotas al personal. Por cierto, ¿que tal funciona tu router zyxel de telefónica en Lima/Perú?…
Hola
Ya monte el circuito y funciona lo de la temperatura, pero ahora tengo otra duda, como lo pongo en hora, ya que pone hora de inicio del ds1307, gracias admin.
Si me contestas, saludos
Sólo tienes que pulsar el botón. Durante los dos primeros segundos te saldrá un 0 en el display, que significa que pulsando de nuevo el botón varias veces puedes cambiar el día. Si no lo pulsas durante esos dos segundos, te saldrá en el display un 1, que indica que puedes cambiar el mes si pulsas el botón antes de dos segundos y así para el resto de opciones. Esta es la relación de indices:
0: Cambiar el día
1: Cambiar el mes
2: Cambiar el año
3: Cambiar la hora
4: Cambiar los minutos
5: Cambiar los segundos
Gracias Oscar.
Un saludos. Te envio un email.
Hola:
Me encanta tu Web http://www.sistemasorp.es
¿Le interesa enlazarnos entre nosotros?
Mi Blog es:
http://electronica-pic.blogspot.com
Un cordial saludo.
Muy buena página y excelentes proyectos; aunque veo que hay quienes se dedican a molestarte porque según ellos no están completos; falso, quieren todo gratis y sin esfuerzo para agenciárcelos con las manos en la cintura.
No comprenden que hay que poner de nuestra parte y agradecer que haya personas que sacrificando tiempo dinero y esfuerzo (aún en éstos dias) publiquen trabajos que nos den ideas apartir de las cuales desarrollemos y ampliemos las nuestras.
Gracias por tu aporte, soy autodidacta y buscaba un proyecto como éste.
Saludos desde Tabasco México.
Hola Camilo
Muchas gracias por tu apoyo. Es cierto que hay gente que hace esas cosas y no le veo ningún sentido excepto el de fastidiar por que si, sin embargo no me afectan y seguiré compartiendo los proyectos que vaya haciendo.
hola buen dia, descargue el reloj termometro y trabaja muy bien, lo quisiera modificar para ir aprendiendo un poco de micros pero tal y como esta el programa en C me marca un error al compilar: dice que esta fuera de ROM que una linea es muy larga «leecadenaeeprom» intente en la ayuda de picc aplicando #inline y #separate pero sigue sin compilar, me podrias dar algun tip, gracias.
¿Qué tipo de PIC estas usando como target para compilar?
el pic16f628A, la simulacion en proteus es perfecta con los archivos que descargue, pero el problema que tengo es la ROM.en el bloc de notas no entiendo:
#ROM 0x2100={«\f hola TODOPIC»}, LO COMPILO EN PICC, ¿LA LIBRERIA #include «main.h» ME INDICA EL TIPO DE PIC? O TENGO QUE DECLARAR LA LIBRERIA DEL PIC16F628A?
En el main.h tiene un #include <16F628A.h> que obtiene los valores necesarios para compilar. Si quieres puedes enviarme todos los ficheros de tu proyecto en un .zip a oscarrp@gmail.com para que mire que puede estar pasando.
Hola Oscar.
Encontré tu correo en una página web.
Quería pedirte un favor.
Mira que monté el termómetro-reloj que muestra las temperaturas máximas y mínimas (y la actual) con el pic 16f628a y funciona perféctamente si cargo directamente el archivo. main.hex.
Pero si abro el main.c e intento compilarlo no me deja. El error es que el programa es demasiado largo para el pic 16f628a. Lo compilo con el 16f648a (que es exáctamente igual pero con más capacidad) y lo compila bien, pero no funciona, a pesar de haber cambiado el main.h para nombrar ese pic. El caso es que sí funciona pero me lee 00.00 en la temperatura, no lee la temperatura real. Lo demás (fecha, hora y mensaje) funciona bien.
Podrías ayudarme? Ya he intentado todo lo que sé y no lo consigo.
Gracias por tu ayuda.
Atte:
Mariano Aranda
Execelente proyecto me gusto mucho! solo quisiera saber en que program esta realizado el código fuente por que yo uso microcode studio plus!
Amigo muy bueno tu proyecto lo e montado en proteus y funciona de 10, solo me asalta una duda, cuando lo apagas, y lo prendes tienes que volver a actualizar hora y fecha o es automatico, de antemano muchas gracias sigue asi 🙂
La pila de botón esta para eso precisamente, para seguir actualizando los valores de fecha y hora cuando está apagado. El mensaje lo puedes modificar en el fichero main.h.
A se me olvida no se mucho de programacion de microcontroladores ya que recien estoy comenzando y me gustaria saber como modificar el mensaje que dice «todotopic»
gracias
oye amigo donde puedo descargar el archivo hex.??
Tienes el enlace en el mismo artículo.
Hola, tengo una duda… en tu descripción hablas del DS1624 y en el esquema aparece el «1621». Yo encargue este último (15€urazos) pero me da a mi que lo de la función memoria es del «1624» no¿? ¿tengo que cambiarlo?
un saludo, gracias.
El esquema tiene ese valor porque en su momento no encontré para el eagle la librería para el 1624. El 1624 tiene más precisión en la medida (0,01ºC) en cambio el 1621 tiene sólo 0,5º.
Hola de nuevo, como te dije he montado tu circuito pero con el 1621 en vez del 1624 y temgo problemas… me sale todo como en el video, incluso puedo a través del pulsador cambiar fecha y hora(del 0 al 5) pero pasado los segundos(indice 5) no se memoriza se pone todo a céro otra vez. igual me pasa con la temperatura, todo se queda a céro, al final si sale «Hola Todopic». ¿no crees q puede ser del 1621? como estuve viendo en internet y te comente el 1621 no tiene función memoria… es termometro-termostato, mientras que el 1624 es termometro con memoria… o eso entendi según lo que leí.
Gracias por todo, un saludo!
Eso es que no se comunican por I2C con el PIC, ¿has puesto las resistencias correctamente y el clock y data también estan bien conectados entre todos?
siiii… tenias razón, ahora si puedo ponerlo en hora y se queda grabado. Y la temperatura marca valores normales y con dos décimas (28.55º marcaba).
Bueno pues con tu circuito, una fuente de alimentación para que vaya enchufado a la red y un reloj- calendario (proyecto de la 2º evaluación) completo el proyecto integrado de final de curso y termino con el grado superior con muy buen expediente. Gracias por todo de nuevo y si sabes de algún trabajo que necesiten a un técnico superior ruego me pongas en contacto que estoy impaciente por empezar a trabajar en esto de la electrónica. Un abrazo!
hola, soy nuevo en esto de los pic logre hacer un programa para termometro con pic pero solo aparecen en display caracteres en codigo ascii mi pregunta es como convierto ese dato a numeros reales que coincidan con una temperatura ambiente real???
¿En que lenguaje/compilador lo estas programando? SI es en C con CCS la función printf ya te hace la conversión.
Hola!! Empiezo diciendo que gracias por tu aportacion, magnifico proyecto.
He montado tu proyecto, pero sólamente me funciona el termometro el reloj no funciona, sin embargo al simularlo con el proteus todo funciona a la perfección. Quería preguntarte si tienes alguna idea de que podría ser lo que ocurre y si es así como podría solucionarlo. Por otra parte, también quería preguntarte como podría cambiar el mensaje de «Hola TODOPIC».
MUCHAS GRACIAS
¿Has puesto la pila y el cristal de cuarzo que van conectados al DS1307?
En cuanto al mensaje tienes dos opciones, o lo modificas y lo recompilas con el CCS; o abres el fichero main.hex con un editor de texto y modificas los bytes directamente ¿qué mensaje le quieres poner?
Si le he puesto la pila y el cristal y he comprobado si habia alguna pista cortada, y no encontré nada; por lo que no se muy bien que puede estar pasando.
En cuanto lo que dices del editor de texto, cuales serían los bytes que tendría que cambiar?
El mensaje que me gustaría poner sería mi nombre, «ADRIAN RODRIGUEZ».
Ok, te voy a poner una tarea, ponme en una línea todos los caracteres en hexadecimal de la cadena que pides (incluido el espacio entre medias), una vez que hayas hecho eso te digo que hay que modificar en el fichero .hex específicamente.
No estoy del todo seguro, pero creo que sería asi ADRIAN RODRIGUEZ:
41445249414e20524f4452494755455a
En cuanto al otro error que tenía no se te ocurre que podría ser no??
Edita el fichero main.hex y sustituye estas tres lineas que están casi al final:
:104200000C002000200048006F006C0061002000BE
:1042100054004F0044004F0050004900430020006C
:04422000200000007A
Por estas otras:
:104200000C00410044005200490041004E002000D3
:1042100052004F004400520049004700550045003D
:044220005A00000040
Y así debería salirte el mensaje. Por otro lado lo anterior te lo puedes ahorrar si con tu programador de PIC puedes editar la EEPROM del micro ya que es ahí donde está almacenada la cadena.
Finalmente no se qué más puede estar fallándote en el chip de la hora, ¿seguro que es un DS1307 y no otro modelo? ¿está bien conectado al bus I2C? ¿Tienes otro chip para probar?
Otra cosa que te quería decir es que el lcd se ve bastante oscuro y no se lee con total claridad, se me ocurrio sustituir una de las resistencias por un potenciometro para regular el contraste, pero no se cual de ellas debería ser y de que valor tendría que se el potenciometro; sabrías decirme una solución??
Si pones estos potenciómetros debería funcionarte bien:
Si el integrado es un DS1307, y conectado creo que si lo tengo bien, compraré otro integrado esta tarde para ver si es problema de que esté mal.
Muchas gracias por la ayuda, te comentaré si fui capaz a arreglarlo todo.
Hola te escribo para decirte que con tu ayuda he conseguido hacer que todo funcionara a la perfección. Decirte que el problema del reloj era que el ds1307 estaba defectuoso.
Muchas gracias por tu ayuda
Me alegro de que te haya funcionado todo. Te animo a mejorarlo usando un sensor de humedad relativa 😉
una pregunta que lenguaje utilisazte para programas el pic
Está en el artículo, CCS C.
y para ensamblador
Me has hecho recordar a alguién que había muerto, ¿según esta arquitectura puedes agregar funciones según desees?. ¿el micro se encarga de el bus serial?¿tienes un enlace en donde pueda encontrar información sobre otras funciones a agregar?. Mi mamá tiene un acuario y me desespera el consumo de energía excesivo. Pretendo controlar los dispositivos conectados según horario. Ahhh no me tomes a mal pero la idea de desconfigurar enrutadores está para cuando uno está en comienzos. Son solo unos niños, dejalos que jueguen
Puedes agregarle cualquier funcion, el código fuente esta ahí para modificarlo. No se si te refieres al bus serie rs232 pero en este proyecto se usa bus i2c.
Hola, felicitaciones por tu pagina web descargue el proyecto funciona muy bien la simulacion pero cuando intento hacer la compilacion me sale un error mas o menos asi:
***Error 71 «main.c» Line 227(0,1): Out of ROM, A segment or the program is too large convertirDecimales
a por cierto el compilador que estoy usando es el PIC CCS version 4.11
tiene idea que podria ser? revise y no logre ver cual es el problema
tal vez se me escapo algo, por lo demas exelente proyecto y sigue adelante
¿Tienes elegido el microcontrolador correcto?
Hola un super proyecto pero donde ubiko el mplab para poder kompilar todo el proyecto..???? y kmo el mensaje final puedo cambiarlo a otro kmo por ejemplo mi nombre
Muchas Gracias
No está hecho en mplab, sino en PCW CCS. Por otro lado si ha leido el artículo verá que el mensaje se cambia en la EEPROM.
estoy desarrollando el mismo proyecto pero al compilar tengo un mensaje de error sobre que esta fuera de ROM, podría por favor ayudarme?, gracias
¿Qué microcontrolador está usando?
Hola que tal primero que nada felicidades por tu proyecto esta genial, solo me gustaria preguntarte que tengo un problema con el reloj del simulado en proteus no se por q no me marca bien la hora y abusando de tu ayuda se podria cambiar el mensaje que muestra a UPIICSA gracias por tu ayuda y espero tu respuesta. Saludos
No tengo proteus por tanto no puedo ayudarte en ese aspecto. El mensaje se cambia en el fichero main.h
Podrias decirme en que linea por favor ???
Si haces esa pregunta es que no te has bajado el proyecto cuyo enlace está en el mismo artículo para ver el fichero main.h ¿verdad?
si de hecho ya lo baje y lo simule en proteus creo q por eso me di cuenta del mensaje que tiene no lo crees…??? en un comentario anterior comentas como cambiar las lineas y q muestre el nombre de una persona pero como lo cambias q modificas de esas lineas.???
Entonces no entiendo por qué preguntas en qué línea, ya que sólo tienes que editar el fichero main.h para saber donde está. Lo del comentario que mencionas es para una persona que no tenía el compilador CCS y como no lo indicas no se si ese es tu caso o no. Si ese es tu caso entonces tendrás que traducir el mensaje que quieres a hexadecimal antes, tal y como se lo pido a la otra persona.
Es que yo no tengo el compilador que tu manejas tengo MPlab y no eh encontrado las lineas en donde se cambie el codigo o las palabras por ende acudi a ti a tu ayuda….
De acuerdo, entonces yo te digo qué parte modificar del .hex para que salga el mensaje que quieres, pero no quiero ser yo quien haga todo el trabajo, por tanto tienes que decirme el código en hexadecimal del mensaje que quieres poner.
Lo siento amigo no se como hacerlo apenas estoy comenzando a hacer estos proyectos y apenas se lo basico de electronica perdon no se de que hables o como le hare ….
algien me podria pasar la programacion de corecta de este proyecto porfavor
disculpa la temperatura se puede cambiar ?
Hola, amigo te felicito por tu web, se un poco de electrónica básica, me gustaría desarrollar tu proyecto pero no se muchas cosas y quiero aprender, se que me toca comprar el programador de pic para realizar este proyecto y lo voy a hacer, quiero desarrollarlo para que monitorear la temperatura del cuarto de mi bb recién nacida, estuve mirando en mercado libre y se consiguen por menos de 10 dolares, pero como me apasiona la electrónica quiero desarrollarlo yo mismo si tu me ayudas, necesitaría una especie de tutorial paso a paso porque no se programar el pic ni cual quemador comprar y esas cosas si puedes ayudarme o alguien de la comunidad le estaría muy agradecido me poses escribir a mi correo electrónico. muchas gracias.
se podria cambir al PIC16F84A? a que frecuencia trabaja?
El 16f84a tiene menos memoria y no podría implementarse. La frecuencia está dicha en el artículo.
Me puedes dar la lista de materiañea xfa…
Necesitó sus nombres y codigo xfa mjchas gracias
Ejem. Pic 16f628a
En el propio artículo vienen.