La revista italiana Open Electronics presentó hace poco un shield GSM para módulos GSM/GPRS de SIMCom, Quectel, Fibocom y otros fabricantes, pensado para proyectos con Arduino que necesitan conectividad celular. Ahora publicó su primera aplicación práctica. El proyecto replica el funcionamiento del TDG133, un control remoto GSM bidireccional que la misma revista publicó en su número 148, de julio de 2010, y que maneja dos salidas de relé y dos entradas de nivel de voltaje.

Para la ocasión, los autores desarrollaron un conjunto de comandos que configura las funciones básicas tanto por SMS como desde el monitor serie del IDE de Arduino. La electrónica y el firmware se basan en la placa Arduino Mega 2560 o en la Fishino Mega 2560. La elección responde a la memoria Flash y SRAM que necesita la aplicación, pero sobre todo a la cantidad de pines de E/S libres.

El Mega 2560 tiene buen soporte en el shield GSM y es la única placa que entrega todas las E/S que pide el proyecto. En concreto, la aplicación requiere:

  • dos E/S para las salidas digitales en la versión básica, aunque el proyecto admite hasta ocho salidas y por eso reserva ocho líneas;
  • dos E/S para las entradas digitales, configurables como activas en alto, activas en bajo o por cambio de estado (en la práctica quedan disponibles hasta ocho líneas);
  • para los LED indicadores se usan los que ya trae la placa de demostración GSM.

¿Qué hacía el TDG133?

La lógica de funcionamiento toma como referencia el TDG133, y replica sus funciones hasta donde lo permite el hardware disponible. El TDG133 es un módulo de telecontrol bidireccional que permite revisar a distancia el estado de dos salidas de relé, en modo biestable o monoestable, mediante SMS que llevan una contraseña. También lee el estado de dos entradas optoaisladas.

Los comandos pueden venir de números guardados en una lista de hasta ocho teléfonos. A esos números el equipo les envía SMS y llamadas de voz cuando considera que se activó alguna entrada digital, según lo que se haya fijado en la configuración. El TDG133 también puede funcionar como abridor de portones, un modo al que se pueden asociar hasta 200 números de teléfono.

Diagrama de bloques del hardware

Plano de montaje de la placa prototipo del shield GSM de control remoto

Con lo que hacía el TDG133 claro, queda definido lo que tiene que hacer este proyecto, que emula ese sistema con Arduino o hardware compatible. El diagrama de bloques de la figura 1 muestra de qué se compone la electrónica del control remoto basado en el shield GSM.

Igual que el TDG133, este control remoto ofrece dos entradas digitales y dos salidas de relé. El hardware deja disponibles hasta ocho entradas digitales, activas en alto o en bajo, y ocho salidas para manejar hasta ocho relés. Sin embargo, el firmware actual del Arduino Mega 2560 solo gestiona dos entradas y dos salidas, así que quien quiera usar las ocho líneas tendrá que modificar el código.

El diagrama deja ver la lógica con que se armó la aplicación.

  • La placa Shield Telecontrollo, marcada con un cuadrado verde, va montada sobre el shield GSM, que a su vez se conecta al Arduino Mega 2560.
  • La Shield Telecontrollo entrega hasta ocho entradas digitales. Con puentes en la placa se elige si cada entrada es activa en alto, caso en que se inserta el pull-down, o activa en bajo, caso en que se inserta el pull-up. El evento se genera llevando la entrada a GND o a +5 Vcc, y para eso sirven los cables de puente de laboratorio de siempre, como los de código "7300-JUMPER50".
  • La Shield Telecontrollo entrega hasta ocho salidas digitales para manejar las placas de dos, cuatro u ocho relés, todas con bobina de +5 V. Los productos de referencia son "2846-RELAY2CH", "2846-RELAY4CH" y "2846-RELAY8CH", que también se conectan con cables de puente.
  • La Shield Telecontrollo se puede alimentar desde el Arduino Mega 2560 por un cable USB tipo B o desde el conector micro USB del shield GSM, con un cable micro USB.
  • La conexión por USB tipo B también sirve para programar el Arduino Mega 2560 y para enviar los comandos de configuración desde el monitor serie del IDE de Arduino. Por ese mismo monitor se recibe información sobre los eventos detectados, el envío y la recepción de SMS, y otros datos.
  • Para ver los comandos AT que el Arduino Mega 2560 le envía al módulo GSM se usa el conversor USB/TTL de siempre (código FT782), conectado al conector dedicado del shield GSM. El FT782 también puede llevar 5 Vcc de alimentación al shield GSM.

Esquema eléctrico

El esquema del shield GSM ya salió en el número 231 de la revista, así que aquí solo se describe el circuito de la Shield Telecontrollo. Es un circuito muy simple. Toma las conexiones del puerto PA0÷7 del Arduino Mega 2560 y, mediante puentes en la placa, las reparte para manejar las líneas de salida que activan los relés. También toma las señales del puerto PL0÷7 del Mega 2560 para las líneas de entrada. Todas estas líneas están en el conector de 36 pines (18 pines por 2 filas) del Arduino Mega 2560, al que también van conectados los seis LED de uso general montados en la Shield Telecontrollo (puerto PC0÷7).

