Tienda | Foros | Blogs | EN |
 

GSM GPRS/SIM900/ARDUINO UNO funcionan pines digitales?

Seguir
Hola Colegas!!!

Sé que el título confunde un poco pero, estoy con este primer proyecto de arduino uno que he decidido hacer por cuenta propia y la verdad es que me está faltando algo. Desearía que me ayuden a sacar este proyecto adelante, haré las combinaciones que me pidan y chequeos que necesiten.


     Así es como tengo todo interconectado (excepto el pin9 ya que no lo necesito y no está programado en el código), alimento el módulo GSM con una fuente de 5Vdc/2A, por otro lado alimento al arduino con un cargador de celular por USB de 5Vdc/2A.
     El código que tengo lo saqué de este video: https://www.youtube.com/watch?v=bQIQPJFOJDs&index=7&list=PL2PAmy35emfJtXgjsOSvpZ83x9_dtLPty&t=132s
     Lo único que le modifique al código es el número de celular (el chip tiene crédito y lo he puesto por primera vez en un celular, luego lo puse en el módulo GSM).

Según el video y el archivo de conexionado que tiene en la descripción del video, se conectaba del arduino al módulo de relés de la siguiente manera:
He realizado los conexionados de la misma manera, he notado que al enviar mensaje de texto al módulo (por ej: A1B1C1D1 para que enciendan todos los relés), el led "status" del GSM hace un parpadeo (como que recibió el mensaje de texto), solo que no me activa ningún relé.

Espero de sus colaboraciones, Gracias!!!

P Lo del PIN9 realmente no tiene importancia, es solo para que encienda y apague automáticamente el escudo del GSM sin la necesidad de tener que estar oprimiendo el botón (pero la verdad es que por el momento no me es necesario). Quisiera saber si en realidad de los pines digitales salen "I" o "0" para que los relés activen.

Este es el código:

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

boolean started=false;
boolean sms_ver=false;

boolean ans1 = false;
boolean ans2 = false;
boolean ans3 = false;
boolean ans4 = false;

char sms_position;
char phone_number[20];
char sms_text[100];
char l1,l2,l3,l4;

int led1=4;
int led2=5;
int led3=10;
int led4=11;

int i;

void setup()
{
    Serial.begin(9600);

    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    digitalWrite(led1,HIGH);
    digitalWrite(led2,HIGH);
    digitalWrite(led3,HIGH);
    digitalWrite(led4,HIGH);

    Serial.println("\nGSM Shield testing.");
    if (gsm.begin(9600)) 
    {
        Serial.println("\nstatus=READY");
        started=true;
    } 
    else 
        Serial.println("\nstatus=IDLE");

    if(started) 
    {
       for(i=1;i<=20;i++)
       {
           sms.DeleteSMS(i);
       }
    }
};


void loop()
{
    String smsText = "";
    String smsText1 = "";
    
    if(started) 
    {
        sms_position=sms.IsSMSPresent(SMS_UNREAD);
        smsText1 = String(sms_position,DEC);
        int num_sms = smsText1.toInt();
        if (num_sms) 
        {
            Serial.print("SMS position:");
            Serial.println(num_sms,DEC);
            sms.GetSMS(sms_position, phone_number, sms_text, 100);
            Serial.println(sms_text);
            l1=sms_text[1];
            l2=sms_text[3];
            l3=sms_text[5];
            l4=sms_text[7];

            if (l1=='1'){
              digitalWrite(led1,LOW);
              ans1=true;
            } else if (l1=='0') {
              digitalWrite(led1,HIGH);
              ans1=false;
              }

            if (l2=='1'){
              digitalWrite(led2,LOW);
              ans2=true;
            } else if (l2=='0') {
              digitalWrite(led2,HIGH);
              ans2=false;
              }

            if (l3=='1'){
              digitalWrite(led3,LOW);
              ans3=true;
            } else if (l3=='0') {
              digitalWrite(led3,HIGH);
              ans3=false;
              }

            if (l4=='1'){
              digitalWrite(led4,LOW);
              ans4=true;
            } else if (l4=='0') {
              digitalWrite(led4,HIGH);
              ans4=false;
              }
        sms_ver=true;
        }
//Envio de mensaje     
  if(sms_ver) 
    {  
      if (ans1)
        { smsText = smsText + "FOCO 1 ON    "; }
      else
        { smsText = smsText + "FOCO 1 OFF    ";}
        
      if (ans2)
        { smsText = smsText + "FOCO 2 ON     "; }
      else
        { smsText = smsText + "FOCO 2 OFF    ";}

      if (ans3)
        { smsText = smsText + "FOCO 3 ON    "; }
      else
        { smsText = smsText + "FOCO 3 OFF    ";}

      if (ans4)
        { smsText = smsText + "VENTILADOR ON"; }
      else
        { smsText = smsText + "VENTILADOR OFF";}
        
        smsText.toCharArray(sms_text, 160);
        sms.SendSMS("11xxxxxxxx", sms_text);
        sms_ver = false;
    }
    
delay(1000);
  }
    
};


