Modulo de GSM para Ardduino o Netduino


El  Escudo de GSM para Arduino le permite hacer llamadas de teléfono celular y enviar mensajes de texto.El cerebro  este escudo es el SM5100B que es un módulo celular robusto capaz de realizar muchas de las tareas de los teléfonos móviles más habituales. Este escudo requiere el uso de una tarjeta SIM para conectarse a una red celular. A continuación mostraremos  como  inicializar el escudo, y enviar y recibir mensajes de texto y llamadas telefónicas. Para obtener más información acerca de la funcionalidad del módulo, asegúrese de revisar las hojas de datos en la página del producto de Sparkfun .


Usted necesitará:

(X1) Celular escudo
(X1) apilables encabezados Arduino
(X1) antena de banda cuádruple
(X1) Arduino Uno (o similar)



2a.jpg


En primer lugar inserte los pines  del escudo en los orificios de la placa  y sueldelos  como en la imagen 


3b.jpg
Inserte los pasadores de cabecera en los zócalos de la placa Arduino.

4A.jpg
La conexión del cable de la antena al módulo SM5100B no suele ser muy buena. Resolder cada una de las conexiones del cable al módulo para garantizar la conectividad.

5a.jpg
5b.jpg
Enrosque la antena al cable de la antena.


Inserte ahora  una  tarjeta SIM  en activo  firmemente en la ranura de la tarjeta SIM


Ejecute este código en su Arduino


*/SparkFun Cellular Shield – Pass-Through Sample Sketch
SparkFun Electronics
Written by Ryan Owens
3/8/10

Description: This sketch is written to interface an Arduino Duemillanove to a  Cellular Shield from SparkFun Electronics.
In this sketch serial commands are passed from a terminal program to the SM5100B cellular module; and responses from the cellular
module are posted in the terminal. More information is found in the sketch comments.

An activated SIM card must be inserted into the SIM card holder on the board in order to use the device!

This sketch utilizes the NewSoftSerial library written by Mikal Hart of Arduiniana. The library can be downloaded at this URL:

This code is provided under the Creative Commons Attribution License. More information can be found here:

(Use our code freely! Please just remember to give us credit where it’s due. Thanks!)
*/

#include  //Include the NewSoftSerial library to send serial commands to the cellular module.
#include         //Used for string manipulations

char incoming_char=0;      //Will hold the incoming character from the Serial Port.

SoftwareSerial cell(2,3);  //Create a ‘fake’ serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

void setup()
{
  //Initialize serial ports for communication.
  Serial.begin(9600);
  cell.begin(9600);
  
  //Let’s get started!
  Serial.println(“Starting SM5100B Communication…”);
}

void loop() {
  //If a character comes in from the cellular module…
  if(cell.available() >0)
  {
    incoming_char=cell.read();    //Get the character from the cellular serial port.
    Serial.print(incoming_char);  //Print the incoming character to the terminal.
  }
  //If a character is coming from the terminal to the Arduino…
if( Serial.available( ) > 0)
{
incoming_char = Serial.read( ); // Get the character coming from the terminal
if(incoming_char == ‘~’) // If it’s a tilde…

incoming_char = 0x0D;      // …convert to a carriage return  

else if( incoming_char == ‘^’) // If it’s an up caret…

incoming_char =  0x1A;    // …convert to ctrl-Z  

cell.print( incoming_char ); // Send the character to the cellular module.
Serial.print( incoming_char ); // Echo it back to the terminal
}

}