En las entradas digitales se puede fijar si se activan con nivel lógico alto o bajo. El modo se elige con los puentes J1÷8. Si el puente va en la posición 1-2 se inserta la resistencia pull-up de 10 kohm y la entrada queda activa en bajo. En la posición 2-3 se inserta la resistencia pull-down de 10 kohm y la entrada queda activa en alto.

Para cada entrada hay un punto de contacto en el conector CN5, que se usa con cables de puente para activarla, llevándola a +5 V si es activa en alto o a GND si es activa en bajo. Además hay dos conectores más de 8 polos, CN1 y CN2, que traen las líneas de +5 Vcc y GND respectivamente. Así, cada una de las ocho entradas tiene su punto de +5 Vcc o de GND para simular el cambio de estado.

Las salidas van simplemente al conector CN4, junto con las líneas de +5 V y GND que alimentan las placas de relés auxiliares de esta aplicación.

Para completar la placa de demostración, los autores sacaron también las líneas libres de los demás conectores del Arduino Mega 2560, para que el usuario final pueda usar las funciones asociadas a ellas. Las líneas que ya ocupa el manejo de la placa GSM no se sacan.

Para ampliar sus usos, el PCB incluye una zona de prototipado donde el usuario puede montar los componentes que quiera para sus propias aplicaciones. La separación entre pads es la habitual de 2,54 mm. La zona ofrece más de 315 pads individuales sin conexión, más un grupo más chico de pads que traen las líneas de +3V3, +5 V y GND.

Diseño del PCB de la Shield Telecontrollo.

Construcción

Para el proyecto hay que preparar la Shield Telecontrollo, es decir, fabricar su circuito impreso a partir de las pistas del lado cobre, que se descargan junto con los archivos del proyecto. Al montar los pocos componentes conviene partir por las resistencias SMD 0603, seguir con los conectores de puente de 3 polos y después con los conectores CN1, CN2, CN4 y CN5. Al final se montan y sueldan los conectores de interconexión de la placa, CN3, CN6, CN8, CN10, CN12, CN14 y CN15.

Con eso queda lista la placa prototipo. Solo falta montarla sobre la placa GSM y pasar a implementar el sketch que se carga en el microcontrolador ATmega 2560 del Arduino Mega 2560.

Lista de componentes

  • R1 a R16: 10 kohm (0603)
  • CN8, CN10, CN12, CN14, CN15: tira Arduino de 8 vías (5 unidades)
  • CN6: tira Arduino de 10 vías (1 unidad)
  • CN3: tira Arduino de 2×18 vías (1 unidad)
  • CN1, CN2, CN5: tira macho de 8 vías (3 unidades)
  • CN7: tira hembra de 10 vías (1 unidad)
  • CN9, CN11, CN13, CN16: tira hembra de 8 vías (4 unidades)
  • CN4: tira macho de 10 vías (1 unidad)
  • J1 a J8: tira macho de 3 vías (8 unidades)
  • Varios: puentes (8 unidades), circuito impreso y el sketch

¿Dónde se guardan los parámetros y los números?

La arquitectura de la aplicación usa la EEPROM interna del ATmega 2560 para guardar un conjunto de parámetros, entre ellos los SMS que se envían ante una alarma. Los números de teléfono autorizados para manejar el telecontrol se guardan en la memoria de la SIM insertada en el módulo GSM.

La separación tiene una razón. La EEPROM del ATmega 2560 es amplia, pero no alcanza para guardar los 208 números de teléfono que puede manejar el control remoto. Por eso los autores usan la memoria de la SIM para guardar los números en la agenda, junto con su descripción, igual que en un celular común. Ese enfoque también les sirve para mostrar cómo usar las funciones de la biblioteca creadas para los comandos AT que leen, escriben o borran la agenda.

Dos sketches en un solo archivo

El código contiene en realidad dos sketches, que obviamente no corren al mismo tiempo. Eso se logra con una directiva del compilador que permite elegir entre el código que graba los parámetros de fábrica en la EEPROM del ATmega 2560 y el código que maneja el telecontrol. La directiva que selecciona el sketch es la siguiente.

Código
#define WRITE_DEFAULT_DATA_EEPROM

La directiva está al inicio del archivo "GSM_TDG133.ino". Con la línea comentada se compila y ejecuta el código del telecontrol. Sin comentar, se compila y ejecuta el código que graba los parámetros por defecto en la EEPROM. Ese código de programación no borra la agenda de la SIM del módulo GSM. Para eliminar números de la agenda hay que enviar cadenas de comando específicas, que interpreta el código del telecontrol, y este a su vez envía los comandos AT que borran uno o todos los contactos de la SIM.

El mapa de la EEPROM

El código que graba los parámetros de fábrica en la EEPROM está en el archivo "_SetupEeprom.ino". Al inicio trae, en forma de tabla, el mapa de la memoria EEPROM con la posición de cada dato y el espacio que ocupa.