En "sms.SendSMS("11xxxxxxxx", sms_text);" en lugar de las ocho "X" va el número de celular

Saludos!



  • hace 1 año

    Avatar de felipe  antonio

    Comentarios.- A reserva de que venga un programador; le comento: Sr Ivan.- No soy programador, pero cuando vienen algunos estudiantes , para checar las salidas digitales, conectamos un led a la salida. de esta forma checamos el alto y bajo. si es para conectar el relay, hacen uso de un transistor aparte, esto porque la salida en cuanto a corriente es poca 20/30ma.- puede checar de cuantos voltios es el relay y cuanta corriente necesitan para accionar. saludos. felipe ascencio

  • hace 1 año

    Avatar de IVANLUUJOA

    Los relés son de 5vdc, no especifica cuanto es el consumo de la bobina pero, podría entonces poner un led a cada salida digital y ver si alguno enciende cuando mano la orden? A la salida de cada pin digital que pondría? el ánodo o el cátodo del led? Y la patilla sobrante donde la coloco?

    Gracias

  • hace 1 año

    Avatar de felipe  antonio

    En cuanto al relay puedes medir los ohms de la bobina, dividir los 5voltios entre los ohms y el resultado es la corriente que necesitas. De los leds , conectas una resistencia de 280/330 ohms del pin de salida al anodo, y el catodo va a tierra. te envio diagrama de un disco de la ley de ohms que usamos. saludos. Pd. no es la solucion, solo un aporte para tus mediciones.

  • hace 1 año

    Avatar de felipe  antonio

    Te mando diagrama de los datos que los estudiantes traen cuando necesitan que se coloque un transistor para accionar el relay.- incluso se puede usar un optoacoplador para llevar al transistor al punto de saturacion. No lo he comprobado pero podrias probar con una punta logica, pues esta detecta pulsos alto /bajos. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Coloqué en la salida 4,5,10 Y 11 del arduino (salidas digitales) una resistencia de 330 ohms con el ánodo de un led rojo y su cátodo lo conecte a GND.
    Sin enviar mjs ya el led permanece encendido, asique envié el mjs A0B0C0D0 (parpadeó el led del arduino "status" como que lo recibió) pero sigue el led encendido en todas esas salidas.

  • hace 1 año

    Avatar de felipe  antonio

    El voltaje de la fuente que usas creo yo, a reserva de lo que opines que es demasiado, pues tienes 5v 2amperes.- cuando la fuente que usan es de 5v 1 amper.- no crees que le afecte el amperaje de entrada. si ya tiene el optoacoplador puede quitar el optoacoplador y colocar un led, respetando la colocacion, y podras checar el encendido del led, con una orden debe prender y con otra debe apagar. tambien necesitaras una punta logica, paraa colocarlo en la salida sin el optoacoplador. .....

  • hace 1 año

    Avatar de felipe  antonio

    la parte del micro es independiente a la etapa de salida, la unica conexion es atravez del optoacoplador, por eso creo que puedes trabajar solo con una salida. y checar que tenga señal de entrada y pulso de salida. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    El módulo de relés es nuevo y viene también con leds (no le quitaré ningún componente). La fuente de alimentación podría ser de más amperaje, total el circuito utiliza la corriente que necesita. Problema sería si la fuente no brinda la corriente suficiente.
    Anteriormente comencé este tema con otras preguntas: https://yoreparo.com/electronica/arduino/preguntas/5902206/cargar-codigo-a-arduino-uno
    simplemente ahora las cuestiones son otras y por eso abrí un nuevo tema, pero si quieres darle un vistazo podrás ver los componentes reales que tengo (he subido fotos propias).
    Saludos!

  • hace 1 año

    Avatar de felipe  antonio

    Hay una foto donde estan los 8 relays, generalmente cuando trabajan a dos relays, salen tres cables. la tierraa, la alimentacion para los relays, y la conexion del optoacoplador. (el cable de señal).- saludos

  • hace 1 año

    Avatar de felipe  antonio

    Si ya tiene los transistores integrados en la placa, el secundario del opto tiene que ir a la base de un transistor, Revisa las conexiones de la placa, pues para llevar al punto de saturacion al transistor el relay ya tiene que tener voltaje, pues este alimenta al colector del transistor bajo prueba. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Tiene un pin de Vcc y un pin de Gnd, luego tiene desde el pin 1 al pin 8 para activar cada relé. El módulo funciona sin problemas (lo he probado independiente, separado del resto de los circuitos)

  • hace 1 año

    Avatar de felipe  antonio

    Conecta la resistencia de 300ohms, a la salida de la señal, solo que ahora conecta el anodo del led a tierra y el catodo a la resistencia. y pruebas . saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Coloque a la salida de la señal digital del arduino la R de 330 seguida del cátodo del led, y el ánodo a tierra.
    No enciende de ningún modo

  • hace 1 año

    Avatar de felipe  antonio

    Si las conexiones son correctas, y tiene señal de entrada. pregunta: podria ser el programa?.- Nosotros usamos un sensor de movimiento para la entrada y con eso a la salida es suficiente para prender el led, pues este solo consume 0.020ma.- El sabado vienen los estudiantes, y les preguntrare. por mientras puedes revisar el programa o protocolo si esta bien.- hay un programa para prender un solo led, si lo puedes encontrar y ejecutar seria bueno. saludos

  • hace 1 año

    Avatar de IVANLUUJOA

    Veré si encuentro alguno para encender 1 sólo led, mientras esperaré tu respuestas.
    A la salida de cada pin digital hay 5vdc con respecto a tierra, o sea un "I"

  • hace 1 año

    Avatar de felipe  antonio

    Primero conectamos la resistencia y el led, y despues aplicamos el voltaje, y el led prende , pero solo cuando el sensor detecta un movimiento. despues solo vuelve a quedar apagado.

  • hace 1 año

    Avatar de felipe  antonio

    El rdx y txd , pareciera ser el bus de datos con el arduino. puedes checar esos puntos con una sonda logica, o con un simple amplificador de audio, solo conecta a la entrada del amplificador un condensador de 47 nanos. antes de hacerlo tu que opinas. saludos

3 Soluciones propuestas

  • hace 1 año

    Avatar de IVANLUUJOA

    Como es un módulo de relés para arduino comprado, ya viene armado con transistores, optoacopladores, zéner, etc. A este módulo sólo se le debe alimentar con 5vdc y gnd, y hacer activar cada relé con las salidas digitales.

  • hace 1 año

    Avatar de IVANLUUJOA

    Mi conexión es como la imagen que subí en el tema, sólo que el cable del pin 9 (el que figura de color celeste), no lo he puesto porque no me es de utilidad.
    Luego de las salidas digitales del arduino (borne 4, 5, 10 y 11) van hacia cada pin del módulo de relés (in1, in2, in3 e in4).
    De un borne GND del arduino y del borne 5V, alimento el módulo de relés (vcc y gnd), éste módulo tiene un jumper puesto en VCC JD-VCC.
    Al arduino lo alimento con 5vdc/5A. Y al sim900 con 5vdc/5A.

  • hace 1 año

    Avatar de IVANLUUJOA

    Pero las placas estas separadas conectadas con cables, ya que no puedo montar una sobre otra

  • hace 1 año

    Avatar de felipe  antonio

    A comentarios del Maestro henmope, te envio una foto de como revisar , si estan bien escritas las variables del programa. saludos todos.

