Go Down

Topic: Encender LED con Arduino NANO y GSM SIM800L (Read 359 times) previous topic - next topic

ray9043

Buen dia, soy nuevo en el foro, me presento, Raymundo Vega de Hermosillo, Sonora, Mexico.

Tengo bastante tiempo buscando información y programas para realizar un proyectito de una Alarma con GSM, tengo adelantado bastante pero me atore un buen en el apartado del GSM y los mensajes.

Después de mucho probar y probar y probar infinidad de programas, ninguno me resulto (busque en ingles y español en infinidad de foros) y me di a la tarea de escribirlo con partes de diferentes programas y probar hasta lograr el resultado deseado, asi que si alguien esta utilizando el mismo modulo o parecido y quiere realizar un proyecto similar les presento mi código.

Para empezar, hay que revisar puntos cruciales para hacer funcionar esto.

Fuente de energía del modulo: Yo lo tengo conectado para pruebas con un simple diodo de uso común, para que baje el voltaje aprox. a 4.3 volts, tomando 5v de una fuente de computadora. Si no tomamos la  energía de una fuente de min. 2 amperes, el modulo solo contestara bien a los comandos de configuración, pero al momento de querer mandar un mensaje, leerlo o realizar una llamada, simplemente no lo hara. Incluso pudiera ser que ni siquiera se conecte a la red.

Puerto serial: Hay que conectar el modulo a un puerto Serial por software, y solo a pines que puedan ser utilizados para este fin, yo lo tengo con SoftwareSerial a un Arduino NANO a los pines 10 y 11.

Pines del modulo: VCC conectado a 4-4.3 voltios 2 amp., GND de la fuente utilizada debe ser conectado junto al GND del Arduino (hay personas que se les olvida este punto), TX al RX del Arduino, RX al TX del Arduino. Listo !  No hay que conectar nada al RST.


Después de tener listo el hardware hay que tomar en cuenta algunos puntos del código, los comandos AT. Para que funcione siempre hay que mandar Retorno de carro y Nueva linea, con las letras \r\n.

Para empezar lo primero que hay que mandar al modulo es la palabra AT, cuando hacemos esto el modulo activa la función Auto Baud Rate y la ajusta automáticamente al que estemos utilizando, recomiendo 9600.
Después hay que decirle al modulo que escribiremos en modo de texto simple con la funcion AT+CMGF=1.
Después hay que definir las opciones de aviso de mensajes entrantes con la funcion AT+CNMI=1,2,0,0,0. En bastantes foros vi otras opciones pero esta es la que me funciono, ya que al llegar el mensaje este sale directamente por el TX del modulo sin ni siquiera solicitarlo, solo hay que agarrarlo en una variable.

Vi en varias partes que con la funcion AT+CMGR=1 pediamos los mensajes, pues no sirve, ya que los mensajes al tener notificaciones estos salen directamente por el TX y el modulo no los guarda en ningun lado. Para guardarlos hay que apagar las notificaciones con el comando AT+CNMI=0,0,0,0,0 perooo hay que usar el comando AT+CMGL para recuperarlos pero no me funciono. Asi que no hay que utilizarlo.

Tambien vi que usan las variables char para comparar los datos del mensaje. NO funciona. Hay que utilizar la funcion readString para poder guardar el texto completo y despues analizarlo con la funcion indexOf para encontrar la palabra deseada.

Otra cosa muy importante, al guardar el texto en la variable String, solo hay que hacer eso dentro del if, nada mas, por que si agregas otro comando dentro, pienso son problemas de velocidad, el texto se pierde y solo aparecen simbolos y caracteres sin sentido. En este paso solo hay que preguntar si hay datos en el SoftwareSerial y si los hay guardarlos en la variable String. Ya con la variable podemos hacer las comparaciones y demas pero FUERA del if.

Sin mas les dejo el codigo que me funciono.
NOTA estoy trabajando para que solo funcione el activado con ciertos numeros de celular que yo agregare, por el momento funciona con cualquiera y no se por que, pero si agregas alguna clave despues del On o utilizas una palabra "secreta" solo funcionara si mandas la palabra "secreta".

Cuando tenga terminado el proyecto subire tambien el codigo, funciona con un sensor pir DSC modificado con un transmisor de RF de 433 MHZ. En este codigo ya implemente el envio de mensajes y llamadas del modulo GSM.



ray9043

Pues con la novedad que ya hice funcionar el código completo, pero me surgió un grandisimo problema.

Por no tener cuidado y tener todo en el aire haciendo pruebas, pues que se sueltan los 5 Volts y le entran directo al modulo! Adiós modulo y a esperar el repuesto  :(

Antes de terminarlo estuve batallando con un conflicto que se genera a usar las librerías SoftwareSerial y VirtualWire juntas, ahí por si quieren utilizarlas juntas en algún sketch tomen en cuenta que la librería VirtualWire utiliza los puertos 10, 11 y 12 por default, los cuales son los mas comúnmente utilizados para Rx y Tx al usar SoftwareSerial. Un simple cambio de pines y woala.

Posterior a chamuscar el modulo el código funciono perfectamente, envías el mensaje "On 12345" y   "Off 12345" para encender y apagar la alarma. Si esta activada enciende el led 13, y pasa a un subprograma llamado alarma el cual revisa si el sensor PIR envía el dato de activo o batería baja. Si el sensor se activa la alarma llama al numero previsto y envía un mensaje de texto. Si la batería del sensor PIR se baja, también envía un mensaje avisando.

Les dejo el código por si alguien quiere utilizarlo, me falta subir el codigo del transmisor que va en el sensor PIR, tambien faltaría implementar una salida para una sirena con diferente numero de tonos para diferenciar el activado, desactivado y la alarma en si.

Les debo las fotos, las subiré en cuanto las tenga en el pc, también estoy trabajando en la fuente ininterrumpida para este sistema, basada en una pila de ácido de 12V.


PD. Si lo quieren utilizar no olviden bajarse las librerias SoftwareSerial y VirtualWire!!

ray9043

Código para el transmisor.

La batería que uso para el sensor es un PowerBank de esos para cargar celulares! Después de algún tiempo quebrando me la cabeza pensando como alimentarlo se me ocurrió esta idea y funciono perfectamente, con los leds indicadores dura aprox. 1 semana y media y después a cargar. Después de las pruebas los quitare haber cuanto dura, y posiblemente después, implementar algún tipo de standby para que dure mas la batería.

Por lo cual al ser una fuente Boost la pila es de 3.7 volts y pueden ser leídos directamente por un pin analógico del Arduino.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy