Alarma con un pic 16f628, un transceptor ds275, sensor de movimiento y un modem antiguo

Tenía un modem externo antiguo de 2400 b.p.s. que me regalaron y se me ocurrió la idea de usarlo para crear una alarma. Los bueno de los modems es que puedes interactuar con la línea telefónica para hacer llamadas.

La idea consiste en que un sensor de movimiento piroeléctrico de infrarrojos (PIR) detecte el movimiento de una persona en una sala, este informaría de la detección a un pic y este sería el encargado de llamar a un número de teléfono a través del modem.

El matería que he usado es:

Para hacer el circuito lo más sencillo posible he usado un pic 16f628a dado que con él podemos ahorrarnos el poner un cristal de cuarzo externo, poder desactivar el pin MCLR y usar la USART que trae consigo (podría haber usado un pic 16f88 igualmente). También he usado el transceptor ds275 porque se puede comunicar con un puerto serie como el del modem sin añadirle ningún condensador como ocurre con el MAX232. Como no quería depender de una fuente de alimentación externa, he soldado unos cables al modem para obtener de este los 5 voltios necesarios para el pic y el transceptor y para la alimentación de 9 voltios del sensor PIR.

Este es el esquema del circuito:

El sensor PIR tiene una salida digital que va conectada al pin RB0 del pic, que se puede programar como interrupción, por lo que el pic puede permanecer en modo sleep hasta que recibe la interrupción del sensor y empezar a mandar los comandos AT para hacer la llamada de alarma. Como el PIC no puede por sí sólo interactuar con un puerto serie, el transceptor convierte las señales del PIC a señales RS232 para enviárselas al puerto serie del modem y viceversa. Una vez que se ha hecho la llamada y el modem detecta que se ha colgado la linea, devolverá un código numérico que el pic recibirá para volver a dejar el sistema en modo de detección.

Foto del conjunto:

Un video de demostración:

Lo que sucede en el video es lo siguiente: Se enciende el modem y el pic configura este para que no tenga eco los comandos, para que devuelva respuestas numéricas y que el altavoz esté desactivado, después de 15 segundos de espera para que el usuario pueda abandonar la habitación el pic se pone a esperar la detección de movimiento, cuando la detecta llama a un número de móvil prefijado para que el usuario reciba la alerta.

El código fuente del pic esta programado en CCS y es el siguiente:

main.h

main.c

Sólo comentar que XXXXXXXXX hay que sustituirlo por el número de teléfono al que queramos dar la alarma.