Iván puede mostrar el código completo quizás haya un error pues según dice Ud. éstos pines están 1 desde el comienzo
  • hace 1 año

    Avatar de IVANLUUJOA

    El código esta para descargar en la descripción del vídeo. Abrí el vídeo en YouTube y en la descripción tiene para descargar el código.

    Gracias, espero su respuesta

  • hace 1 año

    Avatar de henmope

    lástima que el sketch no tenga comentarios ,ésto ayuda a entenderlo sinembargo veo a mi pobre entender que todo está bien. Mi consejo, amigo es que pruebe con una punta lógica los diferentes estados de esos pines y su comportamiento con las diferentes órdenes.

  • hace 1 año

    Avatar de IVANLUUJOA

    Y como hago? Yo no se programar

  • hace 1 año

    Avatar de henmope

    Ivan Ud. dice: "alimento el módulo GSM con una fuente de 5Vdc/2A, por otro lado alimento al arduino con un cargador de celular por USB de 5Vdc/2A". las dos tarjetas deben ser alimentadas con una misma fuente el único circuito independiente es el de los focos que es conmutado por los relés

  • hace 1 año

    Avatar de henmope

    Ademas los cargadores de celular vienen generalmente de 400mA o 600 mA y es probable que resulte insuficiente para alimentar los relés, como el modulo GSM necesita 2A , debe hacerse a una fuente que genere al menos 2.5A
    En este punto necesitamos la colaboración de alguien como el amigo Felipe Antonio o alguien mas que le aconseje que fuente usar ya que el arduino de ser alimentado por el jumper de alimentación , necesita de 9 voltios y el GMS solo 5 voltios perdone la redundancia pero necesita una fuente con dos salidas una a 5v y otra a 9v.

  • hace 1 año

    Avatar de IVANLUUJOA

    Tengo de 5V 2A (una fuente)
    Tengo un cargador de celular de Carga rápida y me entrega 5v 2A también.
    Tengo fuentes de viejos módems y teléfonos que son de 12 y 15 Vac 1A y 1,6A

  • hace 1 año

    Avatar de henmope

    consiga una fuente ATX sea nueva ó de un computador desechado, cualquier cable amarillo genera 12 V perfecto para el arduino ( el trae un regulador de voltaje a 5v) y cualquier cable rojo entrega 5V para la tarjeta GMS por al amperaje no se preocupe que está sobrado. Solo debe conectar el único cable de color verde que hay en estas fuentes, con cualquier cable negro(gnd) para que la fuente encienda.

  • hace 1 año

    Avatar de IVANLUUJOA

    Sacaré la de mi computadora para probar.
    El conexiónado entonces lo dejo tal cual lo tengo? Y el módulo de relés de donde lo alimento?
    Te comento si noto algún cambio.

  • hace 1 año

    Avatar de henmope

    Tenga en cuenta que debe alimentar el arduino por el jacck que está junto al regulador, en cuanto a los relés creo que el coil es a 5 v entonces al cable rojo gnd al negro.
    Invito al amigo Felipe Antonio a darnos su opinión cualquier aporte suyo o de otro amigo es muy importante para todos Gracias

  • hace 1 año

    Avatar de IVANLUUJOA

    Acabo de hacer las conexiónes con la fuente de mi computadora, enciende el GSM con 5Vdc, el ARDUINO con 12Vdc y el MÓDULO DE RELÉS con 5Vdc.
    Ya al conectar todo, el relé 1 y 3 que son los que tengo conectados por el momento permanecen encendidos, envié el mensaje de texto A0B0C0D0 (parpadeó el led de status del GSM al recibir el mensaje) pero siguen los relés activados.

  • hace 1 año

    Avatar de IVANLUUJOA

    Agregué el código en el tema (arriba de todo)

  • hace 1 año

    Avatar de felipe  antonio

    Maestro Henmope, Sr Ivan. un gusto saludarlos y gracias por permitirme opinar.- --El sr Ivan comenta que el modulo de reles con 5 voltios. el voltaje esta bien, pero cuanta corriente necesitamos,estos estan en paralelo, asi que el voltaje es correcto pero la corriente tiene que ser mas. asi que debemos medir la resistencia de un relay, conociendo los ohms dividimos el voltaje 5vcd entre los ohms y sera la corriente que necesitamos para uno, la corriente se ira duplicando cuantos mas relays tengamos. esto para salir del modulo. saludo cordiales .

  • hace 1 año

    Avatar de IVANLUUJOA

    Felipe buenas tardes! La resistencia de la bobina de cada relé es de 65 ohms, no entiendo por que tanto incapié en esto siendo que la fuente ATX suministra bastante corriente, además de que no estoy usando los 8 relés, estoy usando solo 2.
    Que más puedo hacer? Para mí que el tema esta en el código porque se mantiene siempre encendido cada relé. Pero como no sé de programación, la verdad es que no puedo hacer nada, solo edité el número de celular.

    Gracias! Saludos!

  • hace 1 año

    Avatar de felipe  antonio

    Entonces la corriente total es de 0.600 ma . asi que con 1 o 2 ampres es suficiente, no creo sea la placa, te envio diagrama de una punta logica. uno de los tecnicos comenta que aun sin la placa tiene que haber salida de pulsos, por otro lado que aun cuando el programa este bien, el conflicto pudiera deberse a la escritura, pues los puntos, los corchetes, los espacios, todo trabaja en conjunto. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Gracias Felipe! Espero el diagrama para poder probar lo que me sugieres.

  • hace 1 año

    Avatar de IVANLUUJOA

    Bien, realizo ese circuito con los componentes que allí figuran y luego lo alimento con 5vdc de la misma fuente de la computadora. Que es lo que debo hacer con la punta de prueba? colocarla en cada salida digital del arduino?
    Que comportamiento me dice que esta bien ?

  • hace 1 año

    Avatar de felipe  antonio

    El circuito se alimenta de 5vcd.- nosotros le colocamos una pila de 9v y un 7805 asi no dependemos de la fuente del circuito.- lo colocas en la salida del arduino y deben titilar alternadamente los leds. eso significaria que tienes un pulso alto y uno bajo. incluso lo puedes colocar en la salida del modulo de la tarjeta. si tienes un multimetro analogo , tenemos otra sonda la de video , que tambien puedes usar.lo que vamos buscando es cubrir el funcionamiento electronico, ya la parte del programa y sus conflictos sera interesante. porque una vez que este listo, creo yo tambien hago el mio.

  • hace 1 año

    Avatar de IVANLUUJOA

    Que bueno, me alegro que nos sirva a todos, yo soy electromecánico pero hace unos años me aficcioné con la electrónica.
    No poseo instrumentos análogos, asique me limitaré a realizar el circuito que propones con fuente externa como una batería de 9vdc.
    Cuales leds deben titilar alternadamente? Esto lo realizo sin que este conectado el módulo de relés, verdad?

  • hace 1 año

    Avatar de felipe  antonio

    El modulo de reles no es necesario, pues solo buscamos comprobar el tren de pulsos. dependiendo de la frecuencia, podras obsservar que lo hacen alternadamente, y algunas ocasiones pareciera que los dos estan prendidos. te voy a enviar un amplificador a 9 voltios que tambien usamos como indicador de pulsos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Bueno, dejame corroborar si tengo los componentes entre mis reciclajes. Si tengo, apago la pc y realizo la prueba.

  • hace 1 año

    Avatar de IVANLUUJOA

    Ese trimmer que aparece en el esquema con el LM358 y la punta de prueba, que es? Un potenciómetro de 5k? Que debo hacer con él?

  • hace 1 año

    Avatar de IVANLUUJOA

    Te cuento mientras tanto que, para R5 y R6 tengo resistencias de 120 pero una de 1/4W y la otra de 1/2W.
    La R7 de 3.3M la puedo hacer con una de 2.2M en serie con una de 1M (sirve?) Me pasa lo mismo que en lo comentado anteriormente (son de distintas porencias).
    La R1 de 12K puedo ver como llego a ese valor jugando con series o paralelos.
    Y necesito saber si los trimmer son potes o reóstatos. Creo entender que debo regularlos a los voltajes 2v y 0.8v.

    Gracias

  • hace 1 año

    Avatar de felipe  antonio

    Los watts de las resistencias no son criticos, en cuanto a los potenciometros son de los pequeños, y estas en lo correcto en cuanto a que hay que ajustar el voltaje, el centro de uno va a 2v y el centro del otro va 0.8v.- si tienes alguna tv , coloca las puntas en clock y data y te daras cuenta de la intermitencia de los leds.

  • hace 1 año

    Avatar de felipe  antonio

    para la punta de prueba , puedes usar el mismo cable que el multimetro, o cualquier otro cable que tengas a la mano. ( un lapicero, boligrafo etc).-

  • hace 1 año

    Avatar de felipe  antonio

    Una vez que el centro de cada control quede ajustado no lo vuelves a ajustar, solo lo metes en una caja y solo saldran los dos cables , uno de tierra y el otro entrada de la señal.

  • hace 1 año

    Avatar de IVANLUUJOA

    Subo imagen del circuito que me pasaste (esta en proceso en una mini protoboard). El cable rojo y negro que vez colgando son para alimentarlo con 5vdc (desde un cargador) y el cable verde sería la punta de prueba.
    Lo único que me falta es una R de 12K y otro pote de 5k.
    El R2 (trimmer de 5K) que asumo que es un pote, su conexiónado como es ? Sería pin central hacia pin 5 del lm358, un extremo del pote a GND y el otro extremo hacia la R de 3.3M?

    Gracias

  • hace 1 año

    Avatar de felipe  antonio

    La colocacion del potenciometro no es critico, lo importante es el pin central. estas en lo correcto, un extremo a tierra, el centro al pin 5 y el otro extremo a la de 3.3 y 12k ohms.

  • hace 1 año

    Avatar de IVANLUUJOA

    Ya hice la prueba, al encender el circuito de "punta lógica " se mantiene encendido el led rojo. Luego procedí a tocar con la punta lógica cada salida digital del arduino, no obtuve ninguna variación. Siempre queda encendido el led rojo de circuito "punta lógica ". En esta ocasión no envié ningún mensaje de texto al gsm

  • hace 1 año

    Avatar de felipe  antonio

    Si las conexiones son correctas, tendras que hacer un proyecto mas sencillo solo para probar la tarjeta. saludos-

  • hace 1 año

    Avatar de felipe  antonio

    Sr Ivan.- ayer hable con uno de los estudiantes, comentan : que para que pueda uno checar las salidas, en alto y bajo, el programa tiene que ser uno que tenga leds y que el programa sea que los leds prendan secuencialmente. de otra manera no tendremos pulso alto y bajo. pues para que los relays mantengan los contactores cerrados necesita la salida alta, esto es el voltaje que enciende el led de los optoacopladores. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Gracias por la ayuda, pero no sé programar. Salvo que encuentre el código en alguna página

  • hace 1 año

    Avatar de IVANLUUJOA

    Vi un tutotial y pude programar para que un led ubicado en el pin digital 13 encienda y apague automaticamente cada 1 segundo, por lo que la salida de pin digital estaría bien. Podría modificar el código para cada pin, pero veo que no es ese el problema. El problema debe estar en el código, en los mensajes de textos que envío al gsm que no figuran en el código. No lo sé

  • hace 1 año

    Avatar de felipe  antonio

    Uno de los estudiantes comenta que: al escribir el programa tienes que guiarte por el (editor ) para comprobar que este bien escrito . Donde esta el foco 1, hasta el foco 3; piensa que podria tener un error, pues en la parte de abajo dice: ventilador on, ventilador off. Estos no tienen tanta separacion del punto y coma que indica punto y aparte para la tarjeta. Por otro lado , si no es la placa del arduino, entonces conecta la punta logica al TXD o RDX, y checa si tiene alguna salida cuando le mandas mensaje. Si esto ultimo diera positivo, seria un conflicto del programa. saludos.

  • hace 1 año

    Avatar de IVANLUUJOA

    Haré la prueba pero cuando envío mensaje el arduino hace parpadear el led de estatus, asique lo recibe. He enviado mensajes y observado que suceda siempre lo mismo.

    Seguro es del programa, me fijaré a ver que hago

  • hace 1 año

    Avatar de felipe  antonio

    Usa el "editor" que (quien sabe donde esta ) para comprobar que este bien escrito. comentan. que al usarlo les va marcando el error,. si hay un espacio de mas, o falta el punto final ( que es el punto y coma) .Por otro lado si hay un conflicto y el programa esta bien escrito, podria ser el bus de datos, esto es la frecuencia a la cual esta uno y a que frecuencia esta el otro. saludos.

  • hace 1 año

    Avatar de henmope

    Ivan, está seguro de haber copiado el código tal cual , porque un error puede variar el sentido de lo escrito por ejemplo: if (l4=='1'){ //compara si l4 es igual al caracter 1 del código internacional ascii.
    if (l4==1){ //compara si l4 es igual al número decimal 1.
    if (l4='1'){ //afirma que l4 es igual al caracter 1 del código internacional ascii.
    if (l4=1){ //afirma que l4 es igual a número decimal 1.
    igual sucede con los diversos signos como () {} []
    además fíjese en todos y cada uno de los ; son importantísimos generalmente si hay un error el programa no deja compilar, pero puede sucede

  • hace 1 año

    Avatar de henmope

    disculpe se me bloqueó el compu, decía que puede compilar por tanto asumimos que el código está bien pero el resultado no es el que esperamos, revise muy bien todo y nos cuenta

  • hace 1 año

    Avatar de IVANLUUJOA

    Exacto, compila bien. El código, estaba en el Link del vídeo en extensión .ino.
    Lo único que hice fue cargarlo y modificarle el número de celular

  • hace 1 año

    Avatar de IVANLUUJOA

    Descargue el software sublime text que tiene una plataforma amigable, y además ayuda a completar los campos luego de escribir un comando. Intenté ver algún error en el código pero como no se programar, no encontré nada raro.

  • hace 1 año

    Avatar de IVANLUUJOA

    Otra cosa es que yo envío como mjs de texto A1B1C1D1 y esas letras no las encuentro en el código. En la parte final del código donde dice "....smsText=smsText...." no debería modificar algo?

  • hace 1 año

    Avatar de henmope

    Ivan, en este trozo de código:
    l1=sms_text[1];
    l2=sms_text[3];
    l3=sms_text[5];
    l4=sms_text[7]; lo que dice es que L1 es igual al cracter que est'a en la posición 1 de la línea de texto del mensaje, L2 al que está en la posicion 3 etc etc entonces el mensaje debe decir como Ud. lo manda es correcto si empieza A1B1C1D1 pues la A está en la posicion 0 y los 1 están en las posiciones 1,3,5 y 7 pero si antes Ud. coloca otro caracter o un espacio ya cambian estas posiciones causando un error.

  • hace 1 año

    Avatar de henmope

    lo que sigue en el código compara L1 (que ya tiene el valor de '1' o '0' ) y apaga o enciende el led correspondiente, la razón por la que los leds que Ud. conecta estan encendidos es porque en el void setup esta esa orden: pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    digitalWrite(led1,HIGH);
    digitalWrite(led2,HIGH);
    digitalWrite(led3,HIGH);
    digitalWrite(led4,HIGH);

  • hace 1 año

    Avatar de henmope

    entonces cuando encuentra que L1 es igual a '1' (caracter tipo char por eso las comillas simples) apaga el led
    if (l1=='1'){
    digitalWrite(led1,LOW);
    este es mi pobre comentario espero que sirva de algo.

  • hace 1 año

    Avatar de IVANLUUJOA

    Gracias, veré si encuentro a alguien que pueda ayudarme un poco más.
    A modo de comentario; te cuento que también probé cambiandole la frecuencia de comunicación a las placas (en el código) poniendo 19200 en vez de 9600, pero no cambio en nada.

Colegas!!

He estado probando distintos métodos, conexiones, códigos y logré que funcione correctamente (pero tiene unos pequeños defectos). Encontré un código que al enviar un mensaje de texto con la palabra ON activa un relé con el pin digital 12, luego con la palabra OFF lo apaga, y con la palabra STATE debería devolverme un mensaje que diga " Lamp is ON" o " Lamp is OFF", este último comando no me ha funcionado. Los primeros dos sí pero cuando apago el GSM y el ARDUINO mediante un swich de un prolongador de tomas y luego lo vuelvo a encender, a veces sigue funcionando como corresponde y otras veces no (por más cantidad de veces que envíe mensajes no reacciona). Cuando no reacciona, noto que al GSM el mensaje le llega puesto que titila su led de status al recibir el mensaje, pero no me acciona el relé, siendo que estoy controlando con multímetro fijo que le lleguén 5Vdc al módulo de relés.
El arduino lo estaba cargando con 12Vdc/800mA y el gsm con 5Vdc/2000mA, como aveces funcionaba y aveces no, cambie cableados y hasta alimente directamente con fuente ATX a cada placa por su conector jack, sigue haciendo lo mismo, aveces funciona y aveces no. Asique empecé a cambiar en el código, el pin digital de salida, pero sigue haciendo lo mismo.
Subo el código que estoy usando + el conexionado. Luego de resolver esto obviamente la idea es lograr usar cada relé independientemente.
Saludos!

CÓDIGO:

/*
 * Complete Project Details
 */

// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, ;

// Variable to store text message
String textMessage;

// Create a variable to store Lamp state
String lampState = "HIGH";

// Relay connected to pin 4
const int relay = 4;

void setup() {
  // Automatically turn on the shield
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
  
  // Set relay as OUTPUT
  pinMode(relay, OUTPUT);

  // By default the relay is off
  digitalWrite(relay, HIGH);
  
  // Initializing serial commmunication
  Serial.begin(19200); 
  SIM900.begin(19200);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if(SIM900.available()>0){
    textMessage = SIM900.readString();
    Serial.print(textMessage);    
    delay(10);
  } 
  if(textMessage.indexOf("ON">=0){
    // Turn on relay and save current state
    digitalWrite(relay, LOW);
    lampState = "on";
    Serial.println("Relay set to ON");  
    textMessage = "";   
  }
  if(textMessage.indexOf("OFF">=0){
    // Turn off relay and save current state
    digitalWrite(relay, HIGH);
    lampState = "off"; 
    Serial.println("Relay set to OFF");
    textMessage = ""; 
  }
  if(textMessage.indexOf("STATE">=0){
    String message = "Lamp is " + lampState;
    sendSMS(message);
    Serial.println("Lamp state resquest");
    textMessage = "";
  }
}  

// Function that sends SMS
void sendSMS(String message){
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT + CMGS = \"XXXXXXXXXX\""); 
  delay(100);
  // Send the SMS
  SIM900.println(message); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000);  
}



  • hace 1 año

    Avatar de IVANLUUJOA

    Donde hay una carita al principio al lado del 7, va un 8. En las demas caritas de guiño va la palabra ON, solo que acá me lo toma como emoji y la verdad no quería espaciar y que piensen que esta mal el código.

  • hace 1 año

    Avatar de IVANLUUJOA

    Tampoco va un ON, perdón (subo fotos mejor)

  • hace 1 año

    Avatar de felipe  antonio

    Sr Ivan. Su perseverencia nos va a rendir frutos, a todos lo que esperamos ver finalizado el proyecto suyo , que sera de todos. Es un gusto saber cuanto a logrado. Le agradecemos los datos compartidos. Creo ya esta ud en la etapa final de ver todos los focos prendidos. Estamos al pendiente. Saludos cordiales.

  • hace 1 año

    Avatar de IVANLUUJOA

    He encontrado el problema del porque al apagar y encender los módulos ya sea, cortando la alimentación general de ambos (porque estoy usando una tetrapolar para dos GND, un +5V y un +12V que salen de la fuente ATX de mi pc) o presionando el botón del arduino, o apagando y encendiendo el GSM desde su swich, etc, etc (todas las combinaciones posibles).........y el problema es: "Mi ansiedad", luego de que se encienden los módulos, el GSM mantiene encendido su led "Status" y comienza a parpadear rápido el led "Netlight", luego deja de parpadear a esa velocidad y comienza a hacerlo cada 4 segundos

  • hace 1 año

    Avatar de IVANLUUJOA

    ....es ahí cuando se dice que "se conecto a la red" o "señal de teléfono", y es ahí cuando veo que comienza a parpadear más lento que aprovecho a enviar el mensaje "ON" para que accione el relay. No solo que no lo hace, sino que por más que envíe un mensaje luego de 10 minutos, no va a funcionar, sí va a recibir el mensaje pero no hará nada. El tema esta en que cuando comienza a parpadear lentamente, lo deje unos segundos parpadear tranquilo (5 veces que parpadee lento es suficiente).

  • hace 1 año

    Avatar de IVANLUUJOA

    Como no es el único proyecto que tengo actualmente, lo iré haciendo a modo parcial, ya que tengo unos tableros eléctricos que terminar, unos circuitos electrónicos para hacer las placas, fotocélulas, amplificador de audio, etc....nombro algunas cosas que tengo a medias pero que las voy llevando de a poco adelante. Además del trabajo, la familia, etc. Asique al menos esto ya queda terminado para accionar 1 relay y sin la comprobación de su estado.
    Pero ni bien avance, volcaré información.

  • hace 1 año

    Avatar de IVANLUUJOA

    Por cierto la R13 del GSM debe soldarse "puentearse", porque el código en el arduino se encarga de encender el módulo gsm sin tener que intervenir uno (hablo de no tener que presionar el switch tipo pulsador)

  • hace 1 año

    Avatar de felipe  antonio

    Las tantas horas con un cuaderno, lapiz y no despegarse de la computadora, definitivamente a dado resultados. Por otro lado a su "problema de ansiedad" no se preocupe, en un alto porcentaje , ya es algo comun y natural entre los tecnicos. Es un gusto saber que lo ha logrado. saludos cordiales.