/* SM5100B Quck Reference for AT Command Set
*Unless otherwise noted AT commands are ended by pressing the ‘enter’ key.

1.) Make sure the proper GSM band has been selected for your country. For the US the band must be set to 7.
To set the band, use this command: AT+SBAND=7

2.) After powering on the Arduino with the shield installed, verify that the module reads and recognizes the SIM card.
With a terimal window open and set to Arduino port and 9600 buad, power on the Arduino. The startup sequence should look something
like this:

Starting SM5100B Communication…
    
+SIND: 1
+SIND: 10,”SM”,1,”FD”,1,”LD”,1,”MC”,1,”RC”,1,”ME”,1

Communication with the module starts after the first line is displayed. The second line of communication, +SIND: 10, tells us if the module
can see a SIM card. If the SIM card is detected every other field is a 1; if the SIM card is not detected every other field is a 0.

3.) Wait for a network connection before you start sending commands. After the +SIND: 10 response the module will automatically start trying
to connect to a network. Wait until you receive the following repsones:

+SIND: 11
+SIND: 3
+SIND: 4

The +SIND response from the cellular module tells the the modules status. Here’s a quick run-down of the response meanings:
0 SIM card removed
1 SIM card inserted
2 Ring melody
3 AT module is partially ready
4 AT module is totally ready
5 ID of released calls
6 Released call whose ID=
7 The network service is available for an emergency call
8 The network is lost
9 Audio ON
10 Show the status of each phonebook after init phrase
11 Registered to network

After registering on the network you can begin interaction. Here are a few simple and useful commands to get started:

To make a call:
AT command – ATDxxxyyyzzzz
Phone number with the format: (xxx)yyy-zzz

try —- cell.print(“ATDxxxyyyzzzz”);

If you make a phone call make sure to reference the devices datasheet to hook up a microphone and speaker to the shield.

To send a txt message:
AT command – AT+CMGF=1
This command sets the text message mode to ‘text.’
AT command = AT+CMGS=”xxxyyyzzzz”(carriage return)’Text to send'(CTRL+Z)
This command is slightly confusing to describe. The phone number, in the format (xxx)yyy-zzzz goes inside double quotations. Press ‘enter’ after closing the quotations.
Next enter the text to be send. End the AT command by sending CTRL+Z. This character can’t be sent from Arduino’s terminal. Use an alternate terminal program like Hyperterminal,
Tera Term, Bray Terminal or X-CTU.

The SM5100B module can do much more than this! Check out the datasheets on the product page to learn more about the module.*/





Abrir el puerto serie en el terminal. En un Mac, esto se logra escribiendo:
pantalla / dev/tty.usbmodemfa131 9600

(Reemplace tty.usbmodemfa131 con dirección serie de la placa Arduino)

Esperar a ver la siguiente secuencia devuelta:

A partir SM5100B Comunicación …

+ SIND: 3

+ SIND: 4

+ SIND: 11

. (Si esta secuencia no se devuelve comprobar los códigos de error que aparecen al final del código de seguridad, y depurar adecuadamente Puede que tenga que configurar el módulo para el uso en América del Norte – ver abajo – antes de que se registre en la red (es decir, + SIND 11))

Envíe los siguientes comandos al puerto serie:

Enviar esto para uso en América del Norte:
AT + SBAND = 7

Ajuste la hora actual – aa / mm / dd:
AT + CCLK = “13/05/15, 11:02:00”

Enviar llamada de prueba:
ATD4155551212


Envio de Mensajes de Texto

Descarga e instala SerialGSM a tu biblioteca Arduino.

Para enviar un mensaje de texto utilice el siguiente código de ejemplo: 

**********************************************************************************
// SEND A TEXT MESSAGE
//
// CODE TAKEN FROM:
//
// Download SerialGSM:
//
//**********************************************************************************

#include
#include

//Set up a virtual serial port
SerialGSM cell(2,3);

void setup()
 delay(30000); // wait for GSM module
 cell.begin(9600);
}

void sendSMS(){
  cell.Verbose(true); // used for debugging
  cell.Boot(); 
  cell.FwdSMS2Serial();
  cell.Rcpt(“+xxxxxxxxxx”); // replace xxxxxxxxxx with the recipient’s cellular number
  cell.Message(“Contents of your text message”);
  cell.SendSMS();
}

void loop(){
  
  //Sends a text message
  sendSMS();
  
  //Stops the code
  // remove this loop at your peril
  do 
  { 
    delay(1); 
  }
  while (1>0);
}

Si desea ejecutar el código de ejemplo para recibir un texto, conectar un LED al pin 8 y lo puso en serie con una resistencia de 220 ohmios a tierra. 

Para recibir un mensaje de texto utilice el siguiente código de ejemplo: 



//**********************************************************************************
// RECEIVE A TEXT
//
// CODE BASED UPON:
//
//**********************************************************************************
 
 #include
 
 //Will hold the incoming character from the Serial Port.
 char inchar; 
 
 //Create a ‘fake’ serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.
 SoftwareSerial cell(2,3); 

 //the pin the LED is attached to
 int led1 = 8;

 void setup(){
   // prepare the digital output pin
   pinMode(led1, OUTPUT);
   digitalWrite(led1, LOW);
   
   //Initialize GSM module serial port for communication.
   cell.begin(9600);
   
   // give time for GSM module to register on network etc.
   delay(30000); 
   
   // set SMS mode to text
   cell.println(“AT+CMGF=1”); 
   delay(200);
   
   // set module to send SMS data to serial out upon receipt 
   cell.println(“AT+CNMI=3,3,0,0”); 
   delay(200);
 }

 void loop(){
   //If a character comes in from the cellular module…
   if(cell.available() >0){
     inchar=cell.read();
     
     //Look for # from the virtual serieal port
     if (inchar==’#’){
       delay(10);
       inchar=cell.read(); 
       
       //Look to see if the characheter is an “a”
       if (inchar==’a’){
         delay(10);
         inchar=cell.read();
         
         //If the next charachter is 0 turn the LED off
         if (inchar==’0′){
           digitalWrite(led1, LOW);
         } 
         else if (inchar==’1′){
         //If the next charachter is 0 turn the LED on
           digitalWrite(led1, HIGH);
         }
         delay(10);
         
         //delete all SMS from the SIM
         cell.println(“AT+CMGD=1,4”); 
       }
     }
   }
 }
 






Texto  de uno de los siguientes comandos hacia el modulo GSMr: 

/ / Enciende el LED 
# A1 

/ / Enciende el LED 
# A0


Llamadas de Voz

9a.jpg
9b.jpg
Conecte un micrófono y un altavoz a la pantalla con el cable de audio conectado a tierra. El cable de señal del centro debe ir a los terminales positivo de audio y la pantalla debe ir a los respectivos terminales negativos sobre el escudo. Estos cables deben ser conectados de manera similar en el micrófono y el lado del altavoz.

Para iniciar una llamada de voz subir el siguiente código: 

*********************************************************************************
// MAKE A CALL
//
// BUFFERING CODE BASED UPON:
//
//**********************************************************************************

#include
#define BUFFSIZ 90

//Set up buffer array
char at_buffer[BUFFSIZ];
char buffidx;

//Network state variables
int network_registered;
int network_AT_ready;

//Code state variables
int firstTimeInLoop = 1;
int firstTimeInOtherLoop = 1;
int x;
 
//Will hold the incoming character from the Serial Port.
char incoming_char=0;

//Create a ‘fake’ serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.
SoftwareSerial cell(2,3);  


void setup() {
  
  //Initialize Arduino serial port for debugging.
  Serial.begin(9600);
  
  //Initialize virtual serial port to talk to Phone.
  cell.begin(9600);

  //Hello World.
  Serial.println(“Starting SM5100B Communication…”);
  delay(1000);

  //Set initial network state
  network_registered = 0;
  network_AT_ready = 0;

}


//Read AT strings from the cellular shield
void readATString(void) {

  char c;
  buffidx= 0; // start at begninning
  for (x = 0; x < 10000; x ++) {    
    if(cell.available() > 0) {
      c=cell.read();
      if (c == -1) {
        at_buffer[buffidx] = ‘\0’;
        return;
      }
      if (c == ‘\n’) {
        continue;
      }
      if ((buffidx == BUFFSIZ – 1) || (c == ‘\r’)){
        at_buffer[buffidx] = ‘\0’;
        return;
      }
      at_buffer[buffidx++]= c;
    }
  }
}




//Process the AT strings
void ProcessATString() {

  if( strstr(at_buffer, “+SIND: 8”) != 0 ) {
    network_registered = 0;
    Serial.println(“network Network Not Available”);
  }

  if( strstr(at_buffer, “+SIND: 11”) != 0 ) {
    network_registered=1;
    Serial.println(“network Registered”);
  }
  
  if( strstr(at_buffer, “+SIND: 4”) != 0 ) {
    network_AT_ready=1;
    Serial.println(“network AT Ready”);
  }
}

 
void loop() {

/* If called for the first time, loop until network and AT is ready */

if(firstTimeInLoop == 1) {

  firstTimeInLoop = 0;
  while (network_registered == 0 || network_AT_ready == 0) {
    readATString();
    ProcessATString();
    }
  }

//LET’S MAKE A PHONE CALL!
if(firstTimeInOtherLoop == 1){
  
     //Change the 10 digit phone number to whatever you wish
     cell.println(“ATD4155551212”);
     firstTimeInOtherLoop = 0;
   }
}
Para recibir una llamada de voz subir el siguiente código: 


**********************************************************************************
// ANSWER A CALL
//
// BUFFERING CODE BASED UPON:
//
//**********************************************************************************
#include
#define BUFFSIZ 90
//Set up buffer array
char at_buffer[BUFFSIZ];
char buffidx;
//Network state variables
int network_registered;
int network_AT_ready;
//Code state variables
int firstTimeInLoop = 1;
int firstTimeInOtherLoop = 1;
int x;
 
//Will hold the incoming character from the Serial Port.
char incoming_char=0;
//Create a ‘fake’ serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.
SoftwareSerial cell(2,3);  
void setup() {
  
  //Initialize Arduino serial port for debugging.
  Serial.begin(9600);
  
  //Initialize virtual serial port to talk to Phone.
  cell.begin(9600);
  //Hello World.
  Serial.println(“Starting SM5100B Communication…”);
  delay(1000);
  //Set initial network state
  network_registered = 0;
  network_AT_ready = 0;
}
//Read AT strings from the cellular shield
void readATString(void) {
  char c;
  buffidx= 0; // start at begninning
  for (x = 0; x < 10000; x ++) {    
    if(cell.available() > 0) {
      c=cell.read();
      if (c == -1) {
        at_buffer[buffidx] = ‘\0’;
        return;
      }
      if (c == ‘\n’) {
        continue;
      }
      if ((buffidx == BUFFSIZ – 1) || (c == ‘\r’)){
        at_buffer[buffidx] = ‘\0’;
        return;
      }
      at_buffer[buffidx++]= c;
    }
  }
}
Y para recibir una  llamada  podemos utilizar este código:
//Process the AT strings
void ProcessATString() {
  if( strstr(at_buffer, “+SIND: 8”) != 0 ) {
    network_registered = 0;
    Serial.println(“network Network Not Available”);
  }
  if( strstr(at_buffer, “+SIND: 11”) != 0 ) {
    network_registered=1;
    Serial.println(“network Registered”);
  }
  
  if( strstr(at_buffer, “+SIND: 4”) != 0 ) {
    network_AT_ready=1;
    Serial.println(“network AT Ready”);
  }
}
 
void loop() {
/* If called for the first time, loop until network and AT is ready */
if(firstTimeInLoop == 1) {
  firstTimeInLoop = 0;
  while (network_registered == 0 || network_AT_ready == 0) {
    readATString();
    ProcessATString();
    }
  }
if(firstTimeInOtherLoop == 1){
  //Look for incoming call
  if( strstr(at_buffer, “+CPAS: 3”) != 0 ) {
     //Answer the phone
     cell.println(“ATA”);
     firstTimeInOtherLoop = 0;
   }
 }
}



Fuente aqui




Licencia Creative Commons
solo-electronicos por Carlos Rodriguez Navarro se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

10 Mitos sobre el móvil perpetuo



1) Velero de Energía Libre


¿Por qué esto no funcionará?
La fuerza que el ventilador ejerce sobre el aire, es igual a la que ejerce el aire sobre el ventilador (la 3ra Ley de Newton de acción y reacción iguales y opuestas). Debido a esto, no hay una fuerza neta en la vela de carro, resultando que no hay aceleración. Si el carro estaba en reposo, el movimiento es cero (no hay fuerza, que es quien puede acelerar al auto). Además, la ley de conservación de la energía impide la recuperación de la energía del viento para el ventilador.


2) Linterna de Energía Libre
¿Por qué esto no funcionará?
Las células solares tienen una eficiencia de sólo el 15%. Las lamparitas son mucho menos eficientes que eso. Inclusive, si pudiésemos conseguir lamparitas al 100% de eficiencia y células solares 100% eficientes, aún así no seríamos capaces de extraer una ganancia neta de energía del sistema. De hecho, la acción de observar la luz de la lámpara, necesariamente significa que parte de la energía va siendo eliminada del sistema, haciendo que la lámpara brille cada vez más débilmente hasta que toda la energía se disipe.
3) Motor Permanente con Imán Permanente

¿Por qué esto no funcionará? 
Al igual que en el coche de viento, este vehículo no se movería sin violar las leyes de Newton del movimiento. Se ejerce una fuerza igual en el brazo que sostiene el imán como en el camión, con lo cual no hay movimiento neto. El error intuitivo es que el imán ejerce una fuerza en un solo sentido, cuando en realidad hay una fuerza igual y opuesta sobre el imán.


4) Energía Libre de la Tierra


¿Por qué esto no funcionará?
La idea es cavar un pozo que atraviese la Tierra de un lado hasta su antípoda. Colocar en el pozo una gran bobina de alambre y lanzar un imán. El imán se debería mantenerse oscilando en movimiento armónico simple de un punto a otro de la superficie, pasando por el centro del planeta, como si fuese una masa unida a un resorte en cada uno de sus dos extremos.
Aunque probablemente sea imposible cavar un agujero en la Tierra debido a las intensas presiones y temperaturas involucradas, este sistema está sujeto a la amortiguación magnética que va a extraer la energía del sistema a través del tiempo. En el sistema de la imagen se producen corrientes de Foucault en el conductor debido a los movimientos dentro de un campo magnético. El flujo de electrones en el conductor crearía un campo magnético opuesto que se traduciría en una amortiguación magnética y haría que se calentara el el interior del conductor. La pérdida de la energía utilizada para calentar el conductor sería igual a la pérdida de energía cinética en el imán.


5) Energía Libre con Ferrofluidos

¿Por qué esto no funcionará?

En este caso es difícil encontrar algún error intuitivo, y es el que más se acerca hasta el momento. Sin embargo, no va a funcionar. Va a fallar por razones más bien prácticas. La acción capilar no funcionará de la misma manera con este tipo de fluido, dando lugar a problemas con el ferrofluido al querer ascender por el tubo. Además, es probable que que el ferrofluido se pegue al imán en lugar de caer como se muestra en la imagen.


6) Energía libre de flotación

¿Por qué esto no funcionará?
A fin de que la bola pueda pasar a través de la válvula (una solo sentido), manteniendo el agua en el interior del tubo, sería necesario superar la fricción, quitando energía del sistema. Además, la pelota por sí sola no va a “saltar” de la parte superior y vuelver a caer. Se requeriría energía adicional para que esto funcione, lo que deja al sistema lejos del movimiento perpetuo.
7) Molino de Energía Libre
¿Por qué esto no funcionará?
Este es otro caso que falla por no tener en cuenta las fuerzas iguales y opuestas de las leyes de Newton del movimiento. Los imanes ejercen una fuerza igual y opuesta en las aspas tanto como las aspas lo hacen sobre los imanes, lo que resulta en un molino que no se mueve.


8) Linterna de Energía Libre 2.0
¿Por qué esto no funcionará?
No es posible conseguir que le llegue  más luz al panel solar que la que fue emitida por la lamparita. El número de fotones no se incrementa por arte de magia, sólo están más densamente empaquetados a cortas distancias (es decir, con más más intensidad, pero no más energía en general).



9) Habitación de la Energía Libre
¿Por qué esto no funcionará? 
Los espejos no son 100 por ciento de reflectivos. Si así fuera, podría ser posible crear una cámara donde la luz pudiera rebotar de forma indefinida. Una vez que algo con menos que el 100% de reflectividad entró en la cámara, también absorbería toda la luz en un nanosegundo. Para poder ver luz, debe ser absorbida por los ojos, por lo que en tal habitación teórica se estaría drenando parte de luz en el proceso de observar la luz a través de nuestros ojos.


10) Pileta de la Energía Libre
¿Por qué esto no funcionará?
Esta es una simple cuestión de eficiencia energética. Nunca se obtiene la misma cantidad de energía del sistema de la que tuviste que poner al principio para mover el agua de la pileta con forma de anillo.



Fuente  aqui

Licencia Creative Commons
solo-electronicos por Carlos Rodriguez Navarro se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.