82 comentarios en “Alarma con un pic 16f628, un transceptor ds275, sensor de movimiento y un modem antiguo

  1. tazma

    hola es genial
    eso es lo que yo quiero mantar en mi casa cuando note un movimiento que mande un sms a mi movil pero elproblema es que yo soy novato y te quiero hacer unas preguntas
    tengo uno delos primeros medens que salieron de telefonica es un speedtouch tu crees que puedo utilizarlo para este proposito tambien tengo estos pic
    16f84ay 16lf876 con que programas los pic salu2

    Responder
    1. admin Autor

      Me temo que ese modem no es un modem rtb sino un modem adsl, por lo que no te servirá. Para programar pic uso el CCS PCWH que es un compilador de C para PICs.

      Responder
  2. tazma

    hola gracias por responder
    si es posible me puedes decir el modelo que usas tu lo digo por que tengo un amigo que tiene una tienda de informatica y tiene varios routers viejos
    lo del pic ya lo tengo controlado
    salu2

    Responder
  3. tazma

    hola veo si nome confun que tienes una eeprom a parte del pic en el circuito es a sin
    que archivo as grabado en la eeprom
    si ves que me pongo pesado dimelo lo digo por dudas tengo unas cuantas y no quiero molestar
    salu2

    Responder
    1. admin Autor

      No es una eeprom, es un transceptor para convertir señales de ttl a RS-232, es como el MAX232, sin el no se podría hacer la comunicación serie.

      No te preocupes por preguntar, es bueno que lo hagas. Así otra gente que lo lea también puede aprender.

      Responder
  4. tazma

    hola sigo com mis preguntas esto de los pic es complicado
    tienes los codigos main.c y main .h

    que archivo es elque grabas en el pic el h ?

    hay algun tuto del pic c compiler

    Responder
    1. admin Autor

      Ahora te pregunto yo, ¿sabes algo de C?. Es que con la pregunta que me haces creo que no lo conoces y es imprescindible si quieres usar el compilador. El fichero .h son las cabeceras del programa, el fichero .c es el código fuente del programa y lo que se sube siempre, siempre, siempre a un PIC es un fichero .hex (da igual que lo hayas compilado en C, en BASIC o en ensamblador). En cuanto a manuales primero te recomiendo leer uno sobre programación en C: http://www.sisoft.ucm.es/Manuales/Lenguaje_C.pdf y después otro de programación para el PIC con CCS: http://www.bairesrobotics.com.ar/data/Manual_Compilador_CCS_PICC.pdf

      Responder
  5. tazma

    hola de c muy poco ahora llevo unos dias leeindo todolo que cae en mis manos y poco a poco voy conociendo el pic c el proteus yo conozco otros programas pero bueno lo que no me falta es interes y ganas de aprender por que a mi la electronica me apasiona mi problema y ahora pensaras ufff este es un caso perdido yo tengo 45 años y soy encargado en una importate empresa
    por falata de tiempo no puedo hacer cursos de electronica entoces voy avanzando como puedo
    salu2

    Responder
    1. admin Autor

      Creo que te has puesto el listón muy alto. Debes empezar por la base y a partir de ahí ir aprendiendo nuevas cosas porque sino te va a resultar muy duro dada la inmensa cantidad de conocimientos que debes adquirir. Por supuesto debes dedicarle tiempo y esfuerzo para poder avanzar. Conozco gente que me ha dicho que quiere aprender a programar microntroladores y a las dos semanas lo han abandonado por frustrarse y perder la paciencia. Antes de los dos tutoriales que te he comentado anteriormente te recomiendo que consigas el libro MICROCONTROLADOR PIC16F84. Desarrollo de proyectos ( http://www.pic16f84a.org/ ) dado que te va a dar una base suficiente para abordar cualquier proyecto con los microcontroladores PIC y empieza como si no se tuviesen conocimientos de microcontroladores.

      Responder
  6. tazma

    ok gracias a sin are a ver si con paciencia voy aprendiendo
    el caso es que yo qieria y quiero montar esa alarma para mi casa pero comotu dices quiero correr demasiado

    Responder
  7. tazma

    hola buenos dias ya tengo el libro y ya e programado el pic pero me surje una duda tu as montado un 16f628A y yo tengo un 16f84A es lo mismo ?

    ah gracias por la recomendacion del libro

    Responder
    1. admin Autor

      El 16f628a es una evolución del 16f84a (tiene más memoria, tiene un oscilador interno y tiene una USART) pero a efectos prácticos le va a servir igual.

      Responder
    1. admin Autor

      Ese modem si que vale. No podrás alimentar el circuito con el modem como en el artículo a no ser que abras el modem y veas de donde coger los 5 voltios, pero podrás comunicar el pic con el modem para hacer la llamada.

      Responder
    1. admin Autor

      Me dice en megaupload que el fichero no está disponible. Es mejor que lo hagas en imageshack.

      Vale el max232, pero tendrás que ponerle 4 condensadores electrolíticos y las conexiones del esquema que hay en el artículo ya no sirven, tendrás que buscar las correctas.

      Responder
    1. admin Autor

      Una pregunta, ¿Has encendido el modem y has medido esos dos puntos con un polímetro para saber si te dan 5 V.? Es que uno de ellos parece el jack de alimentación y esos modem suelen funcionar a 9V. o 12V.

      Responder
    1. admin Autor

      Perfecto. Ahora sólo necesitas el pic 16F628A, el transceptor DS275 y el conector RS232. ¿Has encontrado el DS275?, si no el MAX232 te vale aunque como te comentaba necesitas unos condensadores electrolíticos de 10 microfaradios. En el segundo dibujo de esta página viene cómo conectarlo: http://www.maicas.net/goofy/capc.htm Data in sería el PIN B1 y Data out el pin B2 del pic.

      Responder
  8. tazma

    ok gracias estoy esperando respuesta de un proveedor a ver sime consige el ds275 y ya le pedire los materiales para montarlo

    Responder
  9. tazma

    hola e ido a pasar el codigo a hex con el pic c y me da este error
    error 128 main.c line 4 1,9A #device required before this line

    1 errors 0 warnings

    que seria dispositivo necesario antes de esta linea que quiere decir

    Responder
  10. tazma

    si tengo los 2 en la misma carpeta
    otra duda si el codigo es para un pic 16f628 y usas un 16f6xx hay que cambiar algo donde pones las xxxx
    lo e cambiado por el nº de mobil al que tiene que ir la llamada
    y una ultima cosa donde compras los sensores

    Responder
    1. admin Autor

      ¿Y estan incluidos en el proyecto? Compruebalo en la pestaña files que hay a la izquierda del entorno de programación.
      ¿Que modelo estas usando? ten en cuenta que otro modelo de PIC puede no funcionar con el mismo código.
      El sensor sólo tienes que leer el artículo de nuevo para ver donde lo conseguí.

      Responder
    1. admin Autor

      Ambos te valdrían, pero tendrías que modificar partes del código (entre ellas el include <16f628.h> del fichero main.h) ya que puede ocurrir que algunas intrucciones no las soporte el pic.

      Responder
  11. tazma

    bueno ahora estare unos dias leiendo sobre el tema de los pic mientras me llega el material a ver si soy capaz de montarlo jeje seguiremos en contacto

    Responder
  12. tazma

    hola me surje una duda esto esta probado con un sensor no ?
    mi intencion es poner unos 6 o 7 sensores es lo mismo ?

    Responder
  13. tazma

    hola bueno ya tengo aqui el pic 16f628 y max 232 no e podido en contrar el ds275 ahra falata que llegen los sensores que eso tardara mas que cambios tendria que hacer en el codigo para que acepte mas sensores y el max 232

    Responder
  14. tazma

    hola bueno hoy e montado en una protoboard mi primer ejercicio un led con un interuptor ya se que no es mucho
    estoy a la espera de los sensores estan agotados

    Responder
  15. tazma

    hola posiblemente mañana tenga ya el los sensores pero solo pondre uno ya que no se ni soy capaz de engullir todo esto jeje salu2

    Responder
  16. tazma

    hola lo tengo medio montado pero a ver sime eschas una mano un cable del sensor pir va a la patilla n 5 del pic ok si no voy confundido la otra va a la 18 ? y el otro es gnd no? la protoboard la alimentamos de los 5v que sacamos del modem pero no nos da 9 v para el pir ?

    y por ultimo que conectas el cable del telefono al modem directamente
    ?

    salu2

    Responder
    1. admin Autor

      el PIR tiene 3 cables. Uno alimentación, otro masa (GND) y otro la señal, que va al pin 6. El PIR se debe alimentar entre 8 y 24 voltios si usas el que he puesto en al artículo, ¿cuantos voltios da la fuente de alimentación del modem?. Si el cable no va conectado al modem ¿como se supone que se hacen las llamadas?

      Responder
    1. admin Autor

      Pues en principio parece que está todo ok. ¿El micro es un 16f628a?. Por otra parte, si mides con un polímetro la señal del PIR ¿te pone 1 cuando detecta movimiento y lo mantiene un tiempo?

      Responder
  17. tazma

    voy a testear por que me parce que no llega suficiente alimentacion a la protoboard por otra parte el pir lo alimento con 9v y si el pic es un 16f628a

    Responder
    1. admin Autor

      Lo que me sorprende es que en un punto te dé 5 voltios y en otro 1.26, según las leyes de la electricidad en una misma línea siempre hay el mismo voltaje, y según veo los dos puntos están conectados en una misma línea.

      Responder
  18. tazma

    bueno pues e echo otra comprobacion y puede ser que elproblema sea del modem por que e conectado la fuente de alimentacion directa a la protoboard y a sin si que me llega los 5v bien a todos los puntos
    una cosa que pasa si en vez de llegar 5v llega 6 v

    Responder
  19. tazma

    hola pues estoy un poco desmoralizado ya no se que hacer e alimentado todo independientemente cada cosa el sensor con 12v la proto con 5v el mpdem con 9v pero nada hay alguna manera de verificar si esta todo bien conectado no se que se encienda un led o algo que mala es la ignorancia
    salu2

    Responder
  20. sofia77

    hola admin excelente tu proyecto!!!
    me encargaron un proyecto sobre alerta domotica a movil, esto es nuevo para mi me recomendaron utilizar los comandos AT, no se por dond empezar!!!!!!

    Responder
  21. dan77

    Hola buenas tardes, ante todo queria felicitarte por tu proyecto, bueno yo queria preguntarte si es posible enviar informacion de dos pic a traves de dos modem usb, es decir un pic se conecta a un modem, luego este por cable telefonico al otro modem y de alli al otro pic. Saludos

    Responder
    1. admin Autor

      Hola

      Pues modem usb no vas a poder usar con un pic normal, quizá con los PIC 18FXXXXX pero sería un infierno ya que tendrías que programar un controlador como el que usa windows para detectar los dispositivos pero para un PIC, y ya si se trata de un winmodem apaga y vamonos. En cambio si usas modems externos que se comunican por el puerto serie entonces no hay ningún problema. ¿Sabes más o menos como funcionan los modems y los comandos hayes?

      Responder
  22. dan77

    Bueno, apenas estoy investigando sobre los modem y no se mucho, el que tengo es el Trendnet TFM-560U con puerto USB, es externo. Con respecto a los comandos hayes voy a investigar sobre ellos, por otro lado yo he programado el pic 18f4550 y he enviado datos al pc con el driver para windows que proporciona microchip, pero no se como configurarlo con el modem

    Responder
    1. admin Autor

      Supongo que has usado el CDC, pero este no es suficiente para usar un modem usb, ya que es como si conectaras un modem usb a un modem usb, ambos son esclavos y necesitan un host. Para que funcionase tendrías que hacer que el PIC fuese un host con OTG o USB Embedded Host y además conocer que paquete de datos usa el modem usb (para inicializarlo, para ver su estado, para enviarle los comandos hayesm, etc) como haría el driver de windows. Creo que es bastante laborioso, pero si tienes ganas y tiempo puede ser un proyecto interesante.

      Responder
  23. dan77

    Bueno lamentablemente tiempo es lo que no tengo, pues es un proyecto de tesis para la universidad, pero en verdad si seria interesante hacer algo como lo que planteas, estoy tratando de conseguir un módem con puerto serial, para ver si logro hacer la comunicación con el pic…

    Responder
  24. dan77

    Ya consegui un modem serial, con la programacion que colocas de tu proyecto mas o menos puedo configurarlo, lo que no entiendo es como enviar datos a traves de el

    Responder
    1. admin Autor

      Bueno, en mi proyecto no enviaba datos, sólo hacía una llamada perdida. Pero si lo que quieres es enviar datos entonces te doy las pautas:

      Por el lado del que llama (suponiendo que usas respuestas no numéricas):
      mandas ATDTXXXXXXX al modem donde XXXXXXX es el número de teléfono al que quieres llamar.
      Si el modem remoto contesta el modem local dará un mensaje de texto CONNECT y pasará a modo de datos
      Si el modem remoto no contesta el modem local dará un mensaje de texto NO CARRIER
      Si el modem remoto comunica el modem local dará un mensaje de texto BUSY

      Por el lado del que recibe la llamada (suponiendo que usas respuestas no numéricas):
      Cuando el modem remoto llame, el local dará un mensaje de texto RING
      Para contestar (si no has usado el comando S1 para responder automáticamente) se debe enviar al modem el comando ATA
      Cuando los dos modems hayan sincronizado, el modem local dará un mensaje de texto CONNECT y pasará a modo de datos

      En el modo de datos ya puedes enviar y recibir toda la información que desees.

      Para colgar desde cualquiera de los dos modems envías a cualquiera de ellos la secuencia +++ cuando están en modo de datos y esperas unos segundos a que aparezca OK. Después envías a ese mismo modem el comando ATH y este colgará. El otro modem dará un mensaje de NO CARRIER.

      Responder
  25. dan77

    Gracias por esa informacion, voy a ponerme a programar el pic tomando en cuenta las pautas que haces y luego te cuento como me fue

    Responder
  26. dan77

    Una pregunta hay que configurarle al modem el numero telefonico, es decir hay que identificar al modem con ese numero para que se puedan comunicar como lo hacen las computadoras y sus deirecciones ip?

    Responder
  27. dan77

    Buenas noches, espero se encuentre muy bien… Bueno le cuento: he luchado con este modem hasta que por fin me pude comunicar con el pero aun tengo problema con la velocidad de transmision, primero trate de comunicarlo con respuestas no numerica y no me recibia informacion el pic, luego lo cambie a modo numerico y por fin pude comunicarme jeje, cuando la respuesta es ok en modo numerico envia 0, cuando da error envia 4 y cuando da no dial tone envia 6, lo cual me surge una duda que queria preguntarte cuando tu explicaste que si el modem no contesta en modo texto envia NO CARRIER esa respuesta en modo numerico cual seria?

    Responder
    1. admin Autor

      Te paso la lista:

      OK 0 Command executed, no errors
      RING 2 Ring detected
      NO CARRIER 3 Link not established or disconnected
      ERROR 4 Invalid command or command line too long
      NO DIALTONE 6 No dial tone, dialing impossible, wrong mode
      BUSY 7 Remote station busy

      Responder
  28. dan77

    Gracias por tu pronta respuesta, ahora si voy a programarlo para conectarlo a la red telefonica donde estoy haciendo las pasantias, ya que lo que he hecho hasta ahora es prender un led para confirmar la comunicacion… Luego te cuento como me fue. Saludos

    Responder
  29. victor

    buen proyecto una consulta
    if(valor != ‘\r’)
    {
    dato = valor;
    }
    cambias el valor de dato que logra ser diferente de A y el micro se va a dormir luego cierto…despues de la llamada debe de haber algun tipo de respuesta pero por que el valor que tomes tiene que ser distinde de \r ,,es este el retorno de carrier??
    agradeceria tu pronta respuesta gracias por compartir tu trabajo..

    Responder
    1. admin Autor

      El micro se va a dormir hasta que el sensor provoca una interrupción en el puerto RB0. Como puedes comprobar la variable dato sólo se usa en los estados ALARMA y LLAMADO; en ALARMA establece la variable con un valor A (que puede ser cualquier otra cosa, pero puse A de alarma), entonces pasa al siguiente estado, del que sólo saldrá cuando el usuario cuelgue o comunique, momento en el cual se guardará en dato el valor de la UART que no sea un retorno de carro, y como este será distinto de la A vuelve a ponerse en estado de detección.

      Responder
  30. Christian

    Muy bueno el proyecto. Tengo una duda con el modem ya que no recuerdo como era este servicio. Para poder usarlo ¿necesito tener una cuenta a internet? ¿necesito sacar una nueva linea de teléfono? ¿o simplemente la señal del modem la maneja el PIC?.
    Muchas gracias por el aporte.

    Responder
    1. admin Autor

      No, no es necesario tener internet. Con una línea telefónica es suficiente. Es como si marcases tu mismo los números desde un teléfono solo que automatizado.

      Responder
  31. JORGE

    Hola, primero que todo gracias por publciar el proyecto completo, es muy util. ahora tengo que hacer lo mismo, pero con un modem de un telefono celular, ¿sabe como hacer la conexion?

    Gracias

    Responder
  32. Eduardo

    Un proyecto muy bueno, muy atractivo y que despierta la curiosidad por hacer cosas interesantes.
    Manten este blog, se lo recomendaré a mis alumnos.